ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uLzAwLUlOREVYCmluZGV4IGMxN2NkNGIuLjFiNzc3YjkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi8wMC1JTkRFWApAQCAtMzI4LDggKzMyOCw2IEBACiAJLSBpbmZvIG9uIHRoZSBtYWdpYyBTeXNScSBrZXkuCiB0ZWxlcGhvbnkvCiAJLSBkaXJlY3Rvcnkgd2l0aCBpbmZvIG9uIHRlbGVwaG9ueSAoZS5nLiB2b2ljZSBvdmVyIElQKSBzdXBwb3J0LgotdW1sLwotCS0gZGlyZWN0b3J5IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgVXNlciBNb2RlIExpbnV4LgogdW5pY29kZS50eHQKIAktIGluZm8gb24gdGhlIFVuaWNvZGUgY2hhcmFjdGVyL2ZvbnQgbWFwcGluZyB1c2VkIGluIExpbnV4LgogdW5zaGFyZS50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtZGV2aWNlcy1zeXN0ZW0tY3B1IGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKaW5kZXggNzU2NGU4OC4uZTdiZTc1YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1kZXZpY2VzLXN5c3RlbS1jcHUKQEAgLTE4MywyMSArMTgzLDIxIEBACiAJCXRvIGxlYXJuIGhvdyB0byBjb250cm9sIHRoZSBrbm9icy4KIAogCi1XaGF0OiAgICAgIC9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgqL2NhY2hlX2Rpc2FibGVfWAotRGF0ZTogICAgICBBdWd1c3QgMjAwOAorV2hhdDoJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdSovY2FjaGUvaW5kZXgzL2NhY2hlX2Rpc2FibGVfezAsMX0KK0RhdGU6CQlBdWd1c3QgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI3Ci1Db250YWN0OgltYXJrLmxhbmdzZG9yZkBhbWQuY29tCi1EZXNjcmlwdGlvbjoJVGhlc2UgZmlsZXMgZXhpc3QgaW4gZXZlcnkgY3B1J3MgY2FjaGUgaW5kZXggZGlyZWN0b3JpZXMuCi0JCVRoZXJlIGFyZSBjdXJyZW50bHkgMiBjYWNoZV9kaXNhYmxlXyMgZmlsZXMgaW4gZWFjaAotCQlkaXJlY3RvcnkuICBSZWFkaW5nIGZyb20gdGhlc2UgZmlsZXMgb24gYSBzdXBwb3J0ZWQKLQkJcHJvY2Vzc29yIHdpbGwgcmV0dXJuIHRoYXQgY2FjaGUgZGlzYWJsZSBpbmRleCB2YWx1ZQotCQlmb3IgdGhhdCBwcm9jZXNzb3IgYW5kIG5vZGUuICBXcml0aW5nIHRvIG9uZSBvZiB0aGVzZQotCQlmaWxlcyB3aWxsIGNhdXNlIHRoZSBzcGVjaWZpY2VkIGNhY2hlIGluZGV4IHRvIGJlIGRpc2FibGVkLgorQ29udGFjdDoJZGlzY3Vzc0B4ODYtNjQub3JnCitEZXNjcmlwdGlvbjoJRGlzYWJsZSBMMyBjYWNoZSBpbmRpY2VzCiAKLQkJQ3VycmVudGx5LCBvbmx5IEFNRCBGYW1pbHkgMTBoIFByb2Nlc3NvcnMgc3VwcG9ydCBjYWNoZSBpbmRleAotCQlkaXNhYmxlLCBhbmQgb25seSBmb3IgdGhlaXIgTDMgY2FjaGVzLiAgU2VlIHRoZSBCSU9TIGFuZAotCQlLZXJuZWwgRGV2ZWxvcGVyJ3MgR3VpZGUgYXQKLQkJaHR0cDovL3N1cHBvcnQuYW1kLmNvbS91cy9FbWJlZGRlZF9UZWNoRG9jcy8zMTExNi1QdWJsaWMtR0gtQktER18zLTI4XzUtMjgtMDkucGRmCQotCQlmb3IgZm9ybWF0dGluZyBpbmZvcm1hdGlvbiBhbmQgb3RoZXIgZGV0YWlscyBvbiB0aGUKLQkJY2FjaGUgaW5kZXggZGlzYWJsZS4KLVVzZXJzOiAgICBqb2FjaGltLmRlZ3VhcmFAYW1kLmNvbQorCQlUaGVzZSBmaWxlcyBleGlzdCBpbiBldmVyeSBDUFUncyBjYWNoZS9pbmRleDMgZGlyZWN0b3J5LiBFYWNoCisJCWNhY2hlX2Rpc2FibGVfezAsMX0gZmlsZSBjb3JyZXNwb25kcyB0byBvbmUgZGlzYWJsZSBzbG90IHdoaWNoCisJCWNhbiBiZSB1c2VkIHRvIGRpc2FibGUgYSBjYWNoZSBpbmRleC4gUmVhZGluZyBmcm9tIHRoZXNlIGZpbGVzCisJCW9uIGEgcHJvY2Vzc29yIHdpdGggdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwgcmV0dXJuIHRoZSBjdXJyZW50bHkKKwkJZGlzYWJsZWQgaW5kZXggZm9yIHRoYXQgbm9kZS4gVGhlcmUgaXMgb25lIEwzIHN0cnVjdHVyZSBwZXIKKwkJbm9kZSwgb3IgcGVyIGludGVybmFsIG5vZGUgb24gTUNNIG1hY2hpbmVzLiBXcml0aW5nIGEgdmFsaWQKKwkJaW5kZXggdG8gb25lIG9mIHRoZXNlIGZpbGVzIHdpbGwgY2F1c2UgdGhlIHNwZWNpZmljZWQgY2FjaGUKKwkJaW5kZXggdG8gYmUgZGlzYWJsZWQuCisKKwkJQWxsIEFNRCBwcm9jZXNzb3JzIHdpdGggTDMgY2FjaGVzIHByb3ZpZGUgdGhpcyBmdW5jdGlvbmFsaXR5LgorCQlGb3IgZGV0YWlscywgc2VlIEJLREdzIGF0CisJCWh0dHA6Ly9kZXZlbG9wZXIuYW1kLmNvbS9kb2N1bWVudGF0aW9uL2d1aWRlcy9QYWdlcy9kZWZhdWx0LmFzcHgKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBvd2VyCmluZGV4IDE5NGNhNDQuLmI0NjRkMTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcG93ZXIKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wb3dlcgpAQCAtMTU4LDMgKzE1OCwxNyBAQAogCQlzdWNjZXNzZnVsLCB3aWxsIG1ha2UgdGhlIGtlcm5lbCBhYm9ydCBhIHN1YnNlcXVlbnQgdHJhbnNpdGlvbgogCQl0byBhIHNsZWVwIHN0YXRlIGlmIGFueSB3YWtldXAgZXZlbnRzIGFyZSByZXBvcnRlZCBhZnRlciB0aGUKIAkJd3JpdGUgaGFzIHJldHVybmVkLgorCitXaGF0OgkJL3N5cy9wb3dlci9yZXNlcnZlZF9zaXplCitEYXRlOgkJTWF5IDIwMTEKK0NvbnRhY3Q6CVJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4KK0Rlc2NyaXB0aW9uOgorCQlUaGUgL3N5cy9wb3dlci9yZXNlcnZlZF9zaXplIGZpbGUgYWxsb3dzIHVzZXIgc3BhY2UgdG8gY29udHJvbAorCQl0aGUgYW1vdW50IG9mIG1lbW9yeSByZXNlcnZlZCBmb3IgYWxsb2NhdGlvbnMgbWFkZSBieSBkZXZpY2UKKwkJZHJpdmVycyBkdXJpbmcgdGhlICJkZXZpY2UgZnJlZXplIiBzdGFnZSBvZiBoaWJlcm5hdGlvbi4gIEl0IGNhbgorCQliZSB3cml0dGVuIGEgc3RyaW5nIHJlcHJlc2VudGluZyBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyIHRoYXQKKwkJd2lsbCBiZSB1c2VkIGFzIHRoZSBhbW91bnQgb2YgbWVtb3J5IHRvIHJlc2VydmUgZm9yIGFsbG9jYXRpb25zCisJCW1hZGUgYnkgZGV2aWNlIGRyaXZlcnMnICJmcmVlemUiIGNhbGxiYWNrcywgaW4gYnl0ZXMuCisKKwkJUmVhZGluZyBmcm9tIHRoaXMgZmlsZSB3aWxsIGRpc3BsYXkgdGhlIGN1cnJlbnQgdmFsdWUsIHdoaWNoIGlzCisJCXNldCB0byAxIE1CIGJ5IGRlZmF1bHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2dlbmVyaWNpcnEudG1wbAppbmRleCBmYjEwZmQwLi5iMzQyMjM0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZ2VuZXJpY2lycS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9nZW5lcmljaXJxLnRtcGwKQEAgLTE5MSw4ICsxOTEsOCBAQAogCTxwYXJhPgogCVdoZW5ldmVyIGFuIGludGVycnVwdCB0cmlnZ2VycywgdGhlIGxvd2xldmVsIGFyY2ggY29kZSBjYWxscyBpbnRvCiAJdGhlIGdlbmVyaWMgaW50ZXJydXB0IGNvZGUgYnkgY2FsbGluZyBkZXNjLT5oYW5kbGVfaXJxKCkuCi0JVGhpcyBoaWdobGV2ZWwgSVJRIGhhbmRsaW5nIGZ1bmN0aW9uIG9ubHkgdXNlcyBkZXNjLT5jaGlwIHByaW1pdGl2ZXMKLQlyZWZlcmVuY2VkIGJ5IHRoZSBhc3NpZ25lZCBjaGlwIGRlc2NyaXB0b3Igc3RydWN0dXJlLgorCVRoaXMgaGlnaGxldmVsIElSUSBoYW5kbGluZyBmdW5jdGlvbiBvbmx5IHVzZXMgZGVzYy0+aXJxX2RhdGEuY2hpcAorCXByaW1pdGl2ZXMgcmVmZXJlbmNlZCBieSB0aGUgYXNzaWduZWQgY2hpcCBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KIAk8L3BhcmE+CiAgICAgPC9zZWN0MT4KICAgICA8c2VjdDEgaWQ9IkhpZ2hsZXZlbF9Ecml2ZXJfQVBJIj4KQEAgLTIwNiwxMSArMjA2LDExIEBACiAJICA8bGlzdGl0ZW0+PHBhcmE+ZW5hYmxlX2lycSgpPC9wYXJhPjwvbGlzdGl0ZW0+CiAJICA8bGlzdGl0ZW0+PHBhcmE+ZGlzYWJsZV9pcnFfbm9zeW5jKCkgKFNNUCBvbmx5KTwvcGFyYT48L2xpc3RpdGVtPgogCSAgPGxpc3RpdGVtPjxwYXJhPnN5bmNocm9uaXplX2lycSgpIChTTVAgb25seSk8L3BhcmE+PC9saXN0aXRlbT4KLQkgIDxsaXN0aXRlbT48cGFyYT5zZXRfaXJxX3R5cGUoKTwvcGFyYT48L2xpc3RpdGVtPgotCSAgPGxpc3RpdGVtPjxwYXJhPnNldF9pcnFfd2FrZSgpPC9wYXJhPjwvbGlzdGl0ZW0+Ci0JICA8bGlzdGl0ZW0+PHBhcmE+c2V0X2lycV9kYXRhKCk8L3BhcmE+PC9saXN0aXRlbT4KLQkgIDxsaXN0aXRlbT48cGFyYT5zZXRfaXJxX2NoaXAoKTwvcGFyYT48L2xpc3RpdGVtPgotCSAgPGxpc3RpdGVtPjxwYXJhPnNldF9pcnFfY2hpcF9kYXRhKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5pcnFfc2V0X2lycV90eXBlKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5pcnFfc2V0X2lycV93YWtlKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5pcnFfc2V0X2hhbmRsZXJfZGF0YSgpPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+aXJxX3NldF9jaGlwKCk8L3BhcmE+PC9saXN0aXRlbT4KKwkgIDxsaXN0aXRlbT48cGFyYT5pcnFfc2V0X2NoaXBfZGF0YSgpPC9wYXJhPjwvbGlzdGl0ZW0+CiAgICAgICAgICAgPC9pdGVtaXplZGxpc3Q+CiAJICBTZWUgdGhlIGF1dG9nZW5lcmF0ZWQgZnVuY3Rpb24gZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlscy4KIAk8L3BhcmE+CkBAIC0yMjUsNiArMjI1LDggQEAKIAkgIDxsaXN0aXRlbT48cGFyYT5oYW5kbGVfZmFzdGVvaV9pcnE8L3BhcmE+PC9saXN0aXRlbT4KIAkgIDxsaXN0aXRlbT48cGFyYT5oYW5kbGVfc2ltcGxlX2lycTwvcGFyYT48L2xpc3RpdGVtPgogCSAgPGxpc3RpdGVtPjxwYXJhPmhhbmRsZV9wZXJjcHVfaXJxPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+aGFuZGxlX2VkZ2VfZW9pX2lycTwvcGFyYT48L2xpc3RpdGVtPgorCSAgPGxpc3RpdGVtPjxwYXJhPmhhbmRsZV9iYWRfaXJxPC9wYXJhPjwvbGlzdGl0ZW0+CiAJICA8L2l0ZW1pemVkbGlzdD4KIAkgIFRoZSBpbnRlcnJ1cHQgZmxvdyBoYW5kbGVycyAoZWl0aGVyIHByZWRlZmluZWQgb3IgYXJjaGl0ZWN0dXJlCiAJICBzcGVjaWZpYykgYXJlIGFzc2lnbmVkIHRvIHNwZWNpZmljIGludGVycnVwdHMgYnkgdGhlIGFyY2hpdGVjdHVyZQpAQCAtMjQxLDEzICsyNDMsMTMgQEAKIAkJPHByb2dyYW1saXN0aW5nPgogZGVmYXVsdF9lbmFibGUoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotCWRlc2MtPmNoaXAtPmlycV91bm1hc2soZGF0YSk7CisJZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX3VubWFzayhkYXRhKTsKIH0KIAogZGVmYXVsdF9kaXNhYmxlKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKIHsKIAlpZiAoIWRlbGF5X2Rpc2FibGUoZGF0YSkpCi0JCWRlc2MtPmNoaXAtPmlycV9tYXNrKGRhdGEpOworCQlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfbWFzayhkYXRhKTsKIH0KIAogZGVmYXVsdF9hY2soc3RydWN0IGlycV9kYXRhICpkYXRhKQpAQCAtMjg0LDkgKzI4Niw5IEBACiAJCTxwYXJhPgogCQlUaGUgZm9sbG93aW5nIGNvbnRyb2wgZmxvdyBpcyBpbXBsZW1lbnRlZCAoc2ltcGxpZmllZCBleGNlcnB0KToKIAkJPHByb2dyYW1saXN0aW5nPgotZGVzYy0+Y2hpcC0+aXJxX21hc2soKTsKLWhhbmRsZV9JUlFfZXZlbnQoZGVzYy0+YWN0aW9uKTsKLWRlc2MtPmNoaXAtPmlycV91bm1hc2soKTsKK2Rlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9tYXNrX2FjaygpOworaGFuZGxlX2lycV9ldmVudChkZXNjLT5hY3Rpb24pOworZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX3VubWFzaygpOwogCQk8L3Byb2dyYW1saXN0aW5nPgogCQk8L3BhcmE+CiAJICAgIDwvc2VjdDM+CkBAIC0zMDAsOCArMzAyLDggQEAKIAkJPHBhcmE+CiAJCVRoZSBmb2xsb3dpbmcgY29udHJvbCBmbG93IGlzIGltcGxlbWVudGVkIChzaW1wbGlmaWVkIGV4Y2VycHQpOgogCQk8cHJvZ3JhbWxpc3Rpbmc+Ci1oYW5kbGVfSVJRX2V2ZW50KGRlc2MtPmFjdGlvbik7Ci1kZXNjLT5jaGlwLT5pcnFfZW9pKCk7CitoYW5kbGVfaXJxX2V2ZW50KGRlc2MtPmFjdGlvbik7CitkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfZW9pKCk7CiAJCTwvcHJvZ3JhbWxpc3Rpbmc+CiAJCTwvcGFyYT4KIAkgICAgPC9zZWN0Mz4KQEAgLTMxNSwxNyArMzE3LDE3IEBACiAJCVRoZSBmb2xsb3dpbmcgY29udHJvbCBmbG93IGlzIGltcGxlbWVudGVkIChzaW1wbGlmaWVkIGV4Y2VycHQpOgogCQk8cHJvZ3JhbWxpc3Rpbmc+CiBpZiAoZGVzYy0+c3RhdHVzICZhbXA7IHJ1bm5pbmcpIHsKLQlkZXNjLT5jaGlwLT5pcnFfbWFzaygpOworCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9tYXNrX2FjaygpOwogCWRlc2MtPnN0YXR1cyB8PSBwZW5kaW5nIHwgbWFza2VkOwogCXJldHVybjsKIH0KLWRlc2MtPmNoaXAtPmlycV9hY2soKTsKK2Rlc2MtPmlycV9kYXRhLmNoaXAtPmlycV9hY2soKTsKIGRlc2MtPnN0YXR1cyB8PSBydW5uaW5nOwogZG8gewogCWlmIChkZXNjLT5zdGF0dXMgJmFtcDsgbWFza2VkKQotCQlkZXNjLT5jaGlwLT5pcnFfdW5tYXNrKCk7CisJCWRlc2MtPmlycV9kYXRhLmNoaXAtPmlycV91bm1hc2soKTsKIAlkZXNjLT5zdGF0dXMgJmFtcDs9IH5wZW5kaW5nOwotCWhhbmRsZV9JUlFfZXZlbnQoZGVzYy0+YWN0aW9uKTsKKwloYW5kbGVfaXJxX2V2ZW50KGRlc2MtPmFjdGlvbik7CiB9IHdoaWxlIChzdGF0dXMgJmFtcDsgcGVuZGluZyk7CiBkZXNjLT5zdGF0dXMgJmFtcDs9IH5ydW5uaW5nOwogCQk8L3Byb2dyYW1saXN0aW5nPgpAQCAtMzQ0LDcgKzM0Niw3IEBACiAJCTxwYXJhPgogCQlUaGUgZm9sbG93aW5nIGNvbnRyb2wgZmxvdyBpcyBpbXBsZW1lbnRlZCAoc2ltcGxpZmllZCBleGNlcnB0KToKIAkJPHByb2dyYW1saXN0aW5nPgotaGFuZGxlX0lSUV9ldmVudChkZXNjLT5hY3Rpb24pOworaGFuZGxlX2lycV9ldmVudChkZXNjLT5hY3Rpb24pOwogCQk8L3Byb2dyYW1saXN0aW5nPgogCQk8L3BhcmE+CiAgICAJICAgIDwvc2VjdDM+CkBAIC0zNjIsMTIgKzM2NCwyOSBAQAogCQk8cGFyYT4KIAkJVGhlIGZvbGxvd2luZyBjb250cm9sIGZsb3cgaXMgaW1wbGVtZW50ZWQgKHNpbXBsaWZpZWQgZXhjZXJwdCk6CiAJCTxwcm9ncmFtbGlzdGluZz4KLWhhbmRsZV9JUlFfZXZlbnQoZGVzYy0+YWN0aW9uKTsKLWlmIChkZXNjLT5jaGlwLT5pcnFfZW9pKQotICAgICAgICBkZXNjLT5jaGlwLT5pcnFfZW9pKCk7CitpZiAoZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2FjaykKKwlkZXNjLT5pcnFfZGF0YS5jaGlwLT5pcnFfYWNrKCk7CitoYW5kbGVfaXJxX2V2ZW50KGRlc2MtPmFjdGlvbik7CitpZiAoZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2VvaSkKKyAgICAgICAgZGVzYy0+aXJxX2RhdGEuY2hpcC0+aXJxX2VvaSgpOwogCQk8L3Byb2dyYW1saXN0aW5nPgogCQk8L3BhcmE+CiAgICAJICAgIDwvc2VjdDM+CisJICAgIDxzZWN0MyBpZD0iRU9JX0VkZ2VfSVJRX2Zsb3dfaGFuZGxlciI+CisJIAk8dGl0bGU+RU9JIEVkZ2UgSVJRIGZsb3cgaGFuZGxlcjwvdGl0bGU+CisJCTxwYXJhPgorCQloYW5kbGVfZWRnZV9lb2lfaXJxIHByb3ZpZGVzIGFuIGFibm9taW5hdGlvbiBvZiB0aGUgZWRnZQorCQloYW5kbGVyIHdoaWNoIGlzIHNvbGVseSB1c2VkIHRvIHRhbWUgYSBiYWRseSB3cmVja2FnZWQKKwkJaXJxIGNvbnRyb2xsZXIgb24gcG93ZXJwYy9jZWxsLgorCQk8L3BhcmE+CisgICAJICAgIDwvc2VjdDM+CisJICAgIDxzZWN0MyBpZD0iQkFEX0lSUV9mbG93X2hhbmRsZXIiPgorCSAJPHRpdGxlPkJhZCBJUlEgZmxvdyBoYW5kbGVyPC90aXRsZT4KKwkJPHBhcmE+CisJCWhhbmRsZV9iYWRfaXJxIGlzIHVzZWQgZm9yIHNwdXJpb3VzIGludGVycnVwdHMgd2hpY2gKKwkJaGF2ZSBubyByZWFsIGhhbmRsZXIgYXNzaWduZWQuLgorCQk8L3BhcmE+CisgICAJICAgIDwvc2VjdDM+CiAJPC9zZWN0Mj4KIAk8c2VjdDIgaWQ9IlF1aXJrc19hbmRfb3B0aW1pemF0aW9ucyI+CiAJPHRpdGxlPlF1aXJrcyBhbmQgb3B0aW1pemF0aW9uczwvdGl0bGU+CkBAIC00MTAsNiArNDI5LDcgQEAKIAkgIDxsaXN0aXRlbT48cGFyYT5pcnFfbWFza19hY2soKSAtIE9wdGlvbmFsLCByZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFuY2U8L3BhcmE+PC9saXN0aXRlbT4KIAkgIDxsaXN0aXRlbT48cGFyYT5pcnFfbWFzaygpPC9wYXJhPjwvbGlzdGl0ZW0+CiAJICA8bGlzdGl0ZW0+PHBhcmE+aXJxX3VubWFzaygpPC9wYXJhPjwvbGlzdGl0ZW0+CisJICA8bGlzdGl0ZW0+PHBhcmE+aXJxX2VvaSgpIC0gT3B0aW9uYWwsIHJlcXVpcmVkIGZvciBlb2kgZmxvdyBoYW5kbGVyczwvcGFyYT48L2xpc3RpdGVtPgogCSAgPGxpc3RpdGVtPjxwYXJhPmlycV9yZXRyaWdnZXIoKSAtIE9wdGlvbmFsPC9wYXJhPjwvbGlzdGl0ZW0+CiAJICA8bGlzdGl0ZW0+PHBhcmE+aXJxX3NldF90eXBlKCkgLSBPcHRpb25hbDwvcGFyYT48L2xpc3RpdGVtPgogCSAgPGxpc3RpdGVtPjxwYXJhPmlycV9zZXRfd2FrZSgpIC0gT3B0aW9uYWw8L3BhcmE+PC9saXN0aXRlbT4KQEAgLTQyNCwzMiArNDQ0LDI0IEBACiAgIDxjaGFwdGVyIGlkPSJkb2lycSI+CiAgICAgIDx0aXRsZT5fX2RvX0lSUSBlbnRyeSBwb2ludDwvdGl0bGU+CiAgICAgIDxwYXJhPgotIAlUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gX19kb19JUlEoKSBpcyBhbiBhbHRlcm5hdGl2ZSBlbnRyeQotCXBvaW50IGZvciBhbGwgdHlwZXMgb2YgaW50ZXJydXB0cy4KKwlUaGUgb3JpZ2luYWwgaW1wbGVtZW50YXRpb24gX19kb19JUlEoKSB3YXMgYW4gYWx0ZXJuYXRpdmUgZW50cnkKKwlwb2ludCBmb3IgYWxsIHR5cGVzIG9mIGludGVycnVwdHMuIEl0IG5vdCBsb25nZXIgZXhpc3RzLgogICAgICA8L3BhcmE+CiAgICAgIDxwYXJhPgogCVRoaXMgaGFuZGxlciB0dXJuZWQgb3V0IHRvIGJlIG5vdCBzdWl0YWJsZSBmb3IgYWxsCiAJaW50ZXJydXB0IGhhcmR3YXJlIGFuZCB3YXMgdGhlcmVmb3JlIHJlaW1wbGVtZW50ZWQgd2l0aCBzcGxpdAotCWZ1bmN0aW9uYWxpdHkgZm9yIGVnZGUvbGV2ZWwvc2ltcGxlL3BlcmNwdSBpbnRlcnJ1cHRzLiBUaGlzIGlzIG5vdAorCWZ1bmN0aW9uYWxpdHkgZm9yIGVkZ2UvbGV2ZWwvc2ltcGxlL3BlcmNwdSBpbnRlcnJ1cHRzLiBUaGlzIGlzIG5vdAogCW9ubHkgYSBmdW5jdGlvbmFsIG9wdGltaXphdGlvbi4gSXQgYWxzbyBzaG9ydGVucyBjb2RlIHBhdGhzIGZvcgogCWludGVycnVwdHMuCiAgICAgICA8L3BhcmE+Ci0gICAgICA8cGFyYT4KLQlUbyBtYWtlIHVzZSBvZiB0aGUgc3BsaXQgaW1wbGVtZW50YXRpb24sIHJlcGxhY2UgdGhlIGNhbGwgdG8KLQlfX2RvX0lSUSBieSBhIGNhbGwgdG8gZGVzYy0+aGFuZGxlX2lycSgpIGFuZCBhc3NvY2lhdGUKLSAgICAgICAgdGhlIGFwcHJvcHJpYXRlIGhhbmRsZXIgZnVuY3Rpb24gdG8gZGVzYy0+aGFuZGxlX2lycSgpLgotCUluIG1vc3QgY2FzZXMgdGhlIGdlbmVyaWMgaGFuZGxlciBpbXBsZW1lbnRhdGlvbnMgc2hvdWxkCi0JYmUgc3VmZmljaWVudC4KLSAgICAgPC9wYXJhPgogICA8L2NoYXB0ZXI+CiAKICAgPGNoYXB0ZXIgaWQ9ImxvY2tpbmciPgogICAgICA8dGl0bGU+TG9ja2luZyBvbiBTTVA8L3RpdGxlPgogICAgICA8cGFyYT4KIAlUaGUgbG9ja2luZyBvZiBjaGlwIHJlZ2lzdGVycyBpcyB1cCB0byB0aGUgYXJjaGl0ZWN0dXJlIHRoYXQKLQlkZWZpbmVzIHRoZSBjaGlwIHByaW1pdGl2ZXMuIFRoZXJlIGlzIGEgY2hpcC0+bG9jayBmaWVsZCB0aGF0IGNhbiBiZSB1c2VkCi0JZm9yIHNlcmlhbGl6YXRpb24sIGJ1dCB0aGUgZ2VuZXJpYyBsYXllciBkb2VzIG5vdCB0b3VjaCBpdC4gVGhlIHBlci1pcnEKLQlzdHJ1Y3R1cmUgaXMgcHJvdGVjdGVkIHZpYSBkZXNjLT5sb2NrLCBieSB0aGUgZ2VuZXJpYyBsYXllci4KKwlkZWZpbmVzIHRoZSBjaGlwIHByaW1pdGl2ZXMuIFRoZSBwZXItaXJxIHN0cnVjdHVyZSBpcworCXByb3RlY3RlZCB2aWEgZGVzYy0+bG9jaywgYnkgdGhlIGdlbmVyaWMgbGF5ZXIuCiAgICAgIDwvcGFyYT4KICAgPC9jaGFwdGVyPgogICA8Y2hhcHRlciBpZD0ic3RydWN0cyI+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWVkaWEtZW50aXRpZXMudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsCmluZGV4IDVkMjU5YzYuLmZlYTYzYjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tZWRpYS1lbnRpdGllcy50bXBsCkBAIC0yOTQsNiArMjk0LDcgQEAKIDwhRU5USVRZIHN1Yi1zcmdnYjEwIFNZU1RFTSAidjRsL3BpeGZtdC1zcmdnYjEwLnhtbCI+CiA8IUVOVElUWSBzdWItc3JnZ2I4IFNZU1RFTSAidjRsL3BpeGZtdC1zcmdnYjgueG1sIj4KIDwhRU5USVRZIHN1Yi15MTAgU1lTVEVNICJ2NGwvcGl4Zm10LXkxMC54bWwiPgorPCFFTlRJVFkgc3ViLXkxMiBTWVNURU0gInY0bC9waXhmbXQteTEyLnhtbCI+CiA8IUVOVElUWSBzdWItcGl4Zm10IFNZU1RFTSAidjRsL3BpeGZtdC54bWwiPgogPCFFTlRJVFkgc3ViLWNyb3BjYXAgU1lTVEVNICJ2NGwvdmlkaW9jLWNyb3BjYXAueG1sIj4KIDwhRU5USVRZIHN1Yi1kYmctZy1yZWdpc3RlciBTWVNURU0gInY0bC92aWRpb2MtZGJnLWctcmVnaXN0ZXIueG1sIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvbWVkaWEtaW9jLXNldHVwLWxpbmsueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwKaW5kZXggMjMzMWU3Ni4uY2VjOTdhZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9tZWRpYS1pb2Mtc2V0dXAtbGluay54bWwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICAgIDx2YXJsaXN0ZW50cnk+CiAJPHRlcm0+PHBhcmFtZXRlcj5yZXF1ZXN0PC9wYXJhbWV0ZXI+PC90ZXJtPgogCTxsaXN0aXRlbT4KLQkgIDxwYXJhPk1FRElBX0lPQ19FTlVNX0xJTktTPC9wYXJhPgorCSAgPHBhcmE+TUVESUFfSU9DX1NFVFVQX0xJTks8L3BhcmE+CiAJPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlzdGVudHJ5PgogICAgICAgPHZhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LXkxMi54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15MTIueG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDE3YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC15MTIueG1sCkBAIC0wLDAgKzEsNzkgQEAKKzxyZWZlbnRyeSBpZD0iVjRMMi1QSVgtRk1ULVkxMiI+CisgIDxyZWZtZXRhPgorICAgIDxyZWZlbnRyeXRpdGxlPlY0TDJfUElYX0ZNVF9ZMTIgKCdZMTIgJyk8L3JlZmVudHJ5dGl0bGU+CisgICAgJm1hbnZvbDsKKyAgPC9yZWZtZXRhPgorICA8cmVmbmFtZWRpdj4KKyAgICA8cmVmbmFtZT48Y29uc3RhbnQ+VjRMMl9QSVhfRk1UX1kxMjwvY29uc3RhbnQ+PC9yZWZuYW1lPgorICAgIDxyZWZwdXJwb3NlPkdyZXktc2NhbGUgaW1hZ2U8L3JlZnB1cnBvc2U+CisgIDwvcmVmbmFtZWRpdj4KKyAgPHJlZnNlY3QxPgorICAgIDx0aXRsZT5EZXNjcmlwdGlvbjwvdGl0bGU+CisKKyAgICA8cGFyYT5UaGlzIGlzIGEgZ3JleS1zY2FsZSBpbWFnZSB3aXRoIGEgZGVwdGggb2YgMTIgYml0cyBwZXIgcGl4ZWwuIFBpeGVscworYXJlIHN0b3JlZCBpbiAxNi1iaXQgd29yZHMgd2l0aCB1bnVzZWQgaGlnaCBiaXRzIHBhZGRlZCB3aXRoIDAuIFRoZSBsZWFzdAorc2lnbmlmaWNhbnQgYnl0ZSBpcyBzdG9yZWQgYXQgbG93ZXIgbWVtb3J5IGFkZHJlc3NlcyAobGl0dGxlLWVuZGlhbikuPC9wYXJhPgorCisgICAgPGV4YW1wbGU+CisgICAgICA8dGl0bGU+PGNvbnN0YW50PlY0TDJfUElYX0ZNVF9ZMTI8L2NvbnN0YW50PiA0ICZ0aW1lczsgNAorcGl4ZWwgaW1hZ2U8L3RpdGxlPgorCisgICAgICA8Zm9ybWFscGFyYT4KKwk8dGl0bGU+Qnl0ZSBPcmRlci48L3RpdGxlPgorCTxwYXJhPkVhY2ggY2VsbCBpcyBvbmUgYnl0ZS4KKwkgIDxpbmZvcm1hbHRhYmxlIGZyYW1lPSJub25lIj4KKwkgICAgPHRncm91cCBjb2xzPSI5IiBhbGlnbj0iY2VudGVyIj4KKwkgICAgICA8Y29sc3BlYyBhbGlnbj0ibGVmdCIgY29sd2lkdGg9IjIqIiAvPgorCSAgICAgIDx0Ym9keSB2YWxpZ249InRvcCI+CisJCTxyb3c+CisJCSAgPGVudHJ5PnN0YXJ0Jm5ic3A7KyZuYnNwOzA6PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4wMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDJsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MDJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjAzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDs4OjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMGxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xMGhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTFsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MTFoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEybG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjEyaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xM2xvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4xM2hpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQk8L3Jvdz4KKwkJPHJvdz4KKwkJICA8ZW50cnk+c3RhcnQmbmJzcDsrJm5ic3A7MTY6PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIwaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMWxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4yMWhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjJsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MjJoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjIzaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCTwvcm93PgorCQk8cm93PgorCQkgIDxlbnRyeT5zdGFydCZuYnNwOysmbmJzcDsyNDo8L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzBsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzBoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxbG93PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJICA8ZW50cnk+WSc8c3Vic2NyaXB0PjMxaGlnaDwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMmxvdzwvc3Vic2NyaXB0PjwvZW50cnk+CisJCSAgPGVudHJ5PlknPHN1YnNjcmlwdD4zMmhpZ2g8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzNsb3c8L3N1YnNjcmlwdD48L2VudHJ5PgorCQkgIDxlbnRyeT5ZJzxzdWJzY3JpcHQ+MzNoaWdoPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkJPC9yb3c+CisJICAgICAgPC90Ym9keT4KKwkgICAgPC90Z3JvdXA+CisJICA8L2luZm9ybWFsdGFibGU+CisJPC9wYXJhPgorICAgICAgPC9mb3JtYWxwYXJhPgorICAgIDwvZXhhbXBsZT4KKyAgPC9yZWZzZWN0MT4KKzwvcmVmZW50cnk+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3BpeGZtdC54bWwKaW5kZXggYzZmZGNiYi4uNDBhZjRiZSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9waXhmbXQueG1sCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvcGl4Zm10LnhtbApAQCAtNjk2LDYgKzY5Niw3IEBACiAgICAgJnN1Yi1wYWNrZWQteXV2OwogICAgICZzdWItZ3JleTsKICAgICAmc3ViLXkxMDsKKyAgICAmc3ViLXkxMjsKICAgICAmc3ViLXkxNjsKICAgICAmc3ViLXl1eXY7CiAgICAgJnN1Yi11eXZ5OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9zdWJkZXYtZm9ybWF0cy54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3N1YmRldi1mb3JtYXRzLnhtbAppbmRleCA3MDQxMTI3Li5kN2NjZDI1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3N1YmRldi1mb3JtYXRzLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3N1YmRldi1mb3JtYXRzLnhtbApAQCAtNDU2LDYgKzQ1NiwyMyBAQAogCSAgICAgIDxlbnRyeT5iPHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KIAkgICAgICA8ZW50cnk+YjxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CiAJICAgIDwvcm93PgorCSAgICA8cm93IGlkPSJWNEwyLU1CVVMtRk1ULVNHQlJHOC0xWDgiPgorCSAgICAgIDxlbnRyeT5WNEwyX01CVVNfRk1UX1NHQlJHOF8xWDg8L2VudHJ5PgorCSAgICAgIDxlbnRyeT4weDMwMTM8L2VudHJ5PgorCSAgICAgIDxlbnRyeT48L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5nPHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8L3Jvdz4KIAkgICAgPHJvdyBpZD0iVjRMMi1NQlVTLUZNVC1TR1JCRzgtMVg4Ij4KIAkgICAgICA8ZW50cnk+VjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4PC9lbnRyeT4KIAkgICAgICA8ZW50cnk+MHgzMDAyPC9lbnRyeT4KQEAgLTQ3Myw2ICs0OTAsMjMgQEAKIAkgICAgICA8ZW50cnk+ZzxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CiAJICAgICAgPGVudHJ5Pmc8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgogCSAgICA8L3Jvdz4KKwkgICAgPHJvdyBpZD0iVjRMMi1NQlVTLUZNVC1TUkdHQjgtMVg4Ij4KKwkgICAgICA8ZW50cnk+VjRMMl9NQlVTX0ZNVF9TUkdHQjhfMVg4PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+MHgzMDE0PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5PnI8c3Vic2NyaXB0Pjc8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5yPHN1YnNjcmlwdD42PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+NTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjQ8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4zPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+cjxzdWJzY3JpcHQ+Mjwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5PnI8c3Vic2NyaXB0PjE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT5yPHN1YnNjcmlwdD4wPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgPC9yb3c+CiAJICAgIDxyb3cgaWQ9IlY0TDItTUJVUy1GTVQtU0JHR1IxMC1EUENNOC0xWDgiPgogCSAgICAgIDxlbnRyeT5WNEwyX01CVVNfRk1UX1NCR0dSMTBfRFBDTThfMVg4PC9lbnRyeT4KIAkgICAgICA8ZW50cnk+MHgzMDBiPC9lbnRyeT4KQEAgLTIxNTksNiArMjE5MywzMSBAQAogCSAgICAgIDxlbnRyeT51PHN1YnNjcmlwdD4xPC9zdWJzY3JpcHQ+PC9lbnRyeT4KIAkgICAgICA8ZW50cnk+dTxzdWJzY3JpcHQ+MDwvc3Vic2NyaXB0PjwvZW50cnk+CiAJICAgIDwvcm93PgorCSAgICA8cm93IGlkPSJWNEwyLU1CVVMtRk1ULVkxMi0xWDEyIj4KKwkgICAgICA8ZW50cnk+VjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMjwvZW50cnk+CisJICAgICAgPGVudHJ5PjB4MjAxMzwvZW50cnk+CisJICAgICAgPGVudHJ5PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+LTwvZW50cnk+CisJICAgICAgPGVudHJ5Pi08L2VudHJ5PgorCSAgICAgIDxlbnRyeT4tPC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+MTE8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD4xMDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0Pjk8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD44PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+Nzwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0PjY8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD41PC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+NDwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0PjM8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICAgIDxlbnRyeT55PHN1YnNjcmlwdD4yPC9zdWJzY3JpcHQ+PC9lbnRyeT4KKwkgICAgICA8ZW50cnk+eTxzdWJzY3JpcHQ+MTwvc3Vic2NyaXB0PjwvZW50cnk+CisJICAgICAgPGVudHJ5Pnk8c3Vic2NyaXB0PjA8L3N1YnNjcmlwdD48L2VudHJ5PgorCSAgICA8L3Jvdz4KIAkgICAgPHJvdyBpZD0iVjRMMi1NQlVTLUZNVC1VWVZZOC0xWDE2Ij4KIAkgICAgICA8ZW50cnk+VjRMMl9NQlVTX0ZNVF9VWVZZOF8xWDE2PC9lbnRyeT4KIAkgICAgICA8ZW50cnk+MHgyMDBmPC9lbnRyeT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKaW5kZXggYjZlZDYxYy4uN2MxNjM0NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKQEAgLTUyLDggKzUyLDEwIEBACiAgdGFza3MJCQkJICMgYXR0YWNoIGEgdGFzayh0aHJlYWQpIGFuZCBzaG93IGxpc3Qgb2YgdGhyZWFkcwogIGNncm91cC5wcm9jcwkJCSAjIHNob3cgbGlzdCBvZiBwcm9jZXNzZXMKICBjZ3JvdXAuZXZlbnRfY29udHJvbAkJICMgYW4gaW50ZXJmYWNlIGZvciBldmVudF9mZCgpCi0gbWVtb3J5LnVzYWdlX2luX2J5dGVzCQkgIyBzaG93IGN1cnJlbnQgbWVtb3J5KFJTUytDYWNoZSkgdXNhZ2UuCi0gbWVtb3J5Lm1lbXN3LnVzYWdlX2luX2J5dGVzCSAjIHNob3cgY3VycmVudCBtZW1vcnkrU3dhcCB1c2FnZQorIG1lbW9yeS51c2FnZV9pbl9ieXRlcwkJICMgc2hvdyBjdXJyZW50IHJlc19jb3VudGVyIHVzYWdlIGZvciBtZW1vcnkKKwkJCQkgKFNlZSA1LjUgZm9yIGRldGFpbHMpCisgbWVtb3J5Lm1lbXN3LnVzYWdlX2luX2J5dGVzCSAjIHNob3cgY3VycmVudCByZXNfY291bnRlciB1c2FnZSBmb3IgbWVtb3J5K1N3YXAKKwkJCQkgKFNlZSA1LjUgZm9yIGRldGFpbHMpCiAgbWVtb3J5LmxpbWl0X2luX2J5dGVzCQkgIyBzZXQvc2hvdyBsaW1pdCBvZiBtZW1vcnkgdXNhZ2UKICBtZW1vcnkubWVtc3cubGltaXRfaW5fYnl0ZXMJICMgc2V0L3Nob3cgbGltaXQgb2YgbWVtb3J5K1N3YXAgdXNhZ2UKICBtZW1vcnkuZmFpbGNudAkJCSAjIHNob3cgdGhlIG51bWJlciBvZiBtZW1vcnkgdXNhZ2UgaGl0cyBsaW1pdHMKQEAgLTQ1Myw2ICs0NTUsMTUgQEAKIFlvdSBjYW4gcmVzZXQgZmFpbGNudCBieSB3cml0aW5nIDAgdG8gZmFpbGNudCBmaWxlLgogIyBlY2hvIDAgPiAuLi4vbWVtb3J5LmZhaWxjbnQKIAorNS41IHVzYWdlX2luX2J5dGVzCisKK0ZvciBlZmZpY2llbmN5LCBhcyBvdGhlciBrZXJuZWwgY29tcG9uZW50cywgbWVtb3J5IGNncm91cCB1c2VzIHNvbWUgb3B0aW1pemF0aW9uCit0byBhdm9pZCB1bm5lY2Vzc2FyeSBjYWNoZWxpbmUgZmFsc2Ugc2hhcmluZy4gdXNhZ2VfaW5fYnl0ZXMgaXMgYWZmZWN0ZWQgYnkgdGhlCittZXRob2QgYW5kIGRvZXNuJ3Qgc2hvdyAnZXhhY3QnIHZhbHVlIG9mIG1lbW9yeShhbmQgc3dhcCkgdXNhZ2UsIGl0J3MgYW4gZnV6egordmFsdWUgZm9yIGVmZmljaWVudCBhY2Nlc3MuIChPZiBjb3Vyc2UsIHdoZW4gbmVjZXNzYXJ5LCBpdCdzIHN5bmNocm9uaXplZC4pCitJZiB5b3Ugd2FudCB0byBrbm93IG1vcmUgZXhhY3QgbWVtb3J5IHVzYWdlLCB5b3Ugc2hvdWxkIHVzZSBSU1MrQ0FDSEUoK1NXQVApCit2YWx1ZSBpbiBtZW1vcnkuc3RhdChzZWUgNS4yKS4KKwogNi4gSGllcmFyY2h5IHN1cHBvcnQKIAogVGhlIG1lbW9yeSBjb250cm9sbGVyIHN1cHBvcnRzIGEgZGVlcCBoaWVyYXJjaHkgYW5kIGhpZXJhcmNoaWNhbCBhY2NvdW50aW5nLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDQ5MmU4MWQuLmY2YTI0ZTggMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTQ2MCwxNCArNDYwLDYgQEAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XaGF0OglUaGUgYWNwaV9zbGVlcD1zNF9ub252cyBjb21tYW5kIGxpbmUgb3B0aW9uCi1XaGVuOgkyLjYuMzcKLUZpbGVzOglhcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCi1XaHk6CXN1cGVyc2VkZWQgYnkgYWNwaV9zbGVlcD1ub252cwotV2hvOglSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDogCVBDSSBETUEgdW5tYXAgc3RhdGUgQVBJCiBXaGVuOglBdWd1c3QgMjAxMgogV2h5OglQQ0kgRE1BIHVubWFwIHN0YXRlIEFQSSAoaW5jbHVkZS9saW51eC9wY2ktZG1hLmgpIHdhcyByZXBsYWNlZApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0IGIvRG9jdW1lbnRhdGlvbi9mbGV4aWJsZS1hcnJheXMudHh0CmluZGV4IGNiOGEzYTAuLmRmOTA0YWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmxleGlibGUtYXJyYXlzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZsZXhpYmxlLWFycmF5cy50eHQKQEAgLTY2LDEwICs2NiwxMCBAQAogZW50ZXJpbmcgYXRvbWljIGNvbnRleHQsIHVzaW5nOgogCiAgICAgaW50IGZsZXhfYXJyYXlfcHJlYWxsb2Moc3RydWN0IGZsZXhfYXJyYXkgKmFycmF5LCB1bnNpZ25lZCBpbnQgc3RhcnQsCi0JCQkgICAgdW5zaWduZWQgaW50IGVuZCwgZ2ZwX3QgZmxhZ3MpOworCQkJICAgIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgZ2ZwX3QgZmxhZ3MpOwogCiBUaGlzIGZ1bmN0aW9uIHdpbGwgZW5zdXJlIHRoYXQgbWVtb3J5IGZvciB0aGUgZWxlbWVudHMgaW5kZXhlZCBpbiB0aGUgcmFuZ2UKLWRlZmluZWQgYnkgc3RhcnQgYW5kIGVuZCBoYXMgYmVlbiBhbGxvY2F0ZWQuICBUaGVyZWFmdGVyLCBhCitkZWZpbmVkIGJ5IHN0YXJ0IGFuZCBucl9lbGVtZW50cyBoYXMgYmVlbiBhbGxvY2F0ZWQuICBUaGVyZWFmdGVyLCBhCiBmbGV4X2FycmF5X3B1dCgpIGNhbGwgb24gYW4gZWxlbWVudCBpbiB0aGF0IHJhbmdlIGlzIGd1YXJhbnRlZWQgbm90IHRvCiBibG9jay4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMDIxIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZG0xMDIxCmluZGV4IDAzZDAyYmYuLjAyYWQ5NmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vYWRtMTAyMQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkbTEwMjEKQEAgLTE0LDEwICsxNCw2IEBACiAgICAgUHJlZml4OiAnZ2w1MjNzbScKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MTggLSAweDFhLCAweDI5IC0gMHgyYiwgMHg0YyAtIDB4NGUKICAgICBEYXRhc2hlZXQ6Ci0gICogSW50ZWwgWGVvbiBQcm9jZXNzb3IKLSAgICBQcmVmaXg6IC0gYW55IG90aGVyIC0gbWF5IHJlcXVpcmUgJ2ZvcmNlX2FkbTEwMjEnIHBhcmFtZXRlcgotICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lCi0gICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgSW50ZWwgd2Vic2l0ZQogICAqIE1heGltIE1BWDE2MTcKICAgICBQcmVmaXg6ICdtYXgxNjE3JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgxOCAtIDB4MWEsIDB4MjkgLSAweDJiLCAweDRjIC0gMHg0ZQpAQCAtOTEsMjEgKzg3LDI3IEBACiBBRE0xMDIxLWNsb25lcyBkbyBmYXN0ZXIgbWVhc3VyZW1lbnRzLCBidXQgdGhlcmUgaXMgcmVhbGx5IG5vIGdvb2QgcmVhc29uCiBmb3IgdGhhdC4KIAotWGVvbiBzdXBwb3J0Ci0tLS0tLS0tLS0tLS0KIAotU29tZSBYZW9uIHByb2Nlc3NvcnMgaGF2ZSByZWFsIG1heDE2MTcsIGFkbTEwMjEsIG9yIGNvbXBhdGlibGUgY2hpcHMKLXdpdGhpbiB0aGVtLCB3aXRoIHR3byB0ZW1wZXJhdHVyZSBzZW5zb3JzLgorTmV0YnVyc3QtYmFzZWQgWGVvbiBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotT3RoZXIgWGVvbnMgaGF2ZSBjaGlwcyB3aXRoIG9ubHkgb25lIHNlbnNvci4KK1NvbWUgWGVvbiBwcm9jZXNzb3JzIGJhc2VkIG9uIHRoZSBOZXRidXJzdCAoZWFybHkgUGVudGl1bSA0LCBmcm9tIDIwMDEgdG8KKzIwMDMpIG1pY3JvYXJjaGl0ZWN0dXJlIGhhZCByZWFsIE1BWDE2MTcsIEFETTEwMjEsIG9yIGNvbXBhdGlibGUgY2hpcHMKK3dpdGhpbiB0aGVtLCB3aXRoIHR3byB0ZW1wZXJhdHVyZSBzZW5zb3JzLiBPdGhlciBYZW9uIHByb2Nlc3NvcnMgb2YgdGhpcworZXJhICh3aXRoIDQwMCBNSHogRlNCKSBoYWQgY2hpcHMgd2l0aCBvbmx5IG9uZSB0ZW1wZXJhdHVyZSBzZW5zb3IuCiAKLUlmIHlvdSBoYXZlIGEgWGVvbiwgYW5kIHRoZSBhZG0xMDIxIG1vZHVsZSBsb2FkcywgYW5kIGJvdGggdGVtcGVyYXR1cmVzCi1hcHBlYXIgdmFsaWQsIHRoZW4gdGhpbmdzIGFyZSBnb29kLgorSWYgeW91IGhhdmUgc3VjaCBhbiBvbGQgWGVvbiwgYW5kIHlvdSBnZXQgdHdvIHZhbGlkIHRlbXBlcmF0dXJlcyB3aGVuCitsb2FkaW5nIHRoZSBhZG0xMDIxIG1vZHVsZSwgdGhlbiB0aGluZ3MgYXJlIGdvb2QuCiAKLUlmIHRoZSBhZG0xMDIxIG1vZHVsZSBkb2Vzbid0IGxvYWQsIHlvdSBzaG91bGQgdHJ5IHRoaXM6Ci0JbW9kcHJvYmUgYWRtMTAyMSBmb3JjZV9hZG0xMDIxPUJVUyxBRERSRVNTCi0JQUREUkVTUyBjYW4gb25seSBiZSAweDE4LCAweDFhLCAweDI5LCAweDJiLCAweDRjLCBvciAweDRlLgorSWYgbm90aGluZyBoYXBwZW5zIHdoZW4gbG9hZGluZyB0aGUgYWRtMTAyMSBtb2R1bGUsIGFuZCB5b3UgYXJlIGNlcnRhaW4KK3RoYXQgeW91ciBzcGVjaWZpYyBYZW9uIHByb2Nlc3NvciBtb2RlbCBpbmNsdWRlcyBjb21wYXRpYmxlIHNlbnNvcnMsIHlvdQord2lsbCBoYXZlIHRvIGV4cGxpY2l0bHkgaW5zdGFudGlhdGUgdGhlIHNlbnNvciBjaGlwcyBmcm9tIHVzZXItc3BhY2UuIFNlZQorbWV0aG9kIDQgaW4gRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzLiBQb3NzaWJsZSBzbGF2ZQorYWRkcmVzc2VzIGFyZSAweDE4LCAweDFhLCAweDI5LCAweDJiLCAweDRjLCBvciAweDRlLiBJdCBpcyBsaWtlbHkgdGhhdAorb25seSB0ZW1wMiB3aWxsIGJlIGNvcnJlY3QgYW5kIHRlbXAxIHdpbGwgaGF2ZSB0byBiZSBpZ25vcmVkLgogCi1JZiB5b3UgaGF2ZSBkdWFsIFhlb25zIHlvdSBtYXkgaGF2ZSBhcHBlYXIgdG8gaGF2ZSB0d28gc2VwYXJhdGUKLWFkbTEwMjEtY29tcGF0aWJsZSBjaGlwcywgb3IgdHdvIHNpbmdsZS10ZW1wZXJhdHVyZSBzZW5zb3JzLCBhdCBkaXN0aW5jdAotYWRkcmVzc2VzLgorUHJldmlvdXMgZ2VuZXJhdGlvbnMgb2YgdGhlIFhlb24gcHJvY2Vzc29yIChiYXNlZCBvbiBQZW50aXVtIElJL0lJSSkKK2RpZG4ndCBoYXZlIHRoZXNlIHNlbnNvcnMuIE5leHQgZ2VuZXJhdGlvbnMgb2YgWGVvbiBwcm9jZXNzb3JzICg1MzMgTUh6CitGU0IgYW5kIGZhc3RlcikgbG9zdCB0aGVtLCB1bnRpbCB0aGUgQ29yZS1iYXNlZCBnZW5lcmF0aW9uIHdoaWNoCitpbnRyb2R1Y2VkIGludGVncmF0ZWQgZGlnaXRhbCB0aGVybWFsIHNlbnNvcnMuIFRoZXNlIGFyZSBzdXBwb3J0ZWQgYnkKK3RoZSBjb3JldGVtcCBkcml2ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKaW5kZXggZmE0NzVjMC4uZjNlZmQxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05MApAQCAtMzIsNiArMzIsMTYgQEAKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgT04gU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCiAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9uc2VtaS5jb20vUG93ZXJTb2x1dGlvbnMvcHJvZHVjdC5kbz9pZD1BRFQ3NDYxCisgICogQW5hbG9nIERldmljZXMgQURUNzQ2MUEKKyAgICBQcmVmaXg6ICdhZHQ3NDYxYScKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NGMgYW5kIDB4NGQKKyAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgT04gU2VtaWNvbmR1Y3RvciB3ZWJzaXRlCisgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm9uc2VtaS5jb20vUG93ZXJTb2x1dGlvbnMvcHJvZHVjdC5kbz9pZD1BRFQ3NDYxQQorICAqIE9OIFNlbWljb25kdWN0b3IgTkNUMTAwOAorICAgIFByZWZpeDogJ25jdDEwMDgnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjIGFuZCAweDRkCisgICAgRGF0YXNoZWV0OiBQdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIE9OIFNlbWljb25kdWN0b3Igd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5vbnNlbWkuY29tL1Bvd2VyU29sdXRpb25zL3Byb2R1Y3QuZG8/aWQ9TkNUMTAwOAogICAqIE1heGltIE1BWDY2NDYKICAgICBQcmVmaXg6ICdtYXg2NjQ2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0ZApAQCAtMTQ5LDcgKzE1OSw3IEBACiAgICogQUxFUlQgaXMgdHJpZ2dlcmVkIGJ5IG9wZW4gcmVtb3RlIHNlbnNvci4KICAgKiBTTUJ1cyBQRUMgc3VwcG9ydCBmb3IgV3JpdGUgQnl0ZSBhbmQgUmVjZWl2ZSBCeXRlIHRyYW5zYWN0aW9ucy4KIAotQURUNzQ2MToKK0FEVDc0NjEsIEFEVDc0NjFBLCBOQ1QxMDA4OgogICAqIEV4dGVuZGVkIHRlbXBlcmF0dXJlIHJhbmdlIChicmVha3MgY29tcGF0aWJpbGl0eSkKICAgKiBMb3dlciByZXNvbHV0aW9uIGZvciByZW1vdGUgdGVtcGVyYXR1cmUKIApAQCAtMTk1LDkgKzIwNSw5IEBACiBPbmx5IHRoZSBsb2NhbCBoeXN0ZXJlc2lzIGNhbiBiZSBzZXQgZnJvbSB1c2VyLXNwYWNlLCBhbmQgdGhlIHNhbWUgZGVsdGEKIGFwcGxpZXMgdG8gdGhlIHJlbW90ZSBoeXN0ZXJlc2lzLgogCi1UaGUgbG05MCBkcml2ZXIgd2lsbCBub3QgdXBkYXRlIGl0cyB2YWx1ZXMgbW9yZSBmcmVxdWVudGx5IHRoYW4gZXZlcnkKLW90aGVyIHNlY29uZDsgcmVhZGluZyB0aGVtIG1vcmUgb2Z0ZW4gd2lsbCBkbyBubyBoYXJtLCBidXQgd2lsbCByZXR1cm4KLSdvbGQnIHZhbHVlcy4KK1RoZSBsbTkwIGRyaXZlciB3aWxsIG5vdCB1cGRhdGUgaXRzIHZhbHVlcyBtb3JlIGZyZXF1ZW50bHkgdGhhbiBjb25maWd1cmVkIHdpdGgKK3RoZSB1cGRhdGVfaW50ZXJ2YWwgYXR0cmlidXRlOyByZWFkaW5nIHRoZW0gbW9yZSBvZnRlbiB3aWxsIGRvIG5vIGhhcm0sIGJ1dCB3aWxsCityZXR1cm4gJ29sZCcgdmFsdWVzLgogCiBTTUJ1cyBBbGVydCBTdXBwb3J0CiAtLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMDUsMTEgKzIxNSwxMiBAQAogVGhpcyBkcml2ZXIgaGFzIGJhc2ljIHN1cHBvcnQgZm9yIFNNQnVzIGFsZXJ0LiBXaGVuIGFuIGFsZXJ0IGlzIHJlY2VpdmVkLAogdGhlIHN0YXR1cyByZWdpc3RlciBpcyByZWFkIGFuZCB0aGUgZmF1bHR5IHRlbXBlcmF0dXJlIGNoYW5uZWwgaXMgbG9nZ2VkLgogCi1UaGUgQW5hbG9nIERldmljZXMgY2hpcHMgKEFETTEwMzIgYW5kIEFEVDc0NjEpIGRvIG5vdCBpbXBsZW1lbnQgdGhlIFNNQnVzCi1hbGVydCBwcm90b2NvbCBwcm9wZXJseSBzbyBhZGRpdGlvbmFsIGNhcmUgaXMgbmVlZGVkOiB0aGUgQUxFUlQgb3V0cHV0IGlzCi1kaXNhYmxlZCB3aGVuIGFuIGFsZXJ0IGlzIHJlY2VpdmVkLCBhbmQgaXMgcmUtZW5hYmxlZCBvbmx5IHdoZW4gdGhlIGFsYXJtCi1pcyBnb25lLiBPdGhlcndpc2UgdGhlIGNoaXAgd291bGQgYmxvY2sgYWxlcnRzIGZyb20gb3RoZXIgY2hpcHMgaW4gdGhlIGJ1cwotYXMgbG9uZyBhcyB0aGUgYWxhcm0gaXMgYWN0aXZlLgorVGhlIEFuYWxvZyBEZXZpY2VzIGNoaXBzIChBRE0xMDMyLCBBRFQ3NDYxIGFuZCBBRFQ3NDYxQSkgYW5kIE9OCitTZW1pY29uZHVjdG9yIGNoaXBzIChOQ1QxMDA4KSBkbyBub3QgaW1wbGVtZW50IHRoZSBTTUJ1cyBhbGVydCBwcm90b2NvbAorcHJvcGVybHkgc28gYWRkaXRpb25hbCBjYXJlIGlzIG5lZWRlZDogdGhlIEFMRVJUIG91dHB1dCBpcyBkaXNhYmxlZCB3aGVuCithbiBhbGVydCBpcyByZWNlaXZlZCwgYW5kIGlzIHJlLWVuYWJsZWQgb25seSB3aGVuIHRoZSBhbGFybSBpcyBnb25lLgorT3RoZXJ3aXNlIHRoZSBjaGlwIHdvdWxkIGJsb2NrIGFsZXJ0cyBmcm9tIG90aGVyIGNoaXBzIGluIHRoZSBidXMgYXMgbG9uZworYXMgdGhlIGFsYXJtIGlzIGFjdGl2ZS4KIAogUEVDIFN1cHBvcnQKIC0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDE2MDY0IGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgxNjA2NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTcyODk5Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXgxNjA2NApAQCAtMCwwICsxLDYyIEBACitLZXJuZWwgZHJpdmVyIG1heDE2MDY0Cis9PT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBNYXhpbSBNQVgxNjA2NAorICAgIFByZWZpeDogJ21heDE2MDY0JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCisgICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYMTYwNjQucGRmCisKK0F1dGhvcjogR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIG1vbnRvcmluZyBmb3IgTWF4aW0gTUFYMTYwNjQgUXVhZCBQb3dlci1TdXBwbHkKK0NvbnRyb2xsZXIgd2l0aCBBY3RpdmUtVm9sdGFnZSBPdXRwdXQgQ29udHJvbCBhbmQgUE1CdXMgSW50ZXJmYWNlLgorCitUaGUgZHJpdmVyIGlzIGEgY2xpZW50IGRyaXZlciB0byB0aGUgY29yZSBQTUJ1cyBkcml2ZXIuCitQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaHdtb24vcG1idXMgZm9yIGRldGFpbHMgb24gUE1CdXMgY2xpZW50IGRyaXZlcnMuCisKKworVXNhZ2UgTm90ZXMKKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IGF1dG8tZGV0ZWN0IGRldmljZXMuIFlvdSB3aWxsIGhhdmUgdG8gaW5zdGFudGlhdGUgdGhlCitkZXZpY2VzIGV4cGxpY2l0bHkuIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzIGZvcgorZGV0YWlscy4KKworCitQbGF0Zm9ybSBkYXRhIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIHN0YW5kYXJkIFBNQnVzIGRyaXZlciBwbGF0Zm9ybSBkYXRhLgorCisKK1N5c2ZzIGVudHJpZXMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBzdXBwb3J0ZWQuIExpbWl0cyBhcmUgcmVhZC13cml0ZTsgYWxsIG90aGVyCithdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCisKK2luWzEtNF1fbGFiZWwJCSJ2b3V0WzEtNF0iCitpblsxLTRdX2lucHV0CQlNZWFzdXJlZCB2b2x0YWdlLiBGcm9tIFJFQURfVk9VVCByZWdpc3Rlci4KK2luWzEtNF1fbWluCQlNaW51bXVtIFZvbHRhZ2UuIEZyb20gVk9VVF9VVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS00XV9tYXgJCU1heGltdW0gdm9sdGFnZS4gRnJvbSBWT1VUX09WX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpblsxLTRdX2xjcml0CQlDcml0aWNhbCBtaW51bXVtIFZvbHRhZ2UuIFZPVVRfVVZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpblsxLTRdX2NyaXQJCUNyaXRpY2FsIG1heGltdW0gdm9sdGFnZS4gRnJvbSBWT1VUX09WX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgoraW5bMS00XV9taW5fYWxhcm0JVm9sdGFnZSBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9XQVJOSU5HIHN0YXR1cy4KK2luWzEtNF1fbWF4X2FsYXJtCVZvbHRhZ2UgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX1dBUk5JTkcgc3RhdHVzLgoraW5bMS00XV9sY3JpdF9hbGFybQlWb2x0YWdlIGNyaXRpY2FsIGxvdyBhbGFybS4gRnJvbSBWT0xUQUdFX1VWX0ZBVUxUIHN0YXR1cy4KK2luWzEtNF1fY3JpdF9hbGFybQlWb2x0YWdlIGNyaXRpY2FsIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9GQVVMVCBzdGF0dXMuCisKK3RlbXAxX2lucHV0CQlNZWFzdXJlZCB0ZW1wZXJhdHVyZS4gRnJvbSBSRUFEX1RFTVBFUkFUVVJFXzEgcmVnaXN0ZXIuCit0ZW1wMV9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KK3RlbXAxX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyYXR1cmUuIEZyb20gT1RfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCit0ZW1wMV9tYXhfYWxhcm0JCUNoaXAgdGVtcGVyYXR1cmUgaGlnaCBhbGFybS4gU2V0IGJ5IGNvbXBhcmluZworCQkJUkVBRF9URU1QRVJBVFVSRV8xIHdpdGggT1RfV0FSTl9MSU1JVCBpZiBURU1QX09UX1dBUk5JTkcKKwkJCXN0YXR1cyBpcyBzZXQuCit0ZW1wMV9jcml0X2FsYXJtCUNoaXAgdGVtcGVyYXR1cmUgY3JpdGljYWwgaGlnaCBhbGFybS4gU2V0IGJ5IGNvbXBhcmluZworCQkJUkVBRF9URU1QRVJBVFVSRV8xIHdpdGggT1RfRkFVTFRfTElNSVQgaWYgVEVNUF9PVF9GQVVMVAorCQkJc3RhdHVzIGlzIHNldC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbWF4MzQ0NDAgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDM0NDQwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNTI1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL21heDM0NDQwCkBAIC0wLDAgKzEsNzkgQEAKK0tlcm5lbCBkcml2ZXIgbWF4MzQ0NDAKKz09PT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIE1heGltIE1BWDM0NDQwCisgICAgUHJlZml4ZXM6ICdtYXgzNDQ0MCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQorICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDM0NDQwLnBkZgorICAqIE1heGltIE1BWDM0NDQxCisgICAgUE1CdXMgNS1DaGFubmVsIFBvd2VyLVN1cHBseSBNYW5hZ2VyIGFuZCBJbnRlbGxpZ2VudCBGYW4gQ29udHJvbGxlcgorICAgIFByZWZpeGVzOiAnbWF4MzQ0NDEnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgzNDQ0MS5wZGYKKworQXV0aG9yOiBHdWVudGVyIFJvZWNrIDxndWVudGVyLnJvZWNrQGVyaWNzc29uLmNvbT4KKworCitEZXNjcmlwdGlvbgorLS0tLS0tLS0tLS0KKworVGhpcyBkcml2ZXIgc3VwcG9ydHMgaGFyZHdhcmUgbW9udG9yaW5nIGZvciBNYXhpbSBNQVgzNDQ0MCBQTUJ1cyA2LUNoYW5uZWwKK1Bvd2VyLVN1cHBseSBNYW5hZ2VyIGFuZCBNQVgzNDQ0MSBQTUJ1cyA1LUNoYW5uZWwgUG93ZXItU3VwcGx5IE1hbmFnZXIKK2FuZCBJbnRlbGxpZ2VudCBGYW4gQ29udHJvbGxlci4KKworVGhlIGRyaXZlciBpcyBhIGNsaWVudCBkcml2ZXIgdG8gdGhlIGNvcmUgUE1CdXMgZHJpdmVyLiBQbGVhc2Ugc2VlCitEb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzIGZvciBkZXRhaWxzIG9uIFBNQnVzIGNsaWVudCBkcml2ZXJzLgorCisKK1VzYWdlIE5vdGVzCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBkb2VzIG5vdCBhdXRvLWRldGVjdCBkZXZpY2VzLiBZb3Ugd2lsbCBoYXZlIHRvIGluc3RhbnRpYXRlIHRoZQorZGV2aWNlcyBleHBsaWNpdGx5LiBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaTJjL2luc3RhbnRpYXRpbmctZGV2aWNlcyBmb3IKK2RldGFpbHMuCisKKworUGxhdGZvcm0gZGF0YSBzdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGRyaXZlciBzdXBwb3J0cyBzdGFuZGFyZCBQTUJ1cyBkcml2ZXIgcGxhdGZvcm0gZGF0YS4KKworCitTeXNmcyBlbnRyaWVzCistLS0tLS0tLS0tLS0tCisKK1RoZSBmb2xsb3dpbmcgYXR0cmlidXRlcyBhcmUgc3VwcG9ydGVkLiBMaW1pdHMgYXJlIHJlYWQtd3JpdGU7IGFsbCBvdGhlcgorYXR0cmlidXRlcyBhcmUgcmVhZC1vbmx5LgorCitpblsxLTZdX2xhYmVsCQkidm91dFsxLTZdIi4KK2luWzEtNl1faW5wdXQJCU1lYXN1cmVkIHZvbHRhZ2UuIEZyb20gUkVBRF9WT1VUIHJlZ2lzdGVyLgoraW5bMS02XV9taW4JCU1pbnVtdW0gVm9sdGFnZS4gRnJvbSBWT1VUX1VWX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpblsxLTZdX21heAkJTWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfV0FSTl9MSU1JVCByZWdpc3Rlci4KK2luWzEtNl1fbGNyaXQJCUNyaXRpY2FsIG1pbnVtdW0gVm9sdGFnZS4gVk9VVF9VVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2luWzEtNl1fY3JpdAkJQ3JpdGljYWwgbWF4aW11bSB2b2x0YWdlLiBGcm9tIFZPVVRfT1ZfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitpblsxLTZdX21pbl9hbGFybQlWb2x0YWdlIGxvdyBhbGFybS4gRnJvbSBWT0xUQUdFX1VWX1dBUk5JTkcgc3RhdHVzLgoraW5bMS02XV9tYXhfYWxhcm0JVm9sdGFnZSBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfV0FSTklORyBzdGF0dXMuCitpblsxLTZdX2xjcml0X2FsYXJtCVZvbHRhZ2UgY3JpdGljYWwgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfRkFVTFQgc3RhdHVzLgoraW5bMS02XV9jcml0X2FsYXJtCVZvbHRhZ2UgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBWT0xUQUdFX09WX0ZBVUxUIHN0YXR1cy4KKworY3VyclsxLTZdX2xhYmVsCQkiaW91dFsxLTZdIi4KK2N1cnJbMS02XV9pbnB1dAkJTWVhc3VyZWQgY3VycmVudC4gRnJvbSBSRUFEX0lPVVQgcmVnaXN0ZXIuCitjdXJyWzEtNl1fbWF4CQlNYXhpbXVtIGN1cnJlbnQuIEZyb20gSU9VVF9PQ19XQVJOX0xJTUlUIHJlZ2lzdGVyLgorY3VyclsxLTZdX2NyaXQJCUNyaXRpY2FsIG1heGltdW0gY3VycmVudC4gRnJvbSBJT1VUX09DX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgorY3VyclsxLTZdX21heF9hbGFybQlDdXJyZW50IGhpZ2ggYWxhcm0uIEZyb20gSU9VVF9PQ19XQVJOSU5HIHN0YXR1cy4KK2N1cnJbMS02XV9jcml0X2FsYXJtCUN1cnJlbnQgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX0ZBVUxUIHN0YXR1cy4KKworCQkJaW42IGFuZCBjdXJyNiBhdHRyaWJ1dGVzIG9ubHkgZXhpc3QgZm9yIE1BWDM0NDQwLgorCit0ZW1wWzEtOF1faW5wdXQJCU1lYXN1cmVkIHRlbXBlcmF0dXJlcy4gRnJvbSBSRUFEX1RFTVBFUkFUVVJFXzEgcmVnaXN0ZXIuCisJCQl0ZW1wMSBpcyB0aGUgY2hpcCdzIGludGVybmFsIHRlbXBlcmF0dXJlLiB0ZW1wMi4udGVtcDUKKwkJCWFyZSByZW1vdGUgSTJDIHRlbXBlcmF0dXJlIHNlbnNvcnMuIEZvciBNQVgzNDQ0MSwgdGVtcDYKKwkJCWlzIGEgcmVtb3RlIHRoZXJtYWwtZGlvZGUgc2Vuc29yLiBGb3IgTUFYMzQ0NDAsIHRlbXA2Li44CisJCQlhcmUgcmVtb3RlIEkyQyB0ZW1wZXJhdHVyZSBzZW5zb3JzLgordGVtcFsxLThdX21heAkJTWF4aW11bSB0ZW1wZXJhdHVyZS4gRnJvbSBPVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgordGVtcFsxLThdX2NyaXQJCUNyaXRpY2FsIGhpZ2ggdGVtcGVyYXR1cmUuIEZyb20gT1RfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCit0ZW1wWzEtOF1fbWF4X2FsYXJtCVRlbXBlcmF0dXJlIGhpZ2ggYWxhcm0uCit0ZW1wWzEtOF1fY3JpdF9hbGFybQlUZW1wZXJhdHVyZSBjcml0aWNhbCBoaWdoIGFsYXJtLgorCisJCQl0ZW1wNyBhbmQgdGVtcDggYXR0cmlidXRlcyBvbmx5IGV4aXN0IGZvciBNQVgzNDQ0MC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbWF4ODY4OCBiL0RvY3VtZW50YXRpb24vaHdtb24vbWF4ODY4OApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGRkM2E0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9tYXg4Njg4CkBAIC0wLDAgKzEsNjkgQEAKK0tlcm5lbCBkcml2ZXIgbWF4ODY4OAorPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBNYXhpbSBNQVg4Njg4CisgICAgUHJlZml4OiAnbWF4ODY4OCcKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogLQorICAgIERhdGFzaGVldDogaHR0cDovL2RhdGFzaGVldHMubWF4aW0taWMuY29tL2VuL2RzL01BWDg2ODgucGRmCisKK0F1dGhvcjogR3VlbnRlciBSb2VjayA8Z3VlbnRlci5yb2Vja0Blcmljc3Nvbi5jb20+CisKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIHN1cHBvcnRzIGhhcmR3YXJlIG1vbnRvcmluZyBmb3IgTWF4aW0gTUFYODY4OCBEaWdpdGFsIFBvd2VyLVN1cHBseQorQ29udHJvbGxlci9Nb25pdG9yIHdpdGggUE1CdXMgSW50ZXJmYWNlLgorCitUaGUgZHJpdmVyIGlzIGEgY2xpZW50IGRyaXZlciB0byB0aGUgY29yZSBQTUJ1cyBkcml2ZXIuIFBsZWFzZSBzZWUKK0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMgZm9yIGRldGFpbHMgb24gUE1CdXMgY2xpZW50IGRyaXZlcnMuCisKKworVXNhZ2UgTm90ZXMKKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGRvZXMgbm90IGF1dG8tZGV0ZWN0IGRldmljZXMuIFlvdSB3aWxsIGhhdmUgdG8gaW5zdGFudGlhdGUgdGhlCitkZXZpY2VzIGV4cGxpY2l0bHkuIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pMmMvaW5zdGFudGlhdGluZy1kZXZpY2VzIGZvcgorZGV0YWlscy4KKworCitQbGF0Zm9ybSBkYXRhIHN1cHBvcnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIHN0YW5kYXJkIFBNQnVzIGRyaXZlciBwbGF0Zm9ybSBkYXRhLgorCisKK1N5c2ZzIGVudHJpZXMKKy0tLS0tLS0tLS0tLS0KKworVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBzdXBwb3J0ZWQuIExpbWl0cyBhcmUgcmVhZC13cml0ZTsgYWxsIG90aGVyCithdHRyaWJ1dGVzIGFyZSByZWFkLW9ubHkuCisKK2luMV9sYWJlbAkJInZvdXQxIgoraW4xX2lucHV0CQlNZWFzdXJlZCB2b2x0YWdlLiBGcm9tIFJFQURfVk9VVCByZWdpc3Rlci4KK2luMV9taW4JCQlNaW51bXVtIFZvbHRhZ2UuIEZyb20gVk9VVF9VVl9XQVJOX0xJTUlUIHJlZ2lzdGVyLgoraW4xX21heAkJCU1heGltdW0gdm9sdGFnZS4gRnJvbSBWT1VUX09WX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitpbjFfbGNyaXQJCUNyaXRpY2FsIG1pbnVtdW0gVm9sdGFnZS4gVk9VVF9VVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2luMV9jcml0CQlDcml0aWNhbCBtYXhpbXVtIHZvbHRhZ2UuIEZyb20gVk9VVF9PVl9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK2luMV9taW5fYWxhcm0JCVZvbHRhZ2UgbG93IGFsYXJtLiBGcm9tIFZPTFRBR0VfVVZfV0FSTklORyBzdGF0dXMuCitpbjFfbWF4X2FsYXJtCQlWb2x0YWdlIGhpZ2ggYWxhcm0uIEZyb20gVk9MVEFHRV9PVl9XQVJOSU5HIHN0YXR1cy4KK2luMV9sY3JpdF9hbGFybQkJVm9sdGFnZSBjcml0aWNhbCBsb3cgYWxhcm0uIEZyb20gVk9MVEFHRV9VVl9GQVVMVCBzdGF0dXMuCitpbjFfY3JpdF9hbGFybQkJVm9sdGFnZSBjcml0aWNhbCBoaWdoIGFsYXJtLiBGcm9tIFZPTFRBR0VfT1ZfRkFVTFQgc3RhdHVzLgorCitjdXJyMV9sYWJlbAkJImlvdXQxIgorY3VycjFfaW5wdXQJCU1lYXN1cmVkIGN1cnJlbnQuIEZyb20gUkVBRF9JT1VUIHJlZ2lzdGVyLgorY3VycjFfbWF4CQlNYXhpbXVtIGN1cnJlbnQuIEZyb20gSU9VVF9PQ19XQVJOX0xJTUlUIHJlZ2lzdGVyLgorY3VycjFfY3JpdAkJQ3JpdGljYWwgbWF4aW11bSBjdXJyZW50LiBGcm9tIElPVVRfT0NfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCitjdXJyMV9tYXhfYWxhcm0JCUN1cnJlbnQgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX1dBUk5fTElNSVQgcmVnaXN0ZXIuCitjdXJyMV9jcml0X2FsYXJtCUN1cnJlbnQgY3JpdGljYWwgaGlnaCBhbGFybS4gRnJvbSBJT1VUX09DX0ZBVUxUIHN0YXR1cy4KKwordGVtcDFfaW5wdXQJCU1lYXN1cmVkIHRlbXBlcmF0dXJlLiBGcm9tIFJFQURfVEVNUEVSQVRVUkVfMSByZWdpc3Rlci4KK3RlbXAxX21heAkJTWF4aW11bSB0ZW1wZXJhdHVyZS4gRnJvbSBPVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgordGVtcDFfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZS4gRnJvbSBPVF9GQVVMVF9MSU1JVCByZWdpc3Rlci4KK3RlbXAxX21heF9hbGFybQkJQ2hpcCB0ZW1wZXJhdHVyZSBoaWdoIGFsYXJtLiBTZXQgYnkgY29tcGFyaW5nCisJCQlSRUFEX1RFTVBFUkFUVVJFXzEgd2l0aCBPVF9XQVJOX0xJTUlUIGlmIFRFTVBfT1RfV0FSTklORworCQkJc3RhdHVzIGlzIHNldC4KK3RlbXAxX2NyaXRfYWxhcm0JQ2hpcCB0ZW1wZXJhdHVyZSBjcml0aWNhbCBoaWdoIGFsYXJtLiBTZXQgYnkgY29tcGFyaW5nCisJCQlSRUFEX1RFTVBFUkFUVVJFXzEgd2l0aCBPVF9GQVVMVF9MSU1JVCBpZiBURU1QX09UX0ZBVUxUCisJCQlzdGF0dXMgaXMgc2V0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cyBiL0RvY3VtZW50YXRpb24vaHdtb24vcG1idXMKaW5kZXggZGM0OTMzZS4uNWU0NjJmYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9wbWJ1cworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BtYnVzCkBAIC0xMywyNiArMTMsNiBAQAogICAgIFByZWZpeDogJ2x0YzI5NzgnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KICAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9jZHMubGluZWFyLmNvbS9kb2NzL0RhdGFzaGVldC8yOTc4ZmEucGRmCi0gICogTWF4aW0gTUFYMTYwNjQKLSAgICBRdWFkIFBvd2VyLVN1cHBseSBDb250cm9sbGVyCi0gICAgUHJlZml4OiAnbWF4MTYwNjQnCi0gICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KLSAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgxNjA2NC5wZGYKLSAgKiBNYXhpbSBNQVgzNDQ0MAotICAgIFBNQnVzIDYtQ2hhbm5lbCBQb3dlci1TdXBwbHkgTWFuYWdlcgotICAgIFByZWZpeGVzOiAnbWF4MzQ0NDAnCi0gICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KLSAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVgzNDQ0MC5wZGYKLSAgKiBNYXhpbSBNQVgzNDQ0MQotICAgIFBNQnVzIDUtQ2hhbm5lbCBQb3dlci1TdXBwbHkgTWFuYWdlciBhbmQgSW50ZWxsaWdlbnQgRmFuIENvbnRyb2xsZXIKLSAgICBQcmVmaXhlczogJ21heDM0NDQxJwotICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCi0gICAgRGF0YXNoZWV0OiBodHRwOi8vZGF0YXNoZWV0cy5tYXhpbS1pYy5jb20vZW4vZHMvTUFYMzQ0NDEucGRmCi0gICogTWF4aW0gTUFYODY4OAotICAgIERpZ2l0YWwgUG93ZXItU3VwcGx5IENvbnRyb2xsZXIvTW9uaXRvcgotICAgIFByZWZpeDogJ21heDg2ODgnCi0gICAgQWRkcmVzc2VzIHNjYW5uZWQ6IC0KLSAgICBEYXRhc2hlZXQ6IGh0dHA6Ly9kYXRhc2hlZXRzLm1heGltLWljLmNvbS9lbi9kcy9NQVg4Njg4LnBkZgogICAqIEdlbmVyaWMgUE1CdXMgZGV2aWNlcwogICAgIFByZWZpeDogJ3BtYnVzJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiAtCkBAIC0xNzUsMTEgKzE1NSwxMyBAQAogCQkJRnJvbSBJSU5fT0NfRkFVTFRfTElNSVQgb3IgSU9VVF9PQ19GQVVMVF9MSU1JVCByZWdpc3Rlci4KIGN1cnJYX2FsYXJtCQlDdXJyZW50IGhpZ2ggYWxhcm0uCiAJCQlGcm9tIElJTl9PQ19XQVJOSU5HIG9yIElPVVRfT0NfV0FSTklORyBzdGF0dXMuCitjdXJyWF9tYXhfYWxhcm0JCUN1cnJlbnQgaGlnaCBhbGFybS4KKwkJCUZyb20gSUlOX09DX1dBUk5fTElNSVQgb3IgSU9VVF9PQ19XQVJOX0xJTUlUIHN0YXR1cy4KIGN1cnJYX2xjcml0X2FsYXJtCU91dHB1dCBjdXJyZW50IGNyaXRpY2FsIGxvdyBhbGFybS4KIAkJCUZyb20gSU9VVF9VQ19GQVVMVCBzdGF0dXMuCiBjdXJyWF9jcml0X2FsYXJtCUN1cnJlbnQgY3JpdGljYWwgaGlnaCBhbGFybS4KIAkJCUZyb20gSUlOX09DX0ZBVUxUIG9yIElPVVRfT0NfRkFVTFQgc3RhdHVzLgotY3VyclhfbGFiZWwJCSJpaW4iIG9yICJ2aW5ZIgorY3VyclhfbGFiZWwJCSJpaW4iIG9yICJpb3V0WSIKIAogcG93ZXJYX2lucHV0CQlNZWFzdXJlZCBwb3dlci4gRnJvbSBSRUFEX1BJTiBvciBSRUFEX1BPVVQgcmVnaXN0ZXIuCiBwb3dlclhfY2FwCQlPdXRwdXQgcG93ZXIgY2FwLiBGcm9tIFBPVVRfTUFYIHJlZ2lzdGVyLgpAQCAtMTkzLDEzICsxNzUsMTMgQEAKIAkJCUZyb20gUE9VVF9PUF9GQVVMVCBzdGF0dXMuCiBwb3dlclhfbGFiZWwJCSJwaW4iIG9yICJwb3V0WSIKIAotdGVtcFhfaW5wdXQJCU1lYXN1cmVkIHRlbXBlcmVyYXR1cmUuCit0ZW1wWF9pbnB1dAkJTWVhc3VyZWQgdGVtcGVyYXR1cmUuCiAJCQlGcm9tIFJFQURfVEVNUEVSQVRVUkVfWCByZWdpc3Rlci4KLXRlbXBYX21pbgkJTWltaW11bSB0ZW1wZXJlcmF0dXJlLiBGcm9tIFVUX1dBUk5fTElNSVQgcmVnaXN0ZXIuCi10ZW1wWF9tYXgJCU1heGltdW0gdGVtcGVyZXJhdHVyZS4gRnJvbSBPVF9XQVJOX0xJTUlUIHJlZ2lzdGVyLgotdGVtcFhfbGNyaXQJCUNyaXRpY2FsIGxvdyB0ZW1wZXJlcmF0dXJlLgordGVtcFhfbWluCQlNaW1pbXVtIHRlbXBlcmF0dXJlLiBGcm9tIFVUX1dBUk5fTElNSVQgcmVnaXN0ZXIuCit0ZW1wWF9tYXgJCU1heGltdW0gdGVtcGVyYXR1cmUuIEZyb20gT1RfV0FSTl9MSU1JVCByZWdpc3Rlci4KK3RlbXBYX2xjcml0CQlDcml0aWNhbCBsb3cgdGVtcGVyYXR1cmUuCiAJCQlGcm9tIFVUX0ZBVUxUX0xJTUlUIHJlZ2lzdGVyLgotdGVtcFhfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJlcmF0dXJlLgordGVtcFhfY3JpdAkJQ3JpdGljYWwgaGlnaCB0ZW1wZXJhdHVyZS4KIAkJCUZyb20gT1RfRkFVTFRfTElNSVQgcmVnaXN0ZXIuCiB0ZW1wWF9taW5fYWxhcm0JCUNoaXAgdGVtcGVyYXR1cmUgbG93IGFsYXJtLiBTZXQgYnkgY29tcGFyaW5nCiAJCQlSRUFEX1RFTVBFUkFUVVJFX1ggd2l0aCBVVF9XQVJOX0xJTUlUIGlmCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3NtbTY2NSBiL0RvY3VtZW50YXRpb24vaHdtb24vc21tNjY1CmluZGV4IDM4MjBmYzkuLjU5ZTMxNjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vc21tNjY1CisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vc21tNjY1CkBAIC0xNTAsOCArMTUwLDggQEAKIGluOV9jcml0X2FsYXJtCQlBSU4xIGNyaXRpY2FsIGFsYXJtCiBpbjEwX2NyaXRfYWxhcm0JCUFJTjIgY3JpdGljYWwgYWxhcm0KIAotdGVtcDFfaW5wdXQJCUNoaXAgdGVtcGVyZXJhdHVyZQotdGVtcDFfbWluCQlNaW1pbXVtIGNoaXAgdGVtcGVyZXJhdHVyZQotdGVtcDFfbWF4CQlNYXhpbXVtIGNoaXAgdGVtcGVyZXJhdHVyZQotdGVtcDFfY3JpdAkJQ3JpdGljYWwgY2hpcCB0ZW1wZXJlcmF0dXJlCit0ZW1wMV9pbnB1dAkJQ2hpcCB0ZW1wZXJhdHVyZQordGVtcDFfbWluCQlNaW1pbXVtIGNoaXAgdGVtcGVyYXR1cmUKK3RlbXAxX21heAkJTWF4aW11bSBjaGlwIHRlbXBlcmF0dXJlCit0ZW1wMV9jcml0CQlDcml0aWNhbCBjaGlwIHRlbXBlcmF0dXJlCiB0ZW1wMV9jcml0X2FsYXJtCVRlbXBlcmF0dXJlIGNyaXRpY2FsIGFsYXJtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N1Ym1pdHRpbmctcGF0Y2hlcyBiL0RvY3VtZW50YXRpb24vaHdtb24vc3VibWl0dGluZy1wYXRjaGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZjQyZTgKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N1Ym1pdHRpbmctcGF0Y2hlcwpAQCAtMCwwICsxLDEwOSBAQAorCUhvdyB0byBHZXQgWW91ciBQYXRjaCBBY2NlcHRlZCBJbnRvIHRoZSBId21vbiBTdWJzeXN0ZW0KKwktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgdGV4dCBpcyBpcyBhIGNvbGxlY3Rpb24gb2Ygc3VnZ2VzdGlvbnMgZm9yIHBlb3BsZSB3cml0aW5nIHBhdGNoZXMgb3IKK2RyaXZlcnMgZm9yIHRoZSBod21vbiBzdWJzeXN0ZW0uIEZvbGxvd2luZyB0aGVzZSBzdWdnZXN0aW9ucyB3aWxsIGdyZWF0bHkKK2luY3JlYXNlIHRoZSBjaGFuY2VzIG9mIHlvdXIgY2hhbmdlIGJlaW5nIGFjY2VwdGVkLgorCisKKzEuIEdlbmVyYWwKKy0tLS0tLS0tLS0KKworKiBJdCBzaG91bGQgYmUgdW5uZWNlc3NhcnkgdG8gbWVudGlvbiwgYnV0IHBsZWFzZSByZWFkIGFuZCBmb2xsb3cKKyAgICBEb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdAorICAgIERvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKKyAgICBEb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisgICAgRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQorCisqIElmIHlvdXIgcGF0Y2ggZ2VuZXJhdGVzIGNoZWNrcGF0Y2ggd2FybmluZ3MsIHBsZWFzZSByZWZyYWluIGZyb20gZXhwbGFuYXRpb25zCisgIHN1Y2ggYXMgIkkgZG9uJ3QgbGlrZSB0aGF0IGNvZGluZyBzdHlsZSIuIEtlZXAgaW4gbWluZCB0aGF0IGVhY2ggdW5uZWNlc3NhcnkKKyAgd2FybmluZyBoZWxwcyBoaWRpbmcgYSByZWFsIHByb2JsZW0uIElmIHlvdSBkb24ndCBsaWtlIHRoZSBrZXJuZWwgY29kaW5nCisgIHN0eWxlLCBkb24ndCB3cml0ZSBrZXJuZWwgZHJpdmVycy4KKworKiBQbGVhc2UgdGVzdCB5b3VyIHBhdGNoIHRob3JvdWdobHkuIFdlIGFyZSBub3QgeW91ciB0ZXN0IGdyb3VwLgorICBTb21ldGltZXMgYSBwYXRjaCBjYW4gbm90IG9yIG5vdCBjb21wbGV0ZWx5IGJlIHRlc3RlZCBiZWNhdXNlIG9mIG1pc3NpbmcKKyAgaGFyZHdhcmUuIEluIHN1Y2ggY2FzZXMsIHlvdSBzaG91bGQgdGVzdC1idWlsZCB0aGUgY29kZSBvbiBhdCBsZWFzdCBvbmUKKyAgYXJjaGl0ZWN0dXJlLiBJZiBydW4tdGltZSB0ZXN0aW5nIHdhcyBub3QgYWNoaWV2ZWQsIGl0IHNob3VsZCBiZSB3cml0dGVuCisgIGV4cGxpY2l0bHkgYmVsb3cgdGhlIHBhdGNoIGhlYWRlci4KKworKiBJZiB5b3VyIHBhdGNoIChvciB0aGUgZHJpdmVyKSBpcyBhZmZlY3RlZCBieSBjb25maWd1cmF0aW9uIG9wdGlvbnMgc3VjaCBhcworICBDT05GSUdfU01QIG9yIENPTkZJR19IT1RQTFVHLCBtYWtlIHN1cmUgaXQgY29tcGlsZXMgZm9yIGFsbCBjb25maWd1cmF0aW9uCisgIHZhcmlhbnRzLgorCisKKzIuIEFkZGluZyBmdW5jdGlvbmFsaXR5IHRvIGV4aXN0aW5nIGRyaXZlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKiBNYWtlIHN1cmUgdGhlIGRvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9od21vbi88ZHJpdmVyX25hbWU+IGlzIHVwIHRvCisgIGRhdGUuCisKKyogTWFrZSBzdXJlIHRoZSBpbmZvcm1hdGlvbiBpbiBLY29uZmlnIGlzIHVwIHRvIGRhdGUuCisKKyogSWYgdGhlIGFkZGVkIGZ1bmN0aW9uYWxpdHkgcmVxdWlyZXMgc29tZSBjbGVhbnVwIG9yIHN0cnVjdHVyYWwgY2hhbmdlcywgc3BsaXQKKyAgeW91ciBwYXRjaCBpbnRvIGEgY2xlYW51cCBwYXJ0IGFuZCB0aGUgYWN0dWFsIGFkZGl0aW9uLiBUaGlzIG1ha2VzIGl0IGVhc2llcgorICB0byByZXZpZXcgeW91ciBjaGFuZ2VzLCBhbmQgdG8gYmlzZWN0IGFueSByZXN1bHRpbmcgcHJvYmxlbXMuCisKKyogTmV2ZXIgbWl4IGJ1ZyBmaXhlcywgY2xlYW51cCwgYW5kIGZ1bmN0aW9uYWwgZW5oYW5jZW1lbnRzIGluIGEgc2luZ2xlIHBhdGNoLgorCisKKzMuIE5ldyBkcml2ZXJzCistLS0tLS0tLS0tLS0tLQorCisqIFJ1bm5pbmcgeW91ciBwYXRjaCBvciBkcml2ZXIgZmlsZShzKSB0aHJvdWdoIGNoZWNrcGF0Y2ggZG9lcyBub3QgbWVhbiBpdHMKKyAgZm9ybWF0dGluZyBpcyBjbGVhbi4gSWYgdW5zdXJlIGFib3V0IGZvcm1hdHRpbmcgaW4geW91ciBuZXcgZHJpdmVyLCBydW4gaXQKKyAgdGhyb3VnaCBMaW5kZW50LiBMaW5kZW50IGlzIG5vdCBwZXJmZWN0LCBhbmQgeW91IG1heSBoYXZlIHRvIGRvIHNvbWUgbWlub3IKKyAgY2xlYW51cCwgYnV0IGl0IGlzIGEgZ29vZCBzdGFydC4KKworKiBDb25zaWRlciBhZGRpbmcgeW91cnNlbGYgdG8gTUFJTlRBSU5FUlMuCisKKyogRG9jdW1lbnQgdGhlIGRyaXZlciBpbiBEb2N1bWVudGF0aW9uL2h3bW9uLzxkcml2ZXJfbmFtZT4uCisKKyogQWRkIHRoZSBkcml2ZXIgdG8gS2NvbmZpZyBhbmQgTWFrZWZpbGUgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgorCisqIE1ha2Ugc3VyZSB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgYXJlIGxpc3RlZCBpbiBLY29uZmlnLiBGb3IgbmV3IGRyaXZlcnMsIGl0CisgIGlzIG1vc3QgbGlrZWx5IHBydWRlbnQgdG8gYWRkIGEgZGVwZW5kZW5jeSBvbiBFWFBFUklNRU5UQUwuCisKKyogQXZvaWQgZm9yd2FyZCBkZWNsYXJhdGlvbnMgaWYgeW91IGNhbi4gUmVhcnJhbmdlIHRoZSBjb2RlIGlmIG5lY2Vzc2FyeS4KKworKiBBdm9pZCBjYWxjdWxhdGlvbnMgaW4gbWFjcm9zIGFuZCBtYWNyby1nZW5lcmF0ZWQgZnVuY3Rpb25zLiBXaGlsZSBzdWNoIG1hY3JvcworICBtYXkgc2F2ZSBhIGxpbmUgb3Igc28gaW4gdGhlIHNvdXJjZSwgaXQgb2JmdXNjYXRlcyB0aGUgY29kZSBhbmQgbWFrZXMgY29kZQorICByZXZpZXcgbW9yZSBkaWZmaWN1bHQuIEl0IG1heSBhbHNvIHJlc3VsdCBpbiBjb2RlIHdoaWNoIGlzIG1vcmUgY29tcGxpY2F0ZWQKKyAgdGhhbiBuZWNlc3NhcnkuIFVzZSBpbmxpbmUgZnVuY3Rpb25zIG9yIGp1c3QgcmVndWxhciBmdW5jdGlvbnMgaW5zdGVhZC4KKworKiBJZiB0aGUgZHJpdmVyIGhhcyBhIGRldGVjdCBmdW5jdGlvbiwgbWFrZSBzdXJlIGl0IGlzIHNpbGVudC4gRGVidWcgbWVzc2FnZXMKKyAgYW5kIG1lc3NhZ2VzIHByaW50ZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsIGRldGVjdGlvbiBhcmUgYWNjZXB0YWJsZSwgYnV0IGl0CisgIG11c3Qgbm90IHByaW50IG1lc3NhZ2VzIHN1Y2ggYXMgIkNoaXAgWFhYIG5vdCBmb3VuZC9zdXBwb3J0ZWQiLgorCisgIEtlZXAgaW4gbWluZCB0aGF0IHRoZSBkZXRlY3QgZnVuY3Rpb24gd2lsbCBydW4gZm9yIGFsbCBkcml2ZXJzIHN1cHBvcnRpbmcgYW4KKyAgYWRkcmVzcyBpZiBhIGNoaXAgaXMgZGV0ZWN0ZWQgb24gdGhhdCBhZGRyZXNzLiBVbm5lY2Vzc2FyeSBtZXNzYWdlcyB3aWxsIGp1c3QKKyAgcG9sbHV0ZSB0aGUga2VybmVsIGxvZyBhbmQgbm90IHByb3ZpZGUgYW55IHZhbHVlLgorCisqIFByb3ZpZGUgYSBkZXRlY3QgZnVuY3Rpb24gaWYgYW5kIG9ubHkgaWYgYSBjaGlwIGNhbiBiZSBkZXRlY3RlZCByZWxpYWJseS4KKworKiBBdm9pZCB3cml0aW5nIHRvIGNoaXAgcmVnaXN0ZXJzIGluIHRoZSBkZXRlY3QgZnVuY3Rpb24uIElmIHlvdSBoYXZlIHRvIHdyaXRlLAorICBvbmx5IGRvIGl0IGFmdGVyIHlvdSBoYXZlIGFscmVhZHkgZ2F0aGVyZWQgZW5vdWdoIGRhdGEgdG8gYmUgY2VydGFpbiB0aGF0IHRoZQorICBkZXRlY3Rpb24gaXMgZ29pbmcgdG8gYmUgc3VjY2Vzc2Z1bC4KKworICBLZWVwIGluIG1pbmQgdGhhdCB0aGUgY2hpcCBtaWdodCBub3QgYmUgd2hhdCB5b3VyIGRyaXZlciBiZWxpZXZlcyBpdCBpcywgYW5kCisgIHdyaXRpbmcgdG8gaXQgbWlnaHQgY2F1c2UgYSBiYWQgbWlzY29uZmlndXJhdGlvbi4KKworKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIHJhY2UgY29uZGl0aW9ucyBpbiB0aGUgcHJvYmUgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwKKyAgY29tcGxldGVseSBpbml0aWFsaXplIHlvdXIgY2hpcCBmaXJzdCwgdGhlbiBjcmVhdGUgc3lzZnMgZW50cmllcyBhbmQgcmVnaXN0ZXIKKyAgd2l0aCB0aGUgaHdtb24gc3Vic3lzdGVtLgorCisqIERvIG5vdCBwcm92aWRlIHN1cHBvcnQgZm9yIGRlcHJlY2F0ZWQgc3lzZnMgYXR0cmlidXRlcy4KKworKiBEbyBub3QgY3JlYXRlIG5vbi1zdGFuZGFyZCBhdHRyaWJ1dGVzIHVubGVzcyByZWFsbHkgbmVlZGVkLiBJZiB5b3UgaGF2ZSB0byB1c2UKKyAgbm9uLXN0YW5kYXJkIGF0dHJpYnV0ZXMsIG9yIHlvdSBiZWxpZXZlIHlvdSBkbywgZGlzY3VzcyBpdCBvbiB0aGUgbWFpbGluZyBsaXN0CisgIGZpcnN0LiBFaXRoZXIgY2FzZSwgcHJvdmlkZSBhIGRldGFpbGVkIGV4cGxhbmF0aW9uIHdoeSB5b3UgbmVlZCB0aGUKKyAgbm9uLXN0YW5kYXJkIGF0dHJpYnV0ZShzKS4KKyAgU3RhbmRhcmQgYXR0cmlidXRlcyBhcmUgc3BlY2lmaWVkIGluIERvY3VtZW50YXRpb24vaHdtb24vc3lzZnMtaW50ZXJmYWNlLgorCisqIFdoZW4gZGVjaWRpbmcgd2hpY2ggc3lzZnMgYXR0cmlidXRlcyB0byBzdXBwb3J0LCBsb29rIGF0IHRoZSBjaGlwJ3MKKyAgY2FwYWJpbGl0aWVzLiBXaGlsZSB3ZSBkbyBub3QgZXhwZWN0IHlvdXIgZHJpdmVyIHRvIHN1cHBvcnQgZXZlcnl0aGluZyB0aGUKKyAgY2hpcCBtYXkgb2ZmZXIsIGl0IHNob3VsZCBhdCBsZWFzdCBzdXBwb3J0IGFsbCBsaW1pdHMgYW5kIGFsYXJtcy4KKworKiBMYXN0IGJ1dCBub3QgbGVhc3QsIHBsZWFzZSBjaGVjayBpZiBhIGRyaXZlciBmb3IgeW91ciBjaGlwIGFscmVhZHkgZXhpc3RzCisgIGJlZm9yZSBzdGFydGluZyB0byB3cml0ZSBhIG5ldyBkcml2ZXIuIEVzcGVjaWFsbHkgZm9yIHRlbXBlcmF0dXJlIHNlbnNvcnMsCisgIG5ldyBjaGlwcyBhcmUgb2Z0ZW4gdmFyaWFudHMgb2YgcHJldmlvdXNseSByZWxlYXNlZCBjaGlwcy4gSW4gc29tZSBjYXNlcywKKyAgYSBwcmVzdW1hYmx5IG5ldyBjaGlwIG1heSBzaW1wbHkgaGF2ZSBiZWVuIHJlbGFiZWxlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvZXZlbnQtY29kZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9ldmVudC1jb2Rlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmY2IwNQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvZXZlbnQtY29kZXMudHh0CkBAIC0wLDAgKzEsMjYyIEBACitUaGUgaW5wdXQgcHJvdG9jb2wgdXNlcyBhIG1hcCBvZiB0eXBlcyBhbmQgY29kZXMgdG8gZXhwcmVzcyBpbnB1dCBkZXZpY2UgdmFsdWVzCit0byB1c2Vyc3BhY2UuIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSB0eXBlcyBhbmQgY29kZXMgYW5kIGhvdyBhbmQgd2hlbiB0aGV5CittYXkgYmUgdXNlZC4KKworQSBzaW5nbGUgaGFyZHdhcmUgZXZlbnQgZ2VuZXJhdGVzIG11bHRpcGxlIGlucHV0IGV2ZW50cy4gRWFjaCBpbnB1dCBldmVudAorY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiBhIHNpbmdsZSBkYXRhIGl0ZW0uIEEgc3BlY2lhbCBldmVudCB0eXBlLCBFVl9TWU4sIGlzCit1c2VkIHRvIHNlcGFyYXRlIGlucHV0IGV2ZW50cyBpbnRvIHBhY2tldHMgb2YgaW5wdXQgZGF0YSBjaGFuZ2VzIG9jY3VycmluZyBhdAordGhlIHNhbWUgbW9tZW50IGluIHRpbWUuIEluIHRoZSBmb2xsb3dpbmcsIHRoZSB0ZXJtICJldmVudCIgcmVmZXJzIHRvIGEgc2luZ2xlCitpbnB1dCBldmVudCBlbmNvbXBhc3NpbmcgYSB0eXBlLCBjb2RlLCBhbmQgdmFsdWUuCisKK1RoZSBpbnB1dCBwcm90b2NvbCBpcyBhIHN0YXRlZnVsIHByb3RvY29sLiBFdmVudHMgYXJlIGVtaXR0ZWQgb25seSB3aGVuIHZhbHVlcworb2YgZXZlbnQgY29kZXMgaGF2ZSBjaGFuZ2VkLiBIb3dldmVyLCB0aGUgc3RhdGUgaXMgbWFpbnRhaW5lZCB3aXRoaW4gdGhlIExpbnV4CitpbnB1dCBzdWJzeXN0ZW07IGRyaXZlcnMgZG8gbm90IG5lZWQgdG8gbWFpbnRhaW4gdGhlIHN0YXRlIGFuZCBtYXkgYXR0ZW1wdCB0bworZW1pdCB1bmNoYW5nZWQgdmFsdWVzIHdpdGhvdXQgaGFybS4gVXNlcnNwYWNlIG1heSBvYnRhaW4gdGhlIGN1cnJlbnQgc3RhdGUgb2YKK2V2ZW50IGNvZGUgdmFsdWVzIHVzaW5nIHRoZSBFVklPQ0cqIGlvY3RscyBkZWZpbmVkIGluIGxpbnV4L2lucHV0LmguIFRoZSBldmVudAorcmVwb3J0cyBzdXBwb3J0ZWQgYnkgYSBkZXZpY2UgYXJlIGFsc28gcHJvdmlkZWQgYnkgc3lzZnMgaW4KK2NsYXNzL2lucHV0L2V2ZW50Ki9kZXZpY2UvY2FwYWJpbGl0aWVzLywgYW5kIHRoZSBwcm9wZXJ0aWVzIG9mIGEgZGV2aWNlIGFyZQorcHJvdmlkZWQgaW4gY2xhc3MvaW5wdXQvZXZlbnQqL2RldmljZS9wcm9wZXJ0aWVzLgorCitUeXBlczoKKz09PT09PT09PT0KK1R5cGVzIGFyZSBncm91cGluZ3Mgb2YgY29kZXMgdW5kZXIgYSBsb2dpY2FsIGlucHV0IGNvbnN0cnVjdC4gRWFjaCB0eXBlIGhhcyBhCitzZXQgb2YgYXBwbGljYWJsZSBjb2RlcyB0byBiZSB1c2VkIGluIGdlbmVyYXRpbmcgZXZlbnRzLiBTZWUgdGhlIENvZGVzIHNlY3Rpb24KK2ZvciBkZXRhaWxzIG9uIHZhbGlkIGNvZGVzIGZvciBlYWNoIHR5cGUuCisKKyogRVZfU1lOOgorICAtIFVzZWQgYXMgbWFya2VycyB0byBzZXBhcmF0ZSBldmVudHMuIEV2ZW50cyBtYXkgYmUgc2VwYXJhdGVkIGluIHRpbWUgb3IgaW4KKyAgICBzcGFjZSwgc3VjaCBhcyB3aXRoIHRoZSBtdWx0aXRvdWNoIHByb3RvY29sLgorCisqIEVWX0tFWToKKyAgLSBVc2VkIHRvIGRlc2NyaWJlIHN0YXRlIGNoYW5nZXMgb2Yga2V5Ym9hcmRzLCBidXR0b25zLCBvciBvdGhlciBrZXktbGlrZQorICAgIGRldmljZXMuCisKKyogRVZfUkVMOgorICAtIFVzZWQgdG8gZGVzY3JpYmUgcmVsYXRpdmUgYXhpcyB2YWx1ZSBjaGFuZ2VzLCBlLmcuIG1vdmluZyB0aGUgbW91c2UgNSB1bml0cworICAgIHRvIHRoZSBsZWZ0LgorCisqIEVWX0FCUzoKKyAgLSBVc2VkIHRvIGRlc2NyaWJlIGFic29sdXRlIGF4aXMgdmFsdWUgY2hhbmdlcywgZS5nLiBkZXNjcmliaW5nIHRoZQorICAgIGNvb3JkaW5hdGVzIG9mIGEgdG91Y2ggb24gYSB0b3VjaHNjcmVlbi4KKworKiBFVl9NU0M6CisgIC0gVXNlZCB0byBkZXNjcmliZSBtaXNjZWxsYW5lb3VzIGlucHV0IGRhdGEgdGhhdCBkbyBub3QgZml0IGludG8gb3RoZXIgdHlwZXMuCisKKyogRVZfU1c6CisgIC0gVXNlZCB0byBkZXNjcmliZSBiaW5hcnkgc3RhdGUgaW5wdXQgc3dpdGNoZXMuCisKKyogRVZfTEVEOgorICAtIFVzZWQgdG8gdHVybiBMRURzIG9uIGRldmljZXMgb24gYW5kIG9mZi4KKworKiBFVl9TTkQ6CisgIC0gVXNlZCB0byBvdXRwdXQgc291bmQgdG8gZGV2aWNlcy4KKworKiBFVl9SRVA6CisgIC0gVXNlZCBmb3IgYXV0b3JlcGVhdGluZyBkZXZpY2VzLgorCisqIEVWX0ZGOgorICAtIFVzZWQgdG8gc2VuZCBmb3JjZSBmZWVkYmFjayBjb21tYW5kcyB0byBhbiBpbnB1dCBkZXZpY2UuCisKKyogRVZfUFdSOgorICAtIEEgc3BlY2lhbCB0eXBlIGZvciBwb3dlciBidXR0b24gYW5kIHN3aXRjaCBpbnB1dC4KKworKiBFVl9GRl9TVEFUVVM6CisgIC0gVXNlZCB0byByZWNlaXZlIGZvcmNlIGZlZWRiYWNrIGRldmljZSBzdGF0dXMuCisKK0NvZGVzOgorPT09PT09PT09PQorQ29kZXMgZGVmaW5lIHRoZSBwcmVjaXNlIHR5cGUgb2YgZXZlbnQuCisKK0VWX1NZTjoKKy0tLS0tLS0tLS0KK0VWX1NZTiBldmVudCB2YWx1ZXMgYXJlIHVuZGVmaW5lZC4gVGhlaXIgdXNhZ2UgaXMgZGVmaW5lZCBvbmx5IGJ5IHdoZW4gdGhleSBhcmUKK3NlbnQgaW4gdGhlIGV2ZGV2IGV2ZW50IHN0cmVhbS4KKworKiBTWU5fUkVQT1JUOgorICAtIFVzZWQgdG8gc3luY2hyb25pemUgYW5kIHNlcGFyYXRlIGV2ZW50cyBpbnRvIHBhY2tldHMgb2YgaW5wdXQgZGF0YSBjaGFuZ2VzCisgICAgb2NjdXJyaW5nIGF0IHRoZSBzYW1lIG1vbWVudCBpbiB0aW1lLiBGb3IgZXhhbXBsZSwgbW90aW9uIG9mIGEgbW91c2UgbWF5IHNldAorICAgIHRoZSBSRUxfWCBhbmQgUkVMX1kgdmFsdWVzIGZvciBvbmUgbW90aW9uLCB0aGVuIGVtaXQgYSBTWU5fUkVQT1JULiBUaGUgbmV4dAorICAgIG1vdGlvbiB3aWxsIGVtaXQgbW9yZSBSRUxfWCBhbmQgUkVMX1kgdmFsdWVzIGFuZCBzZW5kIGFub3RoZXIgU1lOX1JFUE9SVC4KKworKiBTWU5fQ09ORklHOgorICAtIFRCRAorCisqIFNZTl9NVF9SRVBPUlQ6CisgIC0gVXNlZCB0byBzeW5jaHJvbml6ZSBhbmQgc2VwYXJhdGUgdG91Y2ggZXZlbnRzLiBTZWUgdGhlCisgICAgbXVsdGktdG91Y2gtcHJvdG9jb2wudHh0IGRvY3VtZW50IGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisqIFNZTl9EUk9QUEVEOgorICAtIFVzZWQgdG8gaW5kaWNhdGUgYnVmZmVyIG92ZXJydW4gaW4gdGhlIGV2ZGV2IGNsaWVudCdzIGV2ZW50IHF1ZXVlLgorICAgIENsaWVudCBzaG91bGQgaWdub3JlIGFsbCBldmVudHMgdXAgdG8gYW5kIGluY2x1ZGluZyBuZXh0IFNZTl9SRVBPUlQKKyAgICBldmVudCBhbmQgcXVlcnkgdGhlIGRldmljZSAodXNpbmcgRVZJT0NHKiBpb2N0bHMpIHRvIG9idGFpbiBpdHMKKyAgICBjdXJyZW50IHN0YXRlLgorCitFVl9LRVk6CistLS0tLS0tLS0tCitFVl9LRVkgZXZlbnRzIHRha2UgdGhlIGZvcm0gS0VZXzxuYW1lPiBvciBCVE5fPG5hbWU+LiBGb3IgZXhhbXBsZSwgS0VZX0EgaXMgdXNlZAordG8gcmVwcmVzZW50IHRoZSAnQScga2V5IG9uIGEga2V5Ym9hcmQuIFdoZW4gYSBrZXkgaXMgZGVwcmVzc2VkLCBhbiBldmVudCB3aXRoCit0aGUga2V5J3MgY29kZSBpcyBlbWl0dGVkIHdpdGggdmFsdWUgMS4gV2hlbiB0aGUga2V5IGlzIHJlbGVhc2VkLCBhbiBldmVudCBpcworZW1pdHRlZCB3aXRoIHZhbHVlIDAuIFNvbWUgaGFyZHdhcmUgc2VuZCBldmVudHMgd2hlbiBhIGtleSBpcyByZXBlYXRlZC4gVGhlc2UKK2V2ZW50cyBoYXZlIGEgdmFsdWUgb2YgMi4gSW4gZ2VuZXJhbCwgS0VZXzxuYW1lPiBpcyB1c2VkIGZvciBrZXlib2FyZCBrZXlzLCBhbmQKK0JUTl88bmFtZT4gaXMgdXNlZCBmb3Igb3RoZXIgdHlwZXMgb2YgbW9tZW50YXJ5IHN3aXRjaCBldmVudHMuCisKK0EgZmV3IEVWX0tFWSBjb2RlcyBoYXZlIHNwZWNpYWwgbWVhbmluZ3M6CisKKyogQlROX1RPT0xfPG5hbWU+OgorICAtIFRoZXNlIGNvZGVzIGFyZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggaW5wdXQgdHJhY2twYWRzLCB0YWJsZXRzLCBhbmQKKyAgICB0b3VjaHNjcmVlbnMuIFRoZXNlIGRldmljZXMgbWF5IGJlIHVzZWQgd2l0aCBmaW5nZXJzLCBwZW5zLCBvciBvdGhlciB0b29scy4KKyAgICBXaGVuIGFuIGV2ZW50IG9jY3VycyBhbmQgYSB0b29sIGlzIHVzZWQsIHRoZSBjb3JyZXNwb25kaW5nIEJUTl9UT09MXzxuYW1lPgorICAgIGNvZGUgc2hvdWxkIGJlIHNldCB0byBhIHZhbHVlIG9mIDEuIFdoZW4gdGhlIHRvb2wgaXMgbm8gbG9uZ2VyIGludGVyYWN0aW5nCisgICAgd2l0aCB0aGUgaW5wdXQgZGV2aWNlLCB0aGUgQlROX1RPT0xfPG5hbWU+IGNvZGUgc2hvdWxkIGJlIHJlc2V0IHRvIDAuIEFsbAorICAgIHRyYWNrcGFkcywgdGFibGV0cywgYW5kIHRvdWNoc2NyZWVucyBzaG91bGQgdXNlIGF0IGxlYXN0IG9uZSBCVE5fVE9PTF88bmFtZT4KKyAgICBjb2RlIHdoZW4gZXZlbnRzIGFyZSBnZW5lcmF0ZWQuCisKKyogQlROX1RPVUNIOgorICAgIEJUTl9UT1VDSCBpcyB1c2VkIGZvciB0b3VjaCBjb250YWN0LiBXaGlsZSBhbiBpbnB1dCB0b29sIGlzIGRldGVybWluZWQgdG8gYmUKKyAgICB3aXRoaW4gbWVhbmluZ2Z1bCBwaHlzaWNhbCBjb250YWN0LCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eSBtdXN0IGJlIHNldAorICAgIHRvIDEuIE1lYW5pbmdmdWwgcGh5c2ljYWwgY29udGFjdCBtYXkgbWVhbiBhbnkgY29udGFjdCwgb3IgaXQgbWF5IG1lYW4KKyAgICBjb250YWN0IGNvbmRpdGlvbmVkIGJ5IGFuIGltcGxlbWVudGF0aW9uIGRlZmluZWQgcHJvcGVydHkuIEZvciBleGFtcGxlLCBhCisgICAgdG91Y2hwYWQgbWF5IHNldCB0aGUgdmFsdWUgdG8gMSBvbmx5IHdoZW4gdGhlIHRvdWNoIHByZXNzdXJlIHJpc2VzIGFib3ZlIGEKKyAgICBjZXJ0YWluIHZhbHVlLiBCVE5fVE9VQ0ggbWF5IGJlIGNvbWJpbmVkIHdpdGggQlROX1RPT0xfPG5hbWU+IGNvZGVzLiBGb3IKKyAgICBleGFtcGxlLCBhIHBlbiB0YWJsZXQgbWF5IHNldCBCVE5fVE9PTF9QRU4gdG8gMSBhbmQgQlROX1RPVUNIIHRvIDAgd2hpbGUgdGhlCisgICAgcGVuIGlzIGhvdmVyaW5nIG92ZXIgYnV0IG5vdCB0b3VjaGluZyB0aGUgdGFibGV0IHN1cmZhY2UuCisKK05vdGU6IEZvciBhcHByb3ByaWF0ZSBmdW5jdGlvbiBvZiB0aGUgbGVnYWN5IG1vdXNlZGV2IGVtdWxhdGlvbiBkcml2ZXIsCitCVE5fVE9VQ0ggbXVzdCBiZSB0aGUgZmlyc3QgZXZkZXYgY29kZSBlbWl0dGVkIGluIGEgc3luY2hyb25pemF0aW9uIGZyYW1lLgorCitOb3RlOiBIaXN0b3JpY2FsbHkgYSB0b3VjaCBkZXZpY2Ugd2l0aCBCVE5fVE9PTF9GSU5HRVIgYW5kIEJUTl9UT1VDSCB3YXMKK2ludGVycHJldGVkIGFzIGEgdG91Y2hwYWQgYnkgdXNlcnNwYWNlLCB3aGlsZSBhIHNpbWlsYXIgZGV2aWNlIHdpdGhvdXQKK0JUTl9UT09MX0ZJTkdFUiB3YXMgaW50ZXJwcmV0ZWQgYXMgYSB0b3VjaHNjcmVlbi4gRm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Cit3aXRoIGN1cnJlbnQgdXNlcnNwYWNlIGl0IGlzIHJlY29tbWVuZGVkIHRvIGZvbGxvdyB0aGlzIGRpc3RpbmN0aW9uLiBJbiB0aGUKK2Z1dHVyZSwgdGhpcyBkaXN0aW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0ZWQgYW5kIHRoZSBkZXZpY2UgcHJvcGVydGllcyBpb2N0bAorRVZJT0NHUFJPUCwgZGVmaW5lZCBpbiBsaW51eC9pbnB1dC5oLCB3aWxsIGJlIHVzZWQgdG8gY29udmV5IHRoZSBkZXZpY2UgdHlwZS4KKworKiBCVE5fVE9PTF9GSU5HRVIsIEJUTl9UT09MX0RPVUJMRVRBUCwgQlROX1RPT0xfVFJJUExFVEFQLCBCVE5fVE9PTF9RVUFEVEFQOgorICAtIFRoZXNlIGNvZGVzIGRlbm90ZSBvbmUsIHR3bywgdGhyZWUsIGFuZCBmb3VyIGZpbmdlciBpbnRlcmFjdGlvbiBvbiBhCisgICAgdHJhY2twYWQgb3IgdG91Y2hzY3JlZW4uIEZvciBleGFtcGxlLCBpZiB0aGUgdXNlciB1c2VzIHR3byBmaW5nZXJzIGFuZCBtb3ZlcworICAgIHRoZW0gb24gdGhlIHRvdWNocGFkIGluIGFuIGVmZm9ydCB0byBzY3JvbGwgY29udGVudCBvbiBzY3JlZW4sCisgICAgQlROX1RPT0xfRE9VQkxFVEFQIHNob3VsZCBiZSBzZXQgdG8gdmFsdWUgMSBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBtb3Rpb24uCisgICAgTm90ZSB0aGF0IGFsbCBCVE5fVE9PTF88bmFtZT4gY29kZXMgYW5kIHRoZSBCVE5fVE9VQ0ggY29kZSBhcmUgb3J0aG9nb25hbCBpbgorICAgIHB1cnBvc2UuIEEgdHJhY2twYWQgZXZlbnQgZ2VuZXJhdGVkIGJ5IGZpbmdlciB0b3VjaGVzIHNob3VsZCBnZW5lcmF0ZSBldmVudHMKKyAgICBmb3Igb25lIGNvZGUgZnJvbSBlYWNoIGdyb3VwLiBBdCBtb3N0IG9ubHkgb25lIG9mIHRoZXNlIEJUTl9UT09MXzxuYW1lPgorICAgIGNvZGVzIHNob3VsZCBoYXZlIGEgdmFsdWUgb2YgMSBkdXJpbmcgYW55IHN5bmNocm9uaXphdGlvbiBmcmFtZS4KKworTm90ZTogSGlzdG9yaWNhbGx5IHNvbWUgZHJpdmVycyBlbWl0dGVkIG11bHRpcGxlIG9mIHRoZSBmaW5nZXIgY291bnQgY29kZXMgd2l0aAorYSB2YWx1ZSBvZiAxIGluIHRoZSBzYW1lIHN5bmNocm9uaXphdGlvbiBmcmFtZS4gVGhpcyB1c2FnZSBpcyBkZXByZWNhdGVkLgorCitOb3RlOiBJbiBtdWx0aXRvdWNoIGRyaXZlcnMsIHRoZSBpbnB1dF9tdF9yZXBvcnRfZmluZ2VyX2NvdW50KCkgZnVuY3Rpb24gc2hvdWxkCitiZSB1c2VkIHRvIGVtaXQgdGhlc2UgY29kZXMuIFBsZWFzZSBzZWUgbXVsdGktdG91Y2gtcHJvdG9jb2wudHh0IGZvciBkZXRhaWxzLgorCitFVl9SRUw6CistLS0tLS0tLS0tCitFVl9SRUwgZXZlbnRzIGRlc2NyaWJlIHJlbGF0aXZlIGNoYW5nZXMgaW4gYSBwcm9wZXJ0eS4gRm9yIGV4YW1wbGUsIGEgbW91c2UgbWF5Cittb3ZlIHRvIHRoZSBsZWZ0IGJ5IGEgY2VydGFpbiBudW1iZXIgb2YgdW5pdHMsIGJ1dCBpdHMgYWJzb2x1dGUgcG9zaXRpb24gaW4KK3NwYWNlIGlzIHVua25vd24uIElmIHRoZSBhYnNvbHV0ZSBwb3NpdGlvbiBpcyBrbm93biwgRVZfQUJTIGNvZGVzIHNob3VsZCBiZSB1c2VkCitpbnN0ZWFkIG9mIEVWX1JFTCBjb2Rlcy4KKworQSBmZXcgRVZfUkVMIGNvZGVzIGhhdmUgc3BlY2lhbCBtZWFuaW5nczoKKworKiBSRUxfV0hFRUwsIFJFTF9IV0hFRUw6CisgIC0gVGhlc2UgY29kZXMgYXJlIHVzZWQgZm9yIHZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHNjcm9sbCB3aGVlbHMsCisgICAgcmVzcGVjdGl2ZWx5LgorCitFVl9BQlM6CistLS0tLS0tLS0tCitFVl9BQlMgZXZlbnRzIGRlc2NyaWJlIGFic29sdXRlIGNoYW5nZXMgaW4gYSBwcm9wZXJ0eS4gRm9yIGV4YW1wbGUsIGEgdG91Y2hwYWQKK21heSBlbWl0IGNvb3JkaW5hdGVzIGZvciBhIHRvdWNoIGxvY2F0aW9uLgorCitBIGZldyBFVl9BQlMgY29kZXMgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzOgorCisqIEFCU19ESVNUQU5DRToKKyAgLSBVc2VkIHRvIGRlc2NyaWJlIHRoZSBkaXN0YW5jZSBvZiBhIHRvb2wgZnJvbSBhbiBpbnRlcmFjdGlvbiBzdXJmYWNlLiBUaGlzCisgICAgZXZlbnQgc2hvdWxkIG9ubHkgYmUgZW1pdHRlZCB3aGlsZSB0aGUgdG9vbCBpcyBob3ZlcmluZywgbWVhbmluZyBpbiBjbG9zZQorICAgIHByb3hpbWl0eSBvZiB0aGUgZGV2aWNlIGFuZCB3aGlsZSB0aGUgdmFsdWUgb2YgdGhlIEJUTl9UT1VDSCBjb2RlIGlzIDAuIElmCisgICAgdGhlIGlucHV0IGRldmljZSBtYXkgYmUgdXNlZCBmcmVlbHkgaW4gdGhyZWUgZGltZW5zaW9ucywgY29uc2lkZXIgQUJTX1oKKyAgICBpbnN0ZWFkLgorCisqIEFCU19NVF88bmFtZT46CisgIC0gVXNlZCB0byBkZXNjcmliZSBtdWx0aXRvdWNoIGlucHV0IGV2ZW50cy4gUGxlYXNlIHNlZQorICAgIG11bHRpLXRvdWNoLXByb3RvY29sLnR4dCBmb3IgZGV0YWlscy4KKworRVZfU1c6CistLS0tLS0tLS0tCitFVl9TVyBldmVudHMgZGVzY3JpYmUgc3RhdGVmdWwgYmluYXJ5IHN3aXRjaGVzLiBGb3IgZXhhbXBsZSwgdGhlIFNXX0xJRCBjb2RlIGlzCit1c2VkIHRvIGRlbm90ZSB3aGVuIGEgbGFwdG9wIGxpZCBpcyBjbG9zZWQuCisKK1Vwb24gYmluZGluZyB0byBhIGRldmljZSBvciByZXN1bWluZyBmcm9tIHN1c3BlbmQsIGEgZHJpdmVyIG11c3QgcmVwb3J0Cit0aGUgY3VycmVudCBzd2l0Y2ggc3RhdGUuIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBkZXZpY2UsIGtlcm5lbCwgYW5kIHVzZXJzcGFjZQorc3RhdGUgaXMgaW4gc3luYy4KKworVXBvbiByZXN1bWUsIGlmIHRoZSBzd2l0Y2ggc3RhdGUgaXMgdGhlIHNhbWUgYXMgYmVmb3JlIHN1c3BlbmQsIHRoZW4gdGhlIGlucHV0CitzdWJzeXN0ZW0gd2lsbCBmaWx0ZXIgb3V0IHRoZSBkdXBsaWNhdGUgc3dpdGNoIHN0YXRlIHJlcG9ydHMuIFRoZSBkcml2ZXIgZG9lcworbm90IG5lZWQgdG8ga2VlcCB0aGUgc3RhdGUgb2YgdGhlIHN3aXRjaCBhdCBhbnkgdGltZS4KKworRVZfTVNDOgorLS0tLS0tLS0tLQorRVZfTVNDIGV2ZW50cyBhcmUgdXNlZCBmb3IgaW5wdXQgYW5kIG91dHB1dCBldmVudHMgdGhhdCBkbyBub3QgZmFsbCB1bmRlciBvdGhlcgorY2F0ZWdvcmllcy4KKworRVZfTEVEOgorLS0tLS0tLS0tLQorRVZfTEVEIGV2ZW50cyBhcmUgdXNlZCBmb3IgaW5wdXQgYW5kIG91dHB1dCB0byBzZXQgYW5kIHF1ZXJ5IHRoZSBzdGF0ZSBvZgordmFyaW91cyBMRURzIG9uIGRldmljZXMuCisKK0VWX1JFUDoKKy0tLS0tLS0tLS0KK0VWX1JFUCBldmVudHMgYXJlIHVzZWQgZm9yIHNwZWNpZnlpbmcgYXV0b3JlcGVhdGluZyBldmVudHMuCisKK0VWX1NORDoKKy0tLS0tLS0tLS0KK0VWX1NORCBldmVudHMgYXJlIHVzZWQgZm9yIHNlbmRpbmcgc291bmQgY29tbWFuZHMgdG8gc2ltcGxlIHNvdW5kIG91dHB1dAorZGV2aWNlcy4KKworRVZfRkY6CistLS0tLS0tLS0tCitFVl9GRiBldmVudHMgYXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBhIGZvcmNlIGZlZWRiYWNrIGNhcGFibGUgZGV2aWNlIGFuZCB0byBjYXVzZQorc3VjaCBkZXZpY2UgdG8gZmVlZGJhY2suCisKK0VWX1BXUjoKKy0tLS0tLS0tLS0KK0VWX1BXUiBldmVudHMgYXJlIGEgc3BlY2lhbCB0eXBlIG9mIGV2ZW50IHVzZWQgc3BlY2lmaWNhbGx5IGZvciBwb3dlcgorbWFuZ2VtZW50LiBJdHMgdXNhZ2UgaXMgbm90IHdlbGwgZGVmaW5lZC4gVG8gYmUgYWRkcmVzc2VkIGxhdGVyLgorCitHdWlkZWxpbmVzOgorPT09PT09PT09PQorVGhlIGd1aWRlbGluZXMgYmVsb3cgZW5zdXJlIHByb3BlciBzaW5nbGUtdG91Y2ggYW5kIG11bHRpLWZpbmdlciBmdW5jdGlvbmFsaXR5LgorRm9yIG11bHRpLXRvdWNoIGZ1bmN0aW9uYWxpdHksIHNlZSB0aGUgbXVsdGktdG91Y2gtcHJvdG9jb2wudHh0IGRvY3VtZW50IGZvcgorbW9yZSBpbmZvcm1hdGlvbi4KKworTWljZToKKy0tLS0tLS0tLS0KK1JFTF97WCxZfSBtdXN0IGJlIHJlcG9ydGVkIHdoZW4gdGhlIG1vdXNlIG1vdmVzLiBCVE5fTEVGVCBtdXN0IGJlIHVzZWQgdG8gcmVwb3J0Cit0aGUgcHJpbWFyeSBidXR0b24gcHJlc3MuIEJUTl97TUlERExFLFJJR0hULDQsNSxldGMufSBzaG91bGQgYmUgdXNlZCB0byByZXBvcnQKK2Z1cnRoZXIgYnV0dG9ucyBvZiB0aGUgZGV2aWNlLiBSRUxfV0hFRUwgYW5kIFJFTF9IV0hFRUwgc2hvdWxkIGJlIHVzZWQgdG8gcmVwb3J0CitzY3JvbGwgd2hlZWwgZXZlbnRzIHdoZXJlIGF2YWlsYWJsZS4KKworVG91Y2hzY3JlZW5zOgorLS0tLS0tLS0tLQorQUJTX3tYLFl9IG11c3QgYmUgcmVwb3J0ZWQgd2l0aCB0aGUgbG9jYXRpb24gb2YgdGhlIHRvdWNoLiBCVE5fVE9VQ0ggbXVzdCBiZQordXNlZCB0byByZXBvcnQgd2hlbiBhIHRvdWNoIGlzIGFjdGl2ZSBvbiB0aGUgc2NyZWVuLgorQlROX3tNT1VTRSxMRUZULE1JRERMRSxSSUdIVH0gbXVzdCBub3QgYmUgcmVwb3J0ZWQgYXMgdGhlIHJlc3VsdCBvZiB0b3VjaAorY29udGFjdC4gQlROX1RPT0xfPG5hbWU+IGV2ZW50cyBzaG91bGQgYmUgcmVwb3J0ZWQgd2hlcmUgcG9zc2libGUuCisKK1RyYWNrcGFkczoKKy0tLS0tLS0tLS0KK0xlZ2FjeSB0cmFja3BhZHMgdGhhdCBvbmx5IHByb3ZpZGUgcmVsYXRpdmUgcG9zaXRpb24gaW5mb3JtYXRpb24gbXVzdCByZXBvcnQKK2V2ZW50cyBsaWtlIG1pY2UgZGVzY3JpYmVkIGFib3ZlLgorCitUcmFja3BhZHMgdGhhdCBwcm92aWRlIGFic29sdXRlIHRvdWNoIHBvc2l0aW9uIG11c3QgcmVwb3J0IEFCU197WCxZfSBmb3IgdGhlCitsb2NhdGlvbiBvZiB0aGUgdG91Y2guIEJUTl9UT1VDSCBzaG91bGQgYmUgdXNlZCB0byByZXBvcnQgd2hlbiBhIHRvdWNoIGlzIGFjdGl2ZQorb24gdGhlIHRyYWNrcGFkLiBXaGVyZSBtdWx0aS1maW5nZXIgc3VwcG9ydCBpcyBhdmFpbGFibGUsIEJUTl9UT09MXzxuYW1lPiBzaG91bGQKK2JlIHVzZWQgdG8gcmVwb3J0IHRoZSBudW1iZXIgb2YgdG91Y2hlcyBhY3RpdmUgb24gdGhlIHRyYWNrcGFkLgorCitUYWJsZXRzOgorLS0tLS0tLS0tLQorQlROX1RPT0xfPG5hbWU+IGV2ZW50cyBtdXN0IGJlIHJlcG9ydGVkIHdoZW4gYSBzdHlsdXMgb3Igb3RoZXIgdG9vbCBpcyBhY3RpdmUgb24KK3RoZSB0YWJsZXQuIEFCU197WCxZfSBtdXN0IGJlIHJlcG9ydGVkIHdpdGggdGhlIGxvY2F0aW9uIG9mIHRoZSB0b29sLiBCVE5fVE9VQ0gKK3Nob3VsZCBiZSB1c2VkIHRvIHJlcG9ydCB3aGVuIHRoZSB0b29sIGlzIGluIGNvbnRhY3Qgd2l0aCB0aGUgdGFibGV0LgorQlROX3tTVFlMVVMsU1RZTFVTMn0gc2hvdWxkIGJlIHVzZWQgdG8gcmVwb3J0IGJ1dHRvbnMgb24gdGhlIHRvb2wgaXRzZWxmLiBBbnkKK2J1dHRvbiBtYXkgYmUgdXNlZCBmb3IgYnV0dG9ucyBvbiB0aGUgdGFibGV0IGV4Y2VwdCBCVE5fe01PVVNFLExFRlR9LgorQlROX3swLDEsMixldGN9IGFyZSBnb29kIGdlbmVyaWMgY29kZXMgZm9yIHVubGFiZWxlZCBidXR0b25zLiBEbyBub3QgdXNlCittZWFuaW5nZnVsIGJ1dHRvbnMsIGxpa2UgQlROX0ZPUldBUkQsIHVubGVzcyB0aGUgYnV0dG9uIGlzIGxhYmVsZWQgZm9yIHRoYXQKK3B1cnBvc2Ugb24gdGhlIGRldmljZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggY2M4NWE5Mi4uMjU5MDM3YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiAJYWNwaV9zbGVlcD0JW0hXLEFDUEldIFNsZWVwIG9wdGlvbnMKIAkJCUZvcm1hdDogeyBzM19iaW9zLCBzM19tb2RlLCBzM19iZWVwLCBzNF9ub2h3c2lnLAotCQkJCSAgb2xkX29yZGVyaW5nLCBzNF9ub252cywgc2NpX2ZvcmNlX2VuYWJsZSB9CisJCQkJICBvbGRfb3JkZXJpbmcsIG5vbnZzLCBzY2lfZm9yY2VfZW5hYmxlIH0KIAkJCVNlZSBEb2N1bWVudGF0aW9uL3Bvd2VyL3ZpZGVvLnR4dCBmb3IgaW5mb3JtYXRpb24gb24KIAkJCXMzX2Jpb3MgYW5kIHMzX21vZGUuCiAJCQlzM19iZWVwIGlzIGZvciBkZWJ1Z2dpbmc7IGl0IG1ha2VzIHRoZSBQQydzIHNwZWFrZXIgYmVlcApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tZC50eHQgYi9Eb2N1bWVudGF0aW9uL21kLnR4dAppbmRleCBhODFjN2I0Li4yMzY2YjFjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL21kLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL21kLnR4dApAQCAtNTUyLDYgKzU1MiwxNiBAQAogICAgICB3aXRoaW4gdGhlIGFycmF5IHdoZXJlIElPIHdpbGwgYmUgYmxvY2tlZC4gIFRoaXMgaXMgY3VycmVudGx5CiAgICAgIG9ubHkgc3VwcG9ydGVkIGZvciByYWlkNC81LzYuCiAKKyAgIHN5bmNfbWluCisgICBzeW5jX21heAorICAgICBUaGUgdHdvIHZhbHVlcywgZ2l2ZW4gYXMgbnVtYmVycyBvZiBzZWN0b3JzLCBpbmRpY2F0ZSBhIHJhbmdlCisgICAgIHdpdGhpbmcgdGhlIGFycmF5IHdoZXJlICdjaGVjaycvJ3JlcGFpcicgd2lsbCBvcGVyYXRlLiBNdXN0IGJlCisgICAgIGEgbXVsdGlwbGUgb2YgY2h1bmtfc2l6ZS4gV2hlbiBpdCByZWFjaGVzICJzeW5jX21heCIgaXQgd2lsbAorICAgICBwYXVzZSwgcmF0aGVyIHRoYW4gY29tcGxldGUuCisgICAgIFlvdSBjYW4gdXNlICdzZWxlY3QnIG9yICdwb2xsJyBvbiAic3luY19jb21wbGV0ZWQiIHRvIHdhaXQgZm9yCisgICAgIHRoYXQgbnVtYmVyIHRvIHJlYWNoIHN5bmNfbWF4LiAgVGhlbiB5b3UgY2FuIGVpdGhlciBpbmNyZWFzZQorICAgICAic3luY19tYXgiLCBvciBjYW4gd3JpdGUgJ2lkbGUnIHRvICJzeW5jX2FjdGlvbiIuCisKIAogRWFjaCBhY3RpdmUgbWQgZGV2aWNlIG1heSBhbHNvIGhhdmUgYXR0cmlidXRlcyBzcGVjaWZpYyB0byB0aGUKIHBlcnNvbmFsaXR5IG1vZHVsZSB0aGF0IG1hbmFnZXMgaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlci9kZXZpY2VzLnR4dAppbmRleCAxOTcxYmNmLi44ODg4MDgzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXIvZGV2aWNlcy50eHQKQEAgLTI3OSwxMSArMjc5LDE1IEBACiAJdGltZS4pICBVbmxpa2UgdGhlIG90aGVyIHN1c3BlbmQtcmVsYXRlZCBwaGFzZXMsIGR1cmluZyB0aGUgcHJlcGFyZQogCXBoYXNlIHRoZSBkZXZpY2UgdHJlZSBpcyB0cmF2ZXJzZWQgdG9wLWRvd24uCiAKLQlUaGUgcHJlcGFyZSBwaGFzZSB1c2VzIG9ubHkgYSBidXMgY2FsbGJhY2suICBBZnRlciB0aGUgY2FsbGJhY2sgbWV0aG9kCi0JcmV0dXJucywgbm8gbmV3IGNoaWxkcmVuIG1heSBiZSByZWdpc3RlcmVkIGJlbG93IHRoZSBkZXZpY2UuICBUaGUgbWV0aG9kCi0JbWF5IGFsc28gcHJlcGFyZSB0aGUgZGV2aWNlIG9yIGRyaXZlciBpbiBzb21lIHdheSBmb3IgdGhlIHVwY29taW5nCi0Jc3lzdGVtIHBvd2VyIHRyYW5zaXRpb24sIGJ1dCBpdCBzaG91bGQgbm90IHB1dCB0aGUgZGV2aWNlIGludG8gYQotCWxvdy1wb3dlciBzdGF0ZS4KKwlJbiBhZGRpdGlvbiB0byB0aGF0LCBpZiBkZXZpY2UgZHJpdmVycyBuZWVkIHRvIGFsbG9jYXRlIGFkZGl0aW9uYWwKKwltZW1vcnkgdG8gYmUgYWJsZSB0byBoYWRsZSBkZXZpY2Ugc3VzcGVuZCBjb3JyZWN0bHksIHRoYXQgc2hvdWxkIGJlCisJZG9uZSBpbiB0aGUgcHJlcGFyZSBwaGFzZS4KKworCUFmdGVyIHRoZSBwcmVwYXJlIGNhbGxiYWNrIG1ldGhvZCByZXR1cm5zLCBubyBuZXcgY2hpbGRyZW4gbWF5IGJlCisJcmVnaXN0ZXJlZCBiZWxvdyB0aGUgZGV2aWNlLiAgVGhlIG1ldGhvZCBtYXkgYWxzbyBwcmVwYXJlIHRoZSBkZXZpY2Ugb3IKKwlkcml2ZXIgaW4gc29tZSB3YXkgZm9yIHRoZSB1cGNvbWluZyBzeXN0ZW0gcG93ZXIgdHJhbnNpdGlvbiAoZm9yCisJZXhhbXBsZSwgYnkgYWxsb2NhdGluZyBhZGRpdGlvbmFsIG1lbW9yeSByZXF1aXJlZCBmb3IgdGhpcyBwdXJwb3NlKSwgYnV0CisJaXQgc2hvdWxkIG5vdCBwdXQgdGhlIGRldmljZSBpbnRvIGEgbG93LXBvd2VyIHN0YXRlLgogCiAgICAgMi4JVGhlIHN1c3BlbmQgbWV0aG9kcyBzaG91bGQgcXVpZXNjZSB0aGUgZGV2aWNlIHRvIHN0b3AgaXQgZnJvbSBwZXJmb3JtaW5nCiAJSS9PLiAgVGhleSBhbHNvIG1heSBzYXZlIHRoZSBkZXZpY2UgcmVnaXN0ZXJzIGFuZCBwdXQgaXQgaW50byB0aGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvbm90aWZpZXJzLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXIvbm90aWZpZXJzLnR4dAppbmRleCBjZjk4MDcwLi5jMmE0YTM0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VyL25vdGlmaWVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ub3RpZmllcnMudHh0CkBAIC0xLDQ2ICsxLDQxIEBACiBTdXNwZW5kIG5vdGlmaWVycwotCShDKSAyMDA3IFJhZmFlbCBKLiBXeXNvY2tpIDxyandAc2lzay5wbD4sIEdQTAorCShDKSAyMDA3LTIwMTEgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgR1BMCiAKLVRoZXJlIGFyZSBzb21lIG9wZXJhdGlvbnMgdGhhdCBkZXZpY2UgZHJpdmVycyBtYXkgd2FudCB0byBjYXJyeSBvdXQgaW4gdGhlaXIKLS5zdXNwZW5kKCkgcm91dGluZXMsIGJ1dCBzaG91bGRuJ3QsIGJlY2F1c2UgdGhleSBjYW4gY2F1c2UgdGhlIGhpYmVybmF0aW9uIG9yCi1zdXNwZW5kIHRvIGZhaWwuIEZvciBleGFtcGxlLCBhIGRyaXZlciBtYXkgd2FudCB0byBhbGxvY2F0ZSBhIHN1YnN0YW50aWFsIGFtb3VudAotb2YgbWVtb3J5IChsaWtlIDUwIE1CKSBpbiAuc3VzcGVuZCgpLCBidXQgdGhhdCBzaG91bGRuJ3QgYmUgZG9uZSBhZnRlciB0aGUKLXN3c3VzcCdzIG1lbW9yeSBzaHJpbmtlciBoYXMgcnVuLgorVGhlcmUgYXJlIHNvbWUgb3BlcmF0aW9ucyB0aGF0IHN1YnN5c3RlbXMgb3IgZHJpdmVycyBtYXkgd2FudCB0byBjYXJyeSBvdXQKK2JlZm9yZSBoaWJlcm5hdGlvbi9zdXNwZW5kIG9yIGFmdGVyIHJlc3RvcmUvcmVzdW1lLCBidXQgdGhleSByZXF1aXJlIHRoZSBzeXN0ZW0KK3RvIGJlIGZ1bGx5IGZ1bmN0aW9uYWwsIHNvIHRoZSBkcml2ZXJzJyBhbmQgc3Vic3lzdGVtcycgLnN1c3BlbmQoKSBhbmQgLnJlc3VtZSgpCitvciBldmVuIC5wcmVwYXJlKCkgYW5kIC5jb21wbGV0ZSgpIGNhbGxiYWNrcyBhcmUgbm90IHN1aXRhYmxlIGZvciB0aGlzIHB1cnBvc2UuCitGb3IgZXhhbXBsZSwgZGV2aWNlIGRyaXZlcnMgbWF5IHdhbnQgdG8gdXBsb2FkIGZpcm13YXJlIHRvIHRoZWlyIGRldmljZXMgYWZ0ZXIKK3Jlc3VtZS9yZXN0b3JlLCBidXQgdGhleSBjYW5ub3QgZG8gaXQgYnkgY2FsbGluZyByZXF1ZXN0X2Zpcm13YXJlKCkgZnJvbSB0aGVpcgorLnJlc3VtZSgpIG9yIC5jb21wbGV0ZSgpIHJvdXRpbmVzICh1c2VyIGxhbmQgcHJvY2Vzc2VzIGFyZSBmcm96ZW4gYXQgdGhlc2UKK3BvaW50cykuICBUaGUgc29sdXRpb24gbWF5IGJlIHRvIGxvYWQgdGhlIGZpcm13YXJlIGludG8gbWVtb3J5IGJlZm9yZSBwcm9jZXNzZXMKK2FyZSBmcm96ZW4gYW5kIHVwbG9hZCBpdCBmcm9tIHRoZXJlIGluIHRoZSAucmVzdW1lKCkgcm91dGluZS4KK0Egc3VzcGVuZC9oaWJlcm5hdGlvbiBub3RpZmllciBtYXkgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLgogCi1BbHNvLCB0aGVyZSBtYXkgYmUgc29tZSBvcGVyYXRpb25zLCB0aGF0IHN1YnN5c3RlbXMgd2FudCB0byBjYXJyeSBvdXQgYmVmb3JlIGEKLWhpYmVybmF0aW9uL3N1c3BlbmQgb3IgYWZ0ZXIgYSByZXN0b3JlL3Jlc3VtZSwgcmVxdWlyaW5nIHRoZSBzeXN0ZW0gdG8gYmUgZnVsbHkKLWZ1bmN0aW9uYWwsIHNvIHRoZSBkcml2ZXJzJyAuc3VzcGVuZCgpIGFuZCAucmVzdW1lKCkgcm91dGluZXMgYXJlIG5vdCBzdWl0YWJsZQotZm9yIHRoaXMgcHVycG9zZS4gIEZvciBleGFtcGxlLCBkZXZpY2UgZHJpdmVycyBtYXkgd2FudCB0byB1cGxvYWQgZmlybXdhcmUgdG8KLXRoZWlyIGRldmljZXMgYWZ0ZXIgYSByZXN0b3JlIGZyb20gYSBoaWJlcm5hdGlvbiBpbWFnZSwgYnV0IHRoZXkgY2Fubm90IGRvIGl0IGJ5Ci1jYWxsaW5nIHJlcXVlc3RfZmlybXdhcmUoKSBmcm9tIHRoZWlyIC5yZXN1bWUoKSByb3V0aW5lcyAodXNlciBsYW5kIHByb2Nlc3NlcwotYXJlIGZyb3plbiBhdCB0aGlzIHBvaW50KS4gIFRoZSBzb2x1dGlvbiBtYXkgYmUgdG8gbG9hZCB0aGUgZmlybXdhcmUgaW50bwotbWVtb3J5IGJlZm9yZSBwcm9jZXNzZXMgYXJlIGZyb3plbiBhbmQgdXBsb2FkIGl0IGZyb20gdGhlcmUgaW4gdGhlIC5yZXN1bWUoKQotcm91dGluZS4gIE9mIGNvdXJzZSwgYSBoaWJlcm5hdGlvbiBub3RpZmllciBtYXkgYmUgdXNlZCBmb3IgdGhpcyBwdXJwb3NlLgotCi1UaGUgc3Vic3lzdGVtcyB0aGF0IGhhdmUgc3VjaCBuZWVkcyBjYW4gcmVnaXN0ZXIgc3VzcGVuZCBub3RpZmllcnMgdGhhdCB3aWxsIGJlCi1jYWxsZWQgdXBvbiB0aGUgZm9sbG93aW5nIGV2ZW50cyBieSB0aGUgc3VzcGVuZCBjb3JlOgorVGhlIHN1YnN5c3RlbXMgb3IgZHJpdmVycyBoYXZpbmcgc3VjaCBuZWVkcyBjYW4gcmVnaXN0ZXIgc3VzcGVuZCBub3RpZmllcnMgdGhhdAord2lsbCBiZSBjYWxsZWQgdXBvbiB0aGUgZm9sbG93aW5nIGV2ZW50cyBieSB0aGUgUE0gY29yZToKIAogUE1fSElCRVJOQVRJT05fUFJFUEFSRQlUaGUgc3lzdGVtIGlzIGdvaW5nIHRvIGhpYmVybmF0ZSBvciBzdXNwZW5kLCB0YXNrcyB3aWxsCiAJCQliZSBmcm96ZW4gaW1tZWRpYXRlbHkuCiAKIFBNX1BPU1RfSElCRVJOQVRJT04JVGhlIHN5c3RlbSBtZW1vcnkgc3RhdGUgaGFzIGJlZW4gcmVzdG9yZWQgZnJvbSBhCi0JCQloaWJlcm5hdGlvbiBpbWFnZSBvciBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdGhlCi0JCQloaWJlcm5hdGlvbi4gIERldmljZSBkcml2ZXJzJyAucmVzdW1lKCkgY2FsbGJhY2tzIGhhdmUKKwkJCWhpYmVybmF0aW9uIGltYWdlIG9yIGFuIGVycm9yIG9jY3VycmVkIGR1cmluZworCQkJaGliZXJuYXRpb24uICBEZXZpY2UgZHJpdmVycycgcmVzdG9yZSBjYWxsYmFja3MgaGF2ZQogCQkJYmVlbiBleGVjdXRlZCBhbmQgdGFza3MgaGF2ZSBiZWVuIHRoYXdlZC4KIAogUE1fUkVTVE9SRV9QUkVQQVJFCVRoZSBzeXN0ZW0gaXMgZ29pbmcgdG8gcmVzdG9yZSBhIGhpYmVybmF0aW9uIGltYWdlLgotCQkJSWYgYWxsIGdvZXMgd2VsbCB0aGUgcmVzdG9yZWQga2VybmVsIHdpbGwgaXNzdWUgYQorCQkJSWYgYWxsIGdvZXMgd2VsbCwgdGhlIHJlc3RvcmVkIGtlcm5lbCB3aWxsIGlzc3VlIGEKIAkJCVBNX1BPU1RfSElCRVJOQVRJT04gbm90aWZpY2F0aW9uLgogCi1QTV9QT1NUX1JFU1RPUkUJCUFuIGVycm9yIG9jY3VycmVkIGR1cmluZyB0aGUgaGliZXJuYXRpb24gcmVzdG9yZS4KLQkJCURldmljZSBkcml2ZXJzJyAucmVzdW1lKCkgY2FsbGJhY2tzIGhhdmUgYmVlbiBleGVjdXRlZAorUE1fUE9TVF9SRVNUT1JFCQlBbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcmVzdG9yZSBmcm9tIGhpYmVybmF0aW9uLgorCQkJRGV2aWNlIGRyaXZlcnMnIHJlc3RvcmUgY2FsbGJhY2tzIGhhdmUgYmVlbiBleGVjdXRlZAogCQkJYW5kIHRhc2tzIGhhdmUgYmVlbiB0aGF3ZWQuCiAKLVBNX1NVU1BFTkRfUFJFUEFSRQlUaGUgc3lzdGVtIGlzIHByZXBhcmluZyBmb3IgYSBzdXNwZW5kLgorUE1fU1VTUEVORF9QUkVQQVJFCVRoZSBzeXN0ZW0gaXMgcHJlcGFyaW5nIGZvciBzdXNwZW5kLgogCiBQTV9QT1NUX1NVU1BFTkQJCVRoZSBzeXN0ZW0gaGFzIGp1c3QgcmVzdW1lZCBvciBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcKLQkJCXRoZSBzdXNwZW5kLglEZXZpY2UgZHJpdmVycycgLnJlc3VtZSgpIGNhbGxiYWNrcyBoYXZlCi0JCQliZWVuIGV4ZWN1dGVkIGFuZCB0YXNrcyBoYXZlIGJlZW4gdGhhd2VkLgorCQkJc3VzcGVuZC4gIERldmljZSBkcml2ZXJzJyByZXN1bWUgY2FsbGJhY2tzIGhhdmUgYmVlbgorCQkJZXhlY3V0ZWQgYW5kIHRhc2tzIGhhdmUgYmVlbiB0aGF3ZWQuCiAKIEl0IGlzIGdlbmVyYWxseSBhc3N1bWVkIHRoYXQgd2hhdGV2ZXIgdGhlIG5vdGlmaWVycyBkbyBmb3IKIFBNX0hJQkVSTkFUSU9OX1BSRVBBUkUsIHNob3VsZCBiZSB1bmRvbmUgZm9yIFBNX1BPU1RfSElCRVJOQVRJT04uICBBbmFsb2dvdXNseSwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dCBiL0RvY3VtZW50YXRpb24vc291bmQvYWxzYS9TQi1MaXZlLW1peGVyLnR4dAppbmRleCBmNTYzOWQ0Li5mNGI1OTg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvU0ItTGl2ZS1taXhlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL1NCLUxpdmUtbWl4ZXIudHh0CkBAIC04NywxNCArODcsMTQgQEAKIFRoZSByZXN1bHQgaXMgZm9yd2FyZGVkIHRvIHRoZSBBREMgY2FwdHVyZSBGSUZPICh0aHVzIHRvIHRoZSBzdGFuZGFyZCBjYXB0dXJlCiBQQ00gZGV2aWNlKS4KIAotbmFtZT0nTXVzaWMgUGxheWJhY2sgVm9sdW1lJyxpbmRleD0wCituYW1lPSdTeW50aCBQbGF5YmFjayBWb2x1bWUnLGluZGV4PTAKIAogVGhpcyBjb250cm9sIGlzIHVzZWQgdG8gYXR0ZW51YXRlIHNhbXBsZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IE1JREkgRlgtYnVzCiBhY2N1bXVsYXRvcnMuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgNCBhbmQgNSBmb3IgbGVmdCBhbmQgcmlnaHQgTUlESSBzYW1wbGVzLgogVGhlIHJlc3VsdCBzYW1wbGVzIGFyZSBmb3J3YXJkZWQgdG8gdGhlIGZyb250IERBQyBQQ00gc2xvdHMgb2YgdGhlIEFDOTcgY29kZWMuCiAKLW5hbWU9J011c2ljIENhcHR1cmUgVm9sdW1lJyxpbmRleD0wCi1uYW1lPSdNdXNpYyBDYXB0dXJlIFN3aXRjaCcsaW5kZXg9MAorbmFtZT0nU3ludGggQ2FwdHVyZSBWb2x1bWUnLGluZGV4PTAKK25hbWU9J1N5bnRoIENhcHR1cmUgU3dpdGNoJyxpbmRleD0wCiAKIFRoZXNlIGNvbnRyb2xzIGFyZSB1c2VkIHRvIGF0dGVudWF0ZSBzYW1wbGVzIGZvciBsZWZ0IGFuZCByaWdodCBNSURJIEZYLWJ1cwogYWNjdW11bGF0b3IuIEFMU0EgdXNlcyBhY2N1bXVsYXRvcnMgNCBhbmQgNSBmb3IgbGVmdCBhbmQgcmlnaHQgUENNLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFjZS9rcHJvYmV0cmFjZS50eHQgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dAppbmRleCA2ZDI3YWI4Li5jODNiZDZiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3RyYWNlL2twcm9iZXRyYWNlLnR4dApAQCAtMTIwLDcgKzEyMCw2IEBACiAgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX2ZsYWdzOyAgICAgICBvZmZzZXQ6MjsgICAgICAgc2l6ZToxOyBzaWduZWQ6MDsKICAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fcHJlZW1wdF9jb3VudDsgICAgICAgb2Zmc2V0OjM7IHNpemU6MTtzaWduZWQ6MDsKICAgICAgICAgZmllbGQ6aW50IGNvbW1vbl9waWQ7ICAgb2Zmc2V0OjQ7ICAgICAgIHNpemU6NDsgc2lnbmVkOjE7Ci0gICAgICAgIGZpZWxkOmludCBjb21tb25fbG9ja19kZXB0aDsgICAgb2Zmc2V0Ojg7ICAgICAgIHNpemU6NDsgc2lnbmVkOjE7CiAKICAgICAgICAgZmllbGQ6dW5zaWduZWQgbG9uZyBfX3Byb2JlX2lwOyBvZmZzZXQ6MTI7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MDsKICAgICAgICAgZmllbGQ6aW50IF9fcHJvYmVfbmFyZ3M7ICAgICAgICBvZmZzZXQ6MTY7ICAgICAgc2l6ZTo0OyBzaWduZWQ6MTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2hfbW9iaWxlX2NldV9jYW1lcmEudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaF9tb2JpbGVfY2V1X2NhbWVyYS50eHQKaW5kZXggY2I0N2U3Mi4uMWU5NmNlNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaF9tb2JpbGVfY2V1X2NhbWVyYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaF9tb2JpbGVfY2V1X2NhbWVyYS50eHQKQEAgLTM3LDcgKzM3LDcgQEAKIC0xJy0KIAogSW4gdGhlIGFib3ZlIGNoYXJ0IG1pbnVzZXMgYW5kIHNsYXNoZXMgcmVwcmVzZW50ICJyZWFsIiBkYXRhIGFtb3VudHMsIHBvaW50cyBhbmQKLWFjY2VudHMgcmVwcmVzZW50ICJ1c2VmdWwiIGRhdGEsIGJhc2ljYWxseSwgQ0VVIHNjYWxlZCBhbWQgY3JvcHBlZCBvdXRwdXQsCithY2NlbnRzIHJlcHJlc2VudCAidXNlZnVsIiBkYXRhLCBiYXNpY2FsbHksIENFVSBzY2FsZWQgYW5kIGNyb3BwZWQgb3V0cHV0LAogbWFwcGVkIGJhY2sgb250byB0aGUgY2xpZW50J3Mgc291cmNlIHBsYW5lLgogCiBTdWNoIGEgY29uZmlndXJhdGlvbiBjYW4gYmUgcHJvZHVjZWQgYnkgdXNlciByZXF1ZXN0czoKQEAgLTY1LDcgKzY1LDcgQEAKIAogMS4gQ2FsY3VsYXRlIGN1cnJlbnQgc2Vuc29yIHNjYWxlczoKIAotCXNjYWxlX3MgPSAoKDMnKSAtICgzKSkgLyAoKDInKSAtICgyKSkKKwlzY2FsZV9zID0gKCgyJykgLSAoMikpIC8gKCgzJykgLSAoMykpCiAKIDIuIENhbGN1bGF0ZSAiZWZmZWN0aXZlIiBpbnB1dCBjcm9wIChzZW5zb3Igc3Vid2luZG93KSAtIENFVSBjcm9wIHNjYWxlZCBiYWNrIGF0CiBjdXJyZW50IHNlbnNvciBzY2FsZXMgb250byBpbnB1dCB3aW5kb3cgLSB0aGlzIGlzIHVzZXIgU19DUk9QOgpAQCAtODAsNyArODAsNyBAQAogNC4gQ2FsY3VsYXRlIHNlbnNvciBvdXRwdXQgd2luZG93IGJ5IGFwcGx5aW5nIGNvbWJpbmVkIHNjYWxlcyB0byByZWFsIGlucHV0CiB3aW5kb3c6CiAKLQl3aWR0aF9zX291dCA9ICgoMicpIC0gKDIpKSAvIHNjYWxlX2NvbWIKKwl3aWR0aF9zX291dCA9ICgoNycpIC0gKDcpKSA9ICgoMicpIC0gKDIpKSAvIHNjYWxlX2NvbWIKIAogNS4gQXBwbHkgaXRlcmF0aXZlIHNlbnNvciBTX0ZNVCBmb3Igc2Vuc29yIG91dHB1dCB3aW5kb3cuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydHVhbC8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC8wMC1JTkRFWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTAyNTFjCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsLzAwLUlOREVYCkBAIC0wLDAgKzEsMTAgQEAKK1ZpcnR1YWxpemF0aW9uIHN1cHBvcnQgaW4gdGhlIExpbnV4IGtlcm5lbC4KKworMDAtSU5ERVgKKwktIHRoaXMgZmlsZS4KK2t2bS8KKwktIEtlcm5lbCBWaXJ0dWFsIE1hY2hpbmUuICBTZWUgYWxzbyBodHRwOi8vbGludXgta3ZtLm9yZworbGd1ZXN0LworCS0gRXh0cmVtZWx5IHNpbXBsZSBoeXBlcnZpc29yIGZvciBleHBlcmltZW50YWwvZWR1Y2F0aW9uYWwgdXNlLgordW1sLworCS0gVXNlciBNb2RlIExpbnV4LCBidWlsZHMvcnVucyBMaW51eCBrZXJuZWwgYXMgYSB1c2Vyc3BhY2UgcHJvZ3JhbS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL2FwaS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rdm0vY3B1aWQudHh0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9jcHVpZC50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24va3ZtL2NwdWlkLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9jcHVpZC50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL2xvY2tpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9sb2NraW5nLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9rdm0vbG9ja2luZy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vbG9ja2luZy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL21tdS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL21tdS50eHQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24va3ZtL21tdS50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vbW11LnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rdm0vbXNyLnR4dCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vbXNyLnR4dApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9rdm0vbXNyLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9tc3IudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2t2bS9wcGMtcHYudHh0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9wcGMtcHYudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2t2bS9wcGMtcHYudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL3BwYy1wdi50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL3Jldmlldy1jaGVja2xpc3QudHh0IGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9yZXZpZXctY2hlY2tsaXN0LnR4dApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2t2bS9yZXZpZXctY2hlY2tsaXN0LnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9yZXZpZXctY2hlY2tsaXN0LnR4dAppbmRleCA3MzA0NzVhLi5hODUwOTg2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2t2bS9yZXZpZXctY2hlY2tsaXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwva3ZtL3Jldmlldy1jaGVja2xpc3QudHh0CkBAIC03LDcgKzcsNyBAQAogMi4gIFBhdGNoZXMgc2hvdWxkIGJlIGFnYWluc3Qga3ZtLmdpdCBtYXN0ZXIgYnJhbmNoLgogCiAzLiAgSWYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgYSBuZXcgdXNlcnNwYWNlIEFQSToKLSAgICAtIHRoZSBBUEkgbXVzdCBiZSBkb2N1bWVudGVkIGluIERvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKKyAgICAtIHRoZSBBUEkgbXVzdCBiZSBkb2N1bWVudGVkIGluIERvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dAogICAgIC0gdGhlIEFQSSBtdXN0IGJlIGRpc2NvdmVyYWJsZSB1c2luZyBLVk1fQ0hFQ0tfRVhURU5TSU9OCiAKIDQuICBOZXcgc3RhdGUgbXVzdCBpbmNsdWRlIHN1cHBvcnQgZm9yIHNhdmUvcmVzdG9yZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL3RpbWVrZWVwaW5nLnR4dCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vdGltZWtlZXBpbmcudHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2t2bS90aW1la2VlcGluZy50eHQKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vdGltZWtlZXBpbmcudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xndWVzdC8uZ2l0aWdub3JlIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC8uZ2l0aWdub3JlCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2xndWVzdC8uZ2l0aWdub3JlCnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0Ly5naXRpZ25vcmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9NYWtlZmlsZQpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvTWFrZWZpbGUKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvTWFrZWZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbGd1ZXN0L2V4dHJhY3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2V4dHJhY3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vbGd1ZXN0L2V4dHJhY3QKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvZXh0cmFjdApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LmMgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYwpyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QuYwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LnR4dCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvbGd1ZXN0LnR4dApzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QudHh0CnJlbmFtZSB0byBEb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC50eHQKaW5kZXggZGFkOTk5Ny4uYmZmMGM1NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvbGd1ZXN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC50eHQKQEAgLTc0LDcgKzc0LDggQEAKIAogLSBSdW4gYW4gbGd1ZXN0IGFzIHJvb3Q6CiAKLSAgICAgIERvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdCA2NCB2bWxpbnV4IC0tdHVubmV0PTE5Mi4xNjguMTkuMSAtLWJsb2NrPXJvb3RmaWxlIHJvb3Q9L2Rldi92ZGEKKyAgICAgIERvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvbGd1ZXN0IDY0IHZtbGludXggLS10dW5uZXQ9MTkyLjE2OC4xOS4xIFwKKyAgICAgICAgLS1ibG9jaz1yb290ZmlsZSByb290PS9kZXYvdmRhCiAKICAgIEV4cGxhbmF0aW9uOgogICAgIDY0OiB0aGUgYW1vdW50IG9mIG1lbW9yeSB0byB1c2UsIGluIE1CLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi91bWwvVXNlck1vZGVMaW51eC1IT1dUTy50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpcnR1YWwvdW1sL1VzZXJNb2RlTGludXgtSE9XVE8udHh0CnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBEb2N1bWVudGF0aW9uL3VtbC9Vc2VyTW9kZUxpbnV4LUhPV1RPLnR4dApyZW5hbWUgdG8gRG9jdW1lbnRhdGlvbi92aXJ0dWFsL3VtbC9Vc2VyTW9kZUxpbnV4LUhPV1RPLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0IGIvRG9jdW1lbnRhdGlvbi93b3JrcXVldWUudHh0CmluZGV4IDAxYzUxM2YuLmEwYjU3N2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vd29ya3F1ZXVlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3dvcmtxdWV1ZS50eHQKQEAgLTEyLDYgKzEyLDcgQEAKIDQuIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nIEludGVyZmFjZSAoQVBJKQogNS4gRXhhbXBsZSBFeGVjdXRpb24gU2NlbmFyaW9zCiA2LiBHdWlkZWxpbmVzCis3LiBEZWJ1Z2dpbmcKIAogCiAxLiBJbnRyb2R1Y3Rpb24KQEAgLTM3OSwzICszODAsNDIgQEAKICogVW5sZXNzIHdvcmsgaXRlbXMgYXJlIGV4cGVjdGVkIHRvIGNvbnN1bWUgYSBodWdlIGFtb3VudCBvZiBDUFUKICAgY3ljbGVzLCB1c2luZyBhIGJvdW5kIHdxIGlzIHVzdWFsbHkgYmVuZWZpY2lhbCBkdWUgdG8gdGhlIGluY3JlYXNlZAogICBsZXZlbCBvZiBsb2NhbGl0eSBpbiB3cSBvcGVyYXRpb25zIGFuZCB3b3JrIGl0ZW0gZXhlY3V0aW9uLgorCisKKzcuIERlYnVnZ2luZworCitCZWNhdXNlIHRoZSB3b3JrIGZ1bmN0aW9ucyBhcmUgZXhlY3V0ZWQgYnkgZ2VuZXJpYyB3b3JrZXIgdGhyZWFkcwordGhlcmUgYXJlIGEgZmV3IHRyaWNrcyBuZWVkZWQgdG8gc2hlZCBzb21lIGxpZ2h0IG9uIG1pc2JlaGF2aW5nCit3b3JrcXVldWUgdXNlcnMuCisKK1dvcmtlciB0aHJlYWRzIHNob3cgdXAgaW4gdGhlIHByb2Nlc3MgbGlzdCBhczoKKworcm9vdCAgICAgIDU2NzEgIDAuMCAgMC4wICAgICAgMCAgICAgMCA/ICAgICAgICBTICAgIDEyOjA3ICAgMDowMCBba3dvcmtlci8wOjFdCityb290ICAgICAgNTY3MiAgMC4wICAwLjAgICAgICAwICAgICAwID8gICAgICAgIFMgICAgMTI6MDcgICAwOjAwIFtrd29ya2VyLzE6Ml0KK3Jvb3QgICAgICA1NjczICAwLjAgIDAuMCAgICAgIDAgICAgIDAgPyAgICAgICAgUyAgICAxMjoxMiAgIDA6MDAgW2t3b3JrZXIvMDowXQorcm9vdCAgICAgIDU2NzQgIDAuMCAgMC4wICAgICAgMCAgICAgMCA/ICAgICAgICBTICAgIDEyOjEzICAgMDowMCBba3dvcmtlci8xOjBdCisKK0lmIGt3b3JrZXJzIGFyZSBnb2luZyBjcmF6eSAodXNpbmcgdG9vIG11Y2ggY3B1KSwgdGhlcmUgYXJlIHR3byB0eXBlcworb2YgcG9zc2libGUgcHJvYmxlbXM6CisKKwkxLiBTb21ldGhpbmcgYmVlaW5nIHNjaGVkdWxlZCBpbiByYXBpZCBzdWNjZXNzaW9uCisJMi4gQSBzaW5nbGUgd29yayBpdGVtIHRoYXQgY29uc3VtZXMgbG90cyBvZiBjcHUgY3ljbGVzCisKK1RoZSBmaXJzdCBvbmUgY2FuIGJlIHRyYWNrZWQgdXNpbmcgdHJhY2luZzoKKworCSQgZWNobyB3b3JrcXVldWU6d29ya3F1ZXVlX3F1ZXVlX3dvcmsgPiAvc3lzL2tlcm5lbC9kZWJ1Zy90cmFjaW5nL3NldF9ldmVudAorCSQgY2F0IC9zeXMva2VybmVsL2RlYnVnL3RyYWNpbmcvdHJhY2VfcGlwZSA+IG91dC50eHQKKwkod2FpdCBhIGZldyBzZWNzKQorCV5DCisKK0lmIHNvbWV0aGluZyBpcyBidXN5IGxvb3Bpbmcgb24gd29yayBxdWV1ZWluZywgaXQgd291bGQgYmUgZG9taW5hdGluZwordGhlIG91dHB1dCBhbmQgdGhlIG9mZmVuZGVyIGNhbiBiZSBkZXRlcm1pbmVkIHdpdGggdGhlIHdvcmsgaXRlbQorZnVuY3Rpb24uCisKK0ZvciB0aGUgc2Vjb25kIHR5cGUgb2YgcHJvYmxlbXMgaXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGp1c3QgY2hlY2sKK3RoZSBzdGFjayB0cmFjZSBvZiB0aGUgb2ZmZW5kaW5nIHdvcmtlciB0aHJlYWQuCisKKwkkIGNhdCAvcHJvYy9USEVfT0ZGRU5ESU5HX0tXT1JLRVIvc3RhY2sKKworVGhlIHdvcmsgaXRlbSdzIGZ1bmN0aW9uIHNob3VsZCBiZSB0cml2aWFsbHkgdmlzaWJsZSBpbiB0aGUgc3RhY2sKK3RyYWNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODYveDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAppbmRleCAwOTJlNTk2Li5jNTRiNGY1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Ni94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApAQCAtMjA2LDcgKzIwNiw3IEBACiAgICAgICAoZS5nLiBiZWNhdXNlIHlvdSBoYXZlIDwgMyBHQiBtZW1vcnkpLgogICAgICAgS2VybmVsIGJvb3QgbWVzc2FnZTogIlBDSS1ETUE6IERpc2FibGluZyBJT01NVSIKIAotICAgMi4gPGFyY2gveDg2XzY0L2tlcm5lbC9wY2ktZ2FydC5jPjogQU1EIEdBUlQgYmFzZWQgaGFyZHdhcmUgSU9NTVUuCisgICAyLiA8YXJjaC94ODYva2VybmVsL2FtZF9nYXJ0XzY0LmM+OiBBTUQgR0FSVCBiYXNlZCBoYXJkd2FyZSBJT01NVS4KICAgICAgIEtlcm5lbCBib290IG1lc3NhZ2U6ICJQQ0ktRE1BOiB1c2luZyBHQVJUIElPTU1VIgogCiAgICAzLiA8YXJjaC94ODZfNjQva2VybmVsL3BjaS1zd2lvdGxiLmM+IDogU29mdHdhcmUgSU9NTVUgaW1wbGVtZW50YXRpb24uIFVzZWQKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggZWMzNjAwMy4uOGRmOGQyZCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTE1MSw2ICsxNTEsNyBAQAogRjoJZHJpdmVycy9uZXQvaGFtcmFkaW8vNnBhY2suYwogCiA4MTY5IDEwLzEwMC8xMDAwIEdJR0FCSVQgRVRIRVJORVQgRFJJVkVSCitNOglSZWFsdGVrIGxpbnV4IG5pYyBtYWludGFpbmVycyA8bmljX3N3c2RAcmVhbHRlay5jb20+CiBNOglGcmFuY29pcyBSb21pZXUgPHJvbWlldUBmci56b3JlaWwuY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZApAQCAtNDA0LDggKzQwNSw4IEBACiBGOglzb3VuZC9vc3MvYWVkc3AxNi5jCiAKIEFGRlMgRklMRSBTWVNURU0KLU06CVJvbWFuIFppcHBlbCA8emlwcGVsQGxpbnV4LW02OGsub3JnPgotUzoJTWFpbnRhaW5lZAorTDoJbGludXgtZnNkZXZlbEB2Z2VyLmtlcm5lbC5vcmcKK1M6CU9ycGhhbgogRjoJRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9hZmZzLnR4dAogRjoJZnMvYWZmcy8KIApAQCAtMTAzMSwxMiArMTAzMiwxMyBAQAogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1zM2M2NHh4LwogCi1BUk0vUzVQIEFSTSBBUkNISVRFQ1RVUkVTCitBUk0vUzVQIEVYWU5PUyBBUk0gQVJDSElURUNUVVJFUwogTToJS3VramluIEtpbSA8a2dlbmUua2ltQHNhbXN1bmcuY29tPgogTDoJbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIEw6CWxpbnV4LXNhbXN1bmctc29jQHZnZXIua2VybmVsLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS9tYWNoLXM1cCovCitGOglhcmNoL2FybS9tYWNoLWV4eW5vcyovCiAKIEFSTS9TQU1TVU5HIE1PQklMRSBNQUNISU5FIFNVUFBPUlQKIE06CUt5dW5nbWluIFBhcmsgPGt5dW5nbWluLnBhcmtAc2Ftc3VuZy5jb20+CkBAIC0yODA3LDQyICsyODA5LDIzIEBACiBNOglHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CiBTOglNYWludGFpbmVkCiBUOglnaXQgZ2l0Oi8vZ2l0LnNlY3JldGxhYi5jYS9naXQvbGludXgtMi42LmdpdAotRjoJRG9jdW1lbnRhdGlvbi9ncGlvL2dwaW8udHh0CitGOglEb2N1bWVudGF0aW9uL2dwaW8udHh0CiBGOglkcml2ZXJzL2dwaW8vCiBGOglpbmNsdWRlL2xpbnV4L2dwaW8qCiAKK0dSRSBERU1VTFRJUExFWEVSIERSSVZFUgorTToJRG1pdHJ5IEtvemxvdiA8eGViQG1haWwucnU+CitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOgluZXQvaXB2NC9ncmUuYworRjoJaW5jbHVkZS9uZXQvZ3JlLmgKKwogR1JFVEggMTAvMTAwLzFHIEV0aGVybmV0IE1BQyBkZXZpY2UgZHJpdmVyCiBNOglLcmlzdG9mZmVyIEdsZW1ibyA8a3Jpc3RvZmZlckBnYWlzbGVyLmNvbT4KIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbmV0L2dyZXRoKgogCi1IQVJEIERSSVZFIEFDVElWRSBQUk9URUNUSU9OIFNZU1RFTSAoSERBUFMpIERSSVZFUgotTToJRnJhbmsgU2VpZGVsIDxmcmFua0BmLXNlaWRlbC5kZT4KLUw6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCi1XOglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZnNlaWRlbC9oZGFwcy8KLVM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2hkYXBzLmMKLQotSFdQT0lTT04gTUVNT1JZIEZBSUxVUkUgSEFORExJTkcKLU06CUFuZGkgS2xlZW4gPGFuZGlAZmlyc3RmbG9vci5vcmc+Ci1MOglsaW51eC1tbUBrdmFjay5vcmcKLVQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWsvbGludXgtbWNlLTIuNi5naXQgaHdwb2lzb24KLVM6CU1haW50YWluZWQKLUY6CW1tL21lbW9yeS1mYWlsdXJlLmMKLUY6CW1tL2h3cG9pc29uLWluamVjdC5jCi0KLUhZUEVSVklTT1IgVklSVFVBTCBDT05TT0xFIERSSVZFUgotTDoJbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKLVM6CU9kZCBGaXhlcwotRjoJZHJpdmVycy90dHkvaHZjLwotCi1pU0NTSSBCT09UIEZJUk1XQVJFIFRBQkxFIChpQkZUKSBEUklWRVIKLU06CVBldGVyIEpvbmVzIDxwam9uZXNAcmVkaGF0LmNvbT4KLU06CUtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkQGtlcm5lbC5vcmc+Ci1TOglNYWludGFpbmVkCi1GOglkcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnQqCi0KIEdTUENBIEZJTkVQSVggU1VCRFJJVkVSCiBNOglGcmFuayBaYWdvIDxmcmFua0B6YWdvLm5ldD4KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZwpAQCAtMjg5Myw2ICsyODc2LDI2IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhLwogCitIQVJEIERSSVZFIEFDVElWRSBQUk9URUNUSU9OIFNZU1RFTSAoSERBUFMpIERSSVZFUgorTToJRnJhbmsgU2VpZGVsIDxmcmFua0BmLXNlaWRlbC5kZT4KK0w6CXBsYXRmb3JtLWRyaXZlci14ODZAdmdlci5rZXJuZWwub3JnCitXOglodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L2tlcm5lbC9wZW9wbGUvZnNlaWRlbC9oZGFwcy8KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvcGxhdGZvcm0veDg2L2hkYXBzLmMKKworSFdQT0lTT04gTUVNT1JZIEZBSUxVUkUgSEFORExJTkcKK006CUFuZGkgS2xlZW4gPGFuZGlAZmlyc3RmbG9vci5vcmc+CitMOglsaW51eC1tbUBrdmFjay5vcmcKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWsvbGludXgtbWNlLTIuNi5naXQgaHdwb2lzb24KK1M6CU1haW50YWluZWQKK0Y6CW1tL21lbW9yeS1mYWlsdXJlLmMKK0Y6CW1tL2h3cG9pc29uLWluamVjdC5jCisKK0hZUEVSVklTT1IgVklSVFVBTCBDT05TT0xFIERSSVZFUgorTDoJbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmcKK1M6CU9kZCBGaXhlcworRjoJZHJpdmVycy90dHkvaHZjLworCiBIQVJEV0FSRSBNT05JVE9SSU5HCiBNOglKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIE06CUd1ZW50ZXIgUm9lY2sgPGd1ZW50ZXIucm9lY2tAZXJpY3Nzb24uY29tPgpAQCAtMjk0Myw4ICsyOTQ2LDggQEAKIEY6CWluY2x1ZGUvbGludXgvY2Npc3NfaW9jdGwuaAogCiBIRlMgRklMRVNZU1RFTQotTToJUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+Ci1TOglNYWludGFpbmVkCitMOglsaW51eC1mc2RldmVsQHZnZXIua2VybmVsLm9yZworUzoJT3JwaGFuCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2hmcy50eHQKIEY6CWZzL2hmcy8KIApAQCAtMzQ3Niw2ICszNDc5LDEyIEBACiBGOglkcml2ZXJzL3BucC9pc2FwbnAvCiBGOglpbmNsdWRlL2xpbnV4L2lzYXBucC5oCiAKK2lTQ1NJIEJPT1QgRklSTVdBUkUgVEFCTEUgKGlCRlQpIERSSVZFUgorTToJUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgorTToJS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWRAa2VybmVsLm9yZz4KK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdCoKKwogSVNDU0kKIE06CU1pa2UgQ2hyaXN0aWUgPG1pY2hhZWxjQGNzLndpc2MuZWR1PgogTDoJb3Blbi1pc2NzaUBnb29nbGVncm91cHMuY29tCkBAIC0zODA1LDcgKzM4MTQsNyBAQAogTDoJbGd1ZXN0QGxpc3RzLm96bGFicy5vcmcKIFc6CWh0dHA6Ly9sZ3Vlc3Qub3psYWJzLm9yZy8KIFM6CU9kZCBGaXhlcwotRjoJRG9jdW1lbnRhdGlvbi9sZ3Vlc3QvCitGOglEb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0LwogRjoJYXJjaC94ODYvbGd1ZXN0LwogRjoJZHJpdmVycy9sZ3Vlc3QvCiBGOglpbmNsdWRlL2xpbnV4L2xndWVzdCouaApAQCAtMzk5Miw3ICs0MDAxLDYgQEAKIAogTTY4SyBBUkNISVRFQ1RVUkUKIE06CUdlZXJ0IFV5dHRlcmhvZXZlbiA8Z2VlcnRAbGludXgtbTY4ay5vcmc+Ci1NOglSb21hbiBaaXBwZWwgPHppcHBlbEBsaW51eC1tNjhrLm9yZz4KIEw6CWxpbnV4LW02OGtAbGlzdHMubGludXgtbTY4ay5vcmcKIFc6CWh0dHA6Ly93d3cubGludXgtbTY4ay5vcmcvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2dlZXJ0L2xpbnV4LW02OGsuZ2l0CkBAIC00OTg3LDYgKzQ5OTUsMTMgQEAKIEY6CWRyaXZlcnMvcHBzLwogRjoJaW5jbHVkZS9saW51eC9wcHMqLmgKIAorUFBUUCBEUklWRVIKK006CURtaXRyeSBLb3psb3YgPHhlYkBtYWlsLnJ1PgorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9uZXQvcHB0cC5jCitXOglodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2FjY2VsLXBwdHAKKwogUFJFRU1QVElCTEUgS0VSTkVMCiBNOglSb2JlcnQgTG92ZSA8cm1sQHRlY2g5Lm5ldD4KIEw6CWtwcmVlbXB0LXRlY2hAbGlzdHMuc291cmNlZm9yZ2UubmV0CkBAIC01Mzk1LDcgKzU0MTAsNyBAQAogRjoJaW5jbHVkZS9tZWRpYS8qNzE0NioKIAogU0FNU1VORyBBVURJTyAoQVNvQykgRFJJVkVSUwotTToJSmFzc2kgQnJhciA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KK006CUphc3NpIEJyYXIgPGphc3Npc2luZ2hicmFyQGdtYWlsLmNvbT4KIEw6CWFsc2EtZGV2ZWxAYWxzYS1wcm9qZWN0Lm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBTOglTdXBwb3J0ZWQKIEY6CXNvdW5kL3NvYy9zYW1zdW5nCkBAIC02NTU0LDcgKzY1NjksNyBAQAogRjoJZHJpdmVycy91c2IvaG9zdC91aGNpKgogCiBVU0IgIlVTQk5FVCIgRFJJVkVSIEZSQU1FV09SSwotTToJRGF2aWQgQnJvd25lbGwgPGRicm93bmVsbEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitNOglPbGl2ZXIgTmV1a3VtIDxvbmV1a3VtQHN1c2UuZGU+CiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3LmxpbnV4LXVzYi5vcmcvdXNibmV0CiBTOglNYWludGFpbmVkCkBAIC02NjE2LDcgKzY2MzEsNyBAQAogTDoJdXNlci1tb2RlLWxpbnV4LXVzZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vdXNlci1tb2RlLWxpbnV4LnNvdXJjZWZvcmdlLm5ldAogUzoJTWFpbnRhaW5lZAotRjoJRG9jdW1lbnRhdGlvbi91bWwvCitGOglEb2N1bWVudGF0aW9uL3ZpcnR1YWwvdW1sLwogRjoJYXJjaC91bS8KIEY6CWZzL2hvc3Rmcy8KIEY6CWZzL2hwcGZzLwpAQCAtNjkyMCw2ICs2OTM1LDE4IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3BsYXRmb3JtL3g4NgogCitYRU4gSFlQRVJWSVNPUiBJTlRFUkZBQ0UKK006CUplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteS5maXR6aGFyZGluZ2VAY2l0cml4LmNvbT4KK006CUtvbnJhZCBSemVzenV0ZWsgV2lsayA8a29ucmFkLndpbGtAb3JhY2xlLmNvbT4KK0w6CXhlbi1kZXZlbEBsaXN0cy54ZW5zb3VyY2UuY29tIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKK0w6CXZpcnR1YWxpemF0aW9uQGxpc3RzLmxpbnV4LWZvdW5kYXRpb24ub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWFyY2gveDg2L3hlbi8KK0Y6CWRyaXZlcnMvKi94ZW4tKmZyb250LmMKK0Y6CWRyaXZlcnMveGVuLworRjoJYXJjaC94ODYvaW5jbHVkZS9hc20veGVuLworRjoJaW5jbHVkZS94ZW4vCisKIFhFTiBORVRXT1JLIEJBQ0tFTkQgRFJJVkVSCiBNOglJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgogTDoJeGVuLWRldmVsQGxpc3RzLnhlbnNvdXJjZS5jb20gKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQpAQCAtNjk0MSwxOCArNjk2OCw2IEBACiBGOglhcmNoL3g4Ni94ZW4vKnN3aW90bGIqCiBGOglkcml2ZXJzL3hlbi8qc3dpb3RsYioKIAotWEVOIEhZUEVSVklTT1IgSU5URVJGQUNFCi1NOglKZXJlbXkgRml0emhhcmRpbmdlIDxqZXJlbXkuZml0emhhcmRpbmdlQGNpdHJpeC5jb20+Ci1NOglLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+Ci1MOgl4ZW4tZGV2ZWxAbGlzdHMueGVuc291cmNlLmNvbSAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCi1MOgl2aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwotUzoJU3VwcG9ydGVkCi1GOglhcmNoL3g4Ni94ZW4vCi1GOglkcml2ZXJzLyoveGVuLSpmcm9udC5jCi1GOglkcml2ZXJzL3hlbi8KLUY6CWFyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi8KLUY6CWluY2x1ZGUveGVuLwotCiBYRlMgRklMRVNZU1RFTQogUDoJU2lsaWNvbiBHcmFwaGljcyBJbmMKIE06CUFsZXggRWxkZXIgPGFlbGRlckBzZ2kuY29tPgpAQCAtNzAyMiwyMCArNzAzNyw2IEBACiBTOglNYWludGFpbmVkCiBGOglkcml2ZXJzL3R0eS9zZXJpYWwvenMuKgogCi1HUkUgREVNVUxUSVBMRVhFUiBEUklWRVIKLU06CURtaXRyeSBLb3psb3YgPHhlYkBtYWlsLnJ1PgotTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwotUzoJTWFpbnRhaW5lZAotRjoJbmV0L2lwdjQvZ3JlLmMKLUY6CWluY2x1ZGUvbmV0L2dyZS5oCi0KLVBQVFAgRFJJVkVSCi1NOglEbWl0cnkgS296bG92IDx4ZWJAbWFpbC5ydT4KLUw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKLVM6CU1haW50YWluZWQKLUY6CWRyaXZlcnMvbmV0L3BwdHAuYwotVzoJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9hY2NlbC1wcHRwCi0KIFRIRSBSRVNUCiBNOglMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCmRpZmYgLS1naXQgYS9NYWtlZmlsZSBiL01ha2VmaWxlCmluZGV4IDMyMmU3MzMuLmEwMzQ0YTggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlCisrKyBiL01ha2VmaWxlCkBAIC0xLDcgKzEsNyBAQAogVkVSU0lPTiA9IDIKIFBBVENITEVWRUwgPSA2CiBTVUJMRVZFTCA9IDM5Ci1FWFRSQVZFUlNJT04gPSAtcmMzCitFWFRSQVZFUlNJT04gPQogTkFNRSA9IEZsZXNoLUVhdGluZyBCYXRzIHdpdGggRmFuZ3MKIAogIyAqRE9DVU1FTlRBVElPTioKQEAgLTEyNjgsNiArMTI2OCw3IEBACiAJQGVjaG8gICcgIG1ha2UgQz0xICAgW3RhcmdldHNdIENoZWNrIGFsbCBjIHNvdXJjZSB3aXRoICQkQ0hFQ0sgKHNwYXJzZSBieSBkZWZhdWx0KScKIAlAZWNobyAgJyAgbWFrZSBDPTIgICBbdGFyZ2V0c10gRm9yY2UgY2hlY2sgb2YgYWxsIGMgc291cmNlIHdpdGggJCRDSEVDSycKIAlAZWNobyAgJyAgbWFrZSBXPTEgICBbdGFyZ2V0c10gRW5hYmxlIGV4dHJhIGdjYyBjaGVja3MnCisJQGVjaG8gICcgIG1ha2UgUkVDT1JETUNPVU5UX1dBUk49MSBbdGFyZ2V0c10gV2FybiBhYm91dCBpZ25vcmVkIG1jb3VudCBzZWN0aW9ucycKIAlAZWNobyAgJycKIAlAZWNobyAgJ0V4ZWN1dGUgIm1ha2UiIG9yICJtYWtlIGFsbCIgdG8gYnVpbGQgYWxsIHRhcmdldHMgbWFya2VkIHdpdGggWypdICcKIAlAZWNobyAgJ0ZvciBmdXJ0aGVyIGluZm8gc2VlIHRoZSAuL1JFQURNRSBmaWxlJwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggMDU4OTM3Yi4uYjE4MzQxNiAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC00NTIsMTAgKzQ1MiwxNCBAQAogI2RlZmluZSBfX05SX2Zhbm90aWZ5X2luaXQJCTQ5NAogI2RlZmluZSBfX05SX2Zhbm90aWZ5X21hcmsJCTQ5NQogI2RlZmluZSBfX05SX3BybGltaXQ2NAkJCTQ5NgorI2RlZmluZSBfX05SX25hbWVfdG9faGFuZGxlX2F0CQk0OTcKKyNkZWZpbmUgX19OUl9vcGVuX2J5X2hhbmRsZV9hdAkJNDk4CisjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkJNDk5CisjZGVmaW5lIF9fTlJfc3luY2ZzCQkJNTAwCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLSNkZWZpbmUgTlJfU1lTQ0FMTFMJCQk0OTcKKyNkZWZpbmUgTlJfU1lTQ0FMTFMJCQk1MDEKIAogI2RlZmluZSBfX0FSQ0hfV0FOVF9JUENfUEFSU0VfVkVSU0lPTgogI2RlZmluZSBfX0FSQ0hfV0FOVF9PTERfUkVBRERJUgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc21wLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwppbmRleCA0MmFhMDc4Li41YTYyMWM2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zbXAuYwpAQCAtNTg1LDggKzU4NSw3IEBACiAKIAkJc3dpdGNoICh3aGljaCkgewogCQljYXNlIElQSV9SRVNDSEVEVUxFOgotCQkJLyogUmVzY2hlZHVsZSBjYWxsYmFjay4gIEV2ZXJ5dGhpbmcgdG8gYmUgZG9uZQotCQkJICAgaXMgZG9uZSBieSB0aGUgaW50ZXJydXB0IHJldHVybiBwYXRoLiAgKi8KKwkJCXNjaGVkdWxlcl9pcGkoKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgSVBJX0NBTExfRlVOQzoKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c3RibHMuUwppbmRleCBhNmExZGU5Li4xNWY5OTlkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9zeXN0YmxzLlMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3lzdGJscy5TCkBAIC00OTgsMjMgKzQ5OCwyNyBAQAogCS5xdWFkIHN5c19uaV9zeXNjYWxsCQkJLyogc3lzX3RpbWVyZmQgKi8KIAkucXVhZCBzeXNfZXZlbnRmZAogCS5xdWFkIHN5c19yZWN2bW1zZwotCS5xdWFkIHN5c19mYWxsb2NhdGUJCQkJLyogNDgwICovCisJLnF1YWQgc3lzX2ZhbGxvY2F0ZQkJCS8qIDQ4MCAqLwogCS5xdWFkIHN5c190aW1lcmZkX2NyZWF0ZQogCS5xdWFkIHN5c190aW1lcmZkX3NldHRpbWUKIAkucXVhZCBzeXNfdGltZXJmZF9nZXR0aW1lCiAJLnF1YWQgc3lzX3NpZ25hbGZkNAotCS5xdWFkIHN5c19ldmVudGZkMgkJCQkvKiA0ODUgKi8KKwkucXVhZCBzeXNfZXZlbnRmZDIJCQkvKiA0ODUgKi8KIAkucXVhZCBzeXNfZXBvbGxfY3JlYXRlMQogCS5xdWFkIHN5c19kdXAzCiAJLnF1YWQgc3lzX3BpcGUyCiAJLnF1YWQgc3lzX2lub3RpZnlfaW5pdDEKLQkucXVhZCBzeXNfcHJlYWR2CQkJCS8qIDQ5MCAqLworCS5xdWFkIHN5c19wcmVhZHYJCQkvKiA0OTAgKi8KIAkucXVhZCBzeXNfcHdyaXRldgogCS5xdWFkIHN5c19ydF90Z3NpZ3F1ZXVlaW5mbwogCS5xdWFkIHN5c19wZXJmX2V2ZW50X29wZW4KIAkucXVhZCBzeXNfZmFub3RpZnlfaW5pdAotCS5xdWFkIHN5c19mYW5vdGlmeV9tYXJrCQkJCS8qIDQ5NSAqLworCS5xdWFkIHN5c19mYW5vdGlmeV9tYXJrCQkJLyogNDk1ICovCiAJLnF1YWQgc3lzX3BybGltaXQ2NAorCS5xdWFkIHN5c19uYW1lX3RvX2hhbmRsZV9hdAorCS5xdWFkIHN5c19vcGVuX2J5X2hhbmRsZV9hdAorCS5xdWFkIHN5c19jbG9ja19hZGp0aW1lCisJLnF1YWQgc3lzX3N5bmNmcwkJCS8qIDUwMCAqLwogCiAJLnNpemUgc3lzX2NhbGxfdGFibGUsIC4gLSBzeXNfY2FsbF90YWJsZQogCS50eXBlIHN5c19jYWxsX3RhYmxlLCBAb2JqZWN0CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMgYi9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKaW5kZXggOTE4ZThlMC4uODE4ZTc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwpAQCAtMzc1LDggKzM3NSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWdpc3Rlcl9ycGNjX2Nsb2Nrc291cmNlKGxvbmcgY3ljbGVfZnJlcSkKIHsKLQljbG9ja3NvdXJjZV9jYWxjX211bHRfc2hpZnQoJmNsb2Nrc291cmNlX3JwY2MsIGN5Y2xlX2ZyZXEsIDQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9ycGNjKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfcnBjYywgY3ljbGVfZnJlcSk7CiB9CiAjZWxzZSAvKiAhQ09ORklHX1NNUCAqLwogc3RhdGljIGlubGluZSB2b2lkIHJlZ2lzdGVyX3JwY2NfY2xvY2tzb3VyY2UobG9uZyBjeWNsZV9mcmVxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDhlYmJiNTEuLjBjNjg1MmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKQEAgLTc0LDcgKzc0LDcgQEAKIFpCU1NBRERSCTo9ICQoQ09ORklHX1pCT09UX1JPTV9CU1MpCiBlbHNlCiBaVEVYVEFERFIJOj0gMAotWkJTU0FERFIJOj0gQUxJR04oNCkKK1pCU1NBRERSCTo9IEFMSUdOKDgpCiBlbmRpZgogCiBTRURGTEFHUwk9IHMvVEVYVF9TVEFSVC8kKFpURVhUQUREUikvO3MvQlNTX1NUQVJULyQoWkJTU0FERFIpLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggYWRmNTgzYy4uNDlmNWIyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC0xNzksMTUgKzE3OSwxNCBAQAogCQlibAljYWNoZV9vbgogCiByZXN0YXJ0OglhZHIJcjAsIExDMAotCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI1LCByNiwgcjksIHIxMSwgcjEyfQotCQlsZHIJc3AsIFtyMCwgIzMyXQorCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI2LCByOSwgcjExLCByMTJ9CisJCWxkcglzcCwgW3IwLCAjMjhdCiAKIAkJLyoKIAkJICogV2UgbWlnaHQgYmUgcnVubmluZyBhdCBhIGRpZmZlcmVudCBhZGRyZXNzLiAgV2UgbmVlZAogCQkgKiB0byBmaXggdXAgdmFyaW91cyBwb2ludGVycy4KIAkJICovCiAJCXN1YglyMCwgcjAsIHIxCQlAIGNhbGN1bGF0ZSB0aGUgZGVsdGEgb2Zmc2V0Ci0JCWFkZAlyNSwgcjUsIHIwCQlAIF9zdGFydAogCQlhZGQJcjYsIHI2LCByMAkJQCBfZWRhdGEKIAogI2lmbmRlZiBDT05GSUdfWkJPT1RfUk9NCkBAIC0yMDYsMzEgKzIwNSw0MCBAQAogLyoKICAqIENoZWNrIHRvIHNlZSBpZiB3ZSB3aWxsIG92ZXJ3cml0ZSBvdXJzZWx2ZXMuCiAgKiAgIHI0ICA9IGZpbmFsIGtlcm5lbCBhZGRyZXNzCi0gKiAgIHI1ICA9IHN0YXJ0IG9mIHRoaXMgaW1hZ2UKICAqICAgcjkgID0gc2l6ZSBvZiBkZWNvbXByZXNzZWQgaW1hZ2UKICAqICAgcjEwID0gZW5kIG9mIHRoaXMgaW1hZ2UsIGluY2x1ZGluZyAgYnNzL3N0YWNrL21hbGxvYyBzcGFjZSBpZiBub24gWElQCiAgKiBXZSBiYXNpY2FsbHkgd2FudDoKLSAqICAgcjQgPj0gcjEwIC0+IE9LCi0gKiAgIHI0ICsgaW1hZ2UgbGVuZ3RoIDw9IHI1IC0+IE9LCisgKiAgIHI0IC0gMTZrIHBhZ2UgZGlyZWN0b3J5ID49IHIxMCAtPiBPSworICogICByNCArIGltYWdlIGxlbmd0aCA8PSBjdXJyZW50IHBvc2l0aW9uIChwYykgLT4gT0sKICAqLworCQlhZGQJcjEwLCByMTAsICMxNjM4NAogCQljbXAJcjQsIHIxMAogCQliaHMJd29udF9vdmVyd3JpdGUKIAkJYWRkCXIxMCwgcjQsIHI5Ci0JCWNtcAlyMTAsIHI1CisgICBBUk0oCQljbXAJcjEwLCBwYwkJKQorIFRIVU1CKAkJbW92CWxyLCBwYwkJKQorIFRIVU1CKAkJY21wCXIxMCwgbHIJCSkKIAkJYmxzCXdvbnRfb3ZlcndyaXRlCiAKIC8qCiAgKiBSZWxvY2F0ZSBvdXJzZWx2ZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZWNvbXByZXNzZWQga2VybmVsLgotICogICByNSAgPSBzdGFydCBvZiB0aGlzIGltYWdlCiAgKiAgIHI2ICA9IF9lZGF0YQogICogICByMTAgPSBlbmQgb2YgdGhlIGRlY29tcHJlc3NlZCBrZXJuZWwKICAqIEJlY2F1c2Ugd2UgYWx3YXlzIGNvcHkgYWhlYWQsIHdlIG5lZWQgdG8gZG8gaXQgZnJvbSB0aGUgZW5kIGFuZCBnbwogICogYmFja3dhcmQgaW4gY2FzZSB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBvdmVybGFwLgogICovCi0JCS8qIFJvdW5kIHVwIHRvIG5leHQgMjU2LWJ5dGUgYm91bmRhcnkuICovCi0JCWFkZAlyMTAsIHIxMCwgIzI1NgorCQkvKgorCQkgKiBCdW1wIHRvIHRoZSBuZXh0IDI1Ni1ieXRlIGJvdW5kYXJ5IHdpdGggdGhlIHNpemUgb2YKKwkJICogdGhlIHJlbG9jYXRpb24gY29kZSBhZGRlZC4gVGhpcyBhdm9pZHMgb3ZlcndyaXRpbmcKKwkJICogb3Vyc2VsZiB3aGVuIHRoZSBvZmZzZXQgaXMgc21hbGwuCisJCSAqLworCQlhZGQJcjEwLCByMTAsICMoKHJlbG9jX2NvZGVfZW5kIC0gcmVzdGFydCArIDI1NikgJiB+MjU1KQogCQliaWMJcjEwLCByMTAsICMyNTUKIAorCQkvKiBHZXQgc3RhcnQgb2YgY29kZSB3ZSB3YW50IHRvIGNvcHkgYW5kIGFsaWduIGl0IGRvd24uICovCisJCWFkcglyNSwgcmVzdGFydAorCQliaWMJcjUsIHI1LCAjMzEKKwogCQlzdWIJcjksIHI2LCByNQkJQCBzaXplIHRvIGNvcHkKIAkJYWRkCXI5LCByOSwgIzMxCQlAIHJvdW5kZWQgdXAgdG8gYSBtdWx0aXBsZQogCQliaWMJcjksIHI5LCAjMzEJCUAgLi4uIG9mIDMyIGJ5dGVzCkBAIC0yNDUsNiArMjUzLDExIEBACiAJCS8qIFByZXNlcnZlIG9mZnNldCB0byByZWxvY2F0ZWQgY29kZS4gKi8KIAkJc3ViCXI2LCByOSwgcjYKIAorI2lmbmRlZiBDT05GSUdfWkJPT1RfUk9NCisJCS8qIGNhY2hlX2NsZWFuX2ZsdXNoIG1heSB1c2UgdGhlIHN0YWNrLCBzbyByZWxvY2F0ZSBpdCAqLworCQlhZGQJc3AsIHNwLCByNgorI2VuZGlmCisKIAkJYmwJY2FjaGVfY2xlYW5fZmx1c2gKIAogCQlhZHIJcjAsIEJTWU0ocmVzdGFydCkKQEAgLTMzMyw3ICszNDYsNiBAQAogTEMwOgkJLndvcmQJTEMwCQkJQCByMQogCQkud29yZAlfX2Jzc19zdGFydAkJQCByMgogCQkud29yZAlfZW5kCQkJQCByMwotCQkud29yZAlfc3RhcnQJCQlAIHI1CiAJCS53b3JkCV9lZGF0YQkJCUAgcjYKIAkJLndvcmQJX2ltYWdlX3NpemUJCUAgcjkKIAkJLndvcmQJX2dvdF9zdGFydAkJQCByMTEKQEAgLTEwNjIsNiArMTA3NCw3IEBACiAjZW5kaWYKIAogCQkubHRvcmcKK3JlbG9jX2NvZGVfZW5kOgogCiAJCS5hbGlnbgogCQkuc2VjdGlvbiAiLnN0YWNrIiwgImF3IiwgJW5vYml0cwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCmluZGV4IDUzMDk5MDkuLmVhODBhYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgorKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KQEAgLTU0LDYgKzU0LDcgQEAKICAgLmJzcwkJCTogeyAqKC5ic3MpIH0KICAgX2VuZCA9IC47CiAKKyAgLiA9IEFMSUdOKDgpOwkJLyogdGhlIHN0YWNrIG11c3QgYmUgNjQtYml0IGFsaWduZWQgKi8KICAgLnN0YWNrCQk6IHsgKiguc3RhY2spIH0KIAogICAuc3RhYiAwCQk6IHsgKiguc3RhYikgfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3ZpYy5jIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCmluZGV4IDExMzA4NWEuLjdhYTQyNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYworKysgYi9hcmNoL2FybS9jb21tb24vdmljLmMKQEAgLTIyLDE3ICsyMiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEvYnVzLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19QTSkKKyNpZmRlZiBDT05GSUdfUE0KIC8qKgogICogc3RydWN0IHZpY19kZXZpY2UgLSBWSUMgUE0gZGV2aWNlCi0gKiBAc3lzZGV2OiBUaGUgc3lzdGVtIGRldmljZSB3aGljaCBpcyByZWdpc3RlcmVkLgogICogQGlycTogVGhlIElSUSBudW1iZXIgZm9yIHRoZSBiYXNlIG9mIHRoZSBWSUMuCiAgKiBAYmFzZTogVGhlIHJlZ2lzdGVyIGJhc2UgZm9yIHRoZSBWSUMuCiAgKiBAcmVzdW1lX3NvdXJjZXM6IEEgYml0bWFzayBvZiBpbnRlcnJ1cHRzIGZvciByZXN1bWUuCkBAIC00Myw4ICs0Miw2IEBACiAgKiBAcHJvdGVjdDogU2F2ZSBmb3IgVklDX1BST1RFQ1QuCiAgKi8KIHN0cnVjdCB2aWNfZGV2aWNlIHsKLQlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7Ci0KIAl2b2lkIF9faW9tZW0JKmJhc2U7CiAJaW50CQlpcnE7CiAJdTMyCQlyZXN1bWVfc291cmNlczsKQEAgLTU5LDExICs1Niw2IEBACiBzdGF0aWMgc3RydWN0IHZpY19kZXZpY2UgdmljX2RldmljZXNbQ09ORklHX0FSTV9WSUNfTlJdOwogCiBzdGF0aWMgaW50IHZpY19pZDsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgdmljX2RldmljZSAqdG9fdmljKHN0cnVjdCBzeXNfZGV2aWNlICpzeXMpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihzeXMsIHN0cnVjdCB2aWNfZGV2aWNlLCBzeXNkZXYpOwotfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwogCiAvKioKQEAgLTg1LDEwICs3Nyw5IEBACiAJd3JpdGVsKDMyLCBiYXNlICsgVklDX1BMMTkwX0RFRl9WRUNUX0FERFIpOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfUE0pCi1zdGF0aWMgaW50IHZpY19jbGFzc19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyB2b2lkIHJlc3VtZV9vbmVfdmljKHN0cnVjdCB2aWNfZGV2aWNlICp2aWMpCiB7Ci0Jc3RydWN0IHZpY19kZXZpY2UgKnZpYyA9IHRvX3ZpYyhkZXYpOwogCXZvaWQgX19pb21lbSAqYmFzZSA9IHZpYy0+YmFzZTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogcmVzdW1pbmcgdmljIGF0ICVwXG4iLCBfX2Z1bmNfXywgYmFzZSk7CkBAIC0xMDcsMTMgKzk4LDE4IEBACiAKIAl3cml0ZWwodmljLT5zb2Z0X2ludCwgYmFzZSArIFZJQ19JTlRfU09GVCk7CiAJd3JpdGVsKH52aWMtPnNvZnRfaW50LCBiYXNlICsgVklDX0lOVF9TT0ZUX0NMRUFSKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpY19jbGFzc19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyB2b2lkIHZpY19yZXN1bWUodm9pZCkKIHsKLQlzdHJ1Y3QgdmljX2RldmljZSAqdmljID0gdG9fdmljKGRldik7CisJaW50IGlkOworCisJZm9yIChpZCA9IHZpY19pZCAtIDE7IGlkID49IDA7IGlkLS0pCisJCXJlc3VtZV9vbmVfdmljKHZpY19kZXZpY2VzICsgaWQpOworfQorCitzdGF0aWMgdm9pZCBzdXNwZW5kX29uZV92aWMoc3RydWN0IHZpY19kZXZpY2UgKnZpYykKK3sKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSB2aWMtPmJhc2U7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN1c3BlbmRpbmcgdmljIGF0ICVwXG4iLCBfX2Z1bmNfXywgYmFzZSk7CkBAIC0xMjgsMTQgKzEyNCwyMSBAQAogCiAJd3JpdGVsKHZpYy0+cmVzdW1lX2lycXMsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRSk7CiAJd3JpdGVsKH52aWMtPnJlc3VtZV9pcnFzLCBiYXNlICsgVklDX0lOVF9FTkFCTEVfQ0xFQVIpOworfQorCitzdGF0aWMgaW50IHZpY19zdXNwZW5kKHZvaWQpCit7CisJaW50IGlkOworCisJZm9yIChpZCA9IDA7IGlkIDwgdmljX2lkOyBpZCsrKQorCQlzdXNwZW5kX29uZV92aWModmljX2RldmljZXMgKyBpZCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IHN5c2Rldl9jbGFzcyB2aWNfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gInZpYyIsCi0JLnN1c3BlbmQJPSB2aWNfY2xhc3Nfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHZpY19jbGFzc19yZXN1bWUsCitzdHJ1Y3Qgc3lzY29yZV9vcHMgdmljX3N5c2NvcmVfb3BzID0geworCS5zdXNwZW5kCT0gdmljX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB2aWNfcmVzdW1lLAogfTsKIAogLyoqCkBAIC0xNDcsMzAgKzE1MCw4IEBACiAqLwogc3RhdGljIGludCBfX2luaXQgdmljX3BtX2luaXQodm9pZCkKIHsKLQlzdHJ1Y3QgdmljX2RldmljZSAqZGV2ID0gdmljX2RldmljZXM7Ci0JaW50IGVycjsKLQlpbnQgaWQ7Ci0KLQlpZiAodmljX2lkID09IDApCi0JCXJldHVybiAwOwotCi0JZXJyID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ2aWNfY2xhc3MpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IHJlZ2lzdGVyIGNsYXNzXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiBlcnI7Ci0JfQotCi0JZm9yIChpZCA9IDA7IGlkIDwgdmljX2lkOyBpZCsrLCBkZXYrKykgewotCQlkZXYtPnN5c2Rldi5pZCA9IGlkOwotCQlkZXYtPnN5c2Rldi5jbHMgPSAmdmljX2NsYXNzOwotCi0JCWVyciA9IHN5c2Rldl9yZWdpc3RlcigmZGV2LT5zeXNkZXYpOwotCQlpZiAoZXJyKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgZGV2aWNlXG4iLAotCQkJICAgICAgIF9fZnVuY19fKTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9CisJaWYgKHZpY19pZCA+IDApCisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZ2aWNfc3lzY29yZV9vcHMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2F0OTF4NDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTVlOTIxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hdDkxeDQwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDQ4IEBACitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19GVVRFWCBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUkZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19NTVUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfQVQ5MT15CitDT05GSUdfQVJDSF9BVDkxWDQwPXkKK0NPTkZJR19NQUNIX0FUOTFFQjAxPXkKK0NPTkZJR19BVDkxX0VBUkxZX1VTQVJUMD15CitDT05GSUdfQ1BVX0FSTTdURE1JPXkKK0NPTkZJR19TRVRfTUVNX1BBUkFNPXkKK0NPTkZJR19EUkFNX0JBU0U9MHgwMTAwMDAwMAorQ09ORklHX0RSQU1fU0laRT0weDAwNDAwMDAwCitDT05GSUdfRkxBU0hfTUVNX0JBU0U9MHgwMTQwMDAwMAorQ09ORklHX1BST0NFU1NPUl9JRD0weDE0MDAwMDQwCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19CSU5GTVRfRkxBVD15CisjIENPTkZJR19TVVNQRU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CitDT05GSUdfTVREX1JBTT15CitDT05GSUdfTVREX1JPTT15CitDT05GSUdfQkxLX0RFVl9SQU09eQorIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVWS01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9eQorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vY3B1dHlwZS5oCmluZGV4IGVkNWJjOWUuLmNkNDQ1OGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2NwdXR5cGUuaAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9jcHV0eXBlLmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9fQVNNX0FSTV9DUFVUWVBFX0gKIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjZGVmaW5lIENQVUlEX0lECTAKICNkZWZpbmUgQ1BVSURfQ0FDSEVUWVBFCTEKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2k4MjUzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pODI1My5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjU2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9pODI1My5oCkBAIC0wLDAgKzEsMTUgQEAKKyNpZm5kZWYgX19BU01BUk1fSTgyNTNfSAorI2RlZmluZSBfX0FTTUFSTV9JODI1M19ICisKKy8qIGk4MjUzQSBQSVQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBJVF9NT0RFCTB4NDMKKyNkZWZpbmUgUElUX0NIMAkJMHg0MAorCisjZGVmaW5lIFBJVF9MQVRDSAkoKFBJVF9USUNLX1JBVEUgKyBIWiAvIDIpIC8gSFopCisKK2V4dGVybiByYXdfc3BpbmxvY2tfdCBpODI1M19sb2NrOworCisjZGVmaW5lIG91dGJfcGl0CW91dGJfcAorI2RlZmluZSBpbmJfcGl0CQlpbmJfcAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2twcm9iZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2twcm9iZXMuaAppbmRleCBiYjhhMTliLi5lNDZiZGQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20va3Byb2Jlcy5oCkBAIC0zOSwxMCArMzksMTMgQEAKIHN0cnVjdCBrcHJvYmU7CiB0eXBlZGVmIHZvaWQgKGtwcm9iZV9pbnNuX2hhbmRsZXJfdCkoc3RydWN0IGtwcm9iZSAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIAordHlwZWRlZiB1bnNpZ25lZCBsb25nIChrcHJvYmVfY2hlY2tfY2MpKHVuc2lnbmVkIGxvbmcpOworCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbi4gKi8KIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gewogCWtwcm9iZV9vcGNvZGVfdAkJKmluc247CiAJa3Byb2JlX2luc25faGFuZGxlcl90CSppbnNuX2hhbmRsZXI7CisJa3Byb2JlX2NoZWNrX2NjCQkqaW5zbl9jaGVja19jYzsKIH07CiAKIHN0cnVjdCBwcmV2X2twcm9iZSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9tYWNoL3RpbWUuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvdGltZS5oCmluZGV4IDg4M2Y2YmUuLmQ1YWRhYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvdGltZS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL21hY2gvdGltZS5oCkBAIC0zNCw3ICszNCw2IEBACiAgKiAgIHRpbWVyIGludGVycnVwdCB3aGljaCBtYXkgYmUgcGVuZGluZy4KICAqLwogc3RydWN0IHN5c190aW1lciB7Ci0Jc3RydWN0IHN5c19kZXZpY2UJZGV2OwogCXZvaWQJCQkoKmluaXQpKHZvaWQpOwogCXZvaWQJCQkoKnN1c3BlbmQpKHZvaWQpOwogCXZvaWQJCQkoKnJlc3VtZSkodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IDg4NWJlMDkuLjgzMjg4OGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xNTksNyArMTU5LDcgQEAKICNpbmNsdWRlIDxtYWNoL2JhcnJpZXJzLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUk1fRE1BX01FTV9CVUZGRVJBQkxFKSB8fCBkZWZpbmVkKENPTkZJR19TTVApCiAjZGVmaW5lIG1iKCkJCWRvIHsgZHNiKCk7IG91dGVyX3N5bmMoKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcm1iKCkJCWRtYigpCisjZGVmaW5lIHJtYigpCQlkc2IoKQogI2RlZmluZSB3bWIoKQkJbWIoKQogI2Vsc2UKICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGM4OTFlYjcuLjg3ZGJlM2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zOTYsNiArMzk2LDEwIEBACiAjZGVmaW5lIF9fTlJfZmFub3RpZnlfaW5pdAkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM2NykKICNkZWZpbmUgX19OUl9mYW5vdGlmeV9tYXJrCQkoX19OUl9TWVNDQUxMX0JBU0UrMzY4KQogI2RlZmluZSBfX05SX3BybGltaXQ2NAkJCShfX05SX1NZU0NBTExfQkFTRSszNjkpCisjZGVmaW5lIF9fTlJfbmFtZV90b19oYW5kbGVfYXQJCShfX05SX1NZU0NBTExfQkFTRSszNzApCisjZGVmaW5lIF9fTlJfb3Blbl9ieV9oYW5kbGVfYXQJCShfX05SX1NZU0NBTExfQkFTRSszNzEpCisjZGVmaW5lIF9fTlJfY2xvY2tfYWRqdGltZQkJKF9fTlJfU1lTQ0FMTF9CQVNFKzM3MikKKyNkZWZpbmUgX19OUl9zeW5jZnMJCQkoX19OUl9TWVNDQUxMX0JBU0UrMzczKQogCiAvKgogICogVGhlIGZvbGxvd2luZyBTV0lzIGFyZSBBUk0gcHJpdmF0ZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKaW5kZXggNWMyNmVjYy4uN2ZiZjI4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKQEAgLTM3OSw2ICszNzksMTAgQEAKIAkJQ0FMTChzeXNfZmFub3RpZnlfaW5pdCkKIAkJQ0FMTChzeXNfZmFub3RpZnlfbWFyaykKIAkJQ0FMTChzeXNfcHJsaW1pdDY0KQorLyogMzcwICovCUNBTEwoc3lzX25hbWVfdG9faGFuZGxlX2F0KQorCQlDQUxMKHN5c19vcGVuX2J5X2hhbmRsZV9hdCkKKwkJQ0FMTChzeXNfY2xvY2tfYWRqdGltZSkKKwkJQ0FMTChzeXNfc3luY2ZzKQogI2lmbmRlZiBzeXNjYWxsc19jb3VudGVkCiAuZXF1IHN5c2NhbGxzX3BhZGRpbmcsICgoTlJfc3lzY2FsbHMgKyAzKSAmIH4zKSAtIE5SX3N5c2NhbGxzCiAjZGVmaW5lIHN5c2NhbGxzX2NvdW50ZWQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLWRlY29kZS5jIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMKaW5kZXggMjM4OTEzMS4uMTVlZWZmNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMtZGVjb2RlLmMKQEAgLTM0LDkgKzM0LDYgQEAKICAqCiAgKiAgICopIElmIHRoZSBQQyBpcyB3cml0dGVuIHRvIGJ5IHRoZSBpbnN0cnVjdGlvbiwgdGhlCiAgKiAgICAgIGluc3RydWN0aW9uIG11c3QgYmUgZnVsbHkgc2ltdWxhdGVkIGluIHNvZnR3YXJlLgotICogICAgICBJZiBpdCBpcyBhIGNvbmRpdGlvbmFsIGluc3RydWN0aW9uLCB0aGUgaGFuZGxlcgotICogICAgICB3aWxsIHVzZSBpbnNuWzBdIHRvIGNvcHkgaXRzIGNvbmRpdGlvbiBjb2RlIHRvCi0gKglzZXQgcjAgdG8gMSBhbmQgaW5zblsxXSB0byAibW92IHBjLCBsciIgdG8gcmV0dXJuLgogICoKICAqICAgKikgT3RoZXJ3aXNlLCBhIG1vZGlmaWVkIGZvcm0gb2YgdGhlIGluc3RydWN0aW9uIGlzCiAgKiAgICAgIGRpcmVjdGx5IGV4ZWN1dGVkLiAgSXRzIGhhbmRsZXIgY2FsbHMgdGhlCkBAIC02OCwxMyArNjUsMTcgQEAKIAogI2RlZmluZSBicmFuY2hfZGlzcGxhY2VtZW50KGluc24pIHNpZ25fZXh0ZW5kKCgoaW5zbikgJiAweGZmZmZmZikgPDwgMiwgMjUpCiAKKyNkZWZpbmUgaXNfcjE1KGluc24sIGJpdHBvcykgKCgoaW5zbikgJiAoMHhmIDw8IGJpdHBvcykpID09ICgweGYgPDwgYml0cG9zKSkKKworLyoKKyAqIFRlc3QgaWYgbG9hZC9zdG9yZSBpbnN0cnVjdGlvbnMgd3JpdGViYWNrIHRoZSBhZGRyZXNzIHJlZ2lzdGVyLgorICogaWYgUCAoYml0IDI0KSA9PSAwIG9yIFcgKGJpdCAyMSkgPT0gMQorICovCisjZGVmaW5lIGlzX3dyaXRlYmFjayhpbnNuKSAoKGluc24gXiAweDAxMDAwMDAwKSAmIDB4MDEyMDAwMDApCisKICNkZWZpbmUgUFNSX2ZzCShQU1JfZnxQU1JfcykKIAogI2RlZmluZSBLUFJPQkVfUkVUVVJOX0lOU1RSVUNUSU9OCTB4ZTFhMGYwMGUJLyogbW92IHBjLCBsciAqLwotI2RlZmluZSBTRVRfUjBfVFJVRV9JTlNUUlVDVElPTgkJMHhlM2EwMDAwMQkvKiBtb3YJcjAsICMxICovCi0KLSNkZWZpbmUJdHJ1ZWNjX2luc24oaW5zbikJKCgoaW5zbikgJiAweGYwMDAwMDAwKSB8IFwKLQkJCQkgKFNFVF9SMF9UUlVFX0lOU1RSVUNUSU9OICYgMHgwZmZmZmZmZikpCiAKIHR5cGVkZWYgbG9uZyAoaW5zbl8wYXJnX2ZuX3QpKHZvaWQpOwogdHlwZWRlZiBsb25nIChpbnNuXzFhcmdfZm5fdCkobG9uZyk7CkBAIC00MTksMTQgKzQyMCwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2ltdWxhdGVfYmJsKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CiAJbG9uZyBpYWRkciA9IChsb25nKXAtPmFkZHI7CiAJaW50IGRpc3AgID0gYnJhbmNoX2Rpc3BsYWNlbWVudChpbnNuKTsKIAotCWlmICghaW5zbnNsb3RfMWFyZ19yZmxhZ3MoMCwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pKQotCQlyZXR1cm47Ci0KIAlpZiAoaW5zbiAmICgxIDw8IDI0KSkKIAkJcmVncy0+QVJNX2xyID0gaWFkZHIgKyA0OwogCkBAIC00NDYsMTQgKzQ0MywxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2ltdWxhdGVfYmx4MmJ4KHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CiAJaW50IHJtID0gaW5zbiAmIDB4ZjsKIAlsb25nIHJtdiA9IHJlZ3MtPnVyZWdzW3JtXTsKIAotCWlmICghaW5zbnNsb3RfMWFyZ19yZmxhZ3MoMCwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pKQotCQlyZXR1cm47Ci0KIAlpZiAoaW5zbiAmICgxIDw8IDUpKQogCQlyZWdzLT5BUk1fbHIgPSAobG9uZylwLT5hZGRyICsgNDsKIApAQCAtNDYzLDkgKzQ1NiwxNiBAQAogCQlyZWdzLT5BUk1fY3BzciB8PSBQU1JfVF9CSVQ7CiB9CiAKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzaW11bGF0ZV9tcnMoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CisJaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDB4ZjhmZjAzZGY7IC8qIE1hc2sgb3V0IGV4ZWN1dGlvbiBzdGF0ZSAqLworCXJlZ3MtPnVyZWdzW3JkXSA9IHJlZ3MtPkFSTV9jcHNyICYgbWFzazsKK30KKwogc3RhdGljIHZvaWQgX19rcHJvYmVzIHNpbXVsYXRlX2xkbTFzdG0xKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CiAJaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOwogCWludCBsYml0ID0gaW5zbiAmICgxIDw8IDIwKTsKQEAgLTQ3Niw5ICs0NzYsNiBAQAogCWludCByZWdfYml0X3ZlY3RvcjsKIAlpbnQgcmVnX2NvdW50OwogCi0JaWYgKCFpbnNuc2xvdF8xYXJnX3JmbGFncygwLCByZWdzLT5BUk1fY3BzciwgaV9mbikpCi0JCXJldHVybjsKLQogCXJlZ19jb3VudCA9IDA7CiAJcmVnX2JpdF92ZWN0b3IgPSBpbnNuICYgMHhmZmZmOwogCXdoaWxlIChyZWdfYml0X3ZlY3RvcikgewpAQCAtNTEwLDExICs1MDcsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2ltdWxhdGVfc3RtMV9wYyhzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwotCi0JaWYgKCFpbnNuc2xvdF8xYXJnX3JmbGFncygwLCByZWdzLT5BUk1fY3BzciwgaV9mbikpCi0JCXJldHVybjsKLQogCXJlZ3MtPkFSTV9wYyA9IChsb25nKXAtPmFkZHIgKyBzdHJfcGNfb2Zmc2V0OwogCXNpbXVsYXRlX2xkbTFzdG0xKHAsIHJlZ3MpOwogCXJlZ3MtPkFSTV9wYyA9IChsb25nKXAtPmFkZHIgKyA0OwpAQCAtNTI1LDI0ICs1MTcsMTYgQEAKIAlyZWdzLT51cmVnc1sxMl0gPSByZWdzLT51cmVnc1sxM107CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX2xkY3N0YyhzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwotCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwotCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKLQlsb25nIHJudiA9IHJlZ3MtPnVyZWdzW3JuXTsKLQotCS8qIFNhdmUgUm4gaW4gY2FzZSBvZiB3cml0ZWJhY2suICovCi0JcmVncy0+dXJlZ3Nbcm5dID0gaW5zbnNsb3RfMWFyZ19yZmxhZ3Mocm52LCByZWdzLT5BUk1fY3BzciwgaV9mbik7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX2xkcmQoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW5zbl8yYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8yYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKIAlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKKwlsb25nIHBwYyA9IChsb25nKXAtPmFkZHIgKyA4OwogCWludCByZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKIAlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7CiAJaW50IHJtID0gaW5zbiAmIDB4ZjsgIC8qIHJtIG1heSBiZSBpbnZhbGlkLCBkb24ndCBjYXJlLiAqLworCWxvbmcgcm12ID0gKHJtID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JtXTsKKwlsb25nIHJudiA9IChybiA9PSAxNSkgPyBwcGMgOiByZWdzLT51cmVnc1tybl07CiAKIAkvKiBOb3QgZm9sbG93aW5nIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbiBoZXJlLCBzbyBuZWVkIGFzbSgpLiAqLwogCV9fYXNtX18gX192b2xhdGlsZV9fICgKQEAgLTU1NCwyOSArNTM4LDM2IEBACiAJCSJzdHIJcjAsICVbcm5dCVxuXHQiCS8qIGluIGNhc2Ugb2Ygd3JpdGViYWNrICovCiAJCSJzdHIJcjIsICVbcmQwXQlcblx0IgogCQkic3RyCXIzLCAlW3JkMV0JXG5cdCIKLQkJOiBbcm5dICAiK20iIChyZWdzLT51cmVnc1tybl0pLAorCQk6IFtybl0gICIrbSIgKHJudiksCiAJCSAgW3JkMF0gIj1tIiAocmVncy0+dXJlZ3NbcmRdKSwKIAkJICBbcmQxXSAiPW0iIChyZWdzLT51cmVnc1tyZCsxXSkKLQkJOiBbcm1dICAgIm0iIChyZWdzLT51cmVnc1tybV0pLAorCQk6IFtybV0gICAibSIgKHJtdiksCiAJCSAgW2Nwc3JdICJyIiAocmVncy0+QVJNX2Nwc3IpLAogCQkgIFtpX2ZuXSAiciIgKGlfZm4pCiAJCTogInIwIiwgInIxIiwgInIyIiwgInIzIiwgImxyIiwgImNjIgogCSk7CisJaWYgKGlzX3dyaXRlYmFjayhpbnNuKSkKKwkJcmVncy0+dXJlZ3Nbcm5dID0gcm52OwogfQogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9zdHJkKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWluc25fNGFyZ19mbl90ICppX2ZuID0gKGluc25fNGFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CisJbG9uZyBwcGMgPSAobG9uZylwLT5hZGRyICsgODsKIAlpbnQgcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7CiAJaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOwogCWludCBybSAgPSBpbnNuICYgMHhmOwotCWxvbmcgcm52ID0gcmVncy0+dXJlZ3Nbcm5dOwotCWxvbmcgcm12ID0gcmVncy0+dXJlZ3Nbcm1dOyAgLyogcm0vcm12IG1heSBiZSBpbnZhbGlkLCBkb24ndCBjYXJlLiAqLworCWxvbmcgcm52ID0gKHJuID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JuXTsKKwkvKiBybS9ybXYgbWF5IGJlIGludmFsaWQsIGRvbid0IGNhcmUuICovCisJbG9uZyBybXYgPSAocm0gPT0gMTUpID8gcHBjIDogcmVncy0+dXJlZ3Nbcm1dOworCWxvbmcgcm52X3diOwogCi0JcmVncy0+dXJlZ3Nbcm5dID0gaW5zbnNsb3RfNGFyZ19yZmxhZ3Mocm52LCBybXYsIHJlZ3MtPnVyZWdzW3JkXSwKKwlybnZfd2IgPSBpbnNuc2xvdF80YXJnX3JmbGFncyhybnYsIHJtdiwgcmVncy0+dXJlZ3NbcmRdLAogCQkJCQkgICAgICAgcmVncy0+dXJlZ3NbcmQrMV0sCiAJCQkJCSAgICAgICByZWdzLT5BUk1fY3BzciwgaV9mbik7CisJaWYgKGlzX3dyaXRlYmFjayhpbnNuKSkKKwkJcmVncy0+dXJlZ3Nbcm5dID0gcm52X3diOwogfQogCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9sZHIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC02MzAsMzEgKzYyMSw2IEBACiAJCXJlZ3MtPnVyZWdzW3JuXSA9IHJudl93YjsgIC8qIFNhdmUgUm4gaW4gY2FzZSBvZiB3cml0ZWJhY2suICovCiB9CiAKLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX21ycmMoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JaW5zbl9sbHJldF8wYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl9sbHJldF8wYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKLQlrcHJvYmVfb3Bjb2RlX3QgaW5zbiA9IHAtPm9wY29kZTsKLQl1bmlvbiByZWdfcGFpciBmbnI7Ci0JaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOwotCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKLQotCWZuci5kciA9IGluc25zbG90X2xscmV0XzBhcmdfcmZsYWdzKHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKLQlyZWdzLT51cmVnc1tybl0gPSBmbnIucjA7Ci0JcmVncy0+dXJlZ3NbcmRdID0gZm5yLnIxOwotfQotCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9tY3JyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWluc25fMmFyZ19mbl90ICppX2ZuID0gKGluc25fMmFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07Ci0Ja3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7Ci0JaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOwotCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKLQlsb25nIHJudiA9IHJlZ3MtPnVyZWdzW3JuXTsKLQlsb25nIHJkdiA9IHJlZ3MtPnVyZWdzW3JkXTsKLQotCWluc25zbG90XzJhcmdfcmZsYWdzKHJudiwgcmR2LCByZWdzLT5BUk1fY3BzciwgaV9mbik7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX3NhdChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwpAQCAtNjg4LDMyICs2NTQsMzIgQEAKIAlpbnNuc2xvdF8wYXJnX3JmbGFncyhyZWdzLT5BUk1fY3BzciwgaV9mbik7CiB9CiAKLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX3JkMTIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9ub3Aoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JaW5zbl8wYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8wYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzCitlbXVsYXRlX3JkMTJfbW9kaWZ5KHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CiAJaW50IHJkID0gKGluc24gPj4gMTIpICYgMHhmOworCWxvbmcgcmR2ID0gcmVncy0+dXJlZ3NbcmRdOwogCi0JcmVncy0+dXJlZ3NbcmRdID0gaW5zbnNsb3RfMGFyZ19yZmxhZ3MocmVncy0+QVJNX2Nwc3IsIGlfZm4pOworCXJlZ3MtPnVyZWdzW3JkXSA9IGluc25zbG90XzFhcmdfcmZsYWdzKHJkdiwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pOwogfQogCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgZW11bGF0ZV9pcmQxMihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcworZW11bGF0ZV9yZDEycm4wX21vZGlmeShzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOworCWluc25fMmFyZ19mbl90ICppX2ZuID0gKGluc25fMmFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CiAJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7Ci0JaW50IGlyZCA9IChpbnNuID4+IDEyKSAmIDB4ZjsKLQotCWluc25zbG90XzFhcmdfcmZsYWdzKHJlZ3MtPnVyZWdzW2lyZF0sIHJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKLX0KLQotc3RhdGljIHZvaWQgX19rcHJvYmVzIGVtdWxhdGVfcm4xNihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlpbnNuXzFhcmdfZm5fdCAqaV9mbiA9IChpbnNuXzFhcmdfZm5fdCAqKSZwLT5haW5zbi5pbnNuWzBdOwotCWtwcm9iZV9vcGNvZGVfdCBpbnNuID0gcC0+b3Bjb2RlOwotCWludCBybiA9IChpbnNuID4+IDE2KSAmIDB4ZjsKKwlpbnQgcmQgPSAoaW5zbiA+PiAxMikgJiAweGY7CisJaW50IHJuID0gaW5zbiAmIDB4ZjsKKwlsb25nIHJkdiA9IHJlZ3MtPnVyZWdzW3JkXTsKIAlsb25nIHJudiA9IHJlZ3MtPnVyZWdzW3JuXTsKIAotCWluc25zbG90XzFhcmdfcmZsYWdzKHJudiwgcmVncy0+QVJNX2Nwc3IsIGlfZm4pOworCXJlZ3MtPnVyZWdzW3JkXSA9IGluc25zbG90XzJhcmdfcmZsYWdzKHJkdiwgcm52LCByZWdzLT5BUk1fY3BzciwgaV9mbik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBlbXVsYXRlX3JkMTJybTAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC04MTksNiArNzg1LDE3IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcworZW11bGF0ZV9hbHVfdGVzdHNfaW1tKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWluc25fMWFyZ19mbl90ICppX2ZuID0gKGluc25fMWFyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CisJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CisJaW50IHJuID0gKGluc24gPj4gMTYpICYgMHhmOworCWxvbmcgcm52ID0gKHJuID09IDE1KSA/IChsb25nKXAtPmFkZHIgKyA4IDogcmVncy0+dXJlZ3Nbcm5dOworCisJaW5zbnNsb3RfMWFyZ19yd2ZsYWdzKHJudiwgJnJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzCiBlbXVsYXRlX2FsdV9yZmxhZ3Moc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW5zbl8zYXJnX2ZuX3QgKmlfZm4gPSAoaW5zbl8zYXJnX2ZuX3QgKikmcC0+YWluc24uaW5zblswXTsKQEAgLTg1NCwxNCArODMxLDM0IEBACiAJCWluc25zbG90XzNhcmdfcndmbGFncyhybnYsIHJtdiwgcnN2LCAmcmVncy0+QVJNX2Nwc3IsIGlfZm4pOwogfQogCitzdGF0aWMgdm9pZCBfX2twcm9iZXMKK2VtdWxhdGVfYWx1X3Rlc3RzKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWluc25fM2FyZ19mbl90ICppX2ZuID0gKGluc25fM2FyZ19mbl90ICopJnAtPmFpbnNuLmluc25bMF07CisJa3Byb2JlX29wY29kZV90IGluc24gPSBwLT5vcGNvZGU7CisJbG9uZyBwcGMgPSAobG9uZylwLT5hZGRyICsgODsKKwlpbnQgcm4gPSAoaW5zbiA+PiAxNikgJiAweGY7CisJaW50IHJzID0gKGluc24gPj4gOCkgJiAweGY7CS8qIHJzL3JzdiBtYXkgYmUgaW52YWxpZCwgZG9uJ3QgY2FyZS4gKi8KKwlpbnQgcm0gPSBpbnNuICYgMHhmOworCWxvbmcgcm52ID0gKHJuID09IDE1KSA/IHBwYyA6IHJlZ3MtPnVyZWdzW3JuXTsKKwlsb25nIHJtdiA9IChybSA9PSAxNSkgPyBwcGMgOiByZWdzLT51cmVnc1tybV07CisJbG9uZyByc3YgPSByZWdzLT51cmVnc1tyc107CisKKwlpbnNuc2xvdF8zYXJnX3J3ZmxhZ3Mocm52LCBybXYsIHJzdiwgJnJlZ3MtPkFSTV9jcHNyLCBpX2ZuKTsKK30KKwogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCiBwcmVwX2VtdWxhdGVfbGRyX3N0cihrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogewotCWludCBpYml0ID0gKGluc24gJiAoMSA8PCAyNikpID8gMjUgOiAyMjsKKwlpbnQgbm90X2ltbSA9IChpbnNuICYgKDEgPDwgMjYpKSA/IChpbnNuICYgKDEgPDwgMjUpKQorCQkJCQkgOiAofmluc24gJiAoMSA8PCAyMikpOworCisJaWYgKGlzX3dyaXRlYmFjayhpbnNuKSAmJiBpc19yMTUoaW5zbiwgMTYpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogV3JpdGViYWNrIHRvIFBDICovCiAKIAlpbnNuICY9IDB4ZmZmMDBmZmY7CiAJaW5zbiB8PSAweDAwMDAxMDAwOwkvKiBSbiA9IHIwLCBSZCA9IHIxICovCi0JaWYgKGluc24gJiAoMSA8PCBpYml0KSkgeworCWlmIChub3RfaW1tKSB7CiAJCWluc24gJj0gfjB4ZjsKIAkJaW5zbiB8PSAyOwkvKiBSbSA9IHIyICovCiAJfQpAQCAtODcxLDggKzg2OCwzNyBAQAogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKK3ByZXBfZW11bGF0ZV9yZDEyX21vZGlmeShrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQoreworCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KKworCWluc24gJj0gMHhmZmZmMGZmZjsJLyogUmQgPSByMCAqLworCWFzaS0+aW5zblswXSA9IGluc247CisJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX3JkMTJfbW9kaWZ5OworCXJldHVybiBJTlNOX0dPT0Q7Cit9CisKK3N0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcworcHJlcF9lbXVsYXRlX3JkMTJybjBfbW9kaWZ5KGtwcm9iZV9vcGNvZGVfdCBpbnNuLAorCQkJICAgIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKK3sKKwlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisKKwlpbnNuICY9IDB4ZmZmZjBmZjA7CS8qIFJkID0gcjAgKi8KKwlpbnNuIHw9IDB4MDAwMDAwMDE7CS8qIFJuID0gcjEgKi8KKwlhc2ktPmluc25bMF0gPSBpbnNuOworCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9yZDEycm4wX21vZGlmeTsKKwlyZXR1cm4gSU5TTl9HT09EOworfQorCitzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKIHByZXBfZW11bGF0ZV9yZDEycm0wKGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCiAJaW5zbiAmPSAweGZmZmYwZmYwOwkvKiBSZCA9IHIwLCBSbSA9IHIwICovCiAJYXNpLT5pbnNuWzBdID0gaW5zbjsKIAlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfcmQxMnJtMDsKQEAgLTg4MCwxOCArOTA2LDEyIEBACiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwotcHJlcF9lbXVsYXRlX3JkMTIoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKLXsKLQlpbnNuICY9IDB4ZmZmZjBmZmY7CS8qIFJkID0gcjAgKi8KLQlhc2ktPmluc25bMF0gPSBpbnNuOwotCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9yZDEyOwotCXJldHVybiBJTlNOX0dPT0Q7Ci19Ci0KLXN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwogcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhrcHJvYmVfb3Bjb2RlX3QgaW5zbiwKIAkJCQlzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCiAJaW5zbiAmPSAweGZmZjAwZmYwOwkvKiBSZCA9IHIwLCBSbiA9IHIwICovCiAJaW5zbiB8PSAweDAwMDAwMDAxOwkvKiBSbSA9IHIxICovCiAJYXNpLT5pbnNuWzBdID0gaW5zbjsKQEAgLTkwMyw2ICs5MjMsOSBAQAogcHJlcF9lbXVsYXRlX3JkMTZyczhybTBfd2ZsYWdzKGtwcm9iZV9vcGNvZGVfdCBpbnNuLAogCQkJICAgICAgIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwlpZiAoaXNfcjE1KGluc24sIDE2KSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisKIAlpbnNuICY9IDB4ZmZmMGYwZjA7CS8qIFJkID0gcjAsIFJzID0gcjAgKi8KIAlpbnNuIHw9IDB4MDAwMDAwMDE7CS8qIFJtID0gcjEgICAgICAgICAgKi8KIAlhc2ktPmluc25bMF0gPSBpbnNuOwpAQCAtOTE0LDYgKzkzNyw5IEBACiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGtwcm9iZV9vcGNvZGVfdCBpbnNuLAogCQkJCSAgIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwlpZiAoaXNfcjE1KGluc24sIDE2KSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCisKIAlpbnNuICY9IDB4ZmZmMDAwZjA7CS8qIFJkID0gcjAsIFJuID0gcjAgKi8KIAlpbnNuIHw9IDB4MDAwMDAxMDI7CS8qIFJzID0gcjEsIFJtID0gcjIgKi8KIAlhc2ktPmluc25bMF0gPSBpbnNuOwpAQCAtOTI1LDYgKzk1MSw5IEBACiBwcmVwX2VtdWxhdGVfcmRoaTE2cmRsbzEycnM4cm0wX3dmbGFncyhrcHJvYmVfb3Bjb2RlX3QgaW5zbiwKIAkJCQkgICAgICAgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCWlmIChpc19yMTUoaW5zbiwgMTYpIHx8IGlzX3IxNShpbnNuLCAxMikpCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZEhpIG9yIFJkTG8gaXMgUEMgKi8KKwogCWluc24gJj0gMHhmZmYwMDBmMDsJLyogUmRIaSA9IHIwLCBSZExvID0gcjEgKi8KIAlpbnNuIHw9IDB4MDAwMDEyMDM7CS8qIFJzID0gcjIsIFJtID0gcjMgKi8KIAlhc2ktPmluc25bMF0gPSBpbnNuOwpAQCAtOTQ1LDIwICs5NzQsMTMgQEAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2Jlcwogc3BhY2VfMTExMShrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogewotCS8qIENQUyBtbW9kID09IDEgOiAxMTExIDAwMDEgMDAwMCB4eDEwIHh4eHggeHh4eCB4eDB4IHh4eHggKi8KLQkvKiBSRkUgICAgICAgICAgIDogMTExMSAxMDB4IHgweDEgeHh4eCB4eHh4IDEwMTAgeHh4eCB4eHh4ICovCi0JLyogU1JTICAgICAgICAgICA6IDExMTEgMTAweCB4MXgwIDExMDEgeHh4eCAwMTAxIHh4eHggeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4ZmZmMzAwMjApID09IDB4ZjEwMjAwMDAgfHwKLQkgICAgKGluc24gJiAweGZlNTAwZjAwKSA9PSAweGY4MTAwYTAwIHx8Ci0JICAgIChpbnNuICYgMHhmZTVmMGYwMCkgPT0gMHhmODRkMDUwMCkKLQkJcmV0dXJuIElOU05fUkVKRUNURUQ7Ci0KLQkvKiBQTEQgOiAxMTExIDAxeDEgeDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAqLwotCWlmICgoaW5zbiAmIDB4ZmQ3MDAwMDApID09IDB4ZjQ1MDAwMDApIHsKLQkJaW5zbiAmPSAweGZmZjBmZmZmOwkvKiBSbiA9IHIwICovCi0JCWFzaS0+aW5zblswXSA9IGluc247Ci0JCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9ybjE2OwotCQlyZXR1cm4gSU5TTl9HT09EOworCS8qIG1lbW9yeSBoaW50IDogMTExMSAwMTAwIHgwMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKi8KKwkvKiBQTERJICAgICAgICA6IDExMTEgMDEwMCB4MTAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6ICovCisJLyogUExEVyAgICAgICAgOiAxMTExIDAxMDEgeDAwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAqLworCS8qIFBMRCAgICAgICAgIDogMTExMSAwMTAxIHgxMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKi8KKwlpZiAoKGluc24gJiAweGZlMzAwMDAwKSA9PSAweGY0MTAwMDAwKSB7CisJCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9ub3A7CisJCXJldHVybiBJTlNOX0dPT0RfTk9fU0xPVDsKIAl9CiAKIAkvKiBCTFgoMSkgOiAxMTExIDEwMXggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggOiAqLwpAQCAtOTY3LDQxICs5ODksMjIgQEAKIAkJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOwogCX0KIAotCS8qIFNFVEVORCA6IDExMTEgMDAwMSAwMDAwIDAwMDEgeHh4eCB4eHh4IDAwMDAgeHh4eCAqLwotCS8qIENEUDIgICA6IDExMTEgMTExMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eDAgeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4ZmZmZjAwZjApID09IDB4ZjEwMTAwMDAgfHwKLQkgICAgKGluc24gJiAweGZmMDAwMDEwKSA9PSAweGZlMDAwMDAwKSB7Ci0JCWFzaS0+aW5zblswXSA9IGluc247Ci0JCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9ub25lOwotCQlyZXR1cm4gSU5TTl9HT09EOwotCX0KKwkvKiBDUFMgICA6IDExMTEgMDAwMSAwMDAwIHh4eDAgeHh4eCB4eHh4IHh4MHggeHh4eCAqLworCS8qIFNFVEVORDogMTExMSAwMDAxIDAwMDAgMDAwMSB4eHh4IHh4eHggMDAwMCB4eHh4ICovCiAKKwkvKiBTUlMgICA6IDExMTEgMTAweCB4MXgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCS8qIFJGRSAgIDogMTExMSAxMDB4IHgweDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisKKwkvKiBDb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuLi4gKi8KIAkvKiBNQ1JSMiA6IDExMTEgMTEwMCAwMTAwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6IChSZCAhPSBSbikgKi8KIAkvKiBNUlJDMiA6IDExMTEgMTEwMCAwMTAxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCA6IChSZCAhPSBSbikgKi8KLQlpZiAoKGluc24gJiAweGZmZTAwMDAwKSA9PSAweGZjNDAwMDAwKSB7Ci0JCWluc24gJj0gMHhmZmYwMGZmZjsJLyogUm4gPSByMCAqLwotCQlpbnNuIHw9IDB4MDAwMDEwMDA7CS8qIFJkID0gcjEgKi8KLQkJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQkJYXNpLT5pbnNuX2hhbmRsZXIgPQotCQkJKGluc24gJiAoMSA8PCAyMCkpID8gZW11bGF0ZV9tcnJjIDogZW11bGF0ZV9tY3JyOwotCQlyZXR1cm4gSU5TTl9HT09EOwotCX0KKwkvKiBMREMyICA6IDExMTEgMTEweCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCS8qIFNUQzIgIDogMTExMSAxMTB4IHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJLyogQ0RQMiAgOiAxMTExIDExMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHgwIHh4eHggKi8KKwkvKiBNQ1IyICA6IDExMTEgMTExMCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLworCS8qIE1SQzIgIDogMTExMSAxMTEwIHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCiAKLQkvKiBMREMyIDogMTExMSAxMTB4IHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JLyogU1RDMiA6IDExMTEgMTEweCB4eHgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4ZmUwMDAwMDApID09IDB4ZmMwMDAwMDApIHsKLQkJaW5zbiAmPSAweGZmZjBmZmZmOyAgICAgIC8qIFJuID0gcjAgKi8KLQkJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX2xkY3N0YzsKLQkJcmV0dXJuIElOU05fR09PRDsKLQl9Ci0KLQkvKiBNQ1IyIDogMTExMSAxMTEwIHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCi0JLyogTVJDMiA6IDExMTEgMTExMCB4eHgxIHh4eHggeHh4eCB4eHh4IHh4eDEgeHh4eCAqLwotCWluc24gJj0gMHhmZmZmMGZmZjsJLyogUmQgPSByMCAqLwotCWFzaS0+aW5zblswXSAgICAgID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/IGVtdWxhdGVfcmQxMiA6IGVtdWxhdGVfaXJkMTI7Ci0JcmV0dXJuIElOU05fR09PRDsKKwlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCkBAIC0xMDEwLDE5ICsxMDEzLDE4IEBACiAJLyogY2NjYyAwMDAxIDB4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHgwIHh4eHggKi8KIAlpZiAoKGluc24gJiAweDBmOTAwMDEwKSA9PSAweDAxMDAwMDAwKSB7CiAKLQkJLyogQlhKICA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAwMTAgeHh4eCAqLwotCQkvKiBNU1IgIDogY2NjYyAwMDAxIDB4MTAgeHh4eCB4eHh4IHh4eHggMDAwMCB4eHh4ICovCi0JCWlmICgoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDEyMDAwMjAgfHwKLQkJICAgIChpbnNuICYgMHgwZmIwMDBmMCkgPT0gMHgwMTIwMDAwMCkKLQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwotCi0JCS8qIE1SUyA6IGNjY2MgMDAwMSAweDAwIHh4eHggeHh4eCB4eHh4IDAwMDAgeHh4eCAqLwotCQlpZiAoKGluc24gJiAweDBmYjAwMDEwKSA9PSAweDAxMDAwMDAwKQotCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEyKGluc24sIGFzaSk7CisJCS8qIE1SUyBjcHNyIDogY2NjYyAwMDAxIDAwMDAgeHh4eCB4eHh4IHh4eHggMDAwMCB4eHh4ICovCisJCWlmICgoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDEwMDAwMDApIHsKKwkJCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLworCQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBzaW11bGF0ZV9tcnM7CisJCQlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CisJCX0KIAogCQkvKiBTTUxBTHh5IDogY2NjYyAwMDAxIDAxMDAgeHh4eCB4eHh4IHh4eHggMXh4MCB4eHh4ICovCiAJCWlmICgoaW5zbiAmIDB4MGZmMDAwOTApID09IDB4MDE0MDAwODApCi0JCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkaGkxNnJkbG8xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmRoaTE2cmRsbzEycnM4cm0wX3dmbGFncyhpbnNuLAorCQkJCQkJCQkJYXNpKTsKIAogCQkvKiBTTVVMV3kgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAxeDEwIHh4eHggKi8KIAkJLyogU01VTHh5IDogY2NjYyAwMDAxIDAxMTAgeHh4eCB4eHh4IHh4eHggMXh4MCB4eHh4ICovCkBAIC0xMDMxLDI0ICsxMDMzLDI5IEBACiAJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CiAKIAkJLyogU01MQXh5IDogY2NjYyAwMDAxIDAwMDAgeHh4eCB4eHh4IHh4eHggMXh4MCB4eHh4IDogUSAqLwotCQkvKiBTTUxBV3kgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAweDAwIHh4eHggOiBRICovCi0JCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJCS8qIFNNTEFXeSA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDF4MDAgeHh4eCA6IFEgKi8KKwkJaWYgKChpbnNuICYgMHgwZmYwMDA5MCkgPT0gMHgwMTAwMDA4MCB8fAorCQkgICAgKGluc24gJiAweDBmZjAwMGIwKSA9PSAweDAxMjAwMDgwKQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKIAorCQkvKiBCWEogICAgICA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAwMTAgeHh4eCAqLworCQkvKiBNU1IgICAgICA6IGNjY2MgMDAwMSAweDEwIHh4eHggeHh4eCB4eHh4IDAwMDAgeHh4eCAqLworCQkvKiBNUlMgc3BzciA6IGNjY2MgMDAwMSAwMTAwIHh4eHggeHh4eCB4eHh4IDAwMDAgeHh4eCAqLworCisJCS8qIE90aGVyIGluc3RydWN0aW9uIGVuY29kaW5ncyBhcmVuJ3QgeWV0IGRlZmluZWQgKi8KKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CiAJfQogCiAJLyogY2NjYyAwMDAxIDB4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCAweHgxIHh4eHggKi8KIAllbHNlIGlmICgoaW5zbiAmIDB4MGY5MDAwOTApID09IDB4MDEwMDAwMTApIHsKIAotCQkvKiBCS1BUIDogMTExMCAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4ICovCi0JCWlmICgoaW5zbiAmIDB4ZmZmMDAwZjApID09IDB4ZTEyMDAwNzApCi0JCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKLQogCQkvKiBCTFgoMikgOiBjY2NjIDAwMDEgMDAxMCB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggKi8KIAkJLyogQlggICAgIDogY2NjYyAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4ICovCiAJCWlmICgoaW5zbiAmIDB4MGZmMDAwZDApID09IDB4MDEyMDAwMTApIHsKLQkJCWFzaS0+aW5zblswXSA9IHRydWVjY19pbnNuKGluc24pOworCQkJaWYgKChpbnNuICYgMHgwZmYwMDBmZikgPT0gMHgwMTIwMDAzZikKKwkJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsgLyogQkxYIHBjICovCiAJCQlhc2ktPmluc25faGFuZGxlciA9IHNpbXVsYXRlX2JseDJieDsKLQkJCXJldHVybiBJTlNOX0dPT0Q7CisJCQlyZXR1cm4gSU5TTl9HT09EX05PX1NMT1Q7CiAJCX0KIAogCQkvKiBDTFogOiBjY2NjIDAwMDEgMDExMCB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggKi8KQEAgLTEwNTksMTcgKzEwNjYsMjcgQEAKIAkJLyogUVNVQiAgICA6IGNjY2MgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6USAqLwogCQkvKiBRREFERCAgIDogY2NjYyAwMDAxIDAxMDAgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDpRICovCiAJCS8qIFFEU1VCICAgOiBjY2NjIDAwMDEgMDExMCB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOlEgKi8KLQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJaWYgKChpbnNuICYgMHgwZjkwMDBmMCkgPT0gMHgwMTAwMDA1MCkKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisKKwkJLyogQktQVCA6IDExMTAgMDAwMSAwMDEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCAqLworCQkvKiBTTUMgIDogY2NjYyAwMDAxIDAxMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4ICovCisKKwkJLyogT3RoZXIgaW5zdHJ1Y3Rpb24gZW5jb2RpbmdzIGFyZW4ndCB5ZXQgZGVmaW5lZCAqLworCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIAl9CiAKIAkvKiBjY2NjIDAwMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwotCWVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDA5MCkgPT0gMHgwMDAwMDA5MCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDBmMCkgPT0gMHgwMDAwMDA5MCkgewogCiAJCS8qIE1VTCAgICA6IGNjY2MgMDAwMCAwMDAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KIAkJLyogTVVMUyAgIDogY2NjYyAwMDAwIDAwMDEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDpjYyAqLwogCQkvKiBNTEEgICAgOiBjY2NjIDAwMDAgMDAxMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCiAJCS8qIE1MQVMgICA6IGNjY2MgMDAwMCAwMDExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6Y2MgKi8KIAkJLyogVU1BQUwgIDogY2NjYyAwMDAwIDAxMDAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCQkvKiB1bmRlZiAgOiBjY2NjIDAwMDAgMDEwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCisJCS8qIE1MUyAgICA6IGNjY2MgMDAwMCAwMTEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KKwkJLyogdW5kZWYgIDogY2NjYyAwMDAwIDAxMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLwogCQkvKiBVTVVMTCAgOiBjY2NjIDAwMDAgMTAwMCB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCiAJCS8qIFVNVUxMUyA6IGNjY2MgMDAwMCAxMDAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6Y2MgKi8KIAkJLyogVU1MQUwgIDogY2NjYyAwMDAwIDEwMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLwpAQCAtMTA3OCwxMyArMTA5NSwxNSBAQAogCQkvKiBTTVVMTFMgOiBjY2NjIDAwMDAgMTEwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOmNjICovCiAJCS8qIFNNTEFMICA6IGNjY2MgMDAwMCAxMTEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KIAkJLyogU01MQUxTIDogY2NjYyAwMDAwIDExMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDpjYyAqLwotCQlpZiAoKGluc24gJiAweDBmZTAwMGYwKSA9PSAweDAwMDAwMDkwKSB7Ci0JCSAgICAgICByZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7Ci0JCX0gZWxzZSBpZiAgKChpbnNuICYgMHgwZmUwMDBmMCkgPT0gMHgwMDIwMDA5MCkgewotCQkgICAgICAgcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKLQkJfSBlbHNlIHsKLQkJICAgICAgIHJldHVybiBwcmVwX2VtdWxhdGVfcmRoaTE2cmRsbzEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwotCQl9CisJCWlmICgoaW5zbiAmIDB4MDBkMDAwMDApID09IDB4MDA1MDAwMDApCisJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKKwkJZWxzZSBpZiAoKGluc24gJiAweDAwZTAwMDAwKSA9PSAweDAwMDAwMDAwKQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQllbHNlIGlmICgoaW5zbiAmIDB4MDBhMDAwMDApID09IDB4MDAyMDAwMDApCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQllbHNlCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkaGkxNnJkbG8xMnJzOHJtMF93ZmxhZ3MoaW5zbiwKKwkJCQkJCQkJCWFzaSk7CiAJfQogCiAJLyogY2NjYyAwMDB4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAxeHgxIHh4eHggKi8KQEAgLTEwOTIsMjMgKzExMTEsNDUgQEAKIAogCQkvKiBTV1AgICA6IGNjY2MgMDAwMSAwMDAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwogCQkvKiBTV1BCICA6IGNjY2MgMDAwMSAwMTAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwotCQkvKiBMRFJEICA6IGNjY2MgMDAweCB4eHgwIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCAqLwotCQkvKiBTVFJEICA6IGNjY2MgMDAweCB4eHgwIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCAqLworCQkvKiA/Pz8gICA6IGNjY2MgMDAwMSAweDAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiA/Pz8gICA6IGNjY2MgMDAwMSAweDEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiA/Pz8gICA6IGNjY2MgMDAwMSAweDExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwogCQkvKiBTVFJFWCA6IGNjY2MgMDAwMSAxMDAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLwogCQkvKiBMRFJFWCA6IGNjY2MgMDAwMSAxMDAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBTVFJFWEQ6IGNjY2MgMDAwMSAxMDEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBMRFJFWEQ6IGNjY2MgMDAwMSAxMDExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBTVFJFWEI6IGNjY2MgMDAwMSAxMTAwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBMRFJFWEI6IGNjY2MgMDAwMSAxMTAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBTVFJFWEg6IGNjY2MgMDAwMSAxMTEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCQkvKiBMRFJFWEg6IGNjY2MgMDAwMSAxMTExIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCAqLworCisJCS8qIExEUkQgIDogY2NjYyAwMDB4IHh4eDAgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4ICovCisJCS8qIFNUUkQgIDogY2NjYyAwMDB4IHh4eDAgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4ICovCiAJCS8qIExEUkggIDogY2NjYyAwMDB4IHh4eDEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4ICovCiAJCS8qIFNUUkggIDogY2NjYyAwMDB4IHh4eDAgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4ICovCiAJCS8qIExEUlNCIDogY2NjYyAwMDB4IHh4eDEgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4ICovCiAJCS8qIExEUlNIIDogY2NjYyAwMDB4IHh4eDEgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4ICovCi0JCWlmICgoaW5zbiAmIDB4MGZiMDAwZjApID09IDB4MDEwMDAwOTApIHsKLQkJCS8qIFNXUC9TV1BCICovCi0JCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCQlpZiAoKGluc24gJiAweDBmMDAwMGYwKSA9PSAweDAxMDAwMDkwKSB7CisJCQlpZiAoKGluc24gJiAweDBmYjAwMGYwKSA9PSAweDAxMDAwMDkwKSB7CisJCQkJLyogU1dQL1NXUEIgKi8KKwkJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybjE2cm0wX3dmbGFncyhpbnNuLAorCQkJCQkJCQkJYXNpKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogU1RSRVgvTERSRVggdmFyaWFudHMgYW5kIHVuYWxsb2NhZWQgc3BhY2UgKi8KKwkJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKKwkJCX0KKwogCQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTEwMDBkMCkgPT0gMHgwMDAwMGQwKSB7CiAJCQkvKiBTVFJEL0xEUkQgKi8KKwkJCWlmICgoaW5zbiAmIDB4MDAwMGUwMDApID09IDB4MDAwMGUwMDApCisJCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIExSIG9yIFBDICovCisJCQlpZiAoaXNfd3JpdGViYWNrKGluc24pICYmIGlzX3IxNShpbnNuLCAxNikpCisJCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFdyaXRlYmFjayB0byBQQyAqLworCiAJCQlpbnNuICY9IDB4ZmZmMDBmZmY7CiAJCQlpbnNuIHw9IDB4MDAwMDIwMDA7CS8qIFJuID0gcjAsIFJkID0gcjIgKi8KLQkJCWlmIChpbnNuICYgKDEgPDwgMjIpKSB7Ci0JCQkJLyogSSBiaXQgKi8KKwkJCWlmICghKGluc24gJiAoMSA8PCAyMikpKSB7CisJCQkJLyogUmVnaXN0ZXIgaW5kZXggKi8KIAkJCQlpbnNuICY9IH4weGY7CiAJCQkJaW5zbiB8PSAxOwkvKiBSbSA9IHIxICovCiAJCQl9CkBAIC0xMTE4LDYgKzExNTksOSBAQAogCQkJcmV0dXJuIElOU05fR09PRDsKIAkJfQogCisJCS8qIExEUkgvU1RSSC9MRFJTQi9MRFJTSCAqLworCQlpZiAoaXNfcjE1KGluc24sIDEyKSkKKwkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBSZCBpcyBQQyAqLwogCQlyZXR1cm4gcHJlcF9lbXVsYXRlX2xkcl9zdHIoaW5zbiwgYXNpKTsKIAl9CiAKQEAgLTExMjUsNyArMTE2OSw3IEBACiAKIAkvKgogCSAqIEFMVSBvcCB3aXRoIFMgYml0IGFuZCBSZCA9PSAxNSA6Ci0JICogCWNjY2MgMDAweCB4eHgxIHh4eHggMTExMSB4eHh4IHh4eHggeHh4eAorCSAqCWNjY2MgMDAweCB4eHgxIHh4eHggMTExMSB4eHh4IHh4eHggeHh4eAogCSAqLwogCWlmICgoaW5zbiAmIDB4MGUxMGYwMDApID09IDB4MDAxMGYwMDApCiAJCXJldHVybiBJTlNOX1JFSkVDVEVEOwpAQCAtMTE1NCwyMiArMTE5OCw2MSBAQAogCQlpbnNuIHw9IDB4MDAwMDAyMDA7ICAgICAvKiBScyA9IHIyICovCiAJfQogCWFzaS0+aW5zblswXSA9IGluc247Ci0JYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyAgLyogUy1iaXQgKi8KKworCWlmICgoaW5zbiAmIDB4MGY5MDAwMDApID09IDB4MDExMDAwMDApIHsKKwkJLyoKKwkJICogVFNUIDogY2NjYyAwMDAxIDAwMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqIFRFUSA6IGNjY2MgMDAwMSAwMDExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKiBDTVAgOiBjY2NjIDAwMDEgMDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICogQ01OIDogY2NjYyAwMDAxIDAxMTEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqLworCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfYWx1X3Rlc3RzOworCX0gZWxzZSB7CisJCS8qIEFMVSBvcHMgd2hpY2ggd3JpdGUgdG8gUmQgKi8KKwkJYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyAgLyogUy1iaXQgKi8KIAkJCQllbXVsYXRlX2FsdV9yd2ZsYWdzIDogZW11bGF0ZV9hbHVfcmZsYWdzOworCX0KIAlyZXR1cm4gSU5TTl9HT09EOwogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKIHNwYWNlX2NjY2NfMDAxeChrcHJvYmVfb3Bjb2RlX3QgaW5zbiwgc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYXNpKQogeworCS8qIE1PVlcgIDogY2NjYyAwMDExIDAwMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJLyogTU9WVCAgOiBjY2NjIDAwMTEgMDEwMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwlpZiAoKGluc24gJiAweDBmYjAwMDAwKSA9PSAweDAzMDAwMDAwKQorCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJfbW9kaWZ5KGluc24sIGFzaSk7CisKKwkvKiBoaW50cyA6IGNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IHh4eHggeHh4eCAqLworCWlmICgoaW5zbiAmIDB4MGZmZjAwMDApID09IDB4MDMyMDAwMDApIHsKKwkJdW5zaWduZWQgb3AyID0gaW5zbiAmIDB4MDAwMDAwZmY7CisJCWlmIChvcDIgPT0gMHgwMSB8fCBvcDIgPT0gMHgwNCkgeworCQkJLyogWUlFTEQgOiBjY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCAwMDAwIDAwMDEgKi8KKwkJCS8qIFNFViAgIDogY2NjYyAwMDExIDAwMTAgMDAwMCB4eHh4IHh4eHggMDAwMCAwMTAwICovCisJCQlhc2ktPmluc25bMF0gPSBpbnNuOworCQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX25vbmU7CisJCQlyZXR1cm4gSU5TTl9HT09EOworCQl9IGVsc2UgaWYgKG9wMiA8PSAweDAzKSB7CisJCQkvKiBOT1AgICA6IGNjY2MgMDAxMSAwMDEwIDAwMDAgeHh4eCB4eHh4IDAwMDAgMDAwMCAqLworCQkJLyogV0ZFICAgOiBjY2NjIDAwMTEgMDAxMCAwMDAwIHh4eHggeHh4eCAwMDAwIDAwMTAgKi8KKwkJCS8qIFdGSSAgIDogY2NjYyAwMDExIDAwMTAgMDAwMCB4eHh4IHh4eHggMDAwMCAwMDExICovCisJCQkvKgorCQkJICogV2UgbWFrZSBXRkUgYW5kIFdGSSB0cnVlIE5PUHMgdG8gYXZvaWQgc3RhbGxzIGR1ZQorCQkJICogdG8gbWlzc2luZyBldmVudHMgd2hpbHN0IHByb2Nlc3NpbmcgdGhlIHByb2JlLgorCQkJICovCisJCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfbm9wOworCQkJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOworCQl9CisJCS8qIEZvciBEQkcgYW5kIHVuYWxsb2NhdGVkIGhpbnRzIGl0J3Mgc2FmZXN0IHRvIHJlamVjdCB0aGVtICovCisJCXJldHVybiBJTlNOX1JFSkVDVEVEOworCX0KKwogCS8qCiAJICogTVNSICAgOiBjY2NjIDAwMTEgMHgxMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKLQkgKiBVbmRlZiA6IGNjY2MgMDAxMSAwMTAwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAogCSAqIEFMVSBvcCB3aXRoIFMgYml0IGFuZCBSZCA9PSAxNSA6CiAJICoJICAgY2NjYyAwMDF4IHh4eDEgeHh4eCAxMTExIHh4eHggeHh4eCB4eHh4CiAJICovCiAJaWYgKChpbnNuICYgMHgwZmIwMDAwMCkgPT0gMHgwMzIwMDAwMCB8fAkvKiBNU1IgKi8KLQkgICAgKGluc24gJiAweDBmZjAwMDAwKSA9PSAweDAzNDAwMDAwIHx8CS8qIFVuZGVmICovCiAJICAgIChpbnNuICYgMHgwZTEwZjAwMCkgPT0gMHgwMjEwZjAwMCkJCS8qIEFMVSBzLWJpdCwgUjE1ICAqLwogCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIApAQCAtMTE4MCwxMCArMTI2MywyMiBAQAogCSAqICpTIChiaXQgMjApIHVwZGF0ZXMgY29uZGl0aW9uIGNvZGVzCiAJICogQURDL1NCQy9SU0MgcmVhZHMgdGhlIEMgZmxhZwogCSAqLwotCWluc24gJj0gMHhmZmZmMGZmZjsJLyogUmQgPSByMCAqLworCWluc24gJj0gMHhmZmYwMGZmZjsJLyogUm4gPSByMCBhbmQgUmQgPSByMCAqLwogCWFzaS0+aW5zblswXSA9IGluc247Ci0JYXNpLT5pbnNuX2hhbmRsZXIgPSAoaW5zbiAmICgxIDw8IDIwKSkgPyAgLyogUy1iaXQgKi8KKworCWlmICgoaW5zbiAmIDB4MGY5MDAwMDApID09IDB4MDMxMDAwMDApIHsKKwkJLyoKKwkJICogVFNUIDogY2NjYyAwMDExIDAwMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqIFRFUSA6IGNjY2MgMDAxMSAwMDExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eAorCQkgKiBDTVAgOiBjY2NjIDAwMTEgMDEwMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHgKKwkJICogQ01OIDogY2NjYyAwMDExIDAxMTEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4CisJCSAqLworCQlhc2ktPmluc25faGFuZGxlciA9IGVtdWxhdGVfYWx1X3Rlc3RzX2ltbTsKKwl9IGVsc2UgeworCQkvKiBBTFUgb3BzIHdoaWNoIHdyaXRlIHRvIFJkICovCisJCWFzaS0+aW5zbl9oYW5kbGVyID0gKGluc24gJiAoMSA8PCAyMCkpID8gIC8qIFMtYml0ICovCiAJCQllbXVsYXRlX2FsdV9pbW1fcndmbGFncyA6IGVtdWxhdGVfYWx1X2ltbV9yZmxhZ3M7CisJfQogCXJldHVybiBJTlNOX0dPT0Q7CiB9CiAKQEAgLTExOTIsNiArMTI4Nyw4IEBACiB7CiAJLyogU0VMIDogY2NjYyAwMTEwIDEwMDAgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IEdFOiAhISEgKi8KIAlpZiAoKGluc24gJiAweDBmZjAwMGYwKSA9PSAweDA2ODAwMGIwKSB7CisJCWlmIChpc19yMTUoaW5zbiwgMTIpKQorCQkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIFJkIGlzIFBDICovCiAJCWluc24gJj0gMHhmZmYwMGZmMDsJLyogUmQgPSByMCwgUm4gPSByMCAqLwogCQlpbnNuIHw9IDB4MDAwMDAwMDE7CS8qIFJtID0gcjEgKi8KIAkJYXNpLT5pbnNuWzBdID0gaW5zbjsKQEAgLTEyMDUsNiArMTMwMiw4IEBACiAJLyogVVNBVDE2IDogY2NjYyAwMTEwIDExMTAgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDpRICovCiAJaWYgKChpbnNuICYgMHgwZmEwMDAzMCkgPT0gMHgwNmEwMDAxMCB8fAogCSAgICAoaW5zbiAmIDB4MGZiMDAwZjApID09IDB4MDZhMDAwMzApIHsKKwkJaWYgKGlzX3IxNShpbnNuLCAxMikpCisJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogUmQgaXMgUEMgKi8KIAkJaW5zbiAmPSAweGZmZmYwZmYwOwkvKiBSZCA9IHIwLCBSbSA9IHIwICovCiAJCWFzaS0+aW5zblswXSA9IGluc247CiAJCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9zYXQ7CkBAIC0xMjEzLDU3ICsxMzEyLDEwMSBAQAogCiAJLyogUkVWICAgIDogY2NjYyAwMTEwIDEwMTEgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4ICovCiAJLyogUkVWMTYgIDogY2NjYyAwMTEwIDEwMTEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4ICovCisJLyogUkJJVCAgIDogY2NjYyAwMTEwIDExMTEgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4ICovCiAJLyogUkVWU0ggIDogY2NjYyAwMTEwIDExMTEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4ICovCiAJaWYgKChpbnNuICYgMHgwZmYwMDA3MCkgPT0gMHgwNmIwMDAzMCB8fAotCSAgICAoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDZmMDAwYjApCisJICAgIChpbnNuICYgMHgwZmYwMDA3MCkgPT0gMHgwNmYwMDAzMCkKIAkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm0wKGluc24sIGFzaSk7CiAKKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAwMCB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggOiAgICovCiAJLyogU0FERDE2ICAgIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4IDpHRSAqLwogCS8qIFNBRERTVUJYICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCA6R0UgKi8KIAkvKiBTU1VCQUREWCAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOkdFICovCiAJLyogU1NVQjE2ICAgIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDpHRSAqLwogCS8qIFNBREQ4ICAgICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6R0UgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAwMSB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAwMDEgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4IDogICAqLwogCS8qIFNTVUI4ICAgICA6IGNjY2MgMDExMCAwMDAxIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCA6R0UgKi8KIAkvKiBRQUREMTYgICAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggOiAgICovCiAJLyogUUFERFNVQlggIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDogICAqLwogCS8qIFFTVUJBRERYICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6ICAgKi8KIAkvKiBRU1VCMTYgICAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogUUFERDggICAgIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMDEwIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDAxMCB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggOiAgICovCiAJLyogUVNVQjggICAgIDogY2NjYyAwMTEwIDAwMTAgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4IDogICAqLwogCS8qIFNIQUREMTYgICA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6ICAgKi8KIAkvKiBTSEFERFNVQlggOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggOiAgICovCiAJLyogU0hTVUJBRERYIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDogICAqLwogCS8qIFNIU1VCMTYgICA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBTSEFERDggICAgOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAwMTEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMDExIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCA6ICAgKi8KIAkvKiBTSFNVQjggICAgOiBjY2NjIDAxMTAgMDAxMSB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMDAgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4IDogICAqLwogCS8qIFVBREQxNiAgICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6R0UgKi8KIAkvKiBVQUREU1VCWCAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAwMDExIHh4eHggOkdFICovCiAJLyogVVNVQkFERFggIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMDEwMSB4eHh4IDpHRSAqLwogCS8qIFVTVUIxNiAgICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6R0UgKi8KIAkvKiBVQUREOCAgICAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAxMDAxIHh4eHggOkdFICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMDEgeHh4eCB4eHh4IHh4eHggMTAxMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMTAxIHh4eHggeHh4eCB4eHh4IDExMDEgeHh4eCA6ICAgKi8KIAkvKiBVU1VCOCAgICAgOiBjY2NjIDAxMTAgMDEwMSB4eHh4IHh4eHggeHh4eCAxMTExIHh4eHggOkdFICovCiAJLyogVVFBREQxNiAgIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4IDogICAqLwogCS8qIFVRQUREU1VCWCA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDAwMTEgeHh4eCA6ICAgKi8KIAkvKiBVUVNVQkFERFggOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAwMTAxIHh4eHggOiAgICovCiAJLyogVVFTVUIxNiAgIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFVRQUREOCAgICA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDEwMDEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDExMCB4eHh4IHh4eHggeHh4eCAxMDExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDAxMTAgeHh4eCB4eHh4IHh4eHggMTEwMSB4eHh4IDogICAqLwogCS8qIFVRU1VCOCAgICA6IGNjY2MgMDExMCAwMTEwIHh4eHggeHh4eCB4eHh4IDExMTEgeHh4eCA6ICAgKi8KIAkvKiBVSEFERDE2ICAgOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAwMDAxIHh4eHggOiAgICovCiAJLyogVUhBRERTVUJYIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMDAxMSB4eHh4IDogICAqLwogCS8qIFVIU1VCQUREWCA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDAxMDEgeHh4eCA6ICAgKi8KIAkvKiBVSFNVQjE2ICAgOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogVUhBREQ4ICAgIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMTAwMSB4eHh4IDogICAqLworCS8qID8/PyAgICAgICA6IGNjY2MgMDExMCAwMTExIHh4eHggeHh4eCB4eHh4IDEwMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMDExMSB4eHh4IHh4eHggeHh4eCAxMTAxIHh4eHggOiAgICovCiAJLyogVUhTVUI4ICAgIDogY2NjYyAwMTEwIDAxMTEgeHh4eCB4eHh4IHh4eHggMTExMSB4eHh4IDogICAqLworCWlmICgoaW5zbiAmIDB4MGY4MDAwMTApID09IDB4MDYwMDAwMTApIHsKKwkJaWYgKChpbnNuICYgMHgwMDMwMDAwMCkgPT0gMHgwMDAwMDAwMCB8fAorCQkgICAgKGluc24gJiAweDAwMDAwMGUwKSA9PSAweDAwMDAwMGEwIHx8CisJCSAgICAoaW5zbiAmIDB4MDAwMDAwZTApID09IDB4MDAwMDAwYzApCisJCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsJLyogVW5hbGxvY2F0ZWQgc3BhY2UgKi8KKwkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwl9CisKIAkvKiBQS0hCVCAgICAgOiBjY2NjIDAxMTAgMTAwMCB4eHh4IHh4eHggeHh4eCB4MDAxIHh4eHggOiAgICovCiAJLyogUEtIVEIgICAgIDogY2NjYyAwMTEwIDEwMDAgeHh4eCB4eHh4IHh4eHggeDEwMSB4eHh4IDogICAqLworCWlmICgoaW5zbiAmIDB4MGZmMDAwMzApID09IDB4MDY4MDAwMTApCisJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisKIAkvKiBTWFRBQjE2ICAgOiBjY2NjIDAxMTAgMTAwMCB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCi0JLyogU1hUQiAgICAgIDogY2NjYyAwMTEwIDEwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCS8qIFNYVEIxNiAgICA6IGNjY2MgMDExMCAxMDAwIDExMTEgeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiA/Pz8gICAgICAgOiBjY2NjIDAxMTAgMTAwMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogU1hUQUIgICAgIDogY2NjYyAwMTEwIDEwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCS8qIFNYVEIgICAgICA6IGNjY2MgMDExMCAxMDEwIDExMTEgeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KIAkvKiBTWFRBSCAgICAgOiBjY2NjIDAxMTAgMTAxMSB4eHh4IHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJLyogU1hUSCAgICAgIDogY2NjYyAwMTEwIDEwMTEgMTExMSB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFVYVEFCMTYgICA6IGNjY2MgMDExMCAxMTAwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiBVWFRCMTYgICAgOiBjY2NjIDAxMTAgMTEwMCAxMTExIHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCisJLyogPz8/ICAgICAgIDogY2NjYyAwMTEwIDExMDEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwogCS8qIFVYVEFCICAgICA6IGNjY2MgMDExMCAxMTEwIHh4eHggeHh4eCB4eHh4IDAxMTEgeHh4eCA6ICAgKi8KKwkvKiBVWFRCICAgICAgOiBjY2NjIDAxMTAgMTExMCAxMTExIHh4eHggeHh4eCAwMTExIHh4eHggOiAgICovCiAJLyogVVhUQUggICAgIDogY2NjYyAwMTEwIDExMTEgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLwotCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMTZybTBfd2ZsYWdzKGluc24sIGFzaSk7CisJLyogVVhUSCAgICAgIDogY2NjYyAwMTEwIDExMTEgMTExMSB4eHh4IHh4eHggMDExMSB4eHh4IDogICAqLworCWlmICgoaW5zbiAmIDB4MGY4MDAwZjApID09IDB4MDY4MDAwNzApIHsKKwkJaWYgKChpbnNuICYgMHgwMDMwMDAwMCkgPT0gMHgwMDEwMDAwMCkKKwkJCXJldHVybiBJTlNOX1JFSkVDVEVEOwkvKiBVbmFsbG9jYXRlZCBzcGFjZSAqLworCisJCWlmICgoaW5zbiAmIDB4MDAwZjAwMDApID09IDB4MDAwZjAwMDApCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJybTAoaW5zbiwgYXNpKTsKKwkJZWxzZQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDEycm4xNnJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwl9CisKKwkvKiBPdGhlciBpbnN0cnVjdGlvbiBlbmNvZGluZ3MgYXJlbid0IHlldCBkZWZpbmVkICovCisJcmV0dXJuIElOU05fUkVKRUNURUQ7CiB9CiAKIHN0YXRpYyBlbnVtIGtwcm9iZV9pbnNuIF9fa3Byb2JlcwpAQCAtMTI3MywyOSArMTQxNiw0OSBAQAogCWlmICgoaW5zbiAmIDB4MGZmMDAwZjApID09IDB4MDNmMDAwZjApCiAJCXJldHVybiBJTlNOX1JFSkVDVEVEOwogCi0JLyogVVNBREE4IDogY2NjYyAwMTExIDEwMDAgeHh4eCB4eHh4IHh4eHggMDAwMSB4eHh4ICovCi0JLyogVVNBRDggIDogY2NjYyAwMTExIDEwMDAgeHh4eCAxMTExIHh4eHggMDAwMSB4eHh4ICovCi0JaWYgKChpbnNuICYgMHgwZmYwMDBmMCkgPT0gMHgwNzgwMDAxMCkKLQkJIHJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJuMTJyczhybTBfd2ZsYWdzKGluc24sIGFzaSk7Ci0KIAkvKiBTTUxBTEQgOiBjY2NjIDAxMTEgMDEwMCB4eHh4IHh4eHggeHh4eCAwMHgxIHh4eHggKi8KIAkvKiBTTUxTTEQgOiBjY2NjIDAxMTEgMDEwMCB4eHh4IHh4eHggeHh4eCAwMXgxIHh4eHggKi8KIAlpZiAoKGluc24gJiAweDBmZjAwMDkwKSA9PSAweDA3NDAwMDEwKQogCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkaGkxNnJkbG8xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKIAogCS8qIFNNTEFEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggeHh4eCB4eHh4IDAweDEgeHh4eCA6USAqLworCS8qIFNNVUFEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggMTExMSB4eHh4IDAweDEgeHh4eCA6USAqLwogCS8qIFNNTFNEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggeHh4eCB4eHh4IDAxeDEgeHh4eCA6USAqLworCS8qIFNNVVNEICA6IGNjY2MgMDExMSAwMDAwIHh4eHggMTExMSB4eHh4IDAxeDEgeHh4eCA6ICAqLwogCS8qIFNNTUxBICA6IGNjY2MgMDExMSAwMTAxIHh4eHggeHh4eCB4eHh4IDAweDEgeHh4eCA6ICAqLwotCS8qIFNNTUxTICA6IGNjY2MgMDExMSAwMTAxIHh4eHggeHh4eCB4eHh4IDExeDEgeHh4eCA6ICAqLworCS8qIFNNTVVMICA6IGNjY2MgMDExMSAwMTAxIHh4eHggMTExMSB4eHh4IDAweDEgeHh4eCA6ICAqLworCS8qIFVTQURBOCA6IGNjY2MgMDExMSAxMDAwIHh4eHggeHh4eCB4eHh4IDAwMDEgeHh4eCA6ICAqLworCS8qIFVTQUQ4ICA6IGNjY2MgMDExMSAxMDAwIHh4eHggMTExMSB4eHh4IDAwMDEgeHh4eCA6ICAqLwogCWlmICgoaW5zbiAmIDB4MGZmMDAwOTApID09IDB4MDcwMDAwMTAgfHwKIAkgICAgKGluc24gJiAweDBmZjAwMGQwKSA9PSAweDA3NTAwMDEwIHx8Ci0JICAgIChpbnNuICYgMHgwZmYwMDBkMCkgPT0gMHgwNzUwMDBkMCkKKwkgICAgKGluc24gJiAweDBmZjAwMGYwKSA9PSAweDA3ODAwMDEwKSB7CisKKwkJaWYgKChpbnNuICYgMHgwMDAwZjAwMCkgPT0gMHgwMDAwZjAwMCkKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxNnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwkJZWxzZQorCQkJcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cm4xMnJzOHJtMF93ZmxhZ3MoaW5zbiwgYXNpKTsKKwl9CisKKwkvKiBTTU1MUyAgOiBjY2NjIDAxMTEgMDEwMSB4eHh4IHh4eHggeHh4eCAxMXgxIHh4eHggOiAgKi8KKwlpZiAoKGluc24gJiAweDBmZjAwMGQwKSA9PSAweDA3NTAwMGQwKQogCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTZybjEycnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOwogCi0JLyogU01VU0QgIDogY2NjYyAwMTExIDAwMDAgeHh4eCB4eHh4IHh4eHggMDF4MSB4eHh4IDogICovCi0JLyogU01VQUQgIDogY2NjYyAwMTExIDAwMDAgeHh4eCAxMTExIHh4eHggMDB4MSB4eHh4IDpRICovCi0JLyogU01NVUwgIDogY2NjYyAwMTExIDAxMDEgeHh4eCAxMTExIHh4eHggMDB4MSB4eHh4IDogICovCi0JcmV0dXJuIHByZXBfZW11bGF0ZV9yZDE2cnM4cm0wX3dmbGFncyhpbnNuLCBhc2kpOworCS8qIFNCRlggICA6IGNjY2MgMDExMSAxMDF4IHh4eHggeHh4eCB4eHh4IHgxMDEgeHh4eCA6ICAqLworCS8qIFVCRlggICA6IGNjY2MgMDExMSAxMTF4IHh4eHggeHh4eCB4eHh4IHgxMDEgeHh4eCA6ICAqLworCWlmICgoaW5zbiAmIDB4MGZhMDAwNzApID09IDB4MDdhMDAwNTApCisJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJtMChpbnNuLCBhc2kpOworCisJLyogQkZJICAgIDogY2NjYyAwMTExIDExMHggeHh4eCB4eHh4IHh4eHggeDAwMSB4eHh4IDogICovCisJLyogQkZDICAgIDogY2NjYyAwMTExIDExMHggeHh4eCB4eHh4IHh4eHggeDAwMSAxMTExIDogICovCisJaWYgKChpbnNuICYgMHgwZmUwMDA3MCkgPT0gMHgwN2MwMDAxMCkgeworCisJCWlmICgoaW5zbiAmIDB4MDAwMDAwMGYpID09IDB4MDAwMDAwMGYpCisJCQlyZXR1cm4gcHJlcF9lbXVsYXRlX3JkMTJfbW9kaWZ5KGluc24sIGFzaSk7CisJCWVsc2UKKwkJCXJldHVybiBwcmVwX2VtdWxhdGVfcmQxMnJuMF9tb2RpZnkoaW5zbiwgYXNpKTsKKwl9CisKKwlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIH0KIAogc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCkBAIC0xMzA5LDYgKzE0NzIsMTAgQEAKIAkvKiBTVFJCICA6IGNjY2MgMDF4eCB4MXgwIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwogCS8qIFNUUkJUIDogY2NjYyAwMXgwIHgxMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCiAJLyogU1RSVCAgOiBjY2NjIDAxeDAgeDAxMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKworCWlmICgoaW5zbiAmIDB4MDA1MDAwMDApID09IDB4MDA1MDAwMDAgJiYgaXNfcjE1KGluc24sIDEyKSkKKwkJcmV0dXJuIElOU05fUkVKRUNURUQ7CS8qIExEUkIgaW50byBQQyAqLworCiAJcmV0dXJuIHByZXBfZW11bGF0ZV9sZHJfc3RyKGluc24sIGFzaSk7CiB9CiAKQEAgLTEzMjMsMTAgKzE0OTAsOSBAQAogCiAJLyogTERNKDEpIDogY2NjYyAxMDB4IHgweDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCiAJLyogU1RNKDEpIDogY2NjYyAxMDB4IHgweDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCi0JYXNpLT5pbnNuWzBdID0gdHJ1ZWNjX2luc24oaW5zbik7CiAJYXNpLT5pbnNuX2hhbmRsZXIgPSAoKGluc24gJiAweDEwODAwMCkgPT0gMHgwMDgwMDApID8gLyogU1RNICYgUjE1ICovCiAJCQkJc2ltdWxhdGVfc3RtMV9wYyA6IHNpbXVsYXRlX2xkbTFzdG0xOwotCXJldHVybiBJTlNOX0dPT0Q7CisJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOwogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKQEAgLTEzMzQsNTggKzE1MDAsMTE3IEBACiB7CiAJLyogQiAgOiBjY2NjIDEwMTAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KIAkvKiBCTCA6IGNjY2MgMTAxMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCWFzaS0+aW5zblswXSA9IHRydWVjY19pbnNuKGluc24pOwogCWFzaS0+aW5zbl9oYW5kbGVyID0gc2ltdWxhdGVfYmJsOwotCXJldHVybiBJTlNOX0dPT0Q7CisJcmV0dXJuIElOU05fR09PRF9OT19TTE9UOwogfQogCiBzdGF0aWMgZW51bSBrcHJvYmVfaW5zbiBfX2twcm9iZXMKLXNwYWNlX2NjY2NfMTEwMF8wMTB4KGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCitzcGFjZV9jY2NjXzExeHgoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKIHsKKwkvKiBDb3Byb2Nlc3NvciBpbnN0cnVjdGlvbnMuLi4gKi8KIAkvKiBNQ1JSIDogY2NjYyAxMTAwIDAxMDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKFJkIT1SbikgKi8KIAkvKiBNUlJDIDogY2NjYyAxMTAwIDAxMDEgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4IDogKFJkIT1SbikgKi8KLQlpbnNuICY9IDB4ZmZmMDBmZmY7Ci0JaW5zbiB8PSAweDAwMDAxMDAwOwkvKiBSbiA9IHIwLCBSZCA9IHIxICovCi0JYXNpLT5pbnNuWzBdID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/IGVtdWxhdGVfbXJyYyA6IGVtdWxhdGVfbWNycjsKLQlyZXR1cm4gSU5TTl9HT09EOworCS8qIExEQyAgOiBjY2NjIDExMHggeHh4MSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KKwkvKiBTVEMgIDogY2NjYyAxMTB4IHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisJLyogQ0RQICA6IGNjY2MgMTExMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eDAgeHh4eCAqLworCS8qIE1DUiAgOiBjY2NjIDExMTAgeHh4MCB4eHh4IHh4eHggeHh4eCB4eHgxIHh4eHggKi8KKwkvKiBNUkMgIDogY2NjYyAxMTEwIHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCisKKwkvKiBTVkMgIDogY2NjYyAxMTExIHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCB4eHh4ICovCisKKwlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKIH0KIAotc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCi1zcGFjZV9jY2NjXzExMHgoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2VxKHVuc2lnbmVkIGxvbmcgY3BzcikKIHsKLQkvKiBMREMgOiBjY2NjIDExMHggeHh4MSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KLQkvKiBTVEMgOiBjY2NjIDExMHggeHh4MCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggKi8KLQlpbnNuICY9IDB4ZmZmMGZmZmY7CS8qIFJuID0gcjAgKi8KLQlhc2ktPmluc25bMF0gPSBpbnNuOwotCWFzaS0+aW5zbl9oYW5kbGVyID0gZW11bGF0ZV9sZGNzdGM7Ci0JcmV0dXJuIElOU05fR09PRDsKKwlyZXR1cm4gY3BzciAmIFBTUl9aX0JJVDsKIH0KIAotc3RhdGljIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCi1zcGFjZV9jY2NjXzExMXgoa3Byb2JlX29wY29kZV90IGluc24sIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gKmFzaSkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX25lKHVuc2lnbmVkIGxvbmcgY3BzcikKIHsKLQkvKiBCS1BUIDogMTExMCAwMDAxIDAwMTAgeHh4eCB4eHh4IHh4eHggMDExMSB4eHh4ICovCi0JLyogU1dJICA6IGNjY2MgMTExMSB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eHggeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4ZmZmMDAwZjApID09IDB4ZTEyMDAwNzAgfHwKLQkgICAgKGluc24gJiAweDBmMDAwMDAwKSA9PSAweDBmMDAwMDAwKQotCQlyZXR1cm4gSU5TTl9SRUpFQ1RFRDsKLQotCS8qIENEUCA6IGNjY2MgMTExMCB4eHh4IHh4eHggeHh4eCB4eHh4IHh4eDAgeHh4eCAqLwotCWlmICgoaW5zbiAmIDB4MGYwMDAwMTApID09IDB4MGUwMDAwMDApIHsKLQkJYXNpLT5pbnNuWzBdID0gaW5zbjsKLQkJYXNpLT5pbnNuX2hhbmRsZXIgPSBlbXVsYXRlX25vbmU7Ci0JCXJldHVybiBJTlNOX0dPT0Q7Ci0JfQotCi0JLyogTUNSIDogY2NjYyAxMTEwIHh4eDAgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCi0JLyogTVJDIDogY2NjYyAxMTEwIHh4eDEgeHh4eCB4eHh4IHh4eHggeHh4MSB4eHh4ICovCi0JaW5zbiAmPSAweGZmZmYwZmZmOwkvKiBSZCA9IHIwICovCi0JYXNpLT5pbnNuWzBdID0gaW5zbjsKLQlhc2ktPmluc25faGFuZGxlciA9IChpbnNuICYgKDEgPDwgMjApKSA/IGVtdWxhdGVfcmQxMiA6IGVtdWxhdGVfaXJkMTI7Ci0JcmV0dXJuIElOU05fR09PRDsKKwlyZXR1cm4gKH5jcHNyKSAmIFBTUl9aX0JJVDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfY3ModW5zaWduZWQgbG9uZyBjcHNyKQoreworCXJldHVybiBjcHNyICYgUFNSX0NfQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19jYyh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJcmV0dXJuICh+Y3BzcikgJiBQU1JfQ19CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX21pKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gY3BzciAmIFBTUl9OX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfcGwodW5zaWduZWQgbG9uZyBjcHNyKQoreworCXJldHVybiAofmNwc3IpICYgUFNSX05fQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja192cyh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJcmV0dXJuIGNwc3IgJiBQU1JfVl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX3ZjKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gKH5jcHNyKSAmIFBTUl9WX0JJVDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19rcHJvYmVzIF9fY2hlY2tfaGkodW5zaWduZWQgbG9uZyBjcHNyKQoreworCWNwc3IgJj0gfihjcHNyID4+IDEpOyAvKiBQU1JfQ19CSVQgJj0gflBTUl9aX0JJVCAqLworCXJldHVybiBjcHNyICYgUFNSX0NfQklUOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2twcm9iZXMgX19jaGVja19scyh1bnNpZ25lZCBsb25nIGNwc3IpCit7CisJY3BzciAmPSB+KGNwc3IgPj4gMSk7IC8qIFBTUl9DX0JJVCAmPSB+UFNSX1pfQklUICovCisJcmV0dXJuICh+Y3BzcikgJiBQU1JfQ19CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2dlKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwljcHNyIF49IChjcHNyIDw8IDMpOyAvKiBQU1JfTl9CSVQgXj0gUFNSX1ZfQklUICovCisJcmV0dXJuICh+Y3BzcikgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2x0KHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwljcHNyIF49IChjcHNyIDw8IDMpOyAvKiBQU1JfTl9CSVQgXj0gUFNSX1ZfQklUICovCisJcmV0dXJuIGNwc3IgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2d0KHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXAgPSBjcHNyIF4gKGNwc3IgPDwgMyk7IC8qIFBTUl9OX0JJVCBePSBQU1JfVl9CSVQgKi8KKwl0ZW1wIHw9IChjcHNyIDw8IDEpOwkJCSAvKiBQU1JfTl9CSVQgfD0gUFNSX1pfQklUICovCisJcmV0dXJuICh+dGVtcCkgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2xlKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwl1bnNpZ25lZCBsb25nIHRlbXAgPSBjcHNyIF4gKGNwc3IgPDwgMyk7IC8qIFBTUl9OX0JJVCBePSBQU1JfVl9CSVQgKi8KKwl0ZW1wIHw9IChjcHNyIDw8IDEpOwkJCSAvKiBQU1JfTl9CSVQgfD0gUFNSX1pfQklUICovCisJcmV0dXJuIHRlbXAgJiBQU1JfTl9CSVQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fa3Byb2JlcyBfX2NoZWNrX2FsKHVuc2lnbmVkIGxvbmcgY3BzcikKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGtwcm9iZV9jaGVja19jYyAqIGNvbnN0IGNvbmRpdGlvbl9jaGVja3NbMTZdID0geworCSZfX2NoZWNrX2VxLCAmX19jaGVja19uZSwgJl9fY2hlY2tfY3MsICZfX2NoZWNrX2NjLAorCSZfX2NoZWNrX21pLCAmX19jaGVja19wbCwgJl9fY2hlY2tfdnMsICZfX2NoZWNrX3ZjLAorCSZfX2NoZWNrX2hpLCAmX19jaGVja19scywgJl9fY2hlY2tfZ2UsICZfX2NoZWNrX2x0LAorCSZfX2NoZWNrX2d0LCAmX19jaGVja19sZSwgJl9fY2hlY2tfYWwsICZfX2NoZWNrX2FsCit9OworCiAvKiBSZXR1cm46CiAgKiAgIElOU05fUkVKRUNURUQgICAgIElmIGluc3RydWN0aW9uIGlzIG9uZSBub3QgYWxsb3dlZCB0byBrcHJvYmUsCiAgKiAgIElOU05fR09PRCAgICAgICAgIElmIGluc3RydWN0aW9uIGlzIHN1cHBvcnRlZCBhbmQgdXNlcyBpbnN0cnVjdGlvbiBzbG90LApAQCAtMTQwMSwxMzMgKzE2MjYsNDUgQEAKIGVudW0ga3Byb2JlX2luc24gX19rcHJvYmVzCiBhcm1fa3Byb2JlX2RlY29kZV9pbnNuKGtwcm9iZV9vcGNvZGVfdCBpbnNuLCBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuICphc2kpCiB7CisJYXNpLT5pbnNuX2NoZWNrX2NjID0gY29uZGl0aW9uX2NoZWNrc1tpbnNuPj4yOF07CiAJYXNpLT5pbnNuWzFdID0gS1BST0JFX1JFVFVSTl9JTlNUUlVDVElPTjsKIAotCWlmICgoaW5zbiAmIDB4ZjAwMDAwMDApID09IDB4ZjAwMDAwMDApIHsKKwlpZiAoKGluc24gJiAweGYwMDAwMDAwKSA9PSAweGYwMDAwMDAwKQogCiAJCXJldHVybiBzcGFjZV8xMTExKGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwMDAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwMDAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMDB4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwMjAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwMjAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMDF4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDAxMCkgPT0gMHgwNjAwMDAxMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDAxMCkgPT0gMHgwNjAwMDAxMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMTEwX18xKGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDAxMCkgPT0gMHgwNzAwMDAxMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZjAwMDAxMCkgPT0gMHgwNzAwMDAxMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMTExX18xKGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwYzAwMDAwMCkgPT0gMHgwNDAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwYzAwMDAwMCkgPT0gMHgwNDAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18wMXh4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwODAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwODAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMDB4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwYTAwMDAwMCkgeworCWVsc2UgaWYgKChpbnNuICYgMHgwZTAwMDAwMCkgPT0gMHgwYTAwMDAwMCkKIAogCQlyZXR1cm4gc3BhY2VfY2NjY18xMDF4KGluc24sIGFzaSk7CiAKLQl9IGVsc2UgaWYgKChpbnNuICYgMHgwZmUwMDAwMCkgPT0gMHgwYzQwMDAwMCkgewotCi0JCXJldHVybiBzcGFjZV9jY2NjXzExMDBfMDEweChpbnNuLCBhc2kpOwotCi0JfSBlbHNlIGlmICgoaW5zbiAmIDB4MGUwMDAwMDApID09IDB4MGMwMDAwMDApIHsKLQotCQlyZXR1cm4gc3BhY2VfY2NjY18xMTB4KGluc24sIGFzaSk7Ci0KLQl9Ci0KLQlyZXR1cm4gc3BhY2VfY2NjY18xMTF4KGluc24sIGFzaSk7CisJcmV0dXJuIHNwYWNlX2NjY2NfMTF4eChpbnNuLCBhc2kpOwogfQogCiB2b2lkIF9faW5pdCBhcm1fa3Byb2JlX2RlY29kZV9pbml0KHZvaWQpCiB7CiAJZmluZF9zdHJfcGNfb2Zmc2V0KCk7CiB9Ci0KLQotLyoKLSAqIEFsbCBBUk0gaW5zdHJ1Y3Rpb25zIGxpc3RlZCBiZWxvdy4KLSAqCi0gKiBJbnN0cnVjdGlvbnMgYW5kIHRoZWlyIGdlbmVyYWwgcHVycG9zZSByZWdpc3RlcnMgYXJlIGdpdmVuLgotICogSWYgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyIG1heSBub3QgdXNlIFIxNSwgaXQgaXMgcHJlZml4ZWQgd2l0aCBhICIhIi4KLSAqIElmIG1hcmtlZCB3aXRoIGEgIioiIG1lYW5zIHRoZSB2YWx1ZSByZXR1cm5lZCBieSByZWFkaW5nIFIxNQotICogaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4KLSAqCi0gKiBBREMvQUREL0FORC9CSUMvQ01OL0NNUC9FT1IvTU9WL01WTi9PUlIvUlNCL1JTQy9TQkMvU1VCL1RFUQotICogICAgIFRTVDogUmQsIFJuLCBSbSwgIVJzCi0gKiBCWDogUm0KLSAqIEJMWCgyKTogIVJtCi0gKiBCWDogUm0gKFIxNSBsZWdhbCwgYnV0IGRpc2NvdXJhZ2VkKQotICogQlhKOiAhUm0sCi0gKiBDTFo6ICFSZCwgIVJtCi0gKiBDUFk6IFJkLCBSbQotICogTERDLzIsU1RDLzIgaW1tZWRpYXRlIG9mZnNldCAmIHVuaW5kZXg6IFJuCi0gKiBMREMvMixTVEMvMiBpbW1lZGlhdGUgcHJlL3Bvc3QtaW5kZXhlZDogIVJuCi0gKiBMRE0oMS8zKTogIVJuLCByZWdpc3Rlcl9saXN0Ci0gKiBMRE0oMik6ICFSbiwgIXJlZ2lzdGVyX2xpc3QKLSAqIExEUixTVFIsUExEIGltbWVkaWF0ZSBvZmZzZXQ6IFJkLCBSbgotICogTERSLFNUUixQTEQgcmVnaXN0ZXIgb2Zmc2V0OiBSZCwgUm4sICFSbQotICogTERSLFNUUixQTEQgc2NhbGVkIHJlZ2lzdGVyIG9mZnNldDogUmQsICFSbiwgIVJtCi0gKiBMRFIsU1RSIGltbWVkaWF0ZSBwcmUvcG9zdC1pbmRleGVkOiBSZCwgIVJuCi0gKiBMRFIsU1RSIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6IFJkLCAhUm4sICFSbQotICogTERSLFNUUiBzY2FsZWQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogUmQsICFSbiwgIVJtCi0gKiBMRFJCLFNUUkIgaW1tZWRpYXRlIG9mZnNldDogIVJkLCBSbgotICogTERSQixTVFJCIHJlZ2lzdGVyIG9mZnNldDogIVJkLCBSbiwgIVJtCi0gKiBMRFJCLFNUUkIgc2NhbGVkIHJlZ2lzdGVyIG9mZnNldDogIVJkLCAhUm4sICFSbQotICogTERSQixTVFJCIGltbWVkaWF0ZSBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbgotICogTERSQixTVFJCIHJlZ2lzdGVyIHByZS9wb3N0LWluZGV4ZWQ6ICFSZCwgIVJuLCAhUm0KLSAqIExEUkIsU1RSQiBzY2FsZWQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4sICFSbQotICogTERSVCxMRFJCVCxTVFJCVCBpbW1lZGlhdGUgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4KLSAqIExEUlQsTERSQlQsU1RSQlQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4sICFSbQotICogTERSVCxMRFJCVCxTVFJCVCBzY2FsZWQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogIVJkLCAhUm4sICFSbQotICogTERSSC9TSC9TQi9ELFNUUkgvU0gvU0IvRCBpbW1lZGlhdGUgb2Zmc2V0OiAhUmQsIFJuCi0gKiBMRFJIL1NIL1NCL0QsU1RSSC9TSC9TQi9EIHJlZ2lzdGVyIG9mZnNldDogIVJkLCBSbiwgIVJtCi0gKiBMRFJIL1NIL1NCL0QsU1RSSC9TSC9TQi9EIGltbWVkaWF0ZSBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbgotICogTERSSC9TSC9TQi9ELFNUUkgvU0gvU0IvRCByZWdpc3RlciBwcmUvcG9zdC1pbmRleGVkOiAhUmQsICFSbiwgIVJtCi0gKiBMRFJFWDogIVJkLCAhUm4KLSAqIE1DUi8yOiAhUmQKLSAqIE1DUlIvMixNUlJDLzI6ICFSZCwgIVJuCi0gKiBNTEE6ICFSZCwgIVJuLCAhUm0sICFScwotICogTU9WOiBSZAotICogTVJDLzI6ICFSZCAoaWYgUmQ9PTE1LCBvbmx5IGNoYW5nZXMgY29uZCBjb2Rlcywgbm90IHRoZSByZWdpc3RlcikKLSAqIE1SUyxNU1I6ICFSZAotICogTVVMOiAhUmQsICFSbSwgIVJzCi0gKiBQS0h7QlQsVEJ9OiAhUmQsICFSbiwgIVJtCi0gKiBRREFERCxbVV1RQURELzE2LzgvU1VCWDogIVJkLCAhUm0sICFSbgotICogUURTVUIsW1VdUVNVQi8xNi84L0FERFg6ICFSZCwgIVJtLCAhUm4KLSAqIFJFVi8xNi9TSDogIVJkLCAhUm0KLSAqIFJGRTogIVJuCi0gKiB7UyxVfVtIXUFERHsxNiw4LFNVQlh9LHtTLFV9W0hdU1VCezE2LDgsQUREWH06ICFSZCwgIVJuLCAhUm0KLSAqIFNFTDogIVJkLCAhUm4sICFSbQotICogU01MQTx4Pjx5PixTTUxBe0QsVzx5Pn0sU01MU0QsU01NTHtBLFN9OiAhUmQsICFSbiwgIVJtLCAhUnMKLSAqIFNNTEFMPHg+PHk+LFNNTEF7RCxMRH0sU01MU0xELFNNTVVMTCxTTVVMVzx5PjogIVJkSGksICFSZExvLCAhUm0sICFScwotICogU01NVUwsU01VQUQsU01VTDx4Pjx5PixTTVVTRDogIVJkLCAhUm0sICFScwotICogU1NBVC8xNjogIVJkLCAhUm0KLSAqIFNUTSgxLzIpOiAhUm4sIHJlZ2lzdGVyX2xpc3QqIChSMTUgaW4gcmVnIGxpc3Qgbm90IHJlY29tbWVuZGVkKQotICogU1RSVCBpbW1lZGlhdGUgcHJlL3Bvc3QtaW5kZXhlZDogUmQqLCAhUm4KLSAqIFNUUlQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogUmQqLCAhUm4sICFSbQotICogU1RSVCBzY2FsZWQgcmVnaXN0ZXIgcHJlL3Bvc3QtaW5kZXhlZDogUmQqLCAhUm4sICFSbQotICogU1RSRVg6ICFSZCwgIVJuLCAhUm0KLSAqIFNXUC9COiAhUmQsICFSbiwgIVJtCi0gKiB7UyxVfVhUQXtCLEIxNixIfTogIVJkLCAhUm4sICFSbQotICoge1MsVX1YVHtCLEIxNixIfTogIVJkLCAhUm0KLSAqIFVNe0FBLExBLFVMfUw6ICFSZEhpLCAhUmRMbywgIVJtLCAhUnMKLSAqIFVTQXtEOCxBOCxULFQxNn06ICFSZCwgIVJtLCAhUnMKLSAqCi0gKiBNYXkgdHJhbnNmZXIgY29udHJvbCBieSB3cml0aW5nIFIxNSAocG9zc2libGUgbW9kZSBjaGFuZ2VzIG9yIGFsdGVybmF0ZQotICogbW9kZSBhY2Nlc3NlcyBtYXJrZWQgYnkgIioiKToKLSAqIEFMVSBvcCAoKiB3aXRoIHMtYml0KSwgQiwgQkwsIEJLUFQsIEJMWCgxLzIpLCBCWCwgQlhKLCBDUFMqLCBDUFksCi0gKiBMRE0oMSksIExETSgyLzMpKiwgTERSLCBNT1YsIFJGRSosIFNXSSoKLSAqCi0gKiBJbnN0cnVjdGlvbnMgdGhhdCBkbyBub3QgdGFrZSBnZW5lcmFsIHJlZ2lzdGVycywgbm9yIHRyYW5zZmVyIGNvbnRyb2w6Ci0gKiBDRFAvMiwgU0VURU5ELCBTUlMqCi0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL2FybS9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDJiYTdkZWIuLjE2NTZjODcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2twcm9iZXMuYwpAQCAtMTM0LDcgKzEzNCw4IEBACiAJCQkJIHN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IpCiB7CiAJcmVncy0+QVJNX3BjICs9IDQ7Ci0JcC0+YWluc24uaW5zbl9oYW5kbGVyKHAsIHJlZ3MpOworCWlmIChwLT5haW5zbi5pbnNuX2NoZWNrX2NjKHJlZ3MtPkFSTV9jcHNyKSkKKwkJcC0+YWluc24uaW5zbl9oYW5kbGVyKHAsIHJlZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2xlZHMuYyBiL2FyY2gvYXJtL2tlcm5lbC9sZWRzLmMKaW5kZXggMzFhMzE2Yy4uMGYxMDdkYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2xlZHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvbGVkcy5jCkBAIC0xMCw2ICsxMCw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vbGVkcy5oPgogCkBAIC02OSwyOSArNzAsOCBAQAogCiBzdGF0aWMgU1lTREVWX0FUVFIoZXZlbnQsIDAyMDAsIE5VTEwsIGxlZHNfc3RvcmUpOwogCi1zdGF0aWMgaW50IGxlZHNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JbGVkc19ldmVudChsZWRfc3RvcCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGVkc19yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlsZWRzX2V2ZW50KGxlZF9zdGFydCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbGVkc19zaHV0ZG93bihzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCWxlZHNfZXZlbnQobGVkX2hhbHRlZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGxlZHNfc3lzY2xhc3MgPSB7CiAJLm5hbWUJCT0gImxlZHMiLAotCS5zaHV0ZG93bgk9IGxlZHNfc2h1dGRvd24sCi0JLnN1c3BlbmQJPSBsZWRzX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBsZWRzX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBsZWRzX2RldmljZSA9IHsKQEAgLTk5LDYgKzc5LDI4IEBACiAJLmNscwkJPSAmbGVkc19zeXNjbGFzcywKIH07CiAKK3N0YXRpYyBpbnQgbGVkc19zdXNwZW5kKHZvaWQpCit7CisJbGVkc19ldmVudChsZWRfc3RvcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxlZHNfcmVzdW1lKHZvaWQpCit7CisJbGVkc19ldmVudChsZWRfc3RhcnQpOworfQorCitzdGF0aWMgdm9pZCBsZWRzX3NodXRkb3duKHZvaWQpCit7CisJbGVkc19ldmVudChsZWRfaGFsdGVkKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBsZWRzX3N5c2NvcmVfb3BzID0geworCS5zaHV0ZG93bgk9IGxlZHNfc2h1dGRvd24sCisJLnN1c3BlbmQJPSBsZWRzX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBsZWRzX3Jlc3VtZSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGxlZHNfaW5pdCh2b2lkKQogewogCWludCByZXQ7CkBAIC0xMDcsNiArMTA5LDggQEAKIAkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZsZWRzX2RldmljZSk7CiAJaWYgKHJldCA9PSAwKQogCQlyZXQgPSBzeXNkZXZfY3JlYXRlX2ZpbGUoJmxlZHNfZGV2aWNlLCAmYXR0cl9ldmVudCk7CisJaWYgKHJldCA9PSAwKQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbGVkc19zeXNjb3JlX29wcyk7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvYXJtL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggOTc5ZGEzOS4uMTM5ZTNjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC03NDYsNyArNzQ2LDggQEAKIAogCXRhaWwgPSAoc3RydWN0IGZyYW1lX3RhaWwgX191c2VyICopcmVncy0+QVJNX2ZwIC0gMTsKIAotCXdoaWxlICh0YWlsICYmICEoKHVuc2lnbmVkIGxvbmcpdGFpbCAmIDB4MykpCisJd2hpbGUgKChlbnRyeS0+bnIgPCBQRVJGX01BWF9TVEFDS19ERVBUSCkgJiYKKwkgICAgICAgdGFpbCAmJiAhKCh1bnNpZ25lZCBsb25nKXRhaWwgJiAweDMpKQogCQl0YWlsID0gdXNlcl9iYWNrdHJhY2UodGFpbCwgZW50cnkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMmJmMjdmMy4uODE4MmY0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtNzY3LDEyICs3NjcsMjAgQEAKIAogI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKIAkJY2FzZSBQVFJBQ0VfR0VUSEJQUkVHUzoKKwkJCWlmIChwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKGNoaWxkKSA8IDApCisJCQkJcmV0dXJuIC1FU1JDSDsKKwogCQkJcmV0ID0gcHRyYWNlX2dldGhicHJlZ3MoY2hpbGQsIGFkZHIsCiAJCQkJCQkodW5zaWduZWQgbG9uZyBfX3VzZXIgKilkYXRhKTsKKwkJCXB0cmFjZV9wdXRfYnJlYWtwb2ludHMoY2hpbGQpOwogCQkJYnJlYWs7CiAJCWNhc2UgUFRSQUNFX1NFVEhCUFJFR1M6CisJCQlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyhjaGlsZCkgPCAwKQorCQkJCXJldHVybiAtRVNSQ0g7CisKIAkJCXJldCA9IHB0cmFjZV9zZXRoYnByZWdzKGNoaWxkLCBhZGRyLAogCQkJCQkJKHVuc2lnbmVkIGxvbmcgX191c2VyICopZGF0YSk7CisJCQlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKGNoaWxkKTsKIAkJCWJyZWFrOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvYXJtL2tlcm5lbC9zaWduYWwuYwppbmRleCBjYjgzOTgzLi4wMzQwMjI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc2lnbmFsLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3NpZ25hbC5jCkBAIC01OTcsMTkgKzU5NywxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF9zeXNjYWxsX3Jlc3RhcnQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JcmVncy0+QVJNX3IwID0gcmVncy0+QVJNX09SSUdfcjA7Ci0JcmVncy0+QVJNX3BjIC09IHRodW1iX21vZGUocmVncykgPyAyIDogNDsKLX0KLQogLyoKICAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXIKICAqLwkKIHN0YXRpYyBpbnQKIGhhbmRsZV9zaWduYWwodW5zaWduZWQgbG9uZyBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsCiAJICAgICAgc2lnaW5mb190ICppbmZvLCBzaWdzZXRfdCAqb2xkc2V0LAotCSAgICAgIHN0cnVjdCBwdF9yZWdzICogcmVncywgaW50IHN5c2NhbGwpCisJICAgICAgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gY3VycmVudF90aHJlYWRfaW5mbygpOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKQEAgLTYxNywyNiArNjExLDYgQEAKIAlpbnQgcmV0OwogCiAJLyoKLQkgKiBJZiB3ZSB3ZXJlIGZyb20gYSBzeXN0ZW0gY2FsbCwgY2hlY2sgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLi4KLQkgKi8KLQlpZiAoc3lzY2FsbCkgewotCQlzd2l0Y2ggKHJlZ3MtPkFSTV9yMCkgewotCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6Ci0JCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgotCQkJcmVncy0+QVJNX3IwID0gLUVJTlRSOwotCQkJYnJlYWs7Ci0JCWNhc2UgLUVSRVNUQVJUU1lTOgotCQkJaWYgKCEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVEFSVCkpIHsKLQkJCQlyZWdzLT5BUk1fcjAgPSAtRUlOVFI7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwotCQljYXNlIC1FUkVTVEFSVE5PSU5UUjoKLQkJCXNldHVwX3N5c2NhbGxfcmVzdGFydChyZWdzKTsKLQkJfQotCX0KLQotCS8qCiAJICogdHJhbnNsYXRlIHRoZSBzaWduYWwKIAkgKi8KIAlpZiAodXNpZyA8IDMyICYmIHRocmVhZC0+ZXhlY19kb21haW4gJiYgdGhyZWFkLT5leGVjX2RvbWFpbi0+c2lnbmFsX2ludm1hcCkKQEAgLTY4NSw2ICs2NTksNyBAQAogICovCiBzdGF0aWMgdm9pZCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzeXNjYWxsKQogeworCXVuc2lnbmVkIGludCByZXR2YWwgPSAwLCBjb250aW51ZV9hZGRyID0gMCwgcmVzdGFydF9hZGRyID0gMDsKIAlzdHJ1Y3Qga19zaWdhY3Rpb24ga2E7CiAJc2lnaW5mb190IGluZm87CiAJaW50IHNpZ25yOwpAQCAtNjk4LDE4ICs2NzMsNjEgQEAKIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBJZiB3ZSB3ZXJlIGZyb20gYSBzeXN0ZW0gY2FsbCwgY2hlY2sgZm9yIHN5c3RlbSBjYWxsIHJlc3RhcnRpbmcuLi4KKwkgKi8KKwlpZiAoc3lzY2FsbCkgeworCQljb250aW51ZV9hZGRyID0gcmVncy0+QVJNX3BjOworCQlyZXN0YXJ0X2FkZHIgPSBjb250aW51ZV9hZGRyIC0gKHRodW1iX21vZGUocmVncykgPyAyIDogNCk7CisJCXJldHZhbCA9IHJlZ3MtPkFSTV9yMDsKKworCQkvKgorCQkgKiBQcmVwYXJlIGZvciBzeXN0ZW0gY2FsbCByZXN0YXJ0LiAgV2UgZG8gdGhpcyBoZXJlIHNvIHRoYXQgYQorCQkgKiBkZWJ1Z2dlciB3aWxsIHNlZSB0aGUgYWxyZWFkeSBjaGFuZ2VkIFBTVy4KKwkJICovCisJCXN3aXRjaCAocmV0dmFsKSB7CisJCWNhc2UgLUVSRVNUQVJUTk9IQU5EOgorCQljYXNlIC1FUkVTVEFSVFNZUzoKKwkJY2FzZSAtRVJFU1RBUlROT0lOVFI6CisJCQlyZWdzLT5BUk1fcjAgPSByZWdzLT5BUk1fT1JJR19yMDsKKwkJCXJlZ3MtPkFSTV9wYyA9IHJlc3RhcnRfYWRkcjsKKwkJCWJyZWFrOworCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CisJCQlyZWdzLT5BUk1fcjAgPSAtRUlOVFI7CisJCQlicmVhazsKKwkJfQorCX0KKwogCWlmICh0cnlfdG9fZnJlZXplKCkpCiAJCWdvdG8gbm9fc2lnbmFsOwogCisJLyoKKwkgKiBHZXQgdGhlIHNpZ25hbCB0byBkZWxpdmVyLiAgV2hlbiBydW5uaW5nIHVuZGVyIHB0cmFjZSwgYXQgdGhpcworCSAqIHBvaW50IHRoZSBkZWJ1Z2dlciBtYXkgY2hhbmdlIGFsbCBvdXIgcmVnaXN0ZXJzIC4uLgorCSAqLwogCXNpZ25yID0gZ2V0X3NpZ25hbF90b19kZWxpdmVyKCZpbmZvLCAma2EsIHJlZ3MsIE5VTEwpOwogCWlmIChzaWduciA+IDApIHsKIAkJc2lnc2V0X3QgKm9sZHNldDsKIAorCQkvKgorCQkgKiBEZXBlbmRpbmcgb24gdGhlIHNpZ25hbCBzZXR0aW5ncyB3ZSBtYXkgbmVlZCB0byByZXZlcnQgdGhlCisJCSAqIGRlY2lzaW9uIHRvIHJlc3RhcnQgdGhlIHN5c3RlbSBjYWxsLiAgQnV0IHNraXAgdGhpcyBpZiBhCisJCSAqIGRlYnVnZ2VyIGhhcyBjaG9zZW4gdG8gcmVzdGFydCBhdCBhIGRpZmZlcmVudCBQQy4KKwkJICovCisJCWlmIChyZWdzLT5BUk1fcGMgPT0gcmVzdGFydF9hZGRyKSB7CisJCQlpZiAocmV0dmFsID09IC1FUkVTVEFSVE5PSEFORAorCQkJICAgIHx8IChyZXR2YWwgPT0gLUVSRVNUQVJUU1lTCisJCQkJJiYgIShrYS5zYS5zYV9mbGFncyAmIFNBX1JFU1RBUlQpKSkgeworCQkJCXJlZ3MtPkFSTV9yMCA9IC1FSU5UUjsKKwkJCQlyZWdzLT5BUk1fcGMgPSBjb250aW51ZV9hZGRyOworCQkJfQorCQl9CisKIAkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCiAJCQlvbGRzZXQgPSAmY3VycmVudC0+c2F2ZWRfc2lnbWFzazsKIAkJZWxzZQogCQkJb2xkc2V0ID0gJmN1cnJlbnQtPmJsb2NrZWQ7Ci0JCWlmIChoYW5kbGVfc2lnbmFsKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsIHJlZ3MsIHN5c2NhbGwpID09IDApIHsKKwkJaWYgKGhhbmRsZV9zaWduYWwoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgcmVncykgPT0gMCkgewogCQkJLyoKIAkJCSAqIEEgc2lnbmFsIHdhcyBzdWNjZXNzZnVsbHkgZGVsaXZlcmVkOyB0aGUgc2F2ZWQKIAkJCSAqIHNpZ21hc2sgd2lsbCBoYXZlIGJlZW4gc3RvcmVkIGluIHRoZSBzaWduYWwgZnJhbWUsCkBAIC03MjMsMTEgKzc0MSwxNCBAQAogCX0KIAogIG5vX3NpZ25hbDoKLQkvKgotCSAqIE5vIHNpZ25hbCB0byBkZWxpdmVyIHRvIHRoZSBwcm9jZXNzIC0gcmVzdGFydCB0aGUgc3lzY2FsbC4KLQkgKi8KIAlpZiAoc3lzY2FsbCkgewotCQlpZiAocmVncy0+QVJNX3IwID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKKwkJLyoKKwkJICogSGFuZGxlIHJlc3RhcnRpbmcgYSBkaWZmZXJlbnQgc3lzdGVtIGNhbGwuICBBcyBhYm92ZSwKKwkJICogaWYgYSBkZWJ1Z2dlciBoYXMgY2hvc2VuIHRvIHJlc3RhcnQgYXQgYSBkaWZmZXJlbnQgUEMsCisJCSAqIGlnbm9yZSB0aGUgcmVzdGFydC4KKwkJICovCisJCWlmIChyZXR2YWwgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSworCQkgICAgJiYgcmVncy0+QVJNX3BjID09IGNvbnRpbnVlX2FkZHIpIHsKIAkJCWlmICh0aHVtYl9tb2RlKHJlZ3MpKSB7CiAJCQkJcmVncy0+QVJNX3I3ID0gX19OUl9yZXN0YXJ0X3N5c2NhbGwgLSBfX05SX1NZU0NBTExfQkFTRTsKIAkJCQlyZWdzLT5BUk1fcGMgLT0gMjsKQEAgLTc1MCwxMSArNzcxLDYgQEAKICNlbmRpZgogCQkJfQogCQl9Ci0JCWlmIChyZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUTk9IQU5EIHx8Ci0JCSAgICByZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUU1lTIHx8Ci0JCSAgICByZWdzLT5BUk1fcjAgPT0gLUVSRVNUQVJUTk9JTlRSKSB7Ci0JCQlzZXR1cF9zeXNjYWxsX3Jlc3RhcnQocmVncyk7Ci0JCX0KIAogCQkvKiBJZiB0aGVyZSdzIG5vIHNpZ25hbCB0byBkZWxpdmVyLCB3ZSBqdXN0IHB1dCB0aGUgc2F2ZWQgc2lnbWFzawogCQkgKiBiYWNrLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3NtcC5jIGIvYXJjaC9hcm0va2VybmVsL3NtcC5jCmluZGV4IDhmZTA1YWQuLjAwN2EwYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL2FybS9rZXJuZWwvc21wLmMKQEAgLTQ3OSw3ICs0NzksNyBAQAogewogfQogCi1zdGF0aWMgdm9pZCBicm9hZGNhc3RfdGltZXJfc2V0dXAoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KQorc3RhdGljIHZvaWQgX19jcHVpbml0IGJyb2FkY2FzdF90aW1lcl9zZXR1cChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7CiAJZXZ0LT5uYW1lCT0gImR1bW15X3RpbWVyIjsKIAlldnQtPmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCB8CkBAIC01NjAsMTAgKzU2MCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBJUElfUkVTQ0hFRFVMRToKLQkJLyoKLQkJICogbm90aGluZyBtb3JlIHRvIGRvIC0gZXZleXRoaW5nIGlzCi0JCSAqIGRvbmUgb24gdGhlIGludGVycnVwdCByZXR1cm4gcGF0aAotCQkgKi8KKwkJc2NoZWR1bGVyX2lwaSgpOwogCQlicmVhazsKIAogCWNhc2UgSVBJX0NBTExfRlVOQzoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYwppbmRleCA0YWQ4ZGExLi5hZjBhYWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jCkBAIC0zMTEsNyArMzExLDcgQEAKIAlsb25nIGVycjsKIAlpbnQgaTsKIAotCWlmIChuc29wcyA8IDEpCisJaWYgKG5zb3BzIDwgMSB8fCBuc29wcyA+IFNFTU9QTSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc29wcyA9IGttYWxsb2Moc2l6ZW9mKCpzb3BzKSAqIG5zb3BzLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNvcHMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwppbmRleCAxZmY0NmNhLi5jYjYzNGMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcHJvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApAQCAtMTE1LDQ4ICsxMTUsMzcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pICYmICFkZWZpbmVkKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTKQotc3RhdGljIGludCB0aW1lcl9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgdGltZXJfc3VzcGVuZCh2b2lkKQogewotCXN0cnVjdCBzeXNfdGltZXIgKnRpbWVyID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHN5c190aW1lciwgZGV2KTsKLQotCWlmICh0aW1lci0+c3VzcGVuZCAhPSBOVUxMKQotCQl0aW1lci0+c3VzcGVuZCgpOworCWlmIChzeXN0ZW1fdGltZXItPnN1c3BlbmQpCisJCXN5c3RlbV90aW1lci0+c3VzcGVuZCgpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGltZXJfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0aW1lcl9yZXN1bWUodm9pZCkKIHsKLQlzdHJ1Y3Qgc3lzX3RpbWVyICp0aW1lciA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNfdGltZXIsIGRldik7Ci0KLQlpZiAodGltZXItPnJlc3VtZSAhPSBOVUxMKQotCQl0aW1lci0+cmVzdW1lKCk7Ci0KLQlyZXR1cm4gMDsKKwlpZiAoc3lzdGVtX3RpbWVyLT5yZXN1bWUpCisJCXN5c3RlbV90aW1lci0+cmVzdW1lKCk7CiB9CiAjZWxzZQogI2RlZmluZSB0aW1lcl9zdXNwZW5kIE5VTEwKICNkZWZpbmUgdGltZXJfcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyB0aW1lcl9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAidGltZXIiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyB0aW1lcl9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHRpbWVyX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSB0aW1lcl9yZXN1bWUsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCB0aW1lcl9pbml0X3N5c2ZzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB0aW1lcl9pbml0X3N5c2NvcmVfb3BzKHZvaWQpCiB7Ci0JaW50IHJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmdGltZXJfc3lzY2xhc3MpOwotCWlmIChyZXQgPT0gMCkgewotCQlzeXN0ZW1fdGltZXItPmRldi5jbHMgPSAmdGltZXJfc3lzY2xhc3M7Ci0JCXJldCA9IHN5c2Rldl9yZWdpc3Rlcigmc3lzdGVtX3RpbWVyLT5kZXYpOwotCX0KKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmdGltZXJfc3lzY29yZV9vcHMpOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAotZGV2aWNlX2luaXRjYWxsKHRpbWVyX2luaXRfc3lzZnMpOworZGV2aWNlX2luaXRjYWxsKHRpbWVyX2luaXRfc3lzY29yZV9vcHMpOwogCiB2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKaW5kZXggMTkzOTAyMy4uMmQyOTliZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL0tjb25maWcKQEAgLTgzLDYgKzgzLDcgQEAKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKIAlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUwogCXNlbGVjdCBIQVZFX0ZCX0FUTUVMCisJc2VsZWN0IEhBVkVfTkVUX01BQ0IKIAogY29uZmlnIEFSQ0hfQVQ1NzJEOTQwSEYKIAlib29sICJBVDU3MkQ5NDBIRiIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTEvYm9hcmQtZWIwMS5jCmluZGV4IDFmOWQzY2IuLmQ4ZGY1OWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9ib2FyZC1lYjAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2JvYXJkLWViMDEuYwpAQCAtMzAsNiArMzAsMTEgQEAKICNpbmNsdWRlIDxtYWNoL2JvYXJkLmg+CiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCitzdGF0aWMgdm9pZCBfX2luaXQgYXQ5MWViMDFfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxeDQwX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IGF0OTFlYjAxX21hcF9pbyh2b2lkKQogewogCWF0OTF4NDBfaW5pdGlhbGl6ZSg0MDAwMDAwMCk7CkBAIC0zOCw3ICs0Myw3IEBACiBNQUNISU5FX1NUQVJUKEFUOTFFQjAxLCAiQXRtZWwgQVQ5MSBFQjAxIikKIAkvKiBNYWludGFpbmVyOiBHcmVnIFVuZ2VyZXIgPGdlcmdAc25hcGdlYXIuY29tPiAqLwogCS50aW1lcgkJPSAmYXQ5MXg0MF90aW1lciwKLQkuaW5pdF9pcnEJPSBhdDkxeDQwX2luaXRfaW50ZXJydXB0cywKKwkuaW5pdF9pcnEJPSBhdDkxZWIwMV9pbml0X2lycSwKIAkubWFwX2lvCQk9IGF0OTFlYjAxX21hcF9pbywKIE1BQ0hJTkVfRU5ECiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmggYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2NwdS5oCmluZGV4IDNiZWY5MzEuLjA3MDBmMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9jcHUuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBBUkNIX0lEX0FUOTFTQU05RzQ1CTB4ODE5YjA1YTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOUc0NU1STAkweDgxOWIwNWEyCS8qIGFrYSA5RzQ1LUVTMiAmIG5vbiBFUyBsb3RzICovCiAjZGVmaW5lIEFSQ0hfSURfQVQ5MVNBTTlHNDVFUwkweDgxOWIwNWExCS8qIDlHNDUtRVMgKEVuZ2luZWVyaW5nIFNhbXBsZSkgKi8KKyNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVg1CTB4ODE5YTA1YTAKICNkZWZpbmUgQVJDSF9JRF9BVDkxQ0FQOQkweDAzOUEwM0EwCiAKICNkZWZpbmUgQVJDSF9JRF9BVDkxU0FNOVhFMTI4CTB4MzI5OTczYTAKQEAgLTU1LDYgKzU2LDEyIEBACiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUc0NgkweDAwMDAwMDAzCiAjZGVmaW5lIEFSQ0hfRVhJRF9BVDkxU0FNOUc0NQkweDAwMDAwMDA0CiAKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzE1CTB4MDAwMDAwMDAKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzM1CTB4MDAwMDAwMDEKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05WDM1CTB4MDAwMDAwMDIKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05RzI1CTB4MDAwMDAwMDMKKyNkZWZpbmUgQVJDSF9FWElEX0FUOTFTQU05WDI1CTB4MDAwMDAwMDQKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGF0OTFfZXhpZF9pZGVudGlmeSh2b2lkKQogewogCXJldHVybiBhdDkxX3N5c19yZWFkKEFUOTFfREJHVV9FWElEKTsKQEAgLTE0Myw2ICsxNTAsMjcgQEAKICNkZWZpbmUgY3B1X2lzX2F0OTFzYW05bTExKCkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX0FUOTFTQU05WDUKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDUoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFTQU05WDUpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcxNSgpCShjcHVfaXNfYXQ5MXNhbTl4NSgpICYmIFwKKwkJCQkoYXQ5MV9leGlkX2lkZW50aWZ5KCkgPT0gQVJDSF9FWElEX0FUOTFTQU05RzE1KSkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzM1KCkJKGNwdV9pc19hdDkxc2FtOXg1KCkgJiYgXAorCQkJCShhdDkxX2V4aWRfaWRlbnRpZnkoKSA9PSBBUkNIX0VYSURfQVQ5MVNBTTlHMzUpKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTl4MzUoKQkoY3B1X2lzX2F0OTFzYW05eDUoKSAmJiBcCisJCQkJKGF0OTFfZXhpZF9pZGVudGlmeSgpID09IEFSQ0hfRVhJRF9BVDkxU0FNOVgzNSkpCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWcyNSgpCShjcHVfaXNfYXQ5MXNhbTl4NSgpICYmIFwKKwkJCQkoYXQ5MV9leGlkX2lkZW50aWZ5KCkgPT0gQVJDSF9FWElEX0FUOTFTQU05RzI1KSkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDI1KCkJKGNwdV9pc19hdDkxc2FtOXg1KCkgJiYgXAorCQkJCShhdDkxX2V4aWRfaWRlbnRpZnkoKSA9PSBBUkNIX0VYSURfQVQ5MVNBTTlYMjUpKQorI2Vsc2UKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05eDUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzE1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOWczNSgpCSgwKQorI2RlZmluZSBjcHVfaXNfYXQ5MXNhbTl4MzUoKQkoMCkKKyNkZWZpbmUgY3B1X2lzX2F0OTFzYW05ZzI1KCkJKDApCisjZGVmaW5lIGNwdV9pc19hdDkxc2FtOXgyNSgpCSgwKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVJDSF9BVDkxQ0FQOQogI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDkoKQkoYXQ5MV9jcHVfaWRlbnRpZnkoKSA9PSBBUkNIX0lEX0FUOTFDQVA5KQogI2RlZmluZSBjcHVfaXNfYXQ5MWNhcDlfcmV2QigpCShhdDkxY2FwOV9yZXZfaWRlbnRpZnkoKSA9PSBBUkNIX1JFVklTSU9OX0NBUDlfQikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL0tjb25maWcKaW5kZXggMzJmMTQ3OS4uYzBkZWFjYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL0tjb25maWcKQEAgLTYzLDYgKzYzLDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfREFWSU5DSV9ETTY0NHgKIAlzZWxlY3QgTUlTQ19ERVZJQ0VTCiAJc2VsZWN0IEVFUFJPTV9BVDI0CisJc2VsZWN0IEkyQwogCWhlbHAKIAkgIENvbmZpZ3VyZSB0aGlzIG9wdGlvbiB0byBzcGVjaWZ5IHRoZSB3aGV0aGVyIHRoZSBib2FyZCB1c2VkCiAJICBmb3IgZGV2ZWxvcG1lbnQgaXMgYSBETTY0NHggRVZNCkBAIC03Miw2ICs3Myw3IEBACiAJZGVwZW5kcyBvbiBBUkNIX0RBVklOQ0lfRE02NDR4CiAJc2VsZWN0IE1JU0NfREVWSUNFUwogCXNlbGVjdCBFRVBST01fQVQyNAorCXNlbGVjdCBJMkMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCB0aGUgTHlydGVjaCBTbWFsbCBGb3JtIEZhY3RvcgogCSAgU29mdHdhcmUgRGVmaW5lZCBSYWRpbyAoU0ZGU0RSKSBib2FyZC4KQEAgLTEwNSw2ICsxMDcsNyBAQAogCXNlbGVjdCBNQUNIX0RBVklOQ0lfRE02NDY3VEVWTQogCXNlbGVjdCBNSVNDX0RFVklDRVMKIAlzZWxlY3QgRUVQUk9NX0FUMjQKKwlzZWxlY3QgSTJDCiAJaGVscAogCSAgQ29uZmlndXJlIHRoaXMgb3B0aW9uIHRvIHNwZWNpZnkgdGhlIHdoZXRoZXIgdGhlIGJvYXJkIHVzZWQKIAkgIGZvciBkZXZlbG9wbWVudCBpcyBhIERNNjQ2NyBFVk0KQEAgLTExOCw2ICsxMjEsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RNMzY1CiAJc2VsZWN0IE1JU0NfREVWSUNFUwogCXNlbGVjdCBFRVBST01fQVQyNAorCXNlbGVjdCBJMkMKIAloZWxwCiAJICBDb25maWd1cmUgdGhpcyBvcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyIHRoZSBib2FyZCB1c2VkCiAJICBmb3IgZGV2ZWxvcG1lbnQgaXMgYSBETTM2NSBFVk0KQEAgLTEyOSw2ICsxMzMsNyBAQAogCXNlbGVjdCBHUElPX1BDRjg1N1gKIAlzZWxlY3QgTUlTQ19ERVZJQ0VTCiAJc2VsZWN0IEVFUFJPTV9BVDI0CisJc2VsZWN0IEkyQwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VsZWN0IHRoZSBUSSBEQTgzMC9PTUFQLUwxMzcvQU0xN3ggRXZhbHVhdGlvbiBNb2R1bGUuCiAKQEAgLTIwNSw2ICsyMTAsNyBAQAogCWRlcGVuZHMgb24gQVJDSF9EQVZJTkNJX0RBODUwCiAJc2VsZWN0IE1JU0NfREVWSUNFUwogCXNlbGVjdCBFRVBST01fQVQyNAorCXNlbGVjdCBJMkMKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCB0aGUgQ3JpdGljYWwgTGluayBNaXR5RFNQLUwxMzgvTWl0eUFSTS0xODA4CiAJICBTeXN0ZW0gb24gTW9kdWxlLiAgSW5mb3JtYXRpb24gb24gdGhpcyBTb00gbWF5IGJlIGZvdW5kIGF0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbWl0eW9tYXBsMTM4LmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvYm9hcmQtbWl0eW9tYXBsMTM4LmMKaW5kZXggMmFhNzljNS4uNjA2YTZmMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2JvYXJkLW1pdHlvbWFwbDEzOC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9ib2FyZC1taXR5b21hcGwxMzguYwpAQCAtMjksNyArMjksNyBAQAogI2luY2x1ZGUgPG1hY2gvbXV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9zcGkuaD4KIAotI2RlZmluZSBNSVRZT01BUEwxMzhfUEhZX0lECQkiMDowMyIKKyNkZWZpbmUgTUlUWU9NQVBMMTM4X1BIWV9JRAkJIiIKIAogI2RlZmluZSBGQUNUT1JZX0NPTkZJR19NQUdJQwkweDAxMkMwMTM4CiAjZGVmaW5lIEZBQ1RPUllfQ09ORklHX1ZFUlNJT04JMHgwMDAxMDAwMQpAQCAtNDE0LDcgKzQxNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1pdHlvbWFwbDEzOF9uYW5kZmxhc2hfZGV2aWNlID0gewogCS5uYW1lCQk9ICJkYXZpbmNpX25hbmQiLAotCS5pZAkJPSAwLAorCS5pZAkJPSAxLAogCS5kZXYJCT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZtaXR5b21hcGwxMzhfbmFuZGZsYXNoX2RhdGEsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvY3B1ZnJlcS5jCmluZGV4IDBhOTViZTEuLjQxNjY5ZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9jcHVmcmVxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2NwdWZyZXEuYwpAQCAtOTQsOSArOTQsNyBAQAogCWlmIChmcmVxcy5vbGQgPT0gZnJlcXMubmV3KQogCQlyZXR1cm4gcmV0OwogCi0JY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsCi0JCQlkZXZfZHJpdmVyX3N0cmluZyhjcHVmcmVxLmRldiksCi0JCQkidHJhbnNpdGlvbjogJXUgLS0+ICV1XG4iLCBmcmVxcy5vbGQsIGZyZXFzLm5ldyk7CisJZGV2X2RiZygmY3B1ZnJlcS5kZXYsICJ0cmFuc2l0aW9uOiAldSAtLT4gJXVcbiIsIGZyZXFzLm9sZCwgZnJlcXMubmV3KTsKIAogCXJldCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3RhcmdldChwb2xpY3ksIHBkYXRhLT5mcmVxX3RhYmxlLAogCQkJCQkJZnJlcXMubmV3LCByZWxhdGlvbiwgJmlkeCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RldmljZXMtZGE4eHguYwppbmRleCA2MjVkNGI2Li41OGEwMmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZGV2aWNlcy1kYTh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kZXZpY2VzLWRhOHh4LmMKQEAgLTM5LDcgKzM5LDggQEAKICNkZWZpbmUgREE4WFhfR1BJT19CQVNFCQkJMHgwMWUyNjAwMAogI2RlZmluZSBEQThYWF9JMkMxX0JBU0UJCQkweDAxZTI4MDAwCiAjZGVmaW5lIERBOFhYX1NQSTBfQkFTRQkJCTB4MDFjNDEwMDAKLSNkZWZpbmUgREE4WFhfU1BJMV9CQVNFCQkJMHgwMWYwZTAwMAorI2RlZmluZSBEQTgzMF9TUEkxX0JBU0UJCQkweDAxZTEyMDAwCisjZGVmaW5lIERBODUwX1NQSTFfQkFTRQkJCTB4MDFmMGUwMDAKIAogI2RlZmluZSBEQThYWF9FTUFDX0NUUkxfUkVHX09GRlNFVAkweDMwMDAKICNkZWZpbmUgREE4WFhfRU1BQ19NT0RfUkVHX09GRlNFVAkweDIwMDAKQEAgLTc2Miw4ICs3NjMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGRhOHh4X3NwaTFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSBEQThYWF9TUEkxX0JBU0UsCi0JCS5lbmQJPSBEQThYWF9TUEkxX0JBU0UgKyBTWl80SyAtIDEsCisJCS5zdGFydAk9IERBODMwX1NQSTFfQkFTRSwKKwkJLmVuZAk9IERBODMwX1NQSTFfQkFTRSArIFNaXzRLIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC04MzIsNSArODMzLDEwIEBACiAKIAlkYTh4eF9zcGlfcGRhdGFbaW5zdGFuY2VdLm51bV9jaGlwc2VsZWN0ID0gbGVuOwogCisJaWYgKGluc3RhbmNlID09IDEgJiYgY3B1X2lzX2RhdmluY2lfZGE4NTAoKSkgeworCQlkYTh4eF9zcGkxX3Jlc291cmNlc1swXS5zdGFydCA9IERBODUwX1NQSTFfQkFTRTsKKwkJZGE4eHhfc3BpMV9yZXNvdXJjZXNbMF0uZW5kID0gREE4NTBfU1BJMV9CQVNFICsgU1pfNEsgLSAxOworCX0KKwogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRhOHh4X3NwaV9kZXZpY2VbaW5zdGFuY2VdKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTM1NS5jIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKaW5kZXggZjY4MDEyMi4uYTNhOTRlOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtMzU1LmMKQEAgLTMxNCw3ICszMTQsNyBAQAogCS5uYW1lID0gInRpbWVyMiIsCiAJLnBhcmVudCA9ICZwbGwxX2F1eF9jbGssCiAJLmxwc2MgPSBEQVZJTkNJX0xQU0NfVElNRVIyLAotCS51c2Vjb3VudCA9IDEsICAgICAgICAgICAgICAvKiBSRVZJU0lUOiB3aHkgY2FuJ3QnIHRoaXMgYmUgZGlzYWJsZWQ/ICovCisJLnVzZWNvdW50ID0gMSwgICAgICAgICAgICAgIC8qIFJFVklTSVQ6IHdoeSBjYW4ndCB0aGlzIGJlIGRpc2FibGVkPyAqLwogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdGltZXIzX2NsayA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9kbTY0NHguYwppbmRleCA1ZjhhNjU0Li40YzgyYzI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvZG02NDR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2RtNjQ0eC5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkubmFtZSA9ICJ0aW1lcjIiLAogCS5wYXJlbnQgPSAmcGxsMV9hdXhfY2xrLAogCS5scHNjID0gREFWSU5DSV9MUFNDX1RJTUVSMiwKLQkudXNlY291bnQgPSAxLCAgICAgICAgICAgICAgLyogUkVWSVNJVDogd2h5IGNhbid0JyB0aGlzIGJlIGRpc2FibGVkPyAqLworCS51c2Vjb3VudCA9IDEsICAgICAgICAgICAgICAvKiBSRVZJU0lUOiB3aHkgY2FuJ3QgdGhpcyBiZSBkaXNhYmxlZD8gKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBkbTY0NHhfY2xrc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDlmMWJlZmMuLmY4YjdlYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTI0LDYgKzI0LDkgQEAKIAogI2RlZmluZSBVQVJUX1NISUZUCTIKIAorI2RlZmluZSBkYXZpbmNpX3VhcnRfdjJwKHgpCSgoeCkgLSBQQUdFX09GRlNFVCArIFBMQVRfUEhZU19PRkZTRVQpCisjZGVmaW5lIGRhdmluY2lfdWFydF9wMnYoeCkJKCh4KSAtIFBMQVRfUEhZU19PRkZTRVQgKyBQQUdFX09GRlNFVCkKKwogCQkucHVzaHNlY3Rpb24gLmRhdGEKIGRhdmluY2lfdWFydF9waHlzOgkud29yZAkwCiBkYXZpbmNpX3VhcnRfdmlydDoJLndvcmQJMApAQCAtMzQsNyArMzcsNyBAQAogCQkvKiBVc2UgZGF2aW5jaV91YXJ0X3BoeXMvdmlydCBpZiBhbHJlYWR5IGNvbmZpZ3VyZWQgKi8KIDEwOgkJbXJjCXAxNSwgMCwgXHJwLCBjMSwgYzAKIAkJdHN0CVxycCwgIzEJCQlAIE1NVSBlbmFibGVkPwotCQlsZHJlcQlccnAsID1fX3ZpcnRfdG9fcGh5cyhkYXZpbmNpX3VhcnRfcGh5cykKKwkJbGRyZXEJXHJwLCA9ZGF2aW5jaV91YXJ0X3YycChkYXZpbmNpX3VhcnRfcGh5cykKIAkJbGRybmUJXHJwLCA9ZGF2aW5jaV91YXJ0X3BoeXMKIAkJYWRkCVxydiwgXHJwLCAjNAkJQCBkYXZpbmNpX3VhcnRfdmlydAogCQlsZHIJXHJwLCBbXHJwLCAjMF0KQEAgLTQ4LDE4ICs1MSwxOCBAQAogCQl0c3QJXHJwLCAjMQkJCUAgTU1VIGVuYWJsZWQ/CiAKIAkJLyogQ29weSB1YXJ0IHBoeXMgYWRkcmVzcyBmcm9tIGRlY29tcHJlc3NvciB1YXJ0IGluZm8gKi8KLQkJbGRyZXEJXHJ2LCA9X192aXJ0X3RvX3BoeXMoZGF2aW5jaV91YXJ0X3BoeXMpCisJCWxkcmVxCVxydiwgPWRhdmluY2lfdWFydF92MnAoZGF2aW5jaV91YXJ0X3BoeXMpCiAJCWxkcm5lCVxydiwgPWRhdmluY2lfdWFydF9waHlzCiAJCWxkcmVxCVxycCwgPURBVklOQ0lfVUFSVF9JTkZPCi0JCWxkcm5lCVxycCwgPV9fcGh5c190b192aXJ0KERBVklOQ0lfVUFSVF9JTkZPKQorCQlsZHJuZQlccnAsID1kYXZpbmNpX3VhcnRfcDJ2KERBVklOQ0lfVUFSVF9JTkZPKQogCQlsZHIJXHJwLCBbXHJwLCAjMF0KIAkJc3RyCVxycCwgW1xydl0KIAogCQkvKiBDb3B5IHVhcnQgdmlydCBhZGRyZXNzIGZyb20gZGVjb21wcmVzc29yIHVhcnQgaW5mbyAqLwotCQlsZHJlcQlccnYsID1fX3ZpcnRfdG9fcGh5cyhkYXZpbmNpX3VhcnRfdmlydCkKKwkJbGRyZXEJXHJ2LCA9ZGF2aW5jaV91YXJ0X3YycChkYXZpbmNpX3VhcnRfdmlydCkKIAkJbGRybmUJXHJ2LCA9ZGF2aW5jaV91YXJ0X3ZpcnQKIAkJbGRyZXEJXHJwLCA9REFWSU5DSV9VQVJUX0lORk8KLQkJbGRybmUJXHJwLCA9X19waHlzX3RvX3ZpcnQoREFWSU5DSV9VQVJUX0lORk8pCisJCWxkcm5lCVxycCwgPWRhdmluY2lfdWFydF9wMnYoREFWSU5DSV9VQVJUX0lORk8pCiAJCWxkcglccnAsIFtccnAsICM0XQogCQlzdHIJXHJwLCBbXHJ2XQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3NlcmlhbC5oIGIvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9zZXJpYWwuaAppbmRleCA4MDUxMTEwLi5jOWU2Y2UxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL3NlcmlhbC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvc2VyaWFsLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAqCiAgKiBUaGlzIGFyZWEgc2l0cyBqdXN0IGJlbG93IHRoZSBwYWdlIHRhYmxlcyAoc2VlIGFyY2gvYXJtL2tlcm5lbC9oZWFkLlMpLgogICovCi0jZGVmaW5lIERBVklOQ0lfVUFSVF9JTkZPCShQSFlTX09GRlNFVCArIDB4M2ZmOCkKKyNkZWZpbmUgREFWSU5DSV9VQVJUX0lORk8JKFBMQVRfUEhZU19PRkZTRVQgKyAweDNmZjgpCiAKICNkZWZpbmUgREFWSU5DSV9VQVJUMF9CQVNFCShJT19QSFlTICsgMHgyMDAwMCkKICNkZWZpbmUgREFWSU5DSV9VQVJUMV9CQVNFCShJT19QSFlTICsgMHgyMDQwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXh5bm9zNC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3BtLmMKaW5kZXggMTBkOTE3ZC4uODc1NWNhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1leHlub3M0L3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1leHlub3M0L3BtLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KQEAgLTM3Miw3ICszNzMsMjcgQEAKIAlmbHVzaF9jYWNoZV9hbGwoKTsKIH0KIAotc3RhdGljIGludCBleHlub3M0X3BtX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGV4eW5vczRfcG1fZHJpdmVyID0geworCS5hZGQJCT0gZXh5bm9zNF9wbV9hZGQsCit9OworCitzdGF0aWMgX19pbml0IGludCBleHlub3M0X3BtX2RydmluaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCisJczNjX3BtX2luaXQoKTsKKworCS8qIEFsbCB3YWtldXAgZGlzYWJsZSAqLworCisJdG1wID0gX19yYXdfcmVhZGwoUzVQX1dBS0VVUF9NQVNLKTsKKwl0bXAgfD0gKCgweEZGIDw8IDgpIHwgKDB4MUYgPDwgMSkpOworCV9fcmF3X3dyaXRlbCh0bXAsIFM1UF9XQUtFVVBfTUFTSyk7CisKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmZXh5bm9zNF9zeXNjbGFzcywgJmV4eW5vczRfcG1fZHJpdmVyKTsKK30KK2FyY2hfaW5pdGNhbGwoZXh5bm9zNF9wbV9kcnZpbml0KTsKKworc3RhdGljIHZvaWQgZXh5bm9zNF9wbV9yZXN1bWUodm9pZCkKIHsKIAkvKiBGb3IgcmVsZWFzZSByZXRlbnRpb24gKi8KIApAQCAtMzk0LDI3ICs0MTUsMTUgQEAKIAkvKiBlbmFibGUgTDJYMCovCiAJd3JpdGVsX3JlbGF4ZWQoMSwgUzVQX1ZBX0wyQ0MgKyBMMlgwX0NUUkwpOwogI2VuZGlmCi0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGV4eW5vczRfcG1fZHJpdmVyID0gewotCS5hZGQJCT0gZXh5bm9zNF9wbV9hZGQsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGV4eW5vczRfcG1fc3lzY29yZV9vcHMgPSB7CiAJLnJlc3VtZQkJPSBleHlub3M0X3BtX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBfX2luaXQgaW50IGV4eW5vczRfcG1fZHJ2aW5pdCh2b2lkKQorc3RhdGljIF9faW5pdCBpbnQgZXh5bm9zNF9wbV9zeXNjb3JlX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0JczNjX3BtX2luaXQoKTsKLQotCS8qIEFsbCB3YWtldXAgZGlzYWJsZSAqLwotCi0JdG1wID0gX19yYXdfcmVhZGwoUzVQX1dBS0VVUF9NQVNLKTsKLQl0bXAgfD0gKCgweEZGIDw8IDgpIHwgKDB4MUYgPDwgMSkpOwotCV9fcmF3X3dyaXRlbCh0bXAsIFM1UF9XQUtFVVBfTUFTSyk7Ci0KLQlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmZXh5bm9zNF9zeXNjbGFzcywgJmV4eW5vczRfcG1fZHJpdmVyKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmZXh5bm9zNF9wbV9zeXNjb3JlX29wcyk7CisJcmV0dXJuIDA7CiB9Ci1hcmNoX2luaXRjYWxsKGV4eW5vczRfcG1fZHJ2aW5pdCk7CithcmNoX2luaXRjYWxsKGV4eW5vczRfcG1fc3lzY29yZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWcKaW5kZXggYmRkMjU3OS4uNDZhZGNhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL0tjb25maWcKQEAgLTQsNiArNCw3IEBACiAKIGNvbmZpZyBBUkNIX0NBVFMKIAlib29sICJDQVRTIgorCXNlbGVjdCBDTEtTUkNfSTgyNTMKIAlzZWxlY3QgRk9PVEJSSURHRV9IT1NUCiAJc2VsZWN0IElTQQogCXNlbGVjdCBJU0FfRE1BCkBAIC01OSw2ICs2MCw3IEBACiAKIGNvbmZpZyBBUkNIX05FVFdJTkRFUgogCWJvb2wgIk5ldFdpbmRlciIKKwlzZWxlY3QgQ0xLU1JDX0k4MjUzCiAJc2VsZWN0IEZPT1RCUklER0VfSE9TVAogCXNlbGVjdCBJU0EKIAlzZWxlY3QgSVNBX0RNQQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2lzYS10aW1lci5jCmluZGV4IDQ0MWM2Y2UuLjcwMjBmMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9pc2EtdGltZXIuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvaXNhLXRpbWVyLmMKQEAgLTEwLDUzICsxMCwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC90aW1leC5oPgogCiAjaW5jbHVkZSA8YXNtL2lycS5oPgotCisjaW5jbHVkZSA8YXNtL2k4MjUzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgogCiAjaW5jbHVkZSAiY29tbW9uLmgiCiAKLSNkZWZpbmUgUElUX01PREUJMHg0MwotI2RlZmluZSBQSVRfQ0gwCQkweDQwCi0KLSNkZWZpbmUgUElUX0xBVENICSgoUElUX1RJQ0tfUkFURSArIEhaIC8gMikgLyBIWikKLQotc3RhdGljIGN5Y2xlX3QgcGl0X3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0YXRpYyBpbnQgb2xkX2NvdW50OwotCXN0YXRpYyB1MzIgb2xkX2ppZnM7Ci0JaW50IGNvdW50OwotCXUzMiBqaWZzOwotCi0JcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWppZnMgPSBqaWZmaWVzOwotCW91dGJfcCgweDAwLCBQSVRfTU9ERSk7CQkvKiBsYXRjaCB0aGUgY291bnQgKi8KLQljb3VudCA9IGluYl9wKFBJVF9DSDApOwkJLyogcmVhZCB0aGUgbGF0Y2hlZCBjb3VudCAqLwotCWNvdW50IHw9IGluYl9wKFBJVF9DSDApIDw8IDg7Ci0KLQlpZiAoY291bnQgPiBvbGRfY291bnQgJiYgamlmcyA9PSBvbGRfamlmcykKLQkJY291bnQgPSBvbGRfY291bnQ7Ci0KLQlvbGRfY291bnQgPSBjb3VudDsKLQlvbGRfamlmcyA9IGppZnM7Ci0KLQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JY291bnQgPSAoUElUX0xBVENIIC0gMSkgLSBjb3VudDsKLQotCXJldHVybiAoY3ljbGVfdCkoamlmcyAqIFBJVF9MQVRDSCkgKyBjb3VudDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBwaXRfY3MgPSB7Ci0JLm5hbWUJCT0gInBpdCIsCi0JLnJhdGluZwkJPSAxMTAsCi0JLnJlYWQJCT0gcGl0X3JlYWQsCi0JLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi19OworREVGSU5FX1JBV19TUElOTE9DSyhpODI1M19sb2NrKTsKIAogc3RhdGljIHZvaWQgcGl0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAogCXN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKQEAgLTEyMSw3ICs4NCw3IEBACiAJcGl0X2NlLm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3ZmZmLCAmcGl0X2NlKTsKIAlwaXRfY2UubWluX2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDAwMGYsICZwaXRfY2UpOwogCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJnBpdF9jcywgUElUX1RJQ0tfUkFURSk7CisJY2xvY2tzb3VyY2VfaTgyNTNfaW5pdCgpOwogCiAJc2V0dXBfaXJxKHBpdF9jZS5pcnEsICZwaXRfdGltZXJfaXJxKTsKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJnBpdF9jZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYwppbmRleCA5ODA4MDNmLi5kM2U5NjQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9hbWJhL2J1cy5oPgogI2luY2x1ZGUgPGxpbnV4L2FtYmEva21pLmg+CiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KQEAgLTE4MCwxMyArMTgwLDEzIEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpY19pcnFfZW5hYmxlOwogCi1zdGF0aWMgaW50IGlycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaXJxX3N1c3BlbmQodm9pZCkKIHsKIAlpY19pcnFfZW5hYmxlID0gcmVhZGwoVkFfSUNfQkFTRSArIElSUV9FTkFCTEUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGlycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGlycV9yZXN1bWUodm9pZCkKIHsKIAkvKiBkaXNhYmxlIGFsbCBpcnEgc291cmNlcyAqLwogCXdyaXRlbCgtMSwgVkFfQ01JQ19CQVNFICsgSVJRX0VOQUJMRV9DTEVBUik7CkBAIC0xOTQsMzMgKzE5NCwyNSBAQAogCXdyaXRlbCgtMSwgVkFfSUNfQkFTRSArIEZJUV9FTkFCTEVfQ0xFQVIpOwogCiAJd3JpdGVsKGljX2lycV9lbmFibGUsIFZBX0lDX0JBU0UgKyBJUlFfRU5BQkxFX1NFVCk7Ci0JcmV0dXJuIDA7CiB9CiAjZWxzZQogI2RlZmluZSBpcnFfc3VzcGVuZCBOVUxMCiAjZGVmaW5lIGlycV9yZXN1bWUgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGlycV9jbGFzcyA9IHsKLQkubmFtZQkJPSAiaXJxIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgaXJxX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gaXJxX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBpcnFfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGlycV9kZXZpY2UgPSB7Ci0JLmlkCT0gMCwKLQkuY2xzCT0gJmlycV9jbGFzcywKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlycV9pbml0X3N5c2ZzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpcnFfc3lzY29yZV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmaXJxX2NsYXNzKTsKLQlpZiAocmV0ID09IDApCi0JCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmaXJxX2RldmljZSk7Ci0JcmV0dXJuIHJldDsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmaXJxX3N5c2NvcmVfb3BzKTsKKworCXJldHVybiAwOwogfQogCi1kZXZpY2VfaW5pdGNhbGwoaXJxX2luaXRfc3lzZnMpOworZGV2aWNlX2luaXRjYWxsKGlycV9zeXNjb3JlX2luaXQpOwogCiAvKgogICogRmxhc2ggaGFuZGxpbmcuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1xc2Q4eDUwLmMgYi9hcmNoL2FybS9tYWNoLW1zbS9ib2FyZC1xc2Q4eDUwLmMKaW5kZXggN2Y1Njg2MS4uNmE5NjkxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tc20vYm9hcmQtcXNkOHg1MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXNtL2JvYXJkLXFzZDh4NTAuYwpAQCAtMTYwLDEwICsxNjAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgcXNkOHg1MF9pbml0X21tYyh2b2lkKQogewotCWlmIChtYWNoaW5lX2lzX3FzZDh4NTBfZmZhKCkgfHwgbWFjaGluZV9pc19xc2Q4eDUwYV9mZmEoKSkKLQkJdnJlZ19tbWMgPSB2cmVnX2dldChOVUxMLCAiZ3A2Iik7Ci0JZWxzZQotCQl2cmVnX21tYyA9IHZyZWdfZ2V0KE5VTEwsICJncDUiKTsKKwl2cmVnX21tYyA9IHZyZWdfZ2V0KE5VTEwsICJncDUiKTsKIAogCWlmIChJU19FUlIodnJlZ19tbWMpKSB7CiAJCXByX2VycigidnJlZyBnZXQgZm9yIHZyZWdfbW1jIGZhaWxlZCAoJWxkKVxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXNtL3RpbWVyLmMgYi9hcmNoL2FybS9tYWNoLW1zbS90aW1lci5jCmluZGV4IDU2ZjkyMGMuLjM4Yjk1ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXNtL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1tc20vdGltZXIuYwpAQCAtMjY5LDcgKzI2OSw3IEBACiAKIAkvKiBVc2UgZXhpc3RpbmcgY2xvY2tfZXZlbnQgZm9yIGNwdSAwICovCiAJaWYgKCFzbXBfcHJvY2Vzc29yX2lkKCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIDA7CiAKIAl3cml0ZWwoREdUX0NMS19DVExfRElWXzQsIE1TTV9UTVJfQkFTRSArIERHVF9DTEtfQ1RMKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC12cHIyMDAuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtdnByMjAwLmMKaW5kZXggMmNmMzkwZi4uNDdhNjljYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC12cHIyMDAuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXZwcjIwMC5jCkBAIC0yNTcsMTEgKzI1NywxNiBAQAogCS53b3JrYXJvdW5kCT0gRkxTX1VTQjJfV09SS0FST1VORF9FTkdDTTA5MTUyLAogfTsKIAorc3RhdGljIGludCB2cHIyMDBfdXNiaF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIG14MzVfaW5pdGlhbGl6ZV91c2JfaHcocGRldi0+aWQsCisJCQlNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSk7Cit9CisKIC8qIFVTQiBIT1NUIGNvbmZpZyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYl9ob3N0X3BkYXRhIF9faW5pdGNvbnN0ID0gewotCS5wb3J0c2MJCT0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCi0JLmZsYWdzCQk9IE1YQ19FSENJX0lOVEVSRkFDRV9TSU5HTEVfVU5JIHwKLQkJCSAgTVhDX0VIQ0lfSU5URVJOQUxfUEhZLAorCS5pbml0ID0gdnByMjAwX3VzYmhfaW5pdCwKKwkucG9ydHNjID0gTVhDX0VIQ0lfTU9ERV9TRVJJQUwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUzX2xvY28uYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfbG9jby5jCmluZGV4IDEwYTFiZWEuLjYyMDZiMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfbG9jby5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTNfbG9jby5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAkud2FrZXVwCQk9IHdha2UsCQkJCQlcCiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBsb2NvX2J1dHRvbnNbXSBfX2luaXRjb25zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBsb2NvX2J1dHRvbnNbXSA9IHsKIAlHUElPX0JVVFRPTihNWDUzX0xPQ09fUE9XRVIsIEtFWV9QT1dFUiwgMSwgInBvd2VyIiwgMCksCiAJR1BJT19CVVRUT04oTVg1M19MT0NPX1VJMSwgS0VZX1ZPTFVNRVVQLCAxLCAidm9sdW1lLXVwIiwgMCksCiAJR1BJT19CVVRUT04oTVg1M19MT0NPX1VJMiwgS0VZX1ZPTFVNRURPV04sIDEsICJ2b2x1bWUtZG93biIsIDApLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jIGIvYXJjaC9hcm0vbWFjaC1teHMvY2xvY2stbXgyOC5jCmluZGV4IDFhZDk3ZmUuLjVkY2M1OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXhzL2Nsb2NrLW14MjguYworKysgYi9hcmNoL2FybS9tYWNoLW14cy9jbG9jay1teDI4LmMKQEAgLTI5NSwxMSArMjk1LDExIEBACiAJdW5zaWduZWQgbG9uZyBkaWZmLCBwYXJlbnRfcmF0ZSwgY2FsY19yYXRlOwkJCVwKIAlpbnQgaTsJCQkJCQkJCVwKIAkJCQkJCQkJCVwKLQlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CQkJXAogCWRpdl9tYXggPSBCTV9DTEtDVFJMXyMjZHIjI19ESVYgPj4gQlBfQ0xLQ1RSTF8jI2RyIyNfRElWOwlcCiAJYm1fYnVzeSA9IEJNX0NMS0NUUkxfIyNkciMjX0JVU1k7CQkJCVwKIAkJCQkJCQkJCVwKIAlpZiAoY2xrLT5wYXJlbnQgPT0gJnJlZl94dGFsX2NsaykgewkJCQlcCisJCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsJCVwKIAkJZGl2ID0gRElWX1JPVU5EX1VQKHBhcmVudF9yYXRlLCByYXRlKTsJCQlcCiAJCWlmIChjbGsgPT0gJmNwdV9jbGspIHsJCQkJCVwKIAkJCWRpdl9tYXggPSBCTV9DTEtDVFJMX0NQVV9ESVZfWFRBTCA+PgkJXApAQCAtMzA5LDYgKzMwOSwxMSBAQAogCQlpZiAoZGl2ID09IDAgfHwgZGl2ID4gZGl2X21heCkJCQkJXAogCQkJcmV0dXJuIC1FSU5WQUw7CQkJCQlcCiAJfSBlbHNlIHsJCQkJCQkJXAorCQkvKgkJCQkJCQlcCisJCSAqIGhhY2sgYWxlcnQ6IHRoaXMgYmxvY2sgbW9kaWZpZXMgY2xrLT5wYXJlbnQsIHRvbywJXAorCQkgKiBzbyB0aGUgYmFzZSB0byB1c2UgaXQgdGhlIGdyYW5kIHBhcmVudC4JCVwKKwkJICovCQkJCQkJCVwKKwkJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQtPnBhcmVudCk7CVwKIAkJcmF0ZSA+Pj0gUEFSRU5UX1JBVEVfU0hJRlQ7CQkJCVwKIAkJcGFyZW50X3JhdGUgPj49IFBBUkVOVF9SQVRFX1NISUZUOwkJCVwKIAkJZGlmZiA9IHBhcmVudF9yYXRlOwkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbV9idXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvcG1fYnVzLmMKaW5kZXggNjU4OGMyMi4uZmUzMWQ5MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9wbV9idXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3BtX2J1cy5jCkBAIC0yNCw3NSArMjQsNTAgQEAKICNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQogc3RhdGljIGludCBvbWFwMV9wbV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBjbGsgKmljbGssICpmY2xrOwotCWludCByZXQgPSAwOworCWludCByZXQ7CiAKIAlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXQgPSBwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZChkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKLQlmY2xrID0gY2xrX2dldChkZXYsICJmY2siKTsKLQlpZiAoIUlTX0VSUihmY2xrKSkgewotCQljbGtfZGlzYWJsZShmY2xrKTsKLQkJY2xrX3B1dChmY2xrKTsKLQl9Ci0KLQlpY2xrID0gY2xrX2dldChkZXYsICJpY2siKTsKLQlpZiAoIUlTX0VSUihpY2xrKSkgewotCQljbGtfZGlzYWJsZShpY2xrKTsKLQkJY2xrX3B1dChpY2xrKTsKKwlyZXQgPSBwbV9ydW50aW1lX2Nsa19zdXNwZW5kKGRldik7CisJaWYgKHJldCkgeworCQlwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1lKGRldik7CisJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0dXJuIDA7Ci19OworfQogCiBzdGF0aWMgaW50IG9tYXAxX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgY2xrICppY2xrLCAqZmNsazsKLQogCWRldl9kYmcoZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAotCWljbGsgPSBjbGtfZ2V0KGRldiwgImljayIpOwotCWlmICghSVNfRVJSKGljbGspKSB7Ci0JCWNsa19lbmFibGUoaWNsayk7Ci0JCWNsa19wdXQoaWNsayk7Ci0JfQotCi0JZmNsayA9IGNsa19nZXQoZGV2LCAiZmNrIik7Ci0JaWYgKCFJU19FUlIoZmNsaykpIHsKLQkJY2xrX2VuYWJsZShmY2xrKTsKLQkJY2xrX3B1dChmY2xrKTsKLQl9Ci0KKwlwbV9ydW50aW1lX2Nsa19yZXN1bWUoZGV2KTsKIAlyZXR1cm4gcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShkZXYpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wb3dlcl9kb21haW4gZGVmYXVsdF9wb3dlcl9kb21haW4gPSB7CisJLm9wcyA9IHsKKwkJLnJ1bnRpbWVfc3VzcGVuZCA9IG9tYXAxX3BtX3J1bnRpbWVfc3VzcGVuZCwKKwkJLnJ1bnRpbWVfcmVzdW1lID0gb21hcDFfcG1fcnVudGltZV9yZXN1bWUsCisJCVVTRV9QTEFURk9STV9QTV9TTEVFUF9PUFMKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgcGxhdGZvcm1fYnVzX25vdGlmaWVyID0geworCS5wd3JfZG9tYWluID0gJmRlZmF1bHRfcG93ZXJfZG9tYWluLAorCS5jb25faWRzID0geyAiaWNrIiwgImZjayIsIE5VTEwsIH0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBvbWFwMV9wbV9ydW50aW1lX2luaXQodm9pZCkKIHsKLQljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG07Ci0Jc3RydWN0IGRldl9wbV9vcHMgKm9tYXBfcG07Ci0KIAlpZiAoIWNwdV9jbGFzc19pc19vbWFwMSgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXBtID0gcGxhdGZvcm1fYnVzX2dldF9wbV9vcHMoKTsKLQlpZiAoIXBtKSB7Ci0JCXByX2VycigiJXM6IHVuYWJsZSB0byBnZXQgZGV2X3BtX29wcyBmcm9tIHBsYXRmb3JtX2J1c1xuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0Jb21hcF9wbSA9IGttZW1kdXAocG0sIHNpemVvZihzdHJ1Y3QgZGV2X3BtX29wcyksIEdGUF9LRVJORUwpOwotCWlmICghb21hcF9wbSkgewotCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gYWxsb2MgbWVtb3J5IGZvciBuZXcgZGV2X3BtX29wc1xuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0Jb21hcF9wbS0+cnVudGltZV9zdXNwZW5kID0gb21hcDFfcG1fcnVudGltZV9zdXNwZW5kOwotCW9tYXBfcG0tPnJ1bnRpbWVfcmVzdW1lID0gb21hcDFfcG1fcnVudGltZV9yZXN1bWU7Ci0KLQlwbGF0Zm9ybV9idXNfc2V0X3BtX29wcyhvbWFwX3BtKTsKKwlwbV9ydW50aW1lX2Nsa19hZGRfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLCAmcGxhdGZvcm1fYnVzX25vdGlmaWVyKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKaW5kZXggYTQ1Y2Q2NC4uNjZkZmJjYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC01OSwxNiArNTksMTYgQEAKICMgUG93ZXIgTWFuYWdlbWVudAogaWZlcSAoJChDT05GSUdfUE0pLHkpCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHBtMjR4eC5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHNsZWVwMjR4eC5vIHBtX2J1cy5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9IHNsZWVwMjR4eC5vCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IHBtMzR4eC5vIHNsZWVwMzR4eC5vIFwKLQkJCQkJICAgY3B1aWRsZTM0eHgubyBwbV9idXMubwotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBwbTQ0eHgubyBwbV9idXMubworCQkJCQkgICBjcHVpZGxlMzR4eC5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQNCkJCSs9IHBtNDR4eC5vCiBvYmotJChDT05GSUdfUE1fREVCVUcpCQkJKz0gcG0tZGVidWcubwogb2JqLSQoQ09ORklHX09NQVBfU01BUlRSRUZMRVgpICAgICAgICAgICs9IHNyX2RldmljZS5vIHNtYXJ0cmVmbGV4Lm8KIG9iai0kKENPTkZJR19PTUFQX1NNQVJUUkVGTEVYX0NMQVNTMykJKz0gc21hcnRyZWZsZXgtY2xhc3MzLm8KIAogQUZMQUdTX3NsZWVwMjR4eC5vCQkJOj0tV2EsLW1hcmNoPWFybXY2Ci1BRkxBR1Nfc2xlZXAzNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYQorQUZMQUdTX3NsZWVwMzR4eC5vCQkJOj0tV2EsLW1hcmNoPWFybXY3LWEkKHBsdXNfc2VjKQogCiBpZmVxICgkKENPTkZJR19QTV9WRVJCT1NFKSx5KQogQ0ZMQUdTX3BtX2J1cy5vCQkJCSs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKaW5kZXggZTk2NDg5NS4uZjhiYTIwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLmMKQEAgLTE0MSwxNCArMTQxLDE5IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zeHh4KCk7Ci0Jcng1MV92aWRlb19tZW1faW5pdCgpOwogCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IHJ4NTFfcmVzZXJ2ZSh2b2lkKQoreworCXJ4NTFfdmlkZW9fbWVtX2luaXQoKTsKKwlvbWFwX3Jlc2VydmUoKTsKK30KKwogTUFDSElORV9TVEFSVChOT0tJQV9SWDUxLCAiTm9raWEgUlgtNTEgYm9hcmQiKQogCS8qIE1haW50YWluZXI6IExhdXJpIExldWtrdW5lbiA8bGF1cmkubGV1a2t1bmVuQG5va2lhLmNvbT4gKi8KIAkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAotCS5yZXNlcnZlCT0gb21hcF9yZXNlcnZlLAorCS5yZXNlcnZlCT0gcng1MV9yZXNlcnZlLAogCS5tYXBfaW8JCT0gcng1MV9tYXBfaW8sCiAJLmluaXRfZWFybHkJPSByeDUxX2luaXRfZWFybHksCiAJLmluaXRfaXJxCT0gb21hcF9pbml0X2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDM0eHhfZHBsbDNtMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKaW5kZXggYjJiMWUzNy4uZDZlMzRkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKQEAgLTExNSw2ICsxMTUsNyBAQAogCQkJCSAgc2RyY19jczAtPnJmcl9jdHJsLCBzZHJjX2NzMC0+YWN0aW1fY3RybGEsCiAJCQkJICBzZHJjX2NzMC0+YWN0aW1fY3RybGIsIHNkcmNfY3MwLT5tciwKIAkJCQkgIDAsIDAsIDAsIDApOworCWNsay0+cmF0ZSA9IHJhdGU7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYwppbmRleCAyNzY5OTJkLi44Yzk2NTY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCkBAIC0zMTE2LDE0ICszMTE2LDkgQEAKIAlDTEsoTlVMTCwJImRzcF9mY2siLAkJCSZkc3BfZmNrLAlDS180NDNYKSwKIAlDTEsoIm9tYXBkc3NfZHNzIiwJInN5c19jbGsiLAkJCSZkc3Nfc3lzX2NsaywJQ0tfNDQzWCksCiAJQ0xLKCJvbWFwZHNzX2RzcyIsCSJ0dl9jbGsiLAkJCSZkc3NfdHZfY2xrLAlDS180NDNYKSwKLQlDTEsoIm9tYXBkc3NfZHNzIiwJImRzc19jbGsiLAkJCSZkc3NfZHNzX2NsaywJQ0tfNDQzWCksCiAJQ0xLKCJvbWFwZHNzX2RzcyIsCSJ2aWRlb19jbGsiLAkJCSZkc3NfNDhtaHpfY2xrLAlDS180NDNYKSwKLQlDTEsoIm9tYXBkc3NfZHNzIiwJImZjayIsCQkJCSZkc3NfZmNrLAlDS180NDNYKSwKLQkvKgotCSAqIE9uIE9NQVA0LCBEU1MgaWNrIGlzIGEgZHVtbXkgY2xvY2s7IHRoaXMgaXMgbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5Ci0JICogd2l0aCBPTUFQMi8zLgotCSAqLwotCUNMSygib21hcGRzc19kc3MiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBkc3NfZHNzIiwJImZjayIsCQkJCSZkc3NfZHNzX2NsaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwZHNzX2RzcyIsCSJpY2siLAkJCQkmZHNzX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJlZnVzZV9jdHJsX2N1c3RfZmNrIiwJCSZlZnVzZV9jdHJsX2N1c3RfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImVtaWYxX2ZjayIsCQkJJmVtaWYxX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJlbWlmMl9mY2siLAkJCSZlbWlmMl9mY2ssCUNLXzQ0M1gpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbTJ4eHhfM3h4eC5jCmluZGV4IDlkMGRlYzguLjM4ODMwZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20yeHh4XzN4eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtMnh4eF8zeHh4LmMKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCXUzMiBwZXJfY21fY2xrc2VsOwogCXUzMiBlbXVfY21fY2xrc2VsOwogCXUzMiBlbXVfY21fY2xrc3RjdHJsOworCXUzMiBwbGxfY21fYXV0b2lkbGU7CiAJdTMyIHBsbF9jbV9hdXRvaWRsZTI7CiAJdTMyIHBsbF9jbV9jbGtzZWw0OwogCXUzMiBwbGxfY21fY2xrc2VsNTsKQEAgLTMxOSw2ICszMjAsMTUgQEAKIAkJb21hcDJfY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpOwogCWNtX2NvbnRleHQuZW11X2NtX2Nsa3N0Y3RybCA9CiAJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9FTVVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCS8qCisJICogQXMgcGVyIGVycmF0dW0gaTY3MSwgUk9NIGNvZGUgZG9lcyBub3QgcmVzcGVjdCB0aGUgUEVSIERQTEwKKwkgKiBwcm9ncmFtbWluZyBzY2hlbWUgaWYgQ01fQVVUT0lETEVfUExMLkFVVE9fUEVSSVBIX0RQTEwgPT0gMS4KKwkgKiBJbiB0aGlzIGNhc2UsIGV2ZW4gdGhvdWdoIHRoaXMgcmVnaXN0ZXIgaGFzIGJlZW4gc2F2ZWQgaW4KKwkgKiBzY3JhdGNocGFkIGNvbnRlbnRzLCB3ZSBuZWVkIHRvIHJlc3RvcmUgQVVUT19QRVJJUEhfRFBMTAorCSAqIGJ5IG91cnNlbHZlcy4gU28sIHdlIG5lZWQgdG8gc2F2ZSBpdCBhbnl3YXkuCisJICovCisJY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUgPQorCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQVVUT0lETEUpOwogCWNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiA9CiAJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9BVVRPSURMRTIpOwogCWNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDQgPQpAQCAtNDQxLDYgKzQ1MSwxMyBAQAogCQkJICAgICAgIENNX0NMS1NFTDEpOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5lbXVfY21fY2xrc3RjdHJsLCBPTUFQMzQzMF9FTVVfTU9ELAogCQkJICAgICAgIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJLyoKKwkgKiBBcyBwZXIgZXJyYXR1bSBpNjcxLCBST00gY29kZSBkb2VzIG5vdCByZXNwZWN0IHRoZSBQRVIgRFBMTAorCSAqIHByb2dyYW1taW5nIHNjaGVtZSBpZiBDTV9BVVRPSURMRV9QTEwuQVVUT19QRVJJUEhfRFBMTCA9PSAxLgorCSAqIEluIHRoaXMgY2FzZSwgd2UgbmVlZCB0byByZXN0b3JlIEFVVE9fUEVSSVBIX0RQTEwgYnkgb3Vyc2VsdmVzLgorCSAqLworCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUsIFBMTF9NT0QsCisJCQkgICAgICAgQ01fQVVUT0lETEUpOwogCW9tYXAyX2NtX3dyaXRlX21vZF9yZWcoY21fY29udGV4dC5wbGxfY21fYXV0b2lkbGUyLCBQTExfTU9ELAogCQkJICAgICAgIENNX0FVVE9JRExFMik7CiAJb21hcDJfY21fd3JpdGVfbW9kX3JlZyhjbV9jb250ZXh0LnBsbF9jbV9jbGtzZWw0LCBQTExfTU9ELApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jb250cm9sLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYwppbmRleCA2OTUyNzk0Li5kYTUzYmEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYwpAQCAtMzE2LDggKzMxNiwxNCBAQAogCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBDTV9DTEtTRUwpOwogCXByY21fYmxvY2tfY29udGVudHMuY21fY2xrZW5fcGxsID0KIAkJCW9tYXAyX2NtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtFTik7CisJLyoKKwkgKiBBcyBwZXIgZXJyYXR1bSBpNjcxLCBST00gY29kZSBkb2VzIG5vdCByZXNwZWN0IHRoZSBQRVIgRFBMTAorCSAqIHByb2dyYW1taW5nIHNjaGVtZSBpZiBDTV9BVVRPSURMRV9QTEwuLkFVVE9fUEVSSVBIX0RQTEwgPT0gMS4KKwkgKiBUaGVuLCAgaW4gYW55Y2FzZSwgY2xlYXIgdGhlc2UgYml0cyB0byBhdm9pZCBleHRyYSBsYXRlbmNpZXMuCisJICovCiAJcHJjbV9ibG9ja19jb250ZW50cy5jbV9hdXRvaWRsZV9wbGwgPQotCQkJb21hcDJfY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIE9NQVAzNDMwX0NNX0FVVE9JRExFX1BMTCk7CisJCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQVVUT0lETEUpICYKKwkJCX5PTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0s7CiAJcHJjbV9ibG9ja19jb250ZW50cy5jbV9jbGtzZWwxX3BsbCA9CiAJCQlvbWFwMl9jbV9yZWFkX21vZF9yZWcoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpOwogCXByY21fYmxvY2tfY29udGVudHMuY21fY2xrc2VsMl9wbGwgPQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jCmluZGV4IDhlYjNjZTEuLmM0ZDBhZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMF9kYXRhLmMKQEAgLTE2MzksNiArMTYzOSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9ncGlvMV9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzEiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDJ4X2dwaW8xX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MnhfZ3BpbzFfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xNjY5LDYgKzE2NzAsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfZ3BpbzJfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8yIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQyeF9ncGlvMl9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDJ4X2dwaW8yX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTY5OSw2ICsxNzAxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2dwaW8zX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMyIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0MnhfZ3BpbzNfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyeF9ncGlvM19pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKQEAgLTE3MjksNiArMTczMiw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9ncGlvNF9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzQiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDJ4X2dwaW80X2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MnhfZ3BpbzRfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xNzgyLDcgKzE3ODYsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDI0MjBfZG1hX3N5c3RlbV9hZGRyc1tdID0gewogCXsKIAkJLnBhX3N0YXJ0CT0gMHg0ODA1NjAwMCwKLQkJLnBhX2VuZAkJPSAweDRhMDU2MGZmLAorCQkucGFfZW5kCQk9IDB4NDgwNTZmZmYsCiAJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwX2RhdGEuYwppbmRleCBlNmUzODEwLi45NjgyZGQ1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCkBAIC0xNzQyLDYgKzE3NDIsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzFfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8xIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQzeF9ncGlvMV9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDN4X2dwaW8xX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTc3Miw2ICsxNzczLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2dwaW8yX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMiIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0M3hfZ3BpbzJfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzeF9ncGlvMl9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3Bpb3NfZmNrIiwKQEAgLTE4MDIsNiArMTgwNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9ncGlvM19od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzMiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAyNDN4X2dwaW8zX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0M3hfZ3BpbzNfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW9zX2ZjayIsCkBAIC0xODMyLDYgKzE4MzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfZ3BpbzRfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW80IiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwMjQzeF9ncGlvNF9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDN4X2dwaW80X2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvc19mY2siLApAQCAtMTg2Miw2ICsxODY2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2dwaW81X2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvNSIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDI0M3hfZ3BpbzVfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzeF9ncGlvNV9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzVfZmNrIiwKQEAgLTE5MTUsNyArMTkyMCw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwMjQzMF9kbWFfc3lzdGVtX2FkZHJzW10gPSB7CiAJewogCQkucGFfc3RhcnQJPSAweDQ4MDU2MDAwLAotCQkucGFfZW5kCQk9IDB4NGEwNTYwZmYsCisJCS5wYV9lbmQJCT0gMHg0ODA1NmZmZiwKIAkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCmluZGV4IGI5OGUyZGYuLjkwOWE4NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zeHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKQEAgLTIxNDEsNiArMjE0MSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvMV9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzEiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAzeHh4X2dwaW8xX2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzFfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW8xX2ljayIsCkBAIC0yMTc3LDYgKzIxNzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzJfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW8yIiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwM3h4eF9ncGlvMl9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2dwaW8yX2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvMl9pY2siLApAQCAtMjIxMyw2ICsyMjE1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW8zX2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvMyIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzNfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvM19pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzNfaWNrIiwKQEAgLTIyNDksNiArMjI1Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9ncGlvNF9od21vZCA9IHsKIAkubmFtZQkJPSAiZ3BpbzQiLAorCS5mbGFncwkJPSBIV01PRF9DT05UUk9MX09QVF9DTEtTX0lOX1JFU0VULAogCS5tcHVfaXJxcwk9IG9tYXAzeHh4X2dwaW80X2lycXMsCiAJLm1wdV9pcnFzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfZ3BpbzRfaXJxcyksCiAJLm1haW5fY2xrCT0gImdwaW80X2ljayIsCkBAIC0yMjg1LDYgKzIyODksNyBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfZ3BpbzVfaHdtb2QgPSB7CiAJLm5hbWUJCT0gImdwaW81IiwKKwkuZmxhZ3MJCT0gSFdNT0RfQ09OVFJPTF9PUFRfQ0xLU19JTl9SRVNFVCwKIAkubXB1X2lycXMJPSBvbWFwM3h4eF9ncGlvNV9pcnFzLAogCS5tcHVfaXJxc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2dwaW81X2lycXMpLAogCS5tYWluX2Nsawk9ICJncGlvNV9pY2siLApAQCAtMjMyMSw2ICsyMzI2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2dwaW82X2h3bW9kID0gewogCS5uYW1lCQk9ICJncGlvNiIsCisJLmZsYWdzCQk9IEhXTU9EX0NPTlRST0xfT1BUX0NMS1NfSU5fUkVTRVQsCiAJLm1wdV9pcnFzCT0gb21hcDN4eHhfZ3BpbzZfaXJxcywKIAkubXB1X2lycXNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9ncGlvNl9pcnFzKSwKIAkubWFpbl9jbGsJPSAiZ3BpbzZfaWNrIiwKQEAgLTIzODYsNyArMjM5Miw3IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2RfYWRkcl9zcGFjZSBvbWFwM3h4eF9kbWFfc3lzdGVtX2FkZHJzW10gPSB7CiAJewogCQkucGFfc3RhcnQJPSAweDQ4MDU2MDAwLAotCQkucGFfZW5kCQk9IDB4NGEwNTYwZmYsCisJCS5wYV9lbmQJCT0gMHg0ODA1NmZmZiwKIAkJLmZsYWdzCQk9IEFERFJfVFlQRV9SVAogCX0sCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzQ0eHhfZGF0YS5jCmluZGV4IDNlODhkZDMuLmFiYzU0OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF80NHh4X2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfNDR4eF9kYXRhLmMKQEAgLTg4NSw3ICs4ODUsNyBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2Ugb21hcDQ0eHhfZG1hX3N5c3RlbV9hZGRyc1tdID0gewogCXsKIAkJLnBhX3N0YXJ0CT0gMHg0YTA1NjAwMCwKLQkJLnBhX2VuZAkJPSAweDRhMDU2MGZmLAorCQkucGFfZW5kCQk9IDB4NGEwNTZmZmYsCiAJCS5mbGFncwkJPSBBRERSX1RZUEVfUlQKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYwppbmRleCA1ZjJkYTc1Ni4uNDMyMWU3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2wzX3NteC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9sM19zbXguYwpAQCAtMTk2LDExICsxOTYsMTEgQEAKIAkJLyogTm8gdGltZW91dCBlcnJvciBmb3IgZGVidWcgc291cmNlcyAqLwogCX0KIAotCWJhc2UgPSAoKGwzLT5ydCkgKyAoKihvbWFwM19sM19iYXNlc1tpbnRfdHlwZV0gKyBlcnJfc291cmNlKSkpOwotCiAJLyogaWRlbnRpZnkgdGhlIGVycm9yIHNvdXJjZSAqLwogCWZvciAoZXJyX3NvdXJjZSA9IDA7ICEoc3RhdHVzICYgKDEgPDwgZXJyX3NvdXJjZSkpOyBlcnJfc291cmNlKyspCiAJCQkJCQkJCQk7CisKKwliYXNlID0gbDMtPnJ0ICsgKihvbWFwM19sM19iYXNlc1tpbnRfdHlwZV0gKyBlcnJfc291cmNlKTsKIAllcnJvciA9IG9tYXAzX2wzX3JlYWRsbChiYXNlLCBMM19FUlJPUl9MT0cpOwogCiAJaWYgKGVycm9yKSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmMKaW5kZXggMzBhZjMzNS4uNDk0ODZmNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uYwpAQCAtODksNiArODksNyBAQAogCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewogCQlfaW5pdF9vbWFwX2RldmljZSgibDNfbWFpbl8xIiwgJmwzX2Rldik7CiAJCV9pbml0X29tYXBfZGV2aWNlKCJkc3AiLCAmZHNwX2Rldik7CisJCV9pbml0X29tYXBfZGV2aWNlKCJpdmEiLCAmaXZhX2Rldik7CiAJfSBlbHNlIHsKIAkJX2luaXRfb21hcF9kZXZpY2UoImwzX21haW4iLCAmbDNfZGV2KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtX2J1cy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbV9idXMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWFjZDJhYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtX2J1cy5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyoKLSAqIFJ1bnRpbWUgUE0gc3VwcG9ydCBjb2RlIGZvciBPTUFQCi0gKgotICogQXV0aG9yOiBLZXZpbiBIaWxtYW4sIERlZXAgUm9vdCBTeXN0ZW1zLCBMTEMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNpbmNsdWRlIDxwbGF0L29tYXBfZGV2aWNlLmg+Ci0jaW5jbHVkZSA8cGxhdC9vbWFwLXBtLmg+Ci0KLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQotc3RhdGljIGludCBvbWFwX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWludCByLCByZXQgPSAwOwotCi0JZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0JcmV0ID0gcG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQoZGV2KTsKLQotCWlmICghcmV0ICYmIGRldi0+cGFyZW50ID09ICZvbWFwX2RldmljZV9wYXJlbnQpIHsKLQkJciA9IG9tYXBfZGV2aWNlX2lkbGUocGRldik7Ci0JCVdBUk5fT04ocik7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX07Ci0KLXN0YXRpYyBpbnQgb21hcF9wbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOwotCWludCByOwotCi0JZGV2X2RiZyhkZXYsICIlc1xuIiwgX19mdW5jX18pOwotCi0JaWYgKGRldi0+cGFyZW50ID09ICZvbWFwX2RldmljZV9wYXJlbnQpIHsKLQkJciA9IG9tYXBfZGV2aWNlX2VuYWJsZShwZGV2KTsKLQkJV0FSTl9PTihyKTsKLQl9Ci0KLQlyZXR1cm4gcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShkZXYpOwotfTsKLSNlbHNlCi0jZGVmaW5lIG9tYXBfcG1fcnVudGltZV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgb21hcF9wbV9ydW50aW1lX3Jlc3VtZSBOVUxMCi0jZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KLQotc3RhdGljIGludCBfX2luaXQgb21hcF9wbV9ydW50aW1lX2luaXQodm9pZCkKLXsKLQljb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyAqcG07Ci0Jc3RydWN0IGRldl9wbV9vcHMgKm9tYXBfcG07Ci0KLQlwbSA9IHBsYXRmb3JtX2J1c19nZXRfcG1fb3BzKCk7Ci0JaWYgKCFwbSkgewotCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gZ2V0IGRldl9wbV9vcHMgZnJvbSBwbGF0Zm9ybV9idXNcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCW9tYXBfcG0gPSBrbWVtZHVwKHBtLCBzaXplb2Yoc3RydWN0IGRldl9wbV9vcHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW9tYXBfcG0pIHsKLQkJcHJfZXJyKCIlczogdW5hYmxlIHRvIGFsbG9jIG1lbW9yeSBmb3IgbmV3IGRldl9wbV9vcHNcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCW9tYXBfcG0tPnJ1bnRpbWVfc3VzcGVuZCA9IG9tYXBfcG1fcnVudGltZV9zdXNwZW5kOwotCW9tYXBfcG0tPnJ1bnRpbWVfcmVzdW1lID0gb21hcF9wbV9ydW50aW1lX3Jlc3VtZTsKLQotCXBsYXRmb3JtX2J1c19zZXRfcG1fb3BzKG9tYXBfcG0pOwotCi0JcmV0dXJuIDA7Ci19Ci1jb3JlX2luaXRjYWxsKG9tYXBfcG1fcnVudGltZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdm9sdGFnZS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKaW5kZXggNmZiNTIwOS4uMGMxNTUyZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi92b2x0YWdlLmMKQEAgLTExNCw3ICsxMTQsNiBAQAogCXN5c19jbGtfc3BlZWQgLz0gMTAwMDsKIAogCS8qIEdlbmVyaWMgdm9sdGFnZSBwYXJhbWV0ZXJzICovCi0JdmRkLT5jdXJyX3ZvbHQgPSAxMjAwMDAwOwogCXZkZC0+dm9sdF9zY2FsZSA9IHZwX2ZvcmNldXBkYXRlX3NjYWxlX3ZvbHRhZ2U7CiAJdmRkLT52cF9lbmFibGVkID0gZmFsc2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCmluZGV4IGJmYmVjZWMuLjgxMGE5ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvYmFsbG9vbjMuYwpAQCAtMTUsNyArMTUsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEyeHguYyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLXB4YTJ4eC5jCmluZGV4IDFjZTA5MDQuLjFkNTg1OWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLXB4YTJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLXB4YTJ4eC5jCkBAIC05LDcgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8bWFjaC9weGEyeHgtcmVncy5oPgogCkBAIC0zMywzMiArMzMsMjIgQEAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyB1aW50MzJfdCBzYXZlZF9ja2VuOwogCi1zdGF0aWMgaW50IHB4YTJ4eF9jbG9ja19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTJ4eF9jbG9ja19zdXNwZW5kKHZvaWQpCiB7CiAJc2F2ZWRfY2tlbiA9IENLRU47CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhMnh4X2Nsb2NrX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3N0YXRpYyB2b2lkIHB4YTJ4eF9jbG9ja19yZXN1bWUodm9pZCkKIHsKIAlDS0VOID0gc2F2ZWRfY2tlbjsKLQlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIHB4YTJ4eF9jbG9ja19zdXNwZW5kCU5VTEwKICNkZWZpbmUgcHhhMnh4X2Nsb2NrX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAotc3RydWN0IHN5c2Rldl9jbGFzcyBweGEyeHhfY2xvY2tfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gInB4YTJ4eC1jbG9jayIsCitzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhMnh4X2Nsb2NrX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gcHhhMnh4X2Nsb2NrX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBweGEyeHhfY2xvY2tfcmVzdW1lLAogfTsKLQotc3RhdGljIGludCBfX2luaXQgcHhhMnh4X2Nsb2NrX2luaXQodm9pZCkKLXsKLQlpZiAoY3B1X2lzX3B4YTJ4eCgpKQotCQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGEyeHhfY2xvY2tfc3lzY2xhc3MpOwotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwocHhhMnh4X2Nsb2NrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2stcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEzeHguYwppbmRleCAzZjg2NGNkLi4yYTM3YTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay1weGEzeHguYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CiAjaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgpAQCAtMTgyLDcgKzE4Myw3IEBACiBzdGF0aWMgdWludDMyX3QgY2tlblsyXTsKIHN0YXRpYyB1aW50MzJfdCBhY2NyOwogCi1zdGF0aWMgaW50IHB4YTN4eF9jbG9ja19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTN4eF9jbG9ja19zdXNwZW5kKHZvaWQpCiB7CiAJY2tlblswXSA9IENLRU5BOwogCWNrZW5bMV0gPSBDS0VOQjsKQEAgLTE5MCwyOCArMTkxLDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHhhM3h4X2Nsb2NrX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3N0YXRpYyB2b2lkIHB4YTN4eF9jbG9ja19yZXN1bWUodm9pZCkKIHsKIAlBQ0NSID0gYWNjcjsKIAlDS0VOQSA9IGNrZW5bMF07CiAJQ0tFTkIgPSBja2VuWzFdOwotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgcHhhM3h4X2Nsb2NrX3N1c3BlbmQJTlVMTAogI2RlZmluZSBweGEzeHhfY2xvY2tfcmVzdW1lCU5VTEwKICNlbmRpZgogCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YTN4eF9jbG9ja19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAicHhhM3h4LWNsb2NrIiwKK3N0cnVjdCBzeXNjb3JlX29wcyBweGEzeHhfY2xvY2tfc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBweGEzeHhfY2xvY2tfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YTN4eF9jbG9ja19yZXN1bWUsCiB9OwotCi1zdGF0aWMgaW50IF9faW5pdCBweGEzeHhfY2xvY2tfaW5pdCh2b2lkKQotewotCWlmIChjcHVfaXNfcHhhM3h4KCkgfHwgY3B1X2lzX3B4YTk1eCgpKQotCQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGEzeHhfY2xvY2tfc3lzY2xhc3MpOwotCXJldHVybiAwOwotfQotcG9zdGNvcmVfaW5pdGNhbGwocHhhM3h4X2Nsb2NrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtcHhhL2Nsb2NrLmgKaW5kZXggZjlmMzQ5YS4uMWYyZmI5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbG9jay5oCkBAIC0xLDUgKzEsNSBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKIHN0cnVjdCBjbGtvcHMgewogCXZvaWQJCQkoKmVuYWJsZSkoc3RydWN0IGNsayAqKTsKQEAgLTU0LDcgKzU0LDcgQEAKIHZvaWQgY2xrX3B4YTJ4eF9ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspOwogdm9pZCBjbGtfcHhhMnh4X2NrZW5fZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspOwogCi1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBweGEyeHhfY2xvY2tfc3lzY2xhc3M7CitleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHB4YTJ4eF9jbG9ja19zeXNjb3JlX29wczsKIAogI2lmIGRlZmluZWQoQ09ORklHX1BYQTN4eCkgfHwgZGVmaW5lZChDT05GSUdfUFhBOTV4KQogI2RlZmluZSBERUZJTkVfUFhBM19DS0VOKF9uYW1lLCBfY2tlbiwgX3JhdGUsIF9kZWxheSkJXApAQCAtNzQsNSArNzQsNiBAQAogZXh0ZXJuIHZvaWQgY2xrX3B4YTN4eF9ja2VuX2VuYWJsZShzdHJ1Y3QgY2xrICopOwogZXh0ZXJuIHZvaWQgY2xrX3B4YTN4eF9ja2VuX2Rpc2FibGUoc3RydWN0IGNsayAqKTsKIAotZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhM3h4X2Nsb2NrX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBweGEzeHhfY2xvY2tfc3lzY29yZV9vcHM7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCmluZGV4IGI4OGQ2MDEuLjEzNTE4YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKQEAgLTEwLDcgKzEwLDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LmMKaW5kZXggODIyNWUyZS4uYTEwOTk2NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHguYwpAQCAtMTAsNyArMTAsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIApAQCAtMzg4LDcgKzM4OCw3IEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzbGVlcF9zYXZlX21zY1sxMF07CiAKLXN0YXRpYyBpbnQgY214Mnh4X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBjbXgyeHhfc3VzcGVuZCh2b2lkKQogewogCWNteDJ4eF9wY2lfc3VzcGVuZCgpOwogCkBAIC00MTIsNyArNDEyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjbXgyeHhfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBjbXgyeHhfcmVzdW1lKHZvaWQpCiB7CiAJY214Mnh4X3BjaV9yZXN1bWUoKTsKIApAQCAtNDIwLDI3ICs0MjAsMTggQEAKIAlfX3Jhd193cml0ZWwoc2xlZXBfc2F2ZV9tc2NbMF0sIE1TQzApOwogCV9fcmF3X3dyaXRlbChzbGVlcF9zYXZlX21zY1sxXSwgTVNDMSk7CiAJX19yYXdfd3JpdGVsKHNsZWVwX3NhdmVfbXNjWzJdLCBNU0MyKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBjbXgyeHhfcG1fc3lzY2xhc3MgPSB7Ci0JLm5hbWUgPSAicG0iLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBjbXgyeHhfcG1fc3lzY29yZV9vcHMgPSB7CiAJLnJlc3VtZSA9IGNteDJ4eF9yZXN1bWUsCiAJLnN1c3BlbmQgPSBjbXgyeHhfc3VzcGVuZCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBjbXgyeHhfcG1fZGV2aWNlID0gewotCS5jbHMgPSAmY214Mnh4X3BtX3N5c2NsYXNzLAotfTsKLQogc3RhdGljIGludCBfX2luaXQgY214Mnh4X3BtX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyb3I7Ci0JZXJyb3IgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmNteDJ4eF9wbV9zeXNjbGFzcyk7Ci0JaWYgKGVycm9yID09IDApCi0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZjbXgyeHhfcG1fZGV2aWNlKTsKLQlyZXR1cm4gZXJyb3I7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmNteDJ4eF9wbV9zeXNjb3JlX29wcyk7CisKKwlyZXR1cm4gMDsKIH0KICNlbHNlCiBzdGF0aWMgaW50IF9faW5pdCBjbXgyeHhfcG1faW5pdCh2b2lkKSB7IHJldHVybiAwOyB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1ldmFsYm9hcmQuYwppbmRleCA4MWMzYzQzLi5kMjhlODAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLWV2YWxib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktZXZhbGJvYXJkLmMKQEAgLTEzLDcgKzEzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC1pbmNvbWUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWluY29tZS5jCmluZGV4IDQ0YzFiNzcuLjgwNTM4YjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWluY29tZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLWluY29tZS5jCkBAIC0yMiw3ICsyMiw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcHdtX2JhY2tsaWdodC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9weGEtaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb2xpYnJpLXB4YTI3MC5jCmluZGV4IDZmYzVkMzIuLjc1NDVhNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvbGlicmktcHhhMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY29saWJyaS1weGEyNzAuYwpAQCAtMTcsNyArMTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC91Y2IxNDAwLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLXB4YS9nZW5lcmljLmgKaW5kZXggYTA3OWQ4Yi4uZTZjOTM0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvZ2VuZXJpYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2dlbmVyaWMuaApAQCAtNjEsMTAgKzYxLDEwIEBACiAjZGVmaW5lIHB4YTN4eF9nZXRfY2xrX2ZyZXF1ZW5jeV9raHooeCkJCSgwKQogI2VuZGlmCiAKLWV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YV9pcnFfc3lzY2xhc3M7Ci1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBweGFfZ3Bpb19zeXNjbGFzczsKLWV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YTJ4eF9tZnBfc3lzY2xhc3M7Ci1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBweGEzeHhfbWZwX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBweGFfaXJxX3N5c2NvcmVfb3BzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBweGFfZ3Bpb19zeXNjb3JlX29wczsKK2V4dGVybiBzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhMnh4X21mcF9zeXNjb3JlX29wczsKK2V4dGVybiBzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhM3h4X21mcF9zeXNjb3JlX29wczsKIAogdm9pZCBfX2luaXQgcHhhX3NldF9mZnVhcnRfaW5mbyh2b2lkICppbmZvKTsKIHZvaWQgX19pbml0IHB4YV9zZXRfYnR1YXJ0X2luZm8odm9pZCAqaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9oeDQ3MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCmluZGV4IDZkZTBhZDAuLjljZGNjYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2h4NDcwMC5jCkBAIC03MTEsNyArNzExLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBicTI0MDIyX2luaXRfZGF0YSA9IHsKIAkuY29uc3RyYWludHMgPSB7CiAJCS5tYXhfdUEgICAgICAgICA9IDUwMDAwMCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9DVVJSRU5ULAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX0NVUlJFTlR8UkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCiAJfSwKIAkubnVtX2NvbnN1bWVyX3N1cHBsaWVzICA9IEFSUkFZX1NJWkUoYnEyNDAyMl9jb25zdW1lcnMpLAogCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gYnEyNDAyMl9jb25zdW1lcnMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCmluZGV4IDYyNTFlM2YuLjMyZWQ1NTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lycS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIApAQCAtMTgzLDcgKzE4Myw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlZF9pY21yW01BWF9JTlRFUk5BTF9JUlFTLzMyXTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX2lwcltNQVhfSU5URVJOQUxfSVJRU107CiAKLXN0YXRpYyBpbnQgcHhhX2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhX2lycV9zdXNwZW5kKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTIwMiw3ICsyMDIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YV9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBweGFfaXJxX3Jlc3VtZSh2b2lkKQogewogCWludCBpOwogCkBAIC0yMTgsMjIgKzIxOCwxMyBAQAogCQkJX19yYXdfd3JpdGVsKHNhdmVkX2lwcltpXSwgSVJRX0JBU0UgKyBJUFIoaSkpOwogCiAJX19yYXdfd3JpdGVsKDEsIElSUV9CQVNFICsgSUNDUik7Ci0JcmV0dXJuIDA7CiB9CiAjZWxzZQogI2RlZmluZSBweGFfaXJxX3N1c3BlbmQJCU5VTEwKICNkZWZpbmUgcHhhX2lycV9yZXN1bWUJCU5VTEwKICNlbmRpZgogCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzIHB4YV9pcnFfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImlycSIsCitzdHJ1Y3Qgc3lzY29yZV9vcHMgcHhhX2lycV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHB4YV9pcnFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YV9pcnFfcmVzdW1lLAogfTsKLQotc3RhdGljIGludCBfX2luaXQgcHhhX2lycV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmcHhhX2lycV9zeXNjbGFzcyk7Ci19Ci0KLWNvcmVfaW5pdGNhbGwocHhhX2lycV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKaW5kZXggZjVkZTU0MS4uNmNmODE4MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC0xNTksMzAgKzE1OSwyMiBAQAogCiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgbHBkMjcwX2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGxwZDI3MF9pcnFfcmVzdW1lKHZvaWQpCiB7CiAJX19yYXdfd3JpdGV3KGxwZDI3MF9pcnFfZW5hYmxlZCwgTFBEMjcwX0lOVF9NQVNLKTsKLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgbHBkMjcwX2lycV9zeXNjbGFzcyA9IHsKLQkubmFtZSA9ICJjcGxkX2lycSIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGxwZDI3MF9pcnFfc3lzY29yZV9vcHMgPSB7CiAJLnJlc3VtZSA9IGxwZDI3MF9pcnFfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGxwZDI3MF9pcnFfZGV2aWNlID0gewotCS5jbHMgPSAmbHBkMjcwX2lycV9zeXNjbGFzcywKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IGxwZDI3MF9pcnFfZGV2aWNlX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gLUVOT0RFVjsKIAlpZiAobWFjaGluZV9pc19sb2dpY3BkX3B4YTI3MCgpKSB7Ci0JCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbHBkMjcwX2lycV9zeXNjbGFzcyk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmbHBkMjcwX2lycV9kZXZpY2UpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbHBkMjcwX2lycV9zeXNjb3JlX29wcyk7CisJCXJldHVybiAwOwogCX0KLQlyZXR1cm4gcmV0OworCXJldHVybiAtRU5PREVWOwogfQogCiBkZXZpY2VfaW5pdGNhbGwobHBkMjcwX2lycV9kZXZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKaW5kZXggM2VkZTk3OC4uZTEwZGRiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYwpAQCAtMTUsNyArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTE3NiwzMSArMTc2LDIyIEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBsdWJib2NrX2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGx1YmJvY2tfaXJxX3Jlc3VtZSh2b2lkKQogewogCUxVQl9JUlFfTUFTS19FTiA9IGx1YmJvY2tfaXJxX2VuYWJsZWQ7Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGx1YmJvY2tfaXJxX3N5c2NsYXNzID0gewotCS5uYW1lID0gImNwbGRfaXJxIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgbHViYm9ja19pcnFfc3lzY29yZV9vcHMgPSB7CiAJLnJlc3VtZSA9IGx1YmJvY2tfaXJxX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBsdWJib2NrX2lycV9kZXZpY2UgPSB7Ci0JLmNscyA9ICZsdWJib2NrX2lycV9zeXNjbGFzcywKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IGx1YmJvY2tfaXJxX2RldmljZV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IC1FTk9ERVY7Ci0KIAlpZiAobWFjaGluZV9pc19sdWJib2NrKCkpIHsKLQkJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZsdWJib2NrX2lycV9zeXNjbGFzcyk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmbHViYm9ja19pcnFfZGV2aWNlKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmx1YmJvY2tfaXJxX3N5c2NvcmVfb3BzKTsKKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIGRldmljZV9pbml0Y2FsbChsdWJib2NrX2lycV9kZXZpY2VfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYwppbmRleCBhNzI5OTNkLi45OTg0ZWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKQEAgLTU5OSw3ICs1OTksNyBAQAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGJxMjQwMjJfaW5pdF9kYXRhID0gewogCS5jb25zdHJhaW50cyA9IHsKIAkJLm1heF91QSAgICAgICAgID0gNTAwMDAwLAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX0NVUlJFTlQsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfQ1VSUkVOVCB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAogCX0sCiAJLm51bV9jb25zdW1lcl9zdXBwbGllcyAgPSBBUlJBWV9TSVpFKGJxMjQwMjJfY29uc3VtZXJzKSwKIAkuY29uc3VtZXJfc3VwcGxpZXMgICAgICA9IGJxMjQwMjJfY29uc3VtZXJzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwppbmRleCA5NTE2M2JhLi4zNDc5ZTJiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwpAQCAtMTUsNyArMTUsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTE4NSwzMSArMTg1LDIxIEBACiAKICNpZmRlZiBDT05GSUdfUE0KIAotc3RhdGljIGludCBtYWluc3RvbmVfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbWFpbnN0b25lX2lycV9yZXN1bWUodm9pZCkKIHsKIAlNU1RfSU5UTVNLRU5BID0gbWFpbnN0b25lX2lycV9lbmFibGVkOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBtYWluc3RvbmVfaXJxX3N5c2NsYXNzID0gewotCS5uYW1lID0gImNwbGRfaXJxIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgbWFpbnN0b25lX2lycV9zeXNjb3JlX29wcyA9IHsKIAkucmVzdW1lID0gbWFpbnN0b25lX2lycV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgbWFpbnN0b25lX2lycV9kZXZpY2UgPSB7Ci0JLmNscyA9ICZtYWluc3RvbmVfaXJxX3N5c2NsYXNzLAotfTsKLQogc3RhdGljIGludCBfX2luaXQgbWFpbnN0b25lX2lycV9kZXZpY2VfaW5pdCh2b2lkKQogewotCWludCByZXQgPSAtRU5PREVWOworCWlmIChtYWNoaW5lX2lzX21haW5zdG9uZSgpKQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbWFpbnN0b25lX2lycV9zeXNjb3JlX29wcyk7CiAKLQlpZiAobWFjaGluZV9pc19tYWluc3RvbmUoKSkgewotCQlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm1haW5zdG9uZV9pcnFfc3lzY2xhc3MpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJm1haW5zdG9uZV9pcnFfZGV2aWNlKTsKLQl9Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogZGV2aWNlX2luaXRjYWxsKG1haW5zdG9uZV9pcnFfZGV2aWNlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTJ4eC5jCmluZGV4IDFkMTQxOWIuLjg3YWUzMTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEyeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhMnh4LmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPG1hY2gvcHhhMnh4LXJlZ3MuaD4KQEAgLTMzOCw3ICszMzgsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZWRfZ3Bkcls0XTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVkX3Bnc3JbNF07CiAKLXN0YXRpYyBpbnQgcHhhMnh4X21mcF9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YTJ4eF9tZnBfc3VzcGVuZCh2b2lkKQogewogCWludCBpOwogCkBAIC0zNjUsNyArMzY1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEyeHhfbWZwX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3N0YXRpYyB2b2lkIHB4YTJ4eF9tZnBfcmVzdW1lKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTM3NiwxNSArMzc2LDEzIEBACiAJCVBHU1IoaSkgPSBzYXZlZF9wZ3NyW2ldOwogCX0KIAlQU1NSID0gUFNTUl9SREggfCBQU1NSX1BIOwotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgcHhhMnh4X21mcF9zdXNwZW5kCU5VTEwKICNkZWZpbmUgcHhhMnh4X21mcF9yZXN1bWUJTlVMTAogI2VuZGlmCiAKLXN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhMnh4X21mcF9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibWZwIiwKK3N0cnVjdCBzeXNjb3JlX29wcyBweGEyeHhfbWZwX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gcHhhMnh4X21mcF9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhMnh4X21mcF9yZXN1bWUsCiB9OwpAQCAtNDA5LDYgKzQwNyw2IEBACiAJZm9yIChpID0gMDsgaSA8PSBncGlvX3RvX2JhbmsocHhhX2xhc3RfZ3Bpbyk7IGkrKykKIAkJZ3Bkcl9scG1baV0gPSBHUERSKGkgKiAzMik7CiAKLQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGEyeHhfbWZwX3N5c2NsYXNzKTsKKwlyZXR1cm4gMDsKIH0KIHBvc3Rjb3JlX2luaXRjYWxsKHB4YTJ4eF9tZnBfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tZnAtcHhhM3h4LmMKaW5kZXggN2EyNzBlZS4uODk4NjNhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWZwLXB4YTN4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21mcC1weGEzeHguYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9tZnAtcHhhM3h4Lmg+CkBAIC0zMSwxMyArMzEsMTMgQEAKICAqIGEgcHVsbC1kb3duIG1vZGUgaWYgdGhleSdyZSBhbiBhY3RpdmUgbG93IGNoaXAgc2VsZWN0LCBhbmQgd2UncmUKICAqIGp1c3QgZW50ZXJpbmcgc3RhbmRieS4KICAqLwotc3RhdGljIGludCBweGEzeHhfbWZwX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmQsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhM3h4X21mcF9zdXNwZW5kKHZvaWQpCiB7CiAJbWZwX2NvbmZpZ19scG0oKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEzeHhfbWZwX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZCkKK3N0YXRpYyB2b2lkIHB4YTN4eF9tZnBfcmVzdW1lKHZvaWQpCiB7CiAJbWZwX2NvbmZpZ19ydW4oKTsKIApAQCAtNDcsMjQgKzQ3LDEzIEBACiAJICogcHJlc2VydmUgdGhlbSBoZXJlIGluIGNhc2UgdGhleSB3aWxsIGJlIHJlZmVyZW5jZWQgbGF0ZXIKIAkgKi8KIAlBU0NSICY9IH4oQVNDUl9SREggfCBBU0NSX0QxUyB8IEFTQ1JfRDJTIHwgQVNDUl9EM1MpOwotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgcHhhM3h4X21mcF9zdXNwZW5kCU5VTEwKICNkZWZpbmUgcHhhM3h4X21mcF9yZXN1bWUJTlVMTAogI2VuZGlmCiAKLXN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhM3h4X21mcF9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibWZwIiwKK3N0cnVjdCBzeXNjb3JlX29wcyBweGEzeHhfbWZwX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gcHhhM3h4X21mcF9zdXNwZW5kLAotCS5yZXN1bWUgCT0gcHhhM3h4X21mcF9yZXN1bWUsCisJLnJlc3VtZQkJPSBweGEzeHhfbWZwX3Jlc3VtZSwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IG1mcF9pbml0X2RldmljZWZzKHZvaWQpCi17Ci0JaWYgKGNwdV9pc19weGEzeHgoKSkKLQkJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmcHhhM3h4X21mcF9zeXNjbGFzcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLXBvc3Rjb3JlX2luaXRjYWxsKG1mcF9pbml0X2RldmljZWZzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwppbmRleCAyMzkyNWRiLi5lMzQ3MDEzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgpAQCAtNDg4LDcgKzQ4OCw3IEBACiB9CiAKIAotc3RhdGljIGludCBtaW9hNzAxX3N5c19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgbWlvYTcwMV9zeXNfc3VzcGVuZCh2b2lkKQogewogCWludCBpID0gMCwgaXNfYnRfb247CiAJdTMyICptZW1fcmVzdW1lX3ZlY3Rvcgk9IHBoeXNfdG9fdmlydChSRVNVTUVfVkVDVE9SX0FERFIpOwpAQCAtNTE0LDcgKzUxNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWlvYTcwMV9zeXNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCitzdGF0aWMgdm9pZCBtaW9hNzAxX3N5c19yZXN1bWUodm9pZCkKIHsKIAlpbnQgaSA9IDA7CiAJdTMyICptZW1fcmVzdW1lX3ZlY3Rvcgk9IHBoeXNfdG9fdmlydChSRVNVTUVfVkVDVE9SX0FERFIpOwpAQCAtNTI3LDQzICs1MjcsMTggQEAKIAkqbWVtX3Jlc3VtZV9lbmFibGVyID0gc2F2ZV9idWZmZXJbaSsrXTsKIAkqbWVtX3Jlc3VtZV9idAkgICAgPSBzYXZlX2J1ZmZlcltpKytdOwogCSptZW1fcmVzdW1lX3Vua25vd24gPSBzYXZlX2J1ZmZlcltpKytdOwotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG1pb2E3MDFfc3lzY2xhc3MgPSB7Ci0JLm5hbWUgPSAibWlvYTcwMSIsCi19OwotCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2Ugc3lzZGV2X2Jvb3RzdHJhcCA9IHsKLQkuY2xzCQk9ICZtaW9hNzAxX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIGRyaXZlcl9ib290c3RyYXAgPSB7Ci0JLnN1c3BlbmQJPSAmbWlvYTcwMV9zeXNfc3VzcGVuZCwKLQkucmVzdW1lCQk9ICZtaW9hNzAxX3N5c19yZXN1bWUsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIG1pb2E3MDFfc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBtaW9hNzAxX3N5c19zdXNwZW5kLAorCS5yZXN1bWUJCT0gbWlvYTcwMV9zeXNfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYm9vdHN0cmFwX2luaXQodm9pZCkKIHsKLQlpbnQgcmM7CiAJaW50IHNhdmVfc2l6ZSA9IG1pb2E3MDFfYm9vdHN0cmFwX2xnICsgKHNpemVvZih1MzIpICogMyk7CiAKLQlyYyA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmbWlvYTcwMV9zeXNjbGFzcyk7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHJlZ2lzdGVyaW5nIG1pb2E3MDEgc3lzIGNsYXNzXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJjID0gc3lzZGV2X3JlZ2lzdGVyKCZzeXNkZXZfYm9vdHN0cmFwKTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgcmVnaXN0ZXJpbmcgbWlvYTcwMSBzeXMgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJjID0gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmbWlvYTcwMV9zeXNjbGFzcywgJmRyaXZlcl9ib290c3RyYXApOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZWdpc3RlcmluZyBQTVUgc3lzIGRyaXZlclxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbWlvYTcwMV9zeXNjb3JlX29wcyk7CiAKIAlzYXZlX2J1ZmZlciA9IGttYWxsb2Moc2F2ZV9zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNhdmVfYnVmZmVyKQpAQCAtNTc2LDkgKzU1MSw3IEBACiBzdGF0aWMgdm9pZCBib290c3RyYXBfZXhpdCh2b2lkKQogewogCWtmcmVlKHNhdmVfYnVmZmVyKTsKLQlzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoJm1pb2E3MDFfc3lzY2xhc3MsICZkcml2ZXJfYm9vdHN0cmFwKTsKLQlzeXNkZXZfdW5yZWdpc3Rlcigmc3lzZGV2X2Jvb3RzdHJhcCk7Ci0Jc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoJm1pb2E3MDFfc3lzY2xhc3MpOworCXVucmVnaXN0ZXJfc3lzY29yZV9vcHMoJm1pb2E3MDFfc3lzY29yZV9vcHMpOwogCiAJcHJpbnRrKEtFUk5fQ1JJVCAiVW5yZWdpc3RlcmluZyBtaW9hNzAxIHN1c3BlbmQgd2lsbCBoYW5nIG5leHQiCiAJICAgICAgICJyZXN1bWUgISEhXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG1sZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKaW5kZXggYTZmODk4Yy4uNDA2MWVjZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMKQEAgLTI0LDcgKzI0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvd205N3h4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jCmluZGV4IDhhYWRhZDUuLjIwZDFiMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRyZW8uYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvcG93ZXJfc3VwcGx5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvdzEtZ3Bpby5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYwppbmRleCAzYjhhNGYzLi42NWYyNGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCkBAIC0xOSw3ICsxOSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KQEAgLTIzMyw5ICsyMzMsOSBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzdG9yZV9wdHI7CiAKLS8qIHN5c19kZXZpY2UgZm9yIFBhbG0gWmlyZSA3MiBQTSAqLworLyogc3lzY29yZV9vcHMgZm9yIFBhbG0gWmlyZSA3MiBQTSAqLwogCi1zdGF0aWMgaW50IHBhbG16NzJfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQorc3RhdGljIGludCBwYWxtejcyX3BtX3N1c3BlbmQodm9pZCkKIHsKIAkvKiBzZXR1cCB0aGUgcmVzdW1lX2luZm8gc3RydWN0IGZvciB0aGUgb3JpZ2luYWwgYm9vdGxvYWRlciAqLwogCXBhbG16NzJfcmVzdW1lX2luZm8ucmVzdW1lX2FkZHIgPSAodTMyKSBjcHVfcmVzdW1lOwpAQCAtMjQ5LDMxICsyNDksMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwYWxtejcyX3BtX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcGFsbXo3Ml9wbV9yZXN1bWUodm9pZCkKIHsKIAkqUEFMTVo3Ml9TQVZFX0RXT1JEID0gc3RvcmVfcHRyOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBwYWxtejcyX3BtX3N5c2NsYXNzID0gewotCS5uYW1lID0gInBhbG16NzJfcG0iLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBwYWxtejcyX3BtX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kID0gcGFsbXo3Ml9wbV9zdXNwZW5kLAogCS5yZXN1bWUgPSBwYWxtejcyX3BtX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBwYWxtejcyX3BtX2RldmljZSA9IHsKLQkuY2xzID0gJnBhbG16NzJfcG1fc3lzY2xhc3MsCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBwYWxtejcyX3BtX2luaXQodm9pZCkKIHsKLQlpbnQgcmV0ID0gLUVOT0RFVjsKIAlpZiAobWFjaGluZV9pc19wYWxtejcyKCkpIHsKLQkJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZwYWxtejcyX3BtX3N5c2NsYXNzKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZwYWxtejcyX3BtX2RldmljZSk7CisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZwYWxtejcyX3BtX3N5c2NvcmVfb3BzKTsKKwkJcmV0dXJuIDA7CiAJfQotCXJldHVybiByZXQ7CisJcmV0dXJuIC1FTk9ERVY7CiB9CiAKIGRldmljZV9pbml0Y2FsbChwYWxtejcyX3BtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjV4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwppbmRleCBhNGFmOGM1Li5mZWQzNjNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEyNXguYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgpAQCAtMzUwLDIxICszNTAsOSBAQAogCSZweGFfZGV2aWNlX2Fzb2NfcGxhdGZvcm0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHhhMjV4X3N5c2RldltdID0gewotCXsKLQkJLmNscwk9ICZweGFfaXJxX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGEyeHhfbWZwX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGFfZ3Bpb19zeXNjbGFzcywKLQl9LCB7Ci0JCS5jbHMJPSAmcHhhMnh4X2Nsb2NrX3N5c2NsYXNzLAotCX0KLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHB4YTI1eF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoY3B1X2lzX3B4YTI1eCgpKSB7CiAKQEAgLTM3NywxMSArMzY1LDEwIEBACiAKIAkJcHhhMjV4X2luaXRfcG0oKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweGEyNXhfc3lzZGV2KTsgaSsrKSB7Ci0JCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJnB4YTI1eF9zeXNkZXZbaV0pOwotCQkJaWYgKHJldCkKLQkJCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBzeXNkZXZbJWRdXG4iLCBpKTsKLQkJfQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhX2lycV9zeXNjb3JlX29wcyk7CisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZweGEyeHhfbWZwX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YV9ncGlvX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YTJ4eF9jbG9ja19zeXNjb3JlX29wcyk7CiAKIAkJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMocHhhMjV4X2RldmljZXMsCiAJCQkJCSAgIEFSUkFZX1NJWkUocHhhMjV4X2RldmljZXMpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKaW5kZXggOTA5NzU2ZS4uMmZlY2JlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcHhhMjd4LmMKQEAgLTE2LDcgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgpAQCAtNDI4LDIxICs0MjgsOSBAQAogCSZweGEyN3hfZGV2aWNlX3B3bTEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHhhMjd4X3N5c2RldltdID0gewotCXsKLQkJLmNscwk9ICZweGFfaXJxX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGEyeHhfbWZwX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGFfZ3Bpb19zeXNjbGFzcywKLQl9LCB7Ci0JCS5jbHMJPSAmcHhhMnh4X2Nsb2NrX3N5c2NsYXNzLAotCX0KLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHB4YTI3eF9pbml0KHZvaWQpCiB7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IHJldCA9IDA7CiAKIAlpZiAoY3B1X2lzX3B4YTI3eCgpKSB7CiAKQEAgLTQ1NSwxMSArNDQzLDEwIEBACiAKIAkJcHhhMjd4X2luaXRfcG0oKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShweGEyN3hfc3lzZGV2KTsgaSsrKSB7Ci0JCQlyZXQgPSBzeXNkZXZfcmVnaXN0ZXIoJnB4YTI3eF9zeXNkZXZbaV0pOwotCQkJaWYgKHJldCkKLQkJCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBzeXNkZXZbJWRdXG4iLCBpKTsKLQkJfQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhX2lycV9zeXNjb3JlX29wcyk7CisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZweGEyeHhfbWZwX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YV9ncGlvX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YTJ4eF9jbG9ja19zeXNjb3JlX29wcyk7CiAKIAkJcmV0ID0gcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcHhhM3h4LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwppbmRleCA4ZGQxMDczLi44NTIxZDdkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9weGEzeHguYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvcHhhLWkyYy5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC00MjcsMjEgKzQyNyw5IEBACiAJJnB4YTI3eF9kZXZpY2VfcHdtMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBweGEzeHhfc3lzZGV2W10gPSB7Ci0JewotCQkuY2xzCT0gJnB4YV9pcnFfc3lzY2xhc3MsCi0JfSwgewotCQkuY2xzCT0gJnB4YTN4eF9tZnBfc3lzY2xhc3MsCi0JfSwgewotCQkuY2xzCT0gJnB4YV9ncGlvX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGEzeHhfY2xvY2tfc3lzY2xhc3MsCi0JfQotfTsKLQogc3RhdGljIGludCBfX2luaXQgcHhhM3h4X2luaXQodm9pZCkKIHsKLQlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCWlmIChjcHVfaXNfcHhhM3h4KCkpIHsKIApAQCAtNDYyLDExICs0NTAsMTAgQEAKIAogCQlweGEzeHhfaW5pdF9wbSgpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHB4YTN4eF9zeXNkZXYpOyBpKyspIHsKLQkJCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmcHhhM3h4X3N5c2RldltpXSk7Ci0JCQlpZiAocmV0KQotCQkJCXByX2VycigiZmFpbGVkIHRvIHJlZ2lzdGVyIHN5c2RldlslZF1cbiIsIGkpOwotCQl9CisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZweGFfaXJxX3N5c2NvcmVfb3BzKTsKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YTN4eF9tZnBfc3lzY29yZV9vcHMpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhX2dwaW9fc3lzY29yZV9vcHMpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhM3h4X2Nsb2NrX3N5c2NvcmVfb3BzKTsKIAogCQlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGE5NXguYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCmluZGV4IDIzYjIyOWIuLmVjYzgyYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTk1eC5jCkBAIC0xOCw3ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjL3B4YS1pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CkBAIC0yNjAsMTYgKzI2MCw2IEBACiAJJnB4YTI3eF9kZXZpY2VfcHdtMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBweGE5NXhfc3lzZGV2W10gPSB7Ci0JewotCQkuY2xzCT0gJnB4YV9pcnFfc3lzY2xhc3MsCi0JfSwgewotCQkuY2xzCT0gJnB4YV9ncGlvX3N5c2NsYXNzLAotCX0sIHsKLQkJLmNscwk9ICZweGEzeHhfY2xvY2tfc3lzY2xhc3MsCi0JfQotfTsKLQogc3RhdGljIGludCBfX2luaXQgcHhhOTV4X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0ID0gMCwgaTsKQEAgLTI5MywxMSArMjgzLDkgQEAKIAkJaWYgKChyZXQgPSBweGFfaW5pdF9kbWEoSVJRX0RNQSwgMzIpKSkKIAkJCXJldHVybiByZXQ7CiAKLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocHhhOTV4X3N5c2Rldik7IGkrKykgewotCQkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZweGE5NXhfc3lzZGV2W2ldKTsKLQkJCWlmIChyZXQpCi0JCQkJcHJfZXJyKCJmYWlsZWQgdG8gcmVnaXN0ZXIgc3lzZGV2WyVkXVxuIiwgaSk7Ci0JCX0KKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnB4YV9pcnFfc3lzY29yZV9vcHMpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhX2dwaW9fc3lzY29yZV9vcHMpOworCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHhhM3h4X2Nsb2NrX3N5c2NvcmVfb3BzKTsKIAogCQlyZXQgPSBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcmF1bWZlbGQuYwppbmRleCBjZDE4NjEzLi5kMTMwZjc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMKQEAgLTE4LDcgKzE4LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zbWVtYy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc21lbWMuYwppbmRleCAyMzJiNzMxLi43OTkyMzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zbWVtYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NtZW1jLmMKQEAgLTYsNyArNiw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL3NtZW1jLmg+CkBAIC0xNiw3ICsxNiw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzeGNuZmcsIG1lbWNsa2NmZzsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNzYWRyY2ZnWzRdOwogCi1zdGF0aWMgaW50IHB4YTN4eF9zbWVtY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHhhM3h4X3NtZW1jX3N1c3BlbmQodm9pZCkKIHsKIAltc2NbMF0gPSBfX3Jhd19yZWFkbChNU0MwKTsKIAltc2NbMV0gPSBfX3Jhd19yZWFkbChNU0MxKTsKQEAgLTMwLDcgKzMwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBweGEzeHhfc21lbWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBweGEzeHhfc21lbWNfcmVzdW1lKHZvaWQpCiB7CiAJX19yYXdfd3JpdGVsKG1zY1swXSwgTVNDMCk7CiAJX19yYXdfd3JpdGVsKG1zY1sxXSwgTVNDMSk7CkBAIC00MCwzNCArNDAsMTkgQEAKIAlfX3Jhd193cml0ZWwoY3NhZHJjZmdbMV0sIENTQURSQ0ZHMSk7CiAJX19yYXdfd3JpdGVsKGNzYWRyY2ZnWzJdLCBDU0FEUkNGRzIpOwogCV9fcmF3X3dyaXRlbChjc2FkcmNmZ1szXSwgQ1NBRFJDRkczKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBzbWVtY19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAic21lbWMiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBzbWVtY19zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHB4YTN4eF9zbWVtY19zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhM3h4X3NtZW1jX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzbWVtY19zeXNkZXYgPSB7Ci0JLmlkCQk9IDAsCi0JLmNscwkJPSAmc21lbWNfc3lzY2xhc3MsCi19OwotCiBzdGF0aWMgaW50IF9faW5pdCBzbWVtY19pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IDA7CisJaWYgKGNwdV9pc19weGEzeHgoKSkKKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnNtZW1jX3N5c2NvcmVfb3BzKTsKIAotCWlmIChjcHVfaXNfcHhhM3h4KCkpIHsKLQkJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzbWVtY19zeXNjbGFzcyk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCi0JCXJldCA9IHN5c2Rldl9yZWdpc3Rlcigmc21lbWNfc3lzZGV2KTsKLQl9Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogc3Vic3lzX2luaXRjYWxsKHNtZW1jX2luaXQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwppbmRleCBiOWNmYmViLi42ODc0MTdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKQEAgLTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCmluZGV4IGI1MjNmMTEuLjkwMzIxOGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvcHhhMjV4Lmg+CiAjaW5jbHVkZSA8bWFjaC9hdWRpby5oPgpAQCAtMTMwLDIwICsxMzEsMTkgQEAKIAlyZXR1cm4gdjE7CiB9CiAKLS8qIENQVSBzeXNkZXYgKi8KLXN0YXRpYyBpbnQgdmlwZXJfY3B1X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorLyogQ1BVIHN5c3RlbSBjb3JlIG9wZXJhdGlvbnMuICovCitzdGF0aWMgaW50IHZpcGVyX2NwdV9zdXNwZW5kKHZvaWQpCiB7CiAJdmlwZXJfaWNyX3NldF9iaXQoVklQRVJfSUNSX1JfRElTKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aXBlcl9jcHVfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCitzdGF0aWMgdm9pZCB2aXBlcl9jcHVfcmVzdW1lKHZvaWQpCiB7CiAJdmlwZXJfaWNyX2NsZWFyX2JpdChWSVBFUl9JQ1JfUl9ESVMpOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgdmlwZXJfY3B1X3N5c2Rldl9kcml2ZXIgPSB7CitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHZpcGVyX2NwdV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHZpcGVyX2NwdV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdmlwZXJfY3B1X3Jlc3VtZSwKIH07CkBAIC05NDUsNyArOTQ1LDcgQEAKIAl2aXBlcl9pbml0X3Zjb3JlX2dwaW9zKCk7CiAJdmlwZXJfaW5pdF9jcHVmcmVxKCk7CiAKLQlzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLCAmdmlwZXJfY3B1X3N5c2Rldl9kcml2ZXIpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZ2aXBlcl9jcHVfc3lzY29yZV9vcHMpOwogCiAJaWYgKHZlcnNpb24pIHsKIAkJcHJfaW5mbygidmlwZXI6IGhhcmR3YXJlIHYlZGklZCBkZXRlY3RlZC4gIgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdnBhYzI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdnBhYzI3MC5jCmluZGV4IGY3MWQzNzcuLjY3YmQ0MTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZwYWMyNzAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS92cGFjMjcwLmMKQEAgLTE2LDcgKzE2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvZ3Bpb192YnVzLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oIGIvYXJjaC9hcm0vbWFjaC1yZWFsdmlldy9pbmNsdWRlL21hY2gvYmFycmllcnMuaAppbmRleCAwYzVkNzQ5Li45YTczMjE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXJlYWx2aWV3L2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oCisrKyBiL2FyY2gvYXJtL21hY2gtcmVhbHZpZXcvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKQEAgLTQsNSArNCw1IEBACiAgKiBvcGVyYXRpb24gdG8gZGVhZGxvY2sgdGhlIHN5c3RlbS4KICAqLwogI2RlZmluZSBtYigpCQlkc2IoKQotI2RlZmluZSBybWIoKQkJZG1iKCkKKyNkZWZpbmUgcm1iKCkJCWRzYigpCiAjZGVmaW5lIHdtYigpCQltYigpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKaW5kZXggNWUyZjM1My4uMjg1NDEyOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwpAQCAtMjMsMzggKzIzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9wbS5oPgogCi1zdGF0aWMgaW50IHMzYzI0MTBfaXJxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9pcnFfZHJpdmVyID0gewotCS5hZGQJCT0gczNjMjQxMF9pcnFfYWRkLAorc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0eHhfaXJxX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBfaXJxX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9zeXNjbGFzcywgJnMzYzI0MTBfaXJxX2RyaXZlcik7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoczNjMjQxMF9pcnFfaW5pdCk7Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwYV9pcnFfZHJpdmVyID0gewotCS5hZGQJCT0gczNjMjQxMF9pcnFfYWRkLAotCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBhX2lycV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTBhX3N5c2NsYXNzLCAmczNjMjQxMGFfaXJxX2RyaXZlcik7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoczNjMjQxMGFfaXJxX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCmluZGV4IDI5NzBlYTkuLjFlMmQ1MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgpAQCAtMjE0LDE3ICsyMTQsMTYgQEAKIC8qIE5BTkQgRmxhc2ggb24gQkFTVCBib2FyZCAqLwogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGJhc3RfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc2QsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgYmFzdF9wbV9zdXNwZW5kKHZvaWQpCiB7CiAJLyogZW5zdXJlIHRoYXQgYW4gblJFU0VUIGlzIG5vdCBnZW5lcmF0ZWQgb24gcmVzdW1lLiAqLwogCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0MyNDEwX0dQQSgyMSksIDEpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJhc3RfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzZCkKK3N0YXRpYyB2b2lkIGJhc3RfcG1fcmVzdW1lKHZvaWQpCiB7CiAJczNjX2dwaW9fY2ZncGluKFMzQzI0MTBfR1BBKDIxKSwgUzNDMjQxMF9HUEEyMV9uUlNUT1VUKTsKLQlyZXR1cm4gMDsKIH0KIAogI2Vsc2UKQEAgLTIzMiwxNiArMjMxLDExIEBACiAjZGVmaW5lIGJhc3RfcG1fcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBiYXN0X3BtX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJtYWNoLWJhc3QiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBiYXN0X3BtX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gYmFzdF9wbV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gYmFzdF9wbV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgYmFzdF9wbV9zeXNkZXYgPSB7Ci0JLmNscwkJPSAmYmFzdF9wbV9zeXNjbGFzcywKLX07Ci0KIHN0YXRpYyBpbnQgc21hcnRtZWRpYV9tYXBbXSA9IHsgMCB9Owogc3RhdGljIGludCBjaGlwMF9tYXBbXSA9IHsgMSB9Owogc3RhdGljIGludCBjaGlwMV9tYXBbXSA9IHsgMiB9OwpAQCAtNjQyLDggKzYzNiw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBiYXN0X2luaXQodm9pZCkKIHsKLQlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmJhc3RfcG1fc3lzY2xhc3MpOwotCXN5c2Rldl9yZWdpc3RlcigmYmFzdF9wbV9zeXNkZXYpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZiYXN0X3BtX3N5c2NvcmVfb3BzKTsKIAogCXMzY19pMmMwX3NldF9wbGF0ZGF0YSgmYmFzdF9pMmNfaW5mbyk7CiAJczNjX25hbmRfc2V0X3BsYXRkYXRhKCZiYXN0X25hbmRfaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCmluZGV4IDcyNTYzNmYuLjQ3MjhmOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIApAQCAtOTIsNyArOTMsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBzM2MyNDEwX3BtX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgczNjMjQxMF9wbV9yZXN1bWUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIApAQCAtMTA0LDEwICsxMDUsMTIgQEAKIAogCWlmICggbWFjaGluZV9pc19hbWxfbTU5MDAoKSApCiAJCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEYoMiksIDApOwotCi0JcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBzeXNjb3JlX29wcyBzM2MyNDEwX3BtX3N5c2NvcmVfb3BzID0geworCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCit9OworCiBzdGF0aWMgaW50IHMzYzI0MTBfcG1fYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCiB7CiAJcG1fY3B1X3ByZXAgPSBzM2MyNDEwX3BtX3ByZXBhcmU7CkBAIC0xMTksNyArMTIyLDYgQEAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfUzNDMjQxMCkKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEwX3BtX2RyaXZlciA9IHsKIAkuYWRkCQk9IHMzYzI0MTBfcG1fYWRkLAotCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCiB9OwogCiAvKiByZWdpc3RlciBvdXJzZWx2ZXMgKi8KQEAgLTEzMyw3ICsxMzUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMGFfcG1fZHJpdmVyID0gewogCS5hZGQJCT0gczNjMjQxMF9wbV9hZGQsCi0JLnJlc3VtZQkJPSBzM2MyNDEwX3BtX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBhX3BtX2RydmluaXQodm9pZCkKQEAgLTE0Nyw3ICsxNDgsNiBAQAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQwKQogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfcG1fZHJpdmVyID0gewogCS5hZGQJCT0gczNjMjQxMF9wbV9hZGQsCi0JLnJlc3VtZQkJPSBzM2MyNDEwX3BtX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0NDBfcG1fZHJ2aW5pdCh2b2lkKQpAQCAtMTYxLDcgKzE2MSw2IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDIpCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9wbV9kcml2ZXIgPSB7CiAJLmFkZAkJPSBzM2MyNDEwX3BtX2FkZCwKLQkucmVzdW1lCQk9IHMzYzI0MTBfcG1fcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgczNjMjQ0Ml9wbV9kcnZpbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYwppbmRleCBhZGM5MGEzLi5mMWQzYmQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC00MCw2ICs0MSw3IEBACiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvcGxsLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CkBAIC0xNjgsNiArMTcwLDkgQEAKIHsKIAlwcmludGsoIlMzQzI0MTA6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOwogCisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnMzYzI0MTBfcG1fc3lzY29yZV9vcHMpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNHh4X2lycV9zeXNjb3JlX29wcyk7CisKIAlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2Rldik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9pcnEuYwppbmRleCBmMzM1NWQyLi4xYTFhYTIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2lycS5jCkBAIC0yMDIsOCArMjAyLDYgQEAKIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0MTJfaXJxX2RyaXZlciA9IHsKIAkuYWRkCQk9IHMzYzI0MTJfaXJxX2FkZCwKLQkuc3VzcGVuZAk9IHMzYzI0eHhfaXJxX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNHh4X2lycV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IHMzYzI0MTJfaXJxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYwppbmRleCA5MjNlMDFiLi44NWRjYWViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCkBAIC0xNyw3ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KQEAgLTQ4Niw3ICs0ODYsNyBAQAogLyogSml2ZSBwb3dlciBtYW5hZ2VtZW50IGRldmljZSAqLwogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IGppdmVfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc2QsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgaml2ZV9wbV9zdXNwZW5kKHZvaWQpCiB7CiAJLyogV3JpdGUgdGhlIG1hZ2ljIHZhbHVlIHUtYm9vdCB1c2VzIHRvIGNoZWNrIGZvciByZXN1bWUgaW50bwogCSAqIHRoZSBJTkZPUk0wIHJlZ2lzdGVyLCBhbmQgZW5zdXJlIElORk9STTEgaXMgc2V0IHRvIHRoZQpAQCAtNDk4LDEwICs0OTgsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGppdmVfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzZCkKK3N0YXRpYyB2b2lkIGppdmVfcG1fcmVzdW1lKHZvaWQpCiB7CiAJX19yYXdfd3JpdGVsKDB4MCwgUzNDMjQxMl9JTkZPUk0wKTsKLQlyZXR1cm4gMDsKIH0KIAogI2Vsc2UKQEAgLTUwOSwxNiArNTA4LDExIEBACiAjZGVmaW5lIGppdmVfcG1fcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBqaXZlX3BtX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJqaXZlLXBtIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgaml2ZV9wbV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IGppdmVfcG1fc3VzcGVuZCwKIAkucmVzdW1lCQk9IGppdmVfcG1fcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGppdmVfcG1fc3lzZGV2ID0gewotCS5jbHMJCT0gJmppdmVfcG1fc3lzY2xhc3MsCi19OwotCiBzdGF0aWMgdm9pZCBfX2luaXQgaml2ZV9tYXBfaW8odm9pZCkKIHsKIAlzM2MyNHh4X2luaXRfaW8oaml2ZV9pb2Rlc2MsIEFSUkFZX1NJWkUoaml2ZV9pb2Rlc2MpKTsKQEAgLTUzNiwxMCArNTMwLDkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGppdmVfbWFjaGluZV9pbml0KHZvaWQpCiB7Ci0JLyogcmVnaXN0ZXIgc3lzdGVtIGRldmljZXMgZm9yIG1hbmFnaW5nIGxvdyBsZXZlbCBzdXNwZW5kICovCisJLyogcmVnaXN0ZXIgc3lzdGVtIGNvcmUgb3BlcmF0aW9ucyBmb3IgbWFuYWdpbmcgbG93IGxldmVsIHN1c3BlbmQgKi8KIAotCXN5c2Rldl9jbGFzc19yZWdpc3Rlcigmaml2ZV9wbV9zeXNjbGFzcyk7Ci0Jc3lzZGV2X3JlZ2lzdGVyKCZqaXZlX3BtX3N5c2Rldik7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmppdmVfcG1fc3lzY29yZV9vcHMpOwogCiAJLyogd3JpdGUgb3VyIHNsZWVwIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgSU8uIFB1bGwgZG93biBhbGwgdW51c2VkCiAJICogSU8sIGVuc3VyZSB0aGF0IHdlIGhhdmUgdHVybmVkIG9mZiBhbGwgcGVyaXBoZXJhbHMgd2UgZG8gbm90CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCmluZGV4IGE3NDE3YzQuLjc1MmIxM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9wbS5jCkBAIC0xNyw2ICsxNyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC04NiwxMyArODcsMjQgQEAKIAlTQVZFX0lURU0oUzNDMjQxM19HUEpTTFBDT04pLAogfTsKIAotc3RhdGljIGludCBzM2MyNDEyX3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0MTJfcG1fZHJpdmVyID0geworCS5hZGQJCT0gczNjMjQxMl9wbV9hZGQsCit9OworCitzdGF0aWMgX19pbml0IGludCBzM2MyNDEyX3BtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMl9zeXNjbGFzcywgJnMzYzI0MTJfcG1fZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDEyX3BtX2luaXQpOworCitzdGF0aWMgaW50IHMzYzI0MTJfcG1fc3VzcGVuZCh2b2lkKQogewogCXMzY19wbV9kb19zYXZlKHMzYzI0MTJfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQxMl9zbGVlcCkpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTJfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzM2MyNDEyX3BtX3Jlc3VtZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0xMDIsMTggKzExNCw5IEBACiAJX19yYXdfd3JpdGVsKHRtcCwgUzNDMjQxMl9QV1JDRkcpOwogCiAJczNjX3BtX2RvX3Jlc3RvcmUoczNjMjQxMl9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDEyX3NsZWVwKSk7Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDEyX3BtX2RyaXZlciA9IHsKLQkuYWRkCQk9IHMzYzI0MTJfcG1fYWRkLAorc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0MTJfcG1fc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBzM2MyNDEyX3BtX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2MyNDEyX3BtX3Jlc3VtZSwKIH07Ci0KLXN0YXRpYyBfX2luaXQgaW50IHMzYzI0MTJfcG1faW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEyX3N5c2NsYXNzLCAmczNjMjQxMl9wbV9kcml2ZXIpOwotfQotCi1hcmNoX2luaXRjYWxsKHMzYzI0MTJfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL3MzYzI0MTIuYwppbmRleCA0YzZkZjUxLi5lZjA5NThkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvczNjMjQxMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLmMKQEAgLTE5LDYgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMjQ0LDUgKzI0NSw4IEBACiB7CiAJcHJpbnRrKCJTM0MyNDEyOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKIAorCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNDEyX3BtX3N5c2NvcmVfb3BzKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczNjMjR4eF9pcnFfc3lzY29yZV9vcHMpOworCiAJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQxMl9zeXNkZXYpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L2lycS5jCmluZGV4IDc3YjM4ZjIuLjI4YWQyMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTYvaXJxLmMKQEAgLTIzNiw4ICsyMzYsNiBAQAogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxNl9pcnFfZHJpdmVyID0gewogCS5hZGQJCT0gczNjMjQxNl9pcnFfYWRkLAotCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTZfaXJxX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L3BtLmMKaW5kZXggNGEwNDIwNS4uNDFkYjJiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L3BtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L3BtLmMKQEAgLTExLDYgKzExLDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtNTUsMjUgKzU2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2MyNDE2X3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTZfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0JLyogdW5zZXQgdGhlIHJldHVybi1mcm9tLXNsZWVwIGFtZCBpbmZvcm0gZmxhZ3MgKi8KLQlfX3Jhd193cml0ZWwoMHgwLCBTM0MyNDQzX1BXUk1PREUpOwotCV9fcmF3X3dyaXRlbCgweDAsIFMzQzI0MTJfSU5GT1JNMCk7Ci0JX19yYXdfd3JpdGVsKDB4MCwgUzNDMjQxMl9JTkZPUk0xKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxNl9wbV9kcml2ZXIgPSB7CiAJLmFkZAkJPSBzM2MyNDE2X3BtX2FkZCwKLQkuc3VzcGVuZAk9IHMzYzI0MTZfcG1fc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0MTZfcG1fcmVzdW1lLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgczNjMjQxNl9wbV9pbml0KHZvaWQpCkBAIC04MiwzICs2NiwxNiBAQAogfQogCiBhcmNoX2luaXRjYWxsKHMzYzI0MTZfcG1faW5pdCk7CisKKworc3RhdGljIHZvaWQgczNjMjQxNl9wbV9yZXN1bWUodm9pZCkKK3sKKwkvKiB1bnNldCB0aGUgcmV0dXJuLWZyb20tc2xlZXAgYW1kIGluZm9ybSBmbGFncyAqLworCV9fcmF3X3dyaXRlbCgweDAsIFMzQzI0NDNfUFdSTU9ERSk7CisJX19yYXdfd3JpdGVsKDB4MCwgUzNDMjQxMl9JTkZPUk0wKTsKKwlfX3Jhd193cml0ZWwoMHgwLCBTM0MyNDEyX0lORk9STTEpOworfQorCitzdHJ1Y3Qgc3lzY29yZV9vcHMgczNjMjQxNl9wbV9zeXNjb3JlX29wcyA9IHsKKwkucmVzdW1lCQk9IHMzYzI0MTZfcG1fcmVzdW1lLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9zM2MyNDE2LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTYvczNjMjQxNi5jCmluZGV4IGJhN2ZkODcuLjQ5NGNlOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxNi9zM2MyNDE2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDE2L3MzYzI0MTYuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC01NCw2ICs1NSw3IEBACiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CiAjaW5jbHVkZSA8cGxhdC9jcHUuaD4KICNpbmNsdWRlIDxwbGF0L3NkaGNpLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaW5jbHVkZSA8cGxhdC9paWMtY29yZS5oPgogI2luY2x1ZGUgPHBsYXQvZmItY29yZS5oPgpAQCAtOTUsNiArOTcsOSBAQAogCiAJczNjX2ZiX3NldG5hbWUoInMzYzI0NDMtZmIiKTsKIAorCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNDE2X3BtX3N5c2NvcmVfb3BzKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczNjMjR4eF9pcnFfc3lzY29yZV9vcHMpOworCiAJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQxNl9zeXNkZXYpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYwppbmRleCAwZGIyNDExLi43MTY2NjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWd0YTAyLmMKQEAgLTQwOSw2ICs0MDksMTAgQEAKIAkubnVtX3Jlc291cmNlcwk9IDAsCiB9OwogCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBndGEwMl9kZmJtY3MzMjBfZGV2aWNlID0geworCS5uYW1lID0gImRmYm1jczMyMCIsCit9OworCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGd0YTAyX2kyY19kZXZzW10gX19pbml0ZGF0YSA9IHsKIAl7CiAJCUkyQ19CT0FSRF9JTkZPKCJwY2Y1MDYzMyIsIDB4NzMpLApAQCAtNTIzLDYgKzUyNyw3IEBACiAJJnMzY19kZXZpY2VfaWlzLAogCSZzYW1zdW5nX2Fzb2NfZG1hLAogCSZzM2NfZGV2aWNlX2kyYzAsCisJJmd0YTAyX2RmYm1jczMyMF9kZXZpY2UsCiAJJmd0YTAyX2J1dHRvbnNfZGV2aWNlLAogCSZzM2NfZGV2aWNlX2FkYywKIAkmczNjX2RldmljZV90cywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW9zaXJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKaW5kZXggMTRkYzY3OC4uZDg4NTM2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtb3NpcmlzLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KQEAgLTI4NCw3ICsyODQsNyBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIHVuc2lnbmVkIGNoYXIgcG1fb3NpcmlzX2N0cmwwOwogCi1zdGF0aWMgaW50IG9zaXJpc19wbV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzZCwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBvc2lyaXNfcG1fc3VzcGVuZCh2b2lkKQogewogCXVuc2lnbmVkIGludCB0bXA7CiAKQEAgLTMwNCw3ICszMDQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG9zaXJpc19wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKnNkKQorc3RhdGljIHZvaWQgb3NpcmlzX3BtX3Jlc3VtZSh2b2lkKQogewogCWlmIChwbV9vc2lyaXNfY3RybDAgJiBPU0lSSVNfQ1RSTDBfRklYOCkKIAkJX19yYXdfd3JpdGViKE9TSVJJU19DVFJMMV9GSVg4LCBPU0lSSVNfVkFfQ1RSTDEpOwpAQCAtMzEyLDggKzMxMiw2IEBACiAJX19yYXdfd3JpdGViKHBtX29zaXJpc19jdHJsMCwgT1NJUklTX1ZBX0NUUkwwKTsKIAogCXMzY19ncGlvX2NmZ3BpbihTM0MyNDEwX0dQQSgyMSksIFMzQzI0MTBfR1BBMjFfblJTVE9VVCk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogI2Vsc2UKQEAgLTMyMSwxNiArMzE5LDExIEBACiAjZGVmaW5lIG9zaXJpc19wbV9yZXN1bWUgTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG9zaXJpc19wbV9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAibWFjaC1vc2lyaXMiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBvc2lyaXNfcG1fc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBvc2lyaXNfcG1fc3VzcGVuZCwKIAkucmVzdW1lCQk9IG9zaXJpc19wbV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2Ugb3NpcmlzX3BtX3N5c2RldiA9IHsKLQkuY2xzCQk9ICZvc2lyaXNfcG1fc3lzY2xhc3MsCi19OwotCiAvKiBMaW5rIGZvciBEVlMgZHJpdmVyIHRvIFRQUzY1MDExICovCiAKIHN0YXRpYyB2b2lkIG9zaXJpc190cHNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC00MzksOCArNDMyLDcgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG9zaXJpc19pbml0KHZvaWQpCiB7Ci0Jc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZvc2lyaXNfcG1fc3lzY2xhc3MpOwotCXN5c2Rldl9yZWdpc3Rlcigmb3NpcmlzX3BtX3N5c2Rldik7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJm9zaXJpc19wbV9zeXNjb3JlX29wcyk7CiAKIAlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CiAJczNjX25hbmRfc2V0X3BsYXRkYXRhKCZvc2lyaXNfbmFuZF9pbmZvKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC5jCmluZGV4IGY3NjYzZjcuLmNlOTlmZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAuYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KQEAgLTMzLDYgKzM0LDcgQEAKICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvczNjMjQ0eC5oPgorI2luY2x1ZGUgPHBsYXQvcG0uaD4KIAogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgpAQCAtNTEsNiArNTMsMTIgQEAKIAlzM2NfZGV2aWNlX3dkdC5yZXNvdXJjZVsxXS5zdGFydCA9IElSUV9TM0MyNDQwX1dEVDsKIAlzM2NfZGV2aWNlX3dkdC5yZXNvdXJjZVsxXS5lbmQgICA9IElSUV9TM0MyNDQwX1dEVDsKIAorCS8qIHJlZ2lzdGVyIHN1c3BlbmQvcmVzdW1lIGhhbmRsZXJzICovCisKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczNjMjQxMF9wbV9zeXNjb3JlX29wcyk7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnMzYzI0NHhfcG1fc3lzY29yZV9vcHMpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNHh4X2lycV9zeXNjb3JlX29wcyk7CisKIAkvKiByZWdpc3RlciBvdXIgc3lzdGVtIGRldmljZSBmb3IgZXZlcnl0aGluZyBlbHNlICovCiAKIAlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2Rldik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0Mi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDIuYwppbmRleCBlY2Y4MTM1Li42MjI0YmFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0Mi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQyLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC00NSw2ICs0Niw3IEBACiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9zM2MyNDR4Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgogCiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KICNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CkBAIC0xNjcsNiArMTY5LDEwIEBACiB7CiAJcHJpbnRrKCJTM0MyNDQyOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKIAorCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2MyNDEwX3BtX3N5c2NvcmVfb3BzKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczNjMjQ0eF9wbV9zeXNjb3JlX29wcyk7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJnMzYzI0eHhfaXJxX3N5c2NvcmVfb3BzKTsKKwogCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NHgtaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC1pcnEuYwppbmRleCBkZTA3YzJmLi5jNjNlOGYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC1pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC1pcnEuYwpAQCAtMTE2LDggKzExNiw2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQwX2lycV9kcml2ZXIgPSB7CiAJLmFkZAkJPSBzM2MyNDR4X2lycV9hZGQsCi0JLnN1c3BlbmQJPSBzM2MyNHh4X2lycV9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjMjR4eF9pcnFfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBzM2MyNDQwX2lycV9pbml0KHZvaWQpCkBAIC0xMjksOCArMTI3LDYgQEAKIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfaXJxX2RyaXZlciA9IHsKIAkuYWRkCQk9IHMzYzI0NHhfaXJxX2FkZCwKLQkuc3VzcGVuZAk9IHMzYzI0eHhfaXJxX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNHh4X2lycV9yZXN1bWUsCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDR4LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC5jCmluZGV4IDkwYzE3MDcuLjdlOGEyM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NHguYwpAQCAtMTksNiArMTksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCkBAIC0xMzQsNDUgKzEzNSwxNCBAQAogCXMzYzI0MTBfYmFzZWNsa19hZGQoKTsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgczNjMjQ0eF9zbGVlcFtdID0gewotCVNBVkVfSVRFTShTM0MyNDQwX0RTQzApLAotCVNBVkVfSVRFTShTM0MyNDQwX0RTQzEpLAotCVNBVkVfSVRFTShTM0MyNDQwX0dQSkRBVCksCi0JU0FWRV9JVEVNKFMzQzI0NDBfR1BKQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQ0MF9HUEpVUCkKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQ0eF9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlzM2NfcG1fZG9fc2F2ZShzM2MyNDR4X3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NHhfc2xlZXApKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDR4X3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXMzY19wbV9kb19yZXN0b3JlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOwotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSBzM2MyNDR4X3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2MyNDR4X3Jlc3VtZSAgTlVMTAotI2VuZGlmCi0KIC8qIFNpbmNlIHRoZSBTM0MyNDQyIGFuZCBTM0MyNDQwIHNoYXJlICBpdGVtcywgcHV0IGJvdGggc3lzY2xhc3NlcyBoZXJlICovCiAKIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0MF9zeXNjbGFzcyA9IHsKIAkubmFtZQkJPSAiczNjMjQ0MC1jb3JlIiwKLQkuc3VzcGVuZAk9IHMzYzI0NHhfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0NHhfcmVzdW1lCiB9OwogCiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDJfc3lzY2xhc3MgPSB7CiAJLm5hbWUJCT0gInMzYzI0NDItY29yZSIsCi0JLnN1c3BlbmQJPSBzM2MyNDR4X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNDR4X3Jlc3VtZQogfTsKIAogLyogbmVlZCB0byByZWdpc3RlciBjbGFzcyBiZWZvcmUgd2UgYWN0dWFsbHkgcmVnaXN0ZXIgdGhlIGRldmljZSwgYW5kCkBAIC0xOTQsMyArMTY0LDMzIEBACiB9CiAKIGNvcmVfaW5pdGNhbGwoczNjMjQ0Ml9jb3JlX2luaXQpOworCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBzM2MyNDR4X3NsZWVwW10gPSB7CisJU0FWRV9JVEVNKFMzQzI0NDBfRFNDMCksCisJU0FWRV9JVEVNKFMzQzI0NDBfRFNDMSksCisJU0FWRV9JVEVNKFMzQzI0NDBfR1BKREFUKSwKKwlTQVZFX0lURU0oUzNDMjQ0MF9HUEpDT04pLAorCVNBVkVfSVRFTShTM0MyNDQwX0dQSlVQKQorfTsKKworc3RhdGljIGludCBzM2MyNDR4X3N1c3BlbmQodm9pZCkKK3sKKwlzM2NfcG1fZG9fc2F2ZShzM2MyNDR4X3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NHhfc2xlZXApKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgczNjMjQ0eF9yZXN1bWUodm9pZCkKK3sKKwlzM2NfcG1fZG9fcmVzdG9yZShzM2MyNDR4X3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NHhfc2xlZXApKTsKK30KKyNlbHNlCisjZGVmaW5lIHMzYzI0NHhfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0NHhfcmVzdW1lICBOVUxMCisjZW5kaWYKKworc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0NHhfcG1fc3lzY29yZV9vcHMgPSB7CisJLnN1c3BlbmQJPSBzM2MyNDR4X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBzM2MyNDR4X3Jlc3VtZSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLXBtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLXBtLmMKaW5kZXggZGExYmVjNi4uOGJlYzYxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2lycS1wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pcnEtcG0uYwpAQCAtMTMsNyArMTMsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC01NCw3ICs1NCw3IEBACiAKIHN0YXRpYyB1MzIgaXJxX3VhcnRfbWFza1tDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNdOwogCi1zdGF0aWMgaW50IHMzYzY0eHhfaXJxX3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBzM2M2NHh4X2lycV9wbV9zdXNwZW5kKHZvaWQpCiB7CiAJc3RydWN0IGlycV9ncnBfc2F2ZSAqZ3JwID0gZWludF9ncnBfc2F2ZTsKIAlpbnQgaTsKQEAgLTc1LDcgKzc1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzM2M2NHh4X2lycV9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHMzYzY0eHhfaXJxX3BtX3Jlc3VtZSh2b2lkKQogewogCXN0cnVjdCBpcnFfZ3JwX3NhdmUgKmdycCA9IGVpbnRfZ3JwX3NhdmU7CiAJaW50IGk7CkBAIC05NCwxOCArOTQsMTggQEAKIAl9CiAKIAlTM0NfUE1EQkcoIiVzOiBJUlEgY29uZmlndXJhdGlvbiByZXN0b3JlZFxuIiwgX19mdW5jX18pOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjNjR4eF9pcnFfZHJpdmVyID0geworc3RydWN0IHN5c2NvcmVfb3BzIHMzYzY0eHhfaXJxX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kID0gczNjNjR4eF9pcnFfcG1fc3VzcGVuZCwKIAkucmVzdW1lCSA9IHMzYzY0eHhfaXJxX3BtX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHMzYzY0eHhfaXJxX3BtX2luaXQodm9pZCkKK3N0YXRpYyBfX2luaXQgaW50IHMzYzY0eHhfc3lzY29yZV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzY0eHhfc3lzY2xhc3MsICZzM2M2NHh4X2lycV9kcml2ZXIpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzM2M2NHh4X2lycV9zeXNjb3JlX29wcyk7CisKKwlyZXR1cm4gMDsKIH0KIAotYXJjaF9pbml0Y2FsbChzM2M2NHh4X2lycV9wbV9pbml0KTsKLQorY29yZV9pbml0Y2FsbChzM2M2NHh4X3N5c2NvcmVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvcG0uYyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9wbS5jCmluZGV4IDU0OWQ3OTIuLjI0ZmViYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9wbS5jCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CkBAIC0xNDAsNyArMTQxLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgczVwdjIxMF9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzNXB2MjEwX3BtX2RyaXZlciA9IHsKKwkuYWRkCQk9IHM1cHYyMTBfcG1fYWRkLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgczVwdjIxMF9wbV9kcnZpbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnM1cHYyMTBfc3lzY2xhc3MsICZzNXB2MjEwX3BtX2RyaXZlcik7Cit9CithcmNoX2luaXRjYWxsKHM1cHYyMTBfcG1fZHJ2aW5pdCk7CisKK3N0YXRpYyB2b2lkIHM1cHYyMTBfcG1fcmVzdW1lKHZvaWQpCiB7CiAJdTMyIHRtcDsKIApAQCAtMTUwLDE3ICsxNjEsMTUgQEAKIAlfX3Jhd193cml0ZWwodG1wICwgUzVQX09USEVSUyk7CiAKIAlzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKHM1cHYyMTBfY29yZV9zYXZlLCBBUlJBWV9TSVpFKHM1cHYyMTBfY29yZV9zYXZlKSk7Ci0KLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHM1cHYyMTBfcG1fZHJpdmVyID0gewotCS5hZGQJCT0gczVwdjIxMF9wbV9hZGQsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHM1cHYyMTBfcG1fc3lzY29yZV9vcHMgPSB7CiAJLnJlc3VtZQkJPSBzNXB2MjEwX3BtX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBfX2luaXQgaW50IHM1cHYyMTBfcG1fZHJ2aW5pdCh2b2lkKQorc3RhdGljIF9faW5pdCBpbnQgczVwdjIxMF9wbV9zeXNjb3JlX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczVwdjIxMF9zeXNjbGFzcywgJnM1cHYyMTBfcG1fZHJpdmVyKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmczVwdjIxMF9wbV9zeXNjb3JlX29wcyk7CisJcmV0dXJuIDA7CiB9Ci1hcmNoX2luaXRjYWxsKHM1cHYyMTBfcG1fZHJ2aW5pdCk7CithcmNoX2luaXRjYWxsKHM1cHYyMTBfcG1fc3lzY29yZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKaW5kZXggNDIzZGRiMy4uZGZiZjgyNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKQEAgLTE0LDcgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgpAQCAtMjM0LDcgKzIzNCw3IEBACiAJdW5zaWduZWQgaW50CWljY3I7CiB9IHNhMTEwMGlycV9zdGF0ZTsKIAotc3RhdGljIGludCBzYTExMDBpcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHNhMTEwMGlycV9zdXNwZW5kKHZvaWQpCiB7CiAJc3RydWN0IHNhMTEwMGlycV9zdGF0ZSAqc3QgPSAmc2ExMTAwaXJxX3N0YXRlOwogCkBAIC0yNjQsNyArMjY0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYTExMDBpcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzYTExMDBpcnFfcmVzdW1lKHZvaWQpCiB7CiAJc3RydWN0IHNhMTEwMGlycV9zdGF0ZSAqc3QgPSAmc2ExMTAwaXJxX3N0YXRlOwogCkBAIC0yNzcsMjQgKzI3NywxNyBAQAogCiAJCUlDTVIgPSBzdC0+aWNtcjsKIAl9Ci0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHNhMTEwMGlycV9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAic2ExMXgwLWlycSIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHNhMTEwMGlycV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHNhMTEwMGlycV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gc2ExMTAwaXJxX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzYTExMDBpcnFfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJnNhMTEwMGlycV9zeXNjbGFzcywKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHNhMTEwMGlycV9pbml0X2RldmljZWZzKHZvaWQpCiB7Ci0Jc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzYTExMDBpcnFfc3lzY2xhc3MpOwotCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnNhMTEwMGlycV9kZXZpY2UpOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZzYTExMDBpcnFfc3lzY29yZV9vcHMpOworCXJldHVybiAwOwogfQogCiBkZXZpY2VfaW5pdGNhbGwoc2ExMTAwaXJxX2luaXRfZGV2aWNlZnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wbV9ydW50aW1lLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtX3J1bnRpbWUuYwppbmRleCA5NDkxMmQzLi4yZDFiNjdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtX3J1bnRpbWUuYworKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BtX3J1bnRpbWUuYwpAQCAtMTgsMTUyICsxOCw0MSBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3NoX2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCi0jZGVmaW5lIEJJVF9PTkNFIDAKLSNkZWZpbmUgQklUX0FDVElWRSAxCi0jZGVmaW5lIEJJVF9DTEtfRU5BQkxFRCAyCiAKLXN0cnVjdCBwbV9ydW50aW1lX2RhdGEgewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGNsayAqY2xrOwotfTsKLQotc3RhdGljIHZvaWQgX19kZXZyZXNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnJlcykKLXsKLQlzdHJ1Y3QgcG1fcnVudGltZV9kYXRhICpwcmQgPSByZXM7Ci0KLQlkZXZfZGJnKGRldiwgIl9fZGV2cmVzX3JlbGVhc2UoKVxuIik7Ci0KLQlpZiAodGVzdF9iaXQoQklUX0NMS19FTkFCTEVELCAmcHJkLT5mbGFncykpCi0JCWNsa19kaXNhYmxlKHByZC0+Y2xrKTsKLQotCWlmICh0ZXN0X2JpdChCSVRfQUNUSVZFLCAmcHJkLT5mbGFncykpCi0JCWNsa19wdXQocHJkLT5jbGspOwotfQotCi1zdGF0aWMgc3RydWN0IHBtX3J1bnRpbWVfZGF0YSAqX190b19wcmQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBkZXZyZXNfZmluZChkZXYsIF9fZGV2cmVzX3JlbGVhc2UsIE5VTEwsIE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZCBwbGF0Zm9ybV9wbV9ydW50aW1lX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICAgc3RydWN0IHBtX3J1bnRpbWVfZGF0YSAqcHJkKQotewotCWlmIChwcmQgJiYgIXRlc3RfYW5kX3NldF9iaXQoQklUX09OQ0UsICZwcmQtPmZsYWdzKSkgewotCQlwcmQtPmNsayA9IGNsa19nZXQoZGV2LCBOVUxMKTsKLQkJaWYgKCFJU19FUlIocHJkLT5jbGspKSB7Ci0JCQlzZXRfYml0KEJJVF9BQ1RJVkUsICZwcmQtPmZsYWdzKTsKLQkJCWRldl9pbmZvKGRldiwgImNsb2NrcyBtYW5hZ2VkIGJ5IHJ1bnRpbWUgcG1cbiIpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBwbGF0Zm9ybV9wbV9ydW50aW1lX2J1ZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgIHN0cnVjdCBwbV9ydW50aW1lX2RhdGEgKnByZCkKLXsKLQlpZiAocHJkICYmICF0ZXN0X2FuZF9zZXRfYml0KEJJVF9PTkNFLCAmcHJkLT5mbGFncykpCi0JCWRldl9lcnIoZGV2LCAicnVudGltZSBwbSBzdXNwZW5kIGJlZm9yZSByZXN1bWVcbiIpOwotfQotCi1pbnQgcGxhdGZvcm1fcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcG1fcnVudGltZV9kYXRhICpwcmQgPSBfX3RvX3ByZChkZXYpOwotCi0JZGV2X2RiZyhkZXYsICJwbGF0Zm9ybV9wbV9ydW50aW1lX3N1c3BlbmQoKVxuIik7Ci0KLQlwbGF0Zm9ybV9wbV9ydW50aW1lX2J1ZyhkZXYsIHByZCk7Ci0KLQlpZiAocHJkICYmIHRlc3RfYml0KEJJVF9BQ1RJVkUsICZwcmQtPmZsYWdzKSkgewotCQljbGtfZGlzYWJsZShwcmQtPmNsayk7Ci0JCWNsZWFyX2JpdChCSVRfQ0xLX0VOQUJMRUQsICZwcmQtPmZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBsYXRmb3JtX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcG1fcnVudGltZV9kYXRhICpwcmQgPSBfX3RvX3ByZChkZXYpOwotCi0JZGV2X2RiZyhkZXYsICJwbGF0Zm9ybV9wbV9ydW50aW1lX3Jlc3VtZSgpXG4iKTsKLQotCXBsYXRmb3JtX3BtX3J1bnRpbWVfaW5pdChkZXYsIHByZCk7Ci0KLQlpZiAocHJkICYmIHRlc3RfYml0KEJJVF9BQ1RJVkUsICZwcmQtPmZsYWdzKSkgewotCQljbGtfZW5hYmxlKHByZC0+Y2xrKTsKLQkJc2V0X2JpdChCSVRfQ0xLX0VOQUJMRUQsICZwcmQtPmZsYWdzKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHBsYXRmb3JtX3BtX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGRlZmF1bHRfcGxhdGZvcm1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAkvKiBzdXNwZW5kIHN5bmNocm9ub3VzbHkgdG8gZGlzYWJsZSBjbG9ja3MgaW1tZWRpYXRlbHkgKi8KIAlyZXR1cm4gcG1fcnVudGltZV9zdXNwZW5kKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgcGxhdGZvcm1fYnVzX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7Ci0Jc3RydWN0IHBtX3J1bnRpbWVfZGF0YSAqcHJkOworc3RhdGljIHN0cnVjdCBkZXZfcG93ZXJfZG9tYWluIGRlZmF1bHRfcG93ZXJfZG9tYWluID0geworCS5vcHMgPSB7CisJCS5ydW50aW1lX3N1c3BlbmQgPSBwbV9ydW50aW1lX2Nsa19zdXNwZW5kLAorCQkucnVudGltZV9yZXN1bWUgPSBwbV9ydW50aW1lX2Nsa19yZXN1bWUsCisJCS5ydW50aW1lX2lkbGUgPSBkZWZhdWx0X3BsYXRmb3JtX3J1bnRpbWVfaWRsZSwKKwkJVVNFX1BMQVRGT1JNX1BNX1NMRUVQX09QUworCX0sCit9OwogCi0JZGV2X2RiZyhkZXYsICJwbGF0Zm9ybV9idXNfbm90aWZ5KCkgJWxkICFcbiIsIGFjdGlvbik7CisjZGVmaW5lIERFRkFVTFRfUFdSX0RPTUFJTl9QVFIJKCZkZWZhdWx0X3Bvd2VyX2RvbWFpbikKIAotCWlmIChhY3Rpb24gPT0gQlVTX05PVElGWV9CSU5EX0RSSVZFUikgewotCQlwcmQgPSBkZXZyZXNfYWxsb2MoX19kZXZyZXNfcmVsZWFzZSwgc2l6ZW9mKCpwcmQpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHByZCkKLQkJCWRldnJlc19hZGQoZGV2LCBwcmQpOwotCQllbHNlCi0JCQlkZXZfZXJyKGRldiwgInVuYWJsZSB0byBhbGxvYyBtZW1vcnkgZm9yIHJ1bnRpbWUgcG1cbiIpOwotCX0KKyNlbHNlCiAKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KLQotc3RhdGljIGludCBwbGF0Zm9ybV9idXNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKLQlzdHJ1Y3QgY2xrICpjbGs7Ci0KLQlkZXZfZGJnKGRldiwgInBsYXRmb3JtX2J1c19ub3RpZnkoKSAlbGQgIVxuIiwgYWN0aW9uKTsKLQotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBCVVNfTk9USUZZX0JJTkRfRFJJVkVSOgotCQljbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7Ci0JCWlmICghSVNfRVJSKGNsaykpIHsKLQkJCWNsa19lbmFibGUoY2xrKTsKLQkJCWNsa19wdXQoY2xrKTsKLQkJCWRldl9pbmZvKGRldiwgInJ1bnRpbWUgcG0gZGlzYWJsZWQsIGNsb2NrIGZvcmNlZCBvblxuIik7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSOgotCQljbGsgPSBjbGtfZ2V0KGRldiwgTlVMTCk7Ci0JCWlmICghSVNfRVJSKGNsaykpIHsKLQkJCWNsa19kaXNhYmxlKGNsayk7Ci0JCQljbGtfcHV0KGNsayk7Ci0JCQlkZXZfaW5mbyhkZXYsICJydW50aW1lIHBtIGRpc2FibGVkLCBjbG9jayBmb3JjZWQgb2ZmXG4iKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KKyNkZWZpbmUgREVGQVVMVF9QV1JfRE9NQUlOX1BUUglOVUxMCiAKICNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBsYXRmb3JtX2J1c19ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IHBsYXRmb3JtX2J1c19ub3RpZnkKK3N0YXRpYyBzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrIHBsYXRmb3JtX2J1c19ub3RpZmllciA9IHsKKwkucHdyX2RvbWFpbiA9IERFRkFVTFRfUFdSX0RPTUFJTl9QVFIsCisJLmNvbl9pZHMgPSB7IE5VTEwsIH0sCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaF9wbV9ydW50aW1lX2luaXQodm9pZCkKIHsKLQlidXNfcmVnaXN0ZXJfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLCAmcGxhdGZvcm1fYnVzX25vdGlmaWVyKTsKKwlwbV9ydW50aW1lX2Nsa19hZGRfbm90aWZpZXIoJnBsYXRmb3JtX2J1c190eXBlLCAmcGxhdGZvcm1fYnVzX25vdGlmaWVyKTsKIAlyZXR1cm4gMDsKIH0KIGNvcmVfaW5pdGNhbGwoc2hfcG1fcnVudGltZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmggYi9hcmNoL2FybS9tYWNoLXRlZ3JhL2luY2x1ZGUvbWFjaC9iYXJyaWVycy5oCmluZGV4IGNjMTE1MTcuLjQyNWI0MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdGVncmEvaW5jbHVkZS9tYWNoL2JhcnJpZXJzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC10ZWdyYS9pbmNsdWRlL21hY2gvYmFycmllcnMuaApAQCAtMjMsNyArMjMsNyBAQAogCiAjaW5jbHVkZSA8YXNtL291dGVyY2FjaGUuaD4KIAotI2RlZmluZSBybWIoKQkJZG1iKCkKKyNkZWZpbmUgcm1iKCkJCWRzYigpCiAjZGVmaW5lIHdtYigpCQlkbyB7IGRzYigpOyBvdXRlcl9zeW5jKCk7IH0gd2hpbGUgKDApCiAjZGVmaW5lIG1iKCkJCXdtYigpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCmluZGV4IGFmOTEzNzQuLjZlMTkwN2ZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXV4NTAwL2JvYXJkLW1vcDUwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtdXg1MDAvYm9hcmQtbW9wNTAwLmMKQEAgLTE3OCwxNiArMTc4LDE1IEBACiAJCS5pcnEJCT0gTk9NQURJS19HUElPX1RPX0lSUSgyMTcpLAogCQkucGxhdGZvcm1fZGF0YSAgPSAmbW9wNTAwX3RjMzU4OTJfZGF0YSwKIAl9LAotfTsKLQotLyogSTJDMCBkZXZpY2VzIG9ubHkgYXZhaWxhYmxlIHByaW9yIHRvIEhSRUZ2NjAgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtb3A1MDBfaTJjMF9vbGRfZGV2aWNlc1tdID0geworCS8qIEkyQzAgZGV2aWNlcyBvbmx5IGF2YWlsYWJsZSBwcmlvciB0byBIUkVGdjYwICovCiAJewogCQlJMkNfQk9BUkRfSU5GTygidHBzNjEwNTIiLCAweDMzKSwKIAkJLnBsYXRmb3JtX2RhdGEgID0gJm1vcDUwMF90cHM2MTA1Ml9kYXRhLAogCX0sCiB9OwogCisjZGVmaW5lIE5VTV9QUkVfVjYwX0kyQzBfREVWSUNFUyAxCisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBtb3A1MDBfaTJjMl9kZXZpY2VzW10gPSB7CiAJewogCQkvKiBscDU1MjEgTEVEIGRyaXZlciwgMXN0IGRldmljZSAqLwpAQCAtNDI1LDYgKzQyNCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBtb3A1MDBfaW5pdF9tYWNoaW5lKHZvaWQpCiB7CisJaW50IGkyYzBfZGV2czsKKwogCS8qCiAJICogVGhlIEhSRUZ2NjAgYm9hcmQgcmVtb3ZlZCBhIEdQSU8gZXhwYW5kZXIgYW5kIHJvdXRlZAogCSAqIGFsbCB0aGVzZSBHUElPIHBpbnMgdG8gdGhlIGludGVybmFsIEdQSU8gY29udHJvbGxlcgpAQCAtNDQ4LDExICs0NDksMTEgQEAKIAogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYWI4NTAwX2RldmljZSk7CiAKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtb3A1MDBfaTJjMF9kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUobW9wNTAwX2kyYzBfZGV2aWNlcykpOwotCWlmICghbWFjaGluZV9pc19ocmVmdjYwKCkpCi0JCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG1vcDUwMF9pMmMwX29sZF9kZXZpY2VzLAotCQkJCQlBUlJBWV9TSVpFKG1vcDUwMF9pMmMwX29sZF9kZXZpY2VzKSk7CisJaTJjMF9kZXZzID0gQVJSQVlfU0laRShtb3A1MDBfaTJjMF9kZXZpY2VzKTsKKwlpZiAobWFjaGluZV9pc19ocmVmdjYwKCkpCisJCWkyYzBfZGV2cyAtPSBOVU1fUFJFX1Y2MF9JMkMwX0RFVklDRVM7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtb3A1MDBfaTJjMF9kZXZpY2VzLCBpMmMwX2RldnMpOwogCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDIsIG1vcDUwMF9pMmMyX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShtb3A1MDBfaTJjMl9kZXZpY2VzKSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pbml0LmMgYi9hcmNoL2FybS9tbS9pbml0LmMKaW5kZXggZTVmNmZjNC4uZTU5MTUxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW5pdC5jCisrKyBiL2FyY2gvYXJtL21tL2luaXQuYwpAQCAtMzkyLDcgKzM5Miw3IEBACiAJICogQ29udmVydCBzdGFydF9wZm4vZW5kX3BmbiB0byBhIHN0cnVjdCBwYWdlIHBvaW50ZXIuCiAJICovCiAJc3RhcnRfcGcgPSBwZm5fdG9fcGFnZShzdGFydF9wZm4gLSAxKSArIDE7Ci0JZW5kX3BnID0gcGZuX3RvX3BhZ2UoZW5kX3Bmbik7CisJZW5kX3BnID0gcGZuX3RvX3BhZ2UoZW5kX3BmbiAtIDEpICsgMTsKIAogCS8qCiAJICogQ29udmVydCB0byBwaHlzaWNhbCBhZGRyZXNzZXMsIGFuZApAQCAtNDI2LDYgKzQyNiwxNCBAQAogCiAJCWJhbmtfc3RhcnQgPSBiYW5rX3Bmbl9zdGFydChiYW5rKTsKIAorI2lmZGVmIENPTkZJR19TUEFSU0VNRU0KKwkJLyoKKwkJICogVGFrZSBjYXJlIG5vdCB0byBmcmVlIG1lbW1hcCBlbnRyaWVzIHRoYXQgZG9uJ3QgZXhpc3QKKwkJICogZHVlIHRvIFNQQVJTRU1FTSBzZWN0aW9ucyB3aGljaCBhcmVuJ3QgcHJlc2VudC4KKwkJICovCisJCWJhbmtfc3RhcnQgPSBtaW4oYmFua19zdGFydCwKKwkJCQkgQUxJR04ocHJldl9iYW5rX2VuZCwgUEFHRVNfUEVSX1NFQ1RJT04pKTsKKyNlbmRpZgogCQkvKgogCQkgKiBJZiB3ZSBoYWQgYSBwcmV2aW91cyBiYW5rLCBhbmQgdGhlcmUgaXMgYSBzcGFjZQogCQkgKiBiZXR3ZWVuIHRoZSBjdXJyZW50IGJhbmsgYW5kIHRoZSBwcmV2aW91cywgZnJlZSBpdC4KQEAgLTQ0MCw2ICs0NDgsMTIgQEAKIAkJICovCiAJCXByZXZfYmFua19lbmQgPSBBTElHTihiYW5rX3Bmbl9lbmQoYmFuayksIE1BWF9PUkRFUl9OUl9QQUdFUyk7CiAJfQorCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQorCWlmICghSVNfQUxJR05FRChwcmV2X2JhbmtfZW5kLCBQQUdFU19QRVJfU0VDVElPTikpCisJCWZyZWVfbWVtbWFwKHByZXZfYmFua19lbmQsCisJCQkgICAgQUxJR04ocHJldl9iYW5rX2VuZCwgUEFHRVNfUEVSX1NFQ1RJT04pKTsKKyNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgZnJlZV9oaWdocGFnZXModm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IGNlMjMzYmMuLjQyYWY5NzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtMzk1LDcgKzM5NSw3IEBACiAJdGVxCXIyLCAjRE1BX1RPX0RFVklDRQogCWJlcQl4c2NhbGVfZG1hX2NsZWFuX3JhbmdlCiAJYgl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCi1FTkRQUk9DKHhzY3NhbGVfZG1hX2EwX21hcF9hcmVhKQorRU5EUFJPQyh4c2NhbGVfZG1hX2EwX21hcF9hcmVhKQogCiAvKgogICoJZG1hX3VubWFwX2FyZWEoc3RhcnQsIHNpemUsIGRpcikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwppbmRleCA3YTEwNzI0Li42Y2Q2ZDdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCkBAIC0yOTUsNiArMjk1LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGlzIGxvY2sgY2xhc3MgdGVsbHMgbG9ja2RlcCB0aGF0IEdQSU8gaXJxcyBhcmUgaW4gYSBkaWZmZXJlbnQKKyAqIGNhdGVnb3J5IHRoYW4gdGhlaXIgcGFyZW50cywgc28gaXQgd29uJ3QgcmVwb3J0IGZhbHNlIHJlY3Vyc2lvbi4KKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBncGlvX2xvY2tfY2xhc3M7CisKIGludCBfX2luaXQgbXhjX2dwaW9faW5pdChzdHJ1Y3QgbXhjX2dwaW9fcG9ydCAqcG9ydCwgaW50IGNudCkKIHsKIAlpbnQgaSwgajsKQEAgLTMxMSw2ICszMTcsNyBAQAogCQlfX3Jhd193cml0ZWwofjAsIHBvcnRbaV0uYmFzZSArIEdQSU9fSVNSKTsKIAkJZm9yIChqID0gcG9ydFtpXS52aXJ0dWFsX2lycV9zdGFydDsKIAkJCWogPCBwb3J0W2ldLnZpcnR1YWxfaXJxX3N0YXJ0ICsgMzI7IGorKykgeworCQkJaXJxX3NldF9sb2NrZGVwX2NsYXNzKGosICZncGlvX2xvY2tfY2xhc3MpOwogCQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGosICZncGlvX2lycV9jaGlwLAogCQkJCQkJIGhhbmRsZV9sZXZlbF9pcnEpOwogCQkJc2V0X2lycV9mbGFncyhqLCBJUlFGX1ZBTElEKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUyBiL2FyY2gvYXJtL3BsYXQtbXhjL3NzaS1maXEuUwppbmRleCA0ZGRjZTU2Li44Mzk3YTJkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9zc2ktZmlxLlMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvc3NpLWZpcS5TCkBAIC0xMjQsNiArMTI0LDggQEAKIDE6CiAJCUAgcmV0dXJuIGZyb20gRklRCiAJCXN1YnMJcGMsIGxyLCAjNAorCisJCS5hbGlnbgogaW14X3NzaV9maXFfYmFzZToKIAkJLndvcmQgMHgwCiBpbXhfc3NpX2ZpcV9yeF9idWZmZXI6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYwppbmRleCBkMmFkY2RkLi5iZDllMzIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMTM3Miw5ICsxMzcyLDcgQEAKIAkucmVzdW1lX25vaXJxID0gb21hcF9tcHVpb19yZXN1bWVfbm9pcnEsCiB9OwogCi0vKiB1c2UgcGxhdGZvcm1fZHJpdmVyIGZvciB0aGlzLCBub3cgdGhhdCB0aGVyZSdzIG5vIGxvbmdlciBhbnkKLSAqIHBvaW50IHRvIHN5c19kZXZpY2UgKG90aGVyIHRoYW4gbm90IGRpc3R1cmJpbmcgb2xkIGNvZGUpLgotICovCisvKiB1c2UgcGxhdGZvcm1fZHJpdmVyIGZvciB0aGlzLiAqLwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb21hcF9tcHVpb19kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm1wdWlvIiwKQEAgLTE3NDUsNyArMTc0Myw3IEBACiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyUExVUykKLXN0YXRpYyBpbnQgb21hcF9ncGlvX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IG9tYXBfZ3Bpb19zdXNwZW5kKHZvaWQpCiB7CiAJaW50IGk7CiAKQEAgLTE3OTUsMTIgKzE3OTMsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbWFwX2dwaW9fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBvbWFwX2dwaW9fcmVzdW1lKHZvaWQpCiB7CiAJaW50IGk7CiAKIAlpZiAoIWNwdV9jbGFzc19pc19vbWFwMigpICYmICFjcHVfaXNfb21hcDE2eHgoKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAogCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtfY291bnQ7IGkrKykgewogCQlzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rID0gJmdwaW9fYmFua1tpXTsKQEAgLTE4MzYsMjEgKzE4MzQsMTMgQEAKIAkJX19yYXdfd3JpdGVsKGJhbmstPnNhdmVkX3dha2V1cCwgd2FrZV9zZXQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYW5rLT5sb2NrLCBmbGFncyk7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG9tYXBfZ3Bpb19zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAiZ3BpbyIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIG9tYXBfZ3Bpb19zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IG9tYXBfZ3Bpb19zdXNwZW5kLAogCS5yZXN1bWUJCT0gb21hcF9ncGlvX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBvbWFwX2dwaW9fZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJm9tYXBfZ3Bpb19zeXNjbGFzcywKLX07Ci0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCkBAIC0yMTA4LDIxICsyMDk4LDE0IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfZ3Bpb19zeXNpbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IDA7Ci0KIAltcHVpb19pbml0KCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyUExVUykKLQlpZiAoY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKLQkJaWYgKHJldCA9PSAwKSB7Ci0JCQlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJm9tYXBfZ3Bpb19zeXNjbGFzcyk7Ci0JCQlpZiAocmV0ID09IDApCi0JCQkJcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZvbWFwX2dwaW9fZGV2aWNlKTsKLQkJfQotCX0KKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkgfHwgY3B1X2NsYXNzX2lzX29tYXAyKCkpCisJCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZvbWFwX2dwaW9fc3lzY29yZV9vcHMpOwogI2VuZGlmCiAKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiBhcmNoX2luaXRjYWxsKG9tYXBfZ3Bpb19zeXNpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKaW5kZXggOGE1MWZkNS4uMzRmYzMxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2lvbW11LmMKQEAgLTc5Myw2ICs3OTMsOCBAQAogCWNsa19lbmFibGUob2JqLT5jbGspOwogCWVycnMgPSBpb21tdV9yZXBvcnRfZmF1bHQob2JqLCAmZGEpOwogCWNsa19kaXNhYmxlKG9iai0+Y2xrKTsKKwlpZiAoZXJycyA9PSAwKQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKIAkvKiBGYXVsdCBjYWxsYmFjayBvciBUTEIvUFRFIER5bmFtaWMgbG9hZGluZyAqLwogCWlmIChvYmotPmlzciAmJiAhb2JqLT5pc3Iob2JqLCBkYSwgZXJycywgb2JqLT5pc3JfcHJpdikpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCmluZGV4IDliYmRhOWEuLmEzN2I4ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCkBAIC01MzYsNiArNTM2LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgX29kX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOworCisJcmV0dXJuIG9tYXBfZGV2aWNlX2lkbGUocGRldik7Cit9CisKK3N0YXRpYyBpbnQgX29kX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisKKwlyZXR1cm4gb21hcF9kZXZpY2VfZW5hYmxlKHBkZXYpOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wb3dlcl9kb21haW4gb21hcF9kZXZpY2VfcG93ZXJfZG9tYWluID0geworCS5vcHMgPSB7CisJCS5ydW50aW1lX3N1c3BlbmQgPSBfb2RfcnVudGltZV9zdXNwZW5kLAorCQkucnVudGltZV9yZXN1bWUgPSBfb2RfcnVudGltZV9yZXN1bWUsCisJCVVTRV9QTEFURk9STV9QTV9TTEVFUF9PUFMKKwl9Cit9OworCiAvKioKICAqIG9tYXBfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYW4gb21hcF9kZXZpY2Ugd2l0aCBvbmUgb21hcF9od21vZAogICogQG9kOiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKiB0byByZWdpc3RlcgpAQCAtNTQ5LDYgKzU3MSw3IEBACiAJcHJfZGVidWcoIm9tYXBfZGV2aWNlOiAlczogcmVnaXN0ZXJpbmdcbiIsIG9kLT5wZGV2Lm5hbWUpOwogCiAJb2QtPnBkZXYuZGV2LnBhcmVudCA9ICZvbWFwX2RldmljZV9wYXJlbnQ7CisJb2QtPnBkZXYuZGV2LnB3cl9kb21haW4gPSAmb21hcF9kZXZpY2VfcG93ZXJfZG9tYWluOwogCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm9kLT5wZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1weGEvZ3Bpby5jCmluZGV4IGRjZTA4OGYuLjQ4ZWJiOTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LXB4YS9ncGlvLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgpAQCAtMjk1LDcgKzI5NSw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgcHhhX2dwaW9fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHB4YV9ncGlvX3N1c3BlbmQodm9pZCkKIHsKIAlzdHJ1Y3QgcHhhX2dwaW9fY2hpcCAqYzsKIAlpbnQgZ3BpbzsKQEAgLTMxMiw3ICszMTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB4YV9ncGlvX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcHhhX2dwaW9fcmVzdW1lKHZvaWQpCiB7CiAJc3RydWN0IHB4YV9ncGlvX2NoaXAgKmM7CiAJaW50IGdwaW87CkBAIC0zMjYsMjIgKzMyNiwxMyBAQAogCQlfX3Jhd193cml0ZWwoYy0+c2F2ZWRfZ2ZlciwgYy0+cmVnYmFzZSArIEdGRVJfT0ZGU0VUKTsKIAkJX19yYXdfd3JpdGVsKGMtPnNhdmVkX2dwZHIsIGMtPnJlZ2Jhc2UgKyBHUERSX09GRlNFVCk7CiAJfQotCXJldHVybiAwOwogfQogI2Vsc2UKICNkZWZpbmUgcHhhX2dwaW9fc3VzcGVuZAlOVUxMCiAjZGVmaW5lIHB4YV9ncGlvX3Jlc3VtZQkJTlVMTAogI2VuZGlmCiAKLXN0cnVjdCBzeXNkZXZfY2xhc3MgcHhhX2dwaW9fc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImdwaW8iLAorc3RydWN0IHN5c2NvcmVfb3BzIHB4YV9ncGlvX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gcHhhX2dwaW9fc3VzcGVuZCwKIAkucmVzdW1lCQk9IHB4YV9ncGlvX3Jlc3VtZSwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHB4YV9ncGlvX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZweGFfZ3Bpb19zeXNjbGFzcyk7Ci19Ci0KLWNvcmVfaW5pdGNhbGwocHhhX2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXB4YS9tZnAuYyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCmluZGV4IGE5YWE1YWQuLmJlMTJlYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCisrKyBiL2FyY2gvYXJtL3BsYXQtcHhhL21mcC5jCkBAIC0xNyw3ICsxNyw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAKICNpbmNsdWRlIDxwbGF0L21mcC5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKaW5kZXggMjdlYTg1MmUuLmMxMGQxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgpAQCAtMTE5NSwxOSArMTE5NSwxMiBAQAogCiBFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqdG9fZG1hX2NoYW4oc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4sIGRldik7Ci19Ci0KLS8qIHN5c3RlbSBkZXZpY2UgY2xhc3MgKi8KKy8qIHN5c3RlbSBjb3JlIG9wZXJhdGlvbnMgKi8KIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IHMzYzI0MTBfZG1hX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHZvaWQgczNjMjQxMF9kbWFfc3VzcGVuZF9jaGFuKHMzYzI0MTBfZG1hX2NoYW4gKmNwKQogewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjcCA9IHRvX2RtYV9jaGFuKGRldik7Ci0KIAlwcmludGsoS0VSTl9ERUJVRyAic3VzcGVuZGluZyBkbWEgY2hhbm5lbCAlZFxuIiwgY3AtPm51bWJlcik7CiAKIAlpZiAoZG1hX3JkcmVnKGNwLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcpICYgUzNDMjQxMF9ETUFTS1RSSUdfT04pIHsKQEAgLTEyMjIsMTMgKzEyMTUsMjEgQEAKIAogCQlzM2MyNDEwX2RtYV9kb3N0b3AoY3ApOwogCX0KK30KKworc3RhdGljIGludCBzM2MyNDEwX2RtYV9zdXNwZW5kKHZvaWQpCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNwID0gczNjMjQxMF9jaGFuczsKKwlpbnQgY2hhbm5lbDsKKworCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBkbWFfY2hhbm5lbHM7IGNwKyssIGNoYW5uZWwrKykKKwkJczNjMjQxMF9kbWFfc3VzcGVuZF9jaGFuKGNwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHMzYzI0MTBfZG1hX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgczNjMjQxMF9kbWFfcmVzdW1lX2NoYW4oc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNwKQogewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjcCA9IHRvX2RtYV9jaGFuKGRldik7CiAJdW5zaWduZWQgaW50IG5vID0gY3AtPm51bWJlciB8IERNQUNIX0xPV19MRVZFTDsKIAogCS8qIHJlc3RvcmUgY2hhbm5lbCdzIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gKi8KQEAgLTEyNDksMTMgKzEyNTAsMjEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgczNjMjQxMF9kbWFfcmVzdW1lKHZvaWQpCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNwID0gczNjMjQxMF9jaGFucyArIGRtYV9jaGFubmVscyAtIDE7CisJaW50IGNoYW5uZWw7CisKKwlmb3IgKGNoYW5uZWwgPSBkbWFfY2hhbm5lbHMgLSAxOyBjaGFubmVsID49IDA7IGNwKyssIGNoYW5uZWwtLSkKKwkJczNjMjQxMF9kbWFfcmVzdW1lX2NoYW4oY3ApOworfQorCiAjZWxzZQogI2RlZmluZSBzM2MyNDEwX2RtYV9zdXNwZW5kIE5VTEwKICNkZWZpbmUgczNjMjQxMF9kbWFfcmVzdW1lICBOVUxMCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0cnVjdCBzeXNkZXZfY2xhc3MgZG1hX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJzM2MyNHh4LWRtYSIsCitzdHJ1Y3Qgc3lzY29yZV9vcHMgZG1hX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gczNjMjQxMF9kbWFfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHMzYzI0MTBfZG1hX3Jlc3VtZSwKIH07CkBAIC0xMjY5LDM5ICsxMjc4LDE0IEBACiAKIC8qIGluaXRpYWxpc2F0aW9uIGNvZGUgKi8KIAotc3RhdGljIGludCBfX2luaXQgczNjMjR4eF9kbWFfc3lzY2xhc3NfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgczNjMjR4eF9kbWFfc3lzY29yZV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmZG1hX3N5c2NsYXNzKTsKLQotCWlmIChyZXQgIT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJkbWEgc3lzY2xhc3MgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1jb3JlX2luaXRjYWxsKHMzYzI0eHhfZG1hX3N5c2NsYXNzX2luaXQpOwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNHh4X2RtYV9zeXNkZXZfcmVnaXN0ZXIodm9pZCkKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3AgPSBzM2MyNDEwX2NoYW5zOwotCWludCBjaGFubmVsLCByZXQ7Ci0KLQlmb3IgKGNoYW5uZWwgPSAwOyBjaGFubmVsIDwgZG1hX2NoYW5uZWxzOyBjcCsrLCBjaGFubmVsKyspIHsKLQkJY3AtPmRldi5jbHMgPSAmZG1hX3N5c2NsYXNzOwotCQljcC0+ZGV2LmlkICA9IGNoYW5uZWw7Ci0JCXJldCA9IHN5c2Rldl9yZWdpc3RlcigmY3AtPmRldik7Ci0KLQkJaWYgKHJldCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciByZWdpc3RlcmluZyBkZXYgZm9yIGRtYSAlZFxuIiwKLQkJCSAgICAgICBjaGFubmVsKTsKLSAJCQlyZXR1cm4gcmV0OwotCQl9Ci0JfQorCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZkbWFfc3lzY29yZV9vcHMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLWxhdGVfaW5pdGNhbGwoczNjMjR4eF9kbWFfc3lzZGV2X3JlZ2lzdGVyKTsKK2xhdGVfaW5pdGNhbGwoczNjMjR4eF9kbWFfc3lzY29yZV9pbml0KTsKIAogaW50IF9faW5pdCBzM2MyNHh4X2RtYV9pbml0KHVuc2lnbmVkIGludCBjaGFubmVscywgdW5zaWduZWQgaW50IGlycSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgc3RyaWRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS1wbS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2lycS1wbS5jCmluZGV4IGMzNjI0ZDguLjBlZmIyZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pcnEtcG0uYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaXJxLXBtLmMKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgpAQCAtNjUsNyArNjQsNyBAQAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9laW50Zmx0WzRdOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9laW50bWFzazsKIAotaW50IHMzYzI0eHhfaXJxX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoraW50IHMzYzI0eHhfaXJxX3N1c3BlbmQodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApAQCAtODEsNyArODAsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgczNjMjR4eF9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit2b2lkIHMzYzI0eHhfaXJxX3Jlc3VtZSh2b2lkKQogewogCXVuc2lnbmVkIGludCBpOwogCkBAIC05Myw2ICs5Miw0IEBACiAKIAlzM2NfcG1fZG9fcmVzdG9yZShpcnFfc2F2ZSwgQVJSQVlfU0laRShpcnFfc2F2ZSkpOwogCV9fcmF3X3dyaXRlbChzYXZlX2VpbnRtYXNrLCBTM0MyNFhYX0VJTlRNQVNLKTsKLQotCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLXBtLmMgYi9hcmNoL2FybS9wbGF0LXM1cC9pcnEtcG0uYwppbmRleCA1MjU5YWQ0Li4zMjdhY2IzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cC9pcnEtcG0uYworKysgYi9hcmNoL2FybS9wbGF0LXM1cC9pcnEtcG0uYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9pcnFzLmg+CkBAIC03NywxNyArNzYsMTUgQEAKIAlTQVZFX0lURU0oUzVQX0VJTlRfTUFTSygzKSksCiB9OwogCi1pbnQgczNjMjR4eF9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitpbnQgczNjMjR4eF9pcnFfc3VzcGVuZCh2b2lkKQogewogCXMzY19wbV9kb19zYXZlKGVpbnRfc2F2ZSwgQVJSQVlfU0laRShlaW50X3NhdmUpKTsKIAogCXJldHVybiAwOwogfQogCi1pbnQgczNjMjR4eF9pcnFfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit2b2lkIHMzYzI0eHhfaXJxX3Jlc3VtZSh2b2lkKQogewogCXMzY19wbV9kb19yZXN0b3JlKGVpbnRfc2F2ZSwgQVJSQVlfU0laRShlaW50X3NhdmUpKTsKLQotCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2NwdS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUuaAppbmRleCBjZWRmZmY1Li4zYWVkYWMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2NwdS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY3B1LmgKQEAgLTY4LDYgKzY4LDEyIEBACiBzdHJ1Y3Qgc3lzX3RpbWVyOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgczNjMjR4eF90aW1lcjsKIAorZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBzM2MyNDEwX3BtX3N5c2NvcmVfb3BzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBzM2MyNDEyX3BtX3N5c2NvcmVfb3BzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBzM2MyNDE2X3BtX3N5c2NvcmVfb3BzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBzM2MyNDR4X3BtX3N5c2NvcmVfb3BzOworZXh0ZXJuIHN0cnVjdCBzeXNjb3JlX29wcyBzM2M2NHh4X2lycV9zeXNjb3JlX29wczsKKwogLyogc3lzdGVtIGRldmljZSBjbGFzc2VzICovCiAKIGV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTBfc3lzY2xhc3M7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmgKaW5kZXggOTM3Y2MyYS4uN2ZiNmY2YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaApAQCAtMTAzLDE0ICsxMDMsMTYgQEAKIAogI2lmZGVmIENPTkZJR19QTQogZXh0ZXJuIGludCBzM2NfaXJxZXh0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgc3RhdGUpOwotZXh0ZXJuIGludCBzM2MyNHh4X2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci1leHRlcm4gaW50IHMzYzI0eHhfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgczNjMjR4eF9pcnFfc3VzcGVuZCh2b2lkKTsKK2V4dGVybiB2b2lkIHMzYzI0eHhfaXJxX3Jlc3VtZSh2b2lkKTsKICNlbHNlCiAjZGVmaW5lIHMzY19pcnFleHRfd2FrZSBOVUxMCiAjZGVmaW5lIHMzYzI0eHhfaXJxX3N1c3BlbmQgTlVMTAogI2RlZmluZSBzM2MyNHh4X2lycV9yZXN1bWUgIE5VTEwKICNlbmRpZgogCitleHRlcm4gc3RydWN0IHN5c2NvcmVfb3BzIHMzYzI0eHhfaXJxX3N5c2NvcmVfb3BzOworCiAvKiBQTSBkZWJ1ZyBmdW5jdGlvbnMgKi8KIAogI2lmZGVmIENPTkZJR19TQU1TVU5HX1BNX0RFQlVHCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggZjc0Njk1MC4uZjI1ZTdlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMzk4LDkgKzM5OCw5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCi1zdGF0aWMgaW50IHZmcF9wbV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgdmZwX3BtX3N1c3BlbmQodm9pZCkKIHsKIAlzdHJ1Y3QgdGhyZWFkX2luZm8gKnRpID0gY3VycmVudF90aHJlYWRfaW5mbygpOwogCXUzMiBmcGV4YyA9IGZtcngoRlBFWEMpOwpAQCAtNDIwLDM0ICs0MjAsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2ZnBfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB2ZnBfcG1fcmVzdW1lKHZvaWQpCiB7CiAJLyogZW5zdXJlIHdlIGhhdmUgYWNjZXNzIHRvIHRoZSB2ZnAgKi8KIAl2ZnBfZW5hYmxlKE5VTEwpOwogCiAJLyogYW5kIGRpc2FibGUgaXQgdG8gZW5zdXJlIHRoZSBuZXh0IHVzYWdlIHJlc3RvcmVzIHRoZSBzdGF0ZSAqLwogCWZteHIoRlBFWEMsIGZtcngoRlBFWEMpICYgfkZQRVhDX0VOKTsKLQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyB2ZnBfcG1fc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gInZmcCIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIHZmcF9wbV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHZmcF9wbV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gdmZwX3BtX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSB2ZnBfcG1fc3lzZGV2ID0gewotCS5jbHMJPSAmdmZwX3BtX3N5c2NsYXNzLAotfTsKLQogc3RhdGljIHZvaWQgdmZwX3BtX2luaXQodm9pZCkKIHsKLQlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnZmcF9wbV9zeXNjbGFzcyk7Ci0Jc3lzZGV2X3JlZ2lzdGVyKCZ2ZnBfcG1fc3lzZGV2KTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmdmZwX3BtX3N5c2NvcmVfb3BzKTsKIH0KIAotCiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHZmcF9wbV9pbml0KHZvaWQpIHsgfQogI2VuZGlmIC8qIENPTkZJR19QTSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9pbnRjLmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuYwppbmRleCAyMWNlMzVmLi4zZTM2NDYxIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2ludGMuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtMjEsNyArMjEsNiBAQAogc3RydWN0IGludGMgewogCXZvaWQgX19pb21lbQkJKnJlZ3M7CiAJc3RydWN0IGlycV9jaGlwCQljaGlwOwotCXN0cnVjdCBzeXNfZGV2aWNlCXN5c2RldjsKICNpZmRlZiBDT05GSUdfUE0KIAl1bnNpZ25lZCBsb25nCQlzdXNwZW5kX2lwcjsKIAl1bnNpZ25lZCBsb25nCQlzYXZlZF9pcHJbNjRdOwpAQCAtMTQ2LDkgKzE0NSw4IEBACiAJaW50YzAuc3VzcGVuZF9pcHIgPSBvZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaW50Y19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGludGNfc3VzcGVuZCh2b2lkKQogewotCXN0cnVjdCBpbnRjICppbnRjID0gY29udGFpbmVyX29mKHNkZXYsIHN0cnVjdCBpbnRjLCBzeXNkZXYpOwogCWludCBpOwogCiAJaWYgKHVubGlrZWx5KCFpcnFzX2Rpc2FibGVkKCkpKSB7CkBAIC0xNTYsMjggKzE1NCwyNSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAodW5saWtlbHkoIWludGMtPnN1c3BlbmRfaXByKSkgeworCWlmICh1bmxpa2VseSghaW50YzAuc3VzcGVuZF9pcHIpKSB7CiAJCXByX2VycigiaW50Y19zdXNwZW5kOiBzdXNwZW5kX2lwciBub3QgaW5pdGlhbGl6ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewotCQlpbnRjLT5zYXZlZF9pcHJbaV0gPSBpbnRjX3JlYWRsKGludGMsIElOVFBSMCArIDQgKiBpKTsKLQkJaW50Y193cml0ZWwoaW50YywgSU5UUFIwICsgNCAqIGksIGludGMtPnN1c3BlbmRfaXByKTsKKwkJaW50YzAuc2F2ZWRfaXByW2ldID0gaW50Y19yZWFkbCgmaW50YzAsIElOVFBSMCArIDQgKiBpKTsKKwkJaW50Y193cml0ZWwoJmludGMwLCBJTlRQUjAgKyA0ICogaSwgaW50YzAuc3VzcGVuZF9pcHIpOwogCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGludGNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpzZGV2KQorc3RhdGljIGludCBpbnRjX3Jlc3VtZSh2b2lkKQogewotCXN0cnVjdCBpbnRjICppbnRjID0gY29udGFpbmVyX29mKHNkZXYsIHN0cnVjdCBpbnRjLCBzeXNkZXYpOwogCWludCBpOwogCi0JV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKLQogCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQotCQlpbnRjX3dyaXRlbChpbnRjLCBJTlRQUjAgKyA0ICogaSwgaW50Yy0+c2F2ZWRfaXByW2ldKTsKKwkJaW50Y193cml0ZWwoJmludGMwLCBJTlRQUjAgKyA0ICogaSwgaW50YzAuc2F2ZWRfaXByW2ldKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg2LDI3ICsxODEsMTggQEAKICNkZWZpbmUgaW50Y19yZXN1bWUJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGludGNfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImludGMiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBpbnRjX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kCT0gaW50Y19zdXNwZW5kLAogCS5yZXN1bWUJCT0gaW50Y19yZXN1bWUsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBpbnRjX2luaXRfc3lzZGV2KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbnRjX2luaXRfc3lzY29yZSh2b2lkKQogewotCWludCByZXQ7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmludGNfc3lzY29yZV9vcHMpOwogCi0JcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZpbnRjX2NsYXNzKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JaW50YzAuc3lzZGV2LmlkID0gMDsKLQlpbnRjMC5zeXNkZXYuY2xzID0gJmludGNfY2xhc3M7Ci0JcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZpbnRjMC5zeXNkZXYpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KLWRldmljZV9pbml0Y2FsbChpbnRjX2luaXRfc3lzZGV2KTsKK2RldmljZV9pbml0Y2FsbChpbnRjX2luaXRfc3lzY29yZSk7CiAKIHVuc2lnbmVkIGxvbmcgaW50Y19nZXRfcGVuZGluZyh1bnNpZ25lZCBpbnQgZ3JvdXApCiB7CmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL2tlcm5lbC9ubWkuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL25taS5jCmluZGV4IDBiNWY3MmYuLjQwMWViMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4va2VybmVsL25taS5jCisrKyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL25taS5jCkBAIC0xMiw3ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtMTk2LDQzICsxOTYsMzEgQEAKIAogLyogU3VzcGVuZC9yZXN1bWUgc3VwcG9ydCAqLwogI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBubWlfd2R0X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIGludCBubWlfd2R0X3N1c3BlbmQodm9pZCkKIHsKIAlubWlfd2R0X3N0b3AoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBubWlfd2R0X3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbm1pX3dkdF9yZXN1bWUodm9pZCkKIHsKIAlpZiAobm1pX2FjdGl2ZSkKIAkJbm1pX3dkdF9zdGFydCgpOwotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBubWlfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gRFJWX05BTUUsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIG5taV9zeXNjb3JlX29wcyA9IHsKIAkucmVzdW1lCQk9IG5taV93ZHRfcmVzdW1lLAogCS5zdXNwZW5kCT0gbm1pX3dkdF9zdXNwZW5kLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV9ubWlfd2R0ID0gewotCS5pZAk9IDAsCi0JLmNscwk9ICZubWlfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X25taV93ZHRfc3lzZnModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfbm1pX3dkdF9zeXNjb3JlKHZvaWQpCiB7Ci0JaW50IGVycm9yOworCWlmIChubWlfYWN0aXZlKQorCQlyZWdpc3Rlcl9zeXNjb3JlX29wcygmbm1pX3N5c2NvcmVfb3BzKTsKIAotCWlmICghbm1pX2FjdGl2ZSkKLQkJcmV0dXJuIDA7Ci0KLQllcnJvciA9IHN5c2Rldl9jbGFzc19yZWdpc3Rlcigmbm1pX3N5c2NsYXNzKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX25taV93ZHQpOwotCXJldHVybiBlcnJvcjsKKwlyZXR1cm4gMDsKIH0KLWxhdGVfaW5pdGNhbGwoaW5pdF9ubWlfd2R0X3N5c2ZzKTsKK2xhdGVfaW5pdGNhbGwoaW5pdF9ubWlfd2R0X3N5c2NvcmUpOwogCiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYyBiL2FyY2gvYmxhY2tmaW4va2VybmVsL3RpbWUtdHMuYwppbmRleCBjZGI0YmViLi45ZTliNjBkIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2tlcm5lbC90aW1lLXRzLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9rZXJuZWwvdGltZS10cy5jCkBAIC0yMywyOSArMjMsNiBAQAogI2luY2x1ZGUgPGFzbS9ncHRpbWVycy5oPgogI2luY2x1ZGUgPGFzbS9ubWkuaD4KIAotLyogQWNjZWxlcmF0b3JzIGZvciBzY2hlZF9jbG9jaygpCi0gKiBjb252ZXJ0IGZyb20gY3ljbGVzKDY0Yml0cykgPT4gbmFub3NlY29uZHMgKDY0Yml0cykKLSAqICBiYXNpYyBlcXVhdGlvbjoKLSAqCQlucyA9IGN5Y2xlcyAvIChmcmVxIC8gbnNfcGVyX3NlYykKLSAqCQlucyA9IGN5Y2xlcyAqIChuc19wZXJfc2VjIC8gZnJlcSkKLSAqCQlucyA9IGN5Y2xlcyAqICgxMF45IC8gKGNwdV9raHogKiAxMF4zKSkKLSAqCQlucyA9IGN5Y2xlcyAqICgxMF42IC8gY3B1X2toeikKLSAqCi0gKglUaGVuIHdlIHVzZSBzY2FsaW5nIG1hdGggKHN1Z2dlc3RlZCBieSBnZW9yZ2VAbXZpc3RhLmNvbSkgdG8gZ2V0OgotICoJCW5zID0gY3ljbGVzICogKDEwXjYgKiBTQyAvIGNwdV9raHopIC8gU0MKLSAqCQlucyA9IGN5Y2xlcyAqIGN5YzJuc19zY2FsZSAvIFNDCi0gKgotICoJQW5kIHNpbmNlIFNDIGlzIGEgY29uc3RhbnQgcG93ZXIgb2YgdHdvLCB3ZSBjYW4gY29udmVydCB0aGUgZGl2Ci0gKiAgaW50byBhIHNoaWZ0LgotICoKLSAqICBXZSBjYW4gdXNlIGtoeiBkaXZpc29yIGluc3RlYWQgb2YgbWh6IHRvIGtlZXAgYSBiZXR0ZXIgcHJlY2lzaW9uLCBzaW5jZQotICogIGN5YzJuc19zY2FsZSBpcyBsaW1pdGVkIHRvIDEwXjYgKiAyXjEwLCB3aGljaCBmaXRzIGluIDMyIGJpdHMuCi0gKiAgKG1hdGhpZXUuZGVzbm95ZXJzQHBvbHltdGwuY2EpCi0gKgotICoJCQktam9obnN0dWxAdXMuaWJtLmNvbSAibWF0aCBpcyBoYXJkLCBsZXRzIGdvIHNob3BwaW5nISIKLSAqLwotCi0jZGVmaW5lIENZQzJOU19TQ0FMRV9GQUNUT1IgMTAgLyogMl4xMCwgY2FyZWZ1bGx5IGNob3NlbiAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1lDTEVTX0NMT0NLU09VUkNFKQogCkBAIC02Myw3ICs0MCw2IEBACiAJLnJhdGluZwkJPSA0MDAsCiAJLnJlYWQJCT0gYmZpbl9yZWFkX2N5Y2xlcywKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwKLQkuc2hpZnQJCT0gQ1lDMk5TX1NDQUxFX0ZBQ1RPUiwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC03NSwxMCArNTEsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBiZmluX2NzX2N5Y2xlc19pbml0KHZvaWQpCiB7Ci0JYmZpbl9jc19jeWNsZXMubXVsdCA9IFwKLQkJY2xvY2tzb3VyY2VfaHoybXVsdChnZXRfY2NsaygpLCBiZmluX2NzX2N5Y2xlcy5zaGlmdCk7Ci0KLQlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmJmaW5fY3NfY3ljbGVzKSkKKwlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmJmaW5fY3NfY3ljbGVzLCBnZXRfY2NsaygpKSkKIAkJcGFuaWMoImZhaWxlZCB0byByZWdpc3RlciBjbG9ja3NvdXJjZSIpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTEsNyArODQsNiBAQAogCS5yYXRpbmcJCT0gMzUwLAogCS5yZWFkCQk9IGJmaW5fcmVhZF9ncHRpbWVyMCwKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkuc2hpZnQJCT0gQ1lDMk5TX1NDQUxFX0ZBQ1RPUiwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC0xMjUsMTAgKzk3LDcgQEAKIHsKIAlzZXR1cF9ncHRpbWVyMCgpOwogCi0JYmZpbl9jc19ncHRpbWVyMC5tdWx0ID0gXAotCQljbG9ja3NvdXJjZV9oejJtdWx0KGdldF9zY2xrKCksIGJmaW5fY3NfZ3B0aW1lcjAuc2hpZnQpOwotCi0JaWYgKGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZiZmluX2NzX2dwdGltZXIwKSkKKwlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmJmaW5fY3NfZ3B0aW1lcjAsIGdldF9zY2xrKCkpKQogCQlwYW5pYygiZmFpbGVkIHRvIHJlZ2lzdGVyIGNsb2Nrc291cmNlIik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZHBtYy5jIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9kcG1jLmMKaW5kZXggMzgyMDk5Zi4uNWU0MTEyZSAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9kcG1jLmMKKysrIGIvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9kcG1jLmMKQEAgLTE5LDkgKzE5LDYgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRSAiYmZpbiBkcG1jIgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBcCi0JY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIERSSVZFUl9OQU1FLCBtc2cpCi0KIHN0cnVjdCBiZmluX2RwbWNfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vc21wLmMKaW5kZXggOGJjZTVlZC4uMWZiZDk0YyAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9zbXAuYworKysgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL3NtcC5jCkBAIC0xNzcsNiArMTc3LDkgQEAKIAl3aGlsZSAobXNnX3F1ZXVlLT5jb3VudCkgewogCQltc2cgPSAmbXNnX3F1ZXVlLT5pcGlfbWVzc2FnZVttc2dfcXVldWUtPmhlYWRdOwogCQlzd2l0Y2ggKG1zZy0+dHlwZSkgeworCQljYXNlIEJGSU5fSVBJX1JFU0NIRURVTEU6CisJCQlzY2hlZHVsZXJfaXBpKCk7CisJCQlicmVhazsKIAkJY2FzZSBCRklOX0lQSV9DQUxMX0ZVTkM6CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtc2dfcXVldWUtPmxvY2ssIGZsYWdzKTsKIAkJCWlwaV9jYWxsX2Z1bmN0aW9uKGNwdSwgbXNnKTsKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3NtcC5jCmluZGV4IDRjOWUzZTEuLjY2Y2M3NTYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9zbXAuYwpAQCAtMzQyLDE1ICszNDIsMTggQEAKIAogCWlwaSA9IFJFR19SRChpbnRyX3ZlY3QsIGlycV9yZWdzW3NtcF9wcm9jZXNzb3JfaWQoKV0sIHJ3X2lwaSk7CiAKKwlpZiAoaXBpLnZlY3RvciAmIElQSV9TQ0hFRFVMRSkgeworCQlzY2hlZHVsZXJfaXBpKCk7CisJfQogCWlmIChpcGkudmVjdG9yICYgSVBJX0NBTEwpIHsKLQkgICAgICAgICBmdW5jKGluZm8pOworCQlmdW5jKGluZm8pOwogCX0KIAlpZiAoaXBpLnZlY3RvciAmIElQSV9GTFVTSF9UTEIpIHsKLQkJICAgICBpZiAoZmx1c2hfbW0gPT0gRkxVU0hfQUxMKQotCQkJIF9fZmx1c2hfdGxiX2FsbCgpOwotCQkgICAgIGVsc2UgaWYgKGZsdXNoX3ZtYSA9PSBGTFVTSF9BTEwpCisJCWlmIChmbHVzaF9tbSA9PSBGTFVTSF9BTEwpCisJCQlfX2ZsdXNoX3RsYl9hbGwoKTsKKwkJZWxzZSBpZiAoZmx1c2hfdm1hID09IEZMVVNIX0FMTCkKIAkJCV9fZmx1c2hfdGxiX21tKGZsdXNoX21tKTsKLQkJICAgICBlbHNlCisJCWVsc2UKIAkJCV9fZmx1c2hfdGxiX3BhZ2UoZmx1c2hfdm1hLCBmbHVzaF9hZGRyKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYyBiL2FyY2gvaWE2NC9rZXJuZWwvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCAyMmY2MTUyLi5mMDliMTc0IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCkBAIC0yMyw4ICsyMyw2IEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGFjcGkvcHJvY2Vzc29yLmg+CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAiYWNwaS1jcHVmcmVxIiwgbXNnKQotCiBNT0RVTEVfQVVUSE9SKCJWZW5rYXRlc2ggUGFsbGlwYWRpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFDUEkgUHJvY2Vzc29yIFAtU3RhdGVzIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtNDcsMTIgKzQ1LDEyIEBACiB7CiAJczY0IHJldHZhbDsKIAotCWRwcmludGsoInByb2Nlc3Nvcl9zZXRfcHN0YXRlXG4iKTsKKwlwcl9kZWJ1ZygicHJvY2Vzc29yX3NldF9wc3RhdGVcbiIpOwogCiAJcmV0dmFsID0gaWE2NF9wYWxfc2V0X3BzdGF0ZSgodTY0KXZhbHVlKTsKIAogCWlmIChyZXR2YWwpIHsKLQkJZHByaW50aygiRmFpbGVkIHRvIHNldCBmcmVxIHRvIDB4JXgsIHdpdGggZXJyb3IgMHglbHhcbiIsCisJCXByX2RlYnVnKCJGYWlsZWQgdG8gc2V0IGZyZXEgdG8gMHgleCwgd2l0aCBlcnJvciAweCVseFxuIiwKIAkJICAgICAgICB2YWx1ZSwgcmV0dmFsKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNjcsMTQgKzY1LDE0IEBACiAJdTY0CXBzdGF0ZV9pbmRleCA9IDA7CiAJczY0IAlyZXR2YWw7CiAKLQlkcHJpbnRrKCJwcm9jZXNzb3JfZ2V0X3BzdGF0ZVxuIik7CisJcHJfZGVidWcoInByb2Nlc3Nvcl9nZXRfcHN0YXRlXG4iKTsKIAogCXJldHZhbCA9IGlhNjRfcGFsX2dldF9wc3RhdGUoJnBzdGF0ZV9pbmRleCwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBTF9HRVRfUFNUQVRFX1RZUEVfSU5TVEFOVCk7CiAJKnZhbHVlID0gKHUzMikgcHN0YXRlX2luZGV4OwogCiAJaWYgKHJldHZhbCkKLQkJZHByaW50aygiRmFpbGVkIHRvIGdldCBjdXJyZW50IGZyZXEgd2l0aCAiCisJCXByX2RlYnVnKCJGYWlsZWQgdG8gZ2V0IGN1cnJlbnQgZnJlcSB3aXRoICIKIAkJCSJlcnJvciAweCVseCwgaWR4IDB4JXhcbiIsIHJldHZhbCwgKnZhbHVlKTsKIAogCXJldHVybiAoaW50KXJldHZhbDsKQEAgLTkwLDcgKzg4LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGk7CiAKLQlkcHJpbnRrKCJleHRyYWN0X2Nsb2NrXG4iKTsKKwlwcl9kZWJ1ZygiZXh0cmFjdF9jbG9ja1xuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+YWNwaV9kYXRhLnN0YXRlX2NvdW50OyBpKyspIHsKIAkJaWYgKHZhbHVlID09IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uc3RhdHVzKQpAQCAtMTEwLDcgKzEwOCw3IEBACiAJY3B1bWFza190CQlzYXZlZF9tYXNrOwogCXVuc2lnbmVkIGxvbmcgCQljbG9ja19mcmVxOwogCi0JZHByaW50aygicHJvY2Vzc29yX2dldF9mcmVxXG4iKTsKKwlwcl9kZWJ1ZygicHJvY2Vzc29yX2dldF9mcmVxXG4iKTsKIAogCXNhdmVkX21hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAJc2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgY3B1bWFza19vZihjcHUpKTsKQEAgLTE0OCw3ICsxNDYsNyBAQAogCWNwdW1hc2tfdAkJc2F2ZWRfbWFzazsKIAlpbnQJCQlyZXR2YWw7CiAKLQlkcHJpbnRrKCJwcm9jZXNzb3Jfc2V0X2ZyZXFcbiIpOworCXByX2RlYnVnKCJwcm9jZXNzb3Jfc2V0X2ZyZXFcbiIpOwogCiAJc2F2ZWRfbWFzayA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKIAlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBjcHVtYXNrX29mKGNwdSkpOwpAQCAtMTU5LDE2ICsxNTcsMTYgQEAKIAogCWlmIChzdGF0ZSA9PSBkYXRhLT5hY3BpX2RhdGEuc3RhdGUpIHsKIAkJaWYgKHVubGlrZWx5KGRhdGEtPnJlc3VtZSkpIHsKLQkJCWRwcmludGsoIkNhbGxlZCBhZnRlciByZXN1bWUsIHJlc2V0dGluZyB0byBQJWRcbiIsIHN0YXRlKTsKKwkJCXByX2RlYnVnKCJDYWxsZWQgYWZ0ZXIgcmVzdW1lLCByZXNldHRpbmcgdG8gUCVkXG4iLCBzdGF0ZSk7CiAJCQlkYXRhLT5yZXN1bWUgPSAwOwogCQl9IGVsc2UgewotCQkJZHByaW50aygiQWxyZWFkeSBhdCB0YXJnZXQgc3RhdGUgKFAlZClcbiIsIHN0YXRlKTsKKwkJCXByX2RlYnVnKCJBbHJlYWR5IGF0IHRhcmdldCBzdGF0ZSAoUCVkKVxuIiwgc3RhdGUpOwogCQkJcmV0dmFsID0gMDsKIAkJCWdvdG8gbWlncmF0ZV9lbmQ7CiAJCX0KIAl9CiAKLQlkcHJpbnRrKCJUcmFuc2l0aW9uaW5nIGZyb20gUCVkIHRvIFAlZFxuIiwKKwlwcl9kZWJ1ZygiVHJhbnNpdGlvbmluZyBmcm9tIFAlZCB0byBQJWRcbiIsCiAJCWRhdGEtPmFjcGlfZGF0YS5zdGF0ZSwgc3RhdGUpOwogCiAJLyogY3B1ZnJlcSBmcmVxdWVuY3kgc3RydWN0ICovCkBAIC0xODYsNyArMTg0LDcgQEAKIAogCXZhbHVlID0gKHUzMikgZGF0YS0+YWNwaV9kYXRhLnN0YXRlc1tzdGF0ZV0uY29udHJvbDsKIAotCWRwcmludGsoIlRyYW5zaXRpb25pbmcgdG8gc3RhdGU6IDB4JTA4eFxuIiwgdmFsdWUpOworCXByX2RlYnVnKCJUcmFuc2l0aW9uaW5nIHRvIHN0YXRlOiAweCUwOHhcbiIsIHZhbHVlKTsKIAogCXJldCA9IHByb2Nlc3Nvcl9zZXRfcHN0YXRlKHZhbHVlKTsKIAlpZiAocmV0KSB7CkBAIC0yMTksNyArMjE3LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvICpkYXRhID0gYWNwaV9pb19kYXRhW2NwdV07CiAKLQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfZ2V0XG4iKTsKKwlwcl9kZWJ1ZygiYWNwaV9jcHVmcmVxX2dldFxuIik7CiAKIAlyZXR1cm4gcHJvY2Vzc29yX2dldF9mcmVxKGRhdGEsIGNwdSk7CiB9CkBAIC0yMzUsNyArMjMzLDcgQEAKIAl1bnNpZ25lZCBpbnQgbmV4dF9zdGF0ZSA9IDA7CiAJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CiAKLQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfc2V0cG9saWN5XG4iKTsKKwlwcl9kZWJ1ZygiYWNwaV9jcHVmcmVxX3NldHBvbGljeVxuIik7CiAKIAlyZXN1bHQgPSBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV90YXJnZXQocG9saWN5LAogCQkJZGF0YS0+ZnJlcV90YWJsZSwgdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uLCAmbmV4dF9zdGF0ZSk7CkBAIC0yNTUsNyArMjUzLDcgQEAKIAl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvICpkYXRhID0gYWNwaV9pb19kYXRhW3BvbGljeS0+Y3B1XTsKIAotCWRwcmludGsoImFjcGlfY3B1ZnJlcV92ZXJpZnlcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfdmVyaWZ5XG4iKTsKIAogCXJlc3VsdCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3ZlcmlmeShwb2xpY3ksCiAJCQlkYXRhLT5mcmVxX3RhYmxlKTsKQEAgLTI3Myw3ICsyNzEsNyBAQAogCXN0cnVjdCBjcHVmcmVxX2FjcGlfaW8JKmRhdGE7CiAJdW5zaWduZWQgaW50CQlyZXN1bHQgPSAwOwogCi0JZHByaW50aygiYWNwaV9jcHVmcmVxX2NwdV9pbml0XG4iKTsKKwlwcl9kZWJ1ZygiYWNwaV9jcHVmcmVxX2NwdV9pbml0XG4iKTsKIAogCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9hY3BpX2lvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQpAQCAtMjg4LDcgKzI4Niw3IEBACiAKIAkvKiBjYXBhYmlsaXR5IGNoZWNrICovCiAJaWYgKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCA8PSAxKSB7Ci0JCWRwcmludGsoIk5vIFAtU3RhdGVzXG4iKTsKKwkJcHJfZGVidWcoIk5vIFAtU3RhdGVzXG4iKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJZ290byBlcnJfdW5yZWc7CiAJfQpAQCAtMjk3LDcgKzI5NSw3IEBACiAJCQkJCUFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFKSB8fAogCSAgICAoZGF0YS0+YWNwaV9kYXRhLnN0YXR1c19yZWdpc3Rlci5zcGFjZV9pZCAhPQogCQkJCQlBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkpIHsKLQkJZHByaW50aygiVW5zdXBwb3J0ZWQgYWRkcmVzcyBzcGFjZSBbJWQsICVkXVxuIiwKKwkJcHJfZGVidWcoIlVuc3VwcG9ydGVkIGFkZHJlc3Mgc3BhY2UgWyVkLCAlZF1cbiIsCiAJCQkodTMyKSAoZGF0YS0+YWNwaV9kYXRhLmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQpLAogCQkJKHUzMikgKGRhdGEtPmFjcGlfZGF0YS5zdGF0dXNfcmVnaXN0ZXIuc3BhY2VfaWQpKTsKIAkJcmVzdWx0ID0gLUVOT0RFVjsKQEAgLTM0OCw3ICszNDYsNyBAQAogCSAgICAgICAiYWN0aXZhdGVkLlxuIiwgY3B1KTsKIAogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQ7IGkrKykKLQkJZHByaW50aygiICAgICAlY1AlZDogJWQgTUh6LCAlZCBtVywgJWQgdVMsICVkIHVTLCAweCV4IDB4JXhcbiIsCisJCXByX2RlYnVnKCIgICAgICVjUCVkOiAlZCBNSHosICVkIG1XLCAlZCB1UywgJWQgdVMsIDB4JXggMHgleFxuIiwKIAkJCShpID09IGRhdGEtPmFjcGlfZGF0YS5zdGF0ZT8nKic6JyAnKSwgaSwKIAkJCSh1MzIpIGRhdGEtPmFjcGlfZGF0YS5zdGF0ZXNbaV0uY29yZV9mcmVxdWVuY3ksCiAJCQkodTMyKSBkYXRhLT5hY3BpX2RhdGEuc3RhdGVzW2ldLnBvd2VyLApAQCAtMzgzLDcgKzM4MSw3IEBACiB7CiAJc3RydWN0IGNwdWZyZXFfYWNwaV9pbyAqZGF0YSA9IGFjcGlfaW9fZGF0YVtwb2xpY3ktPmNwdV07CiAKLQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfY3B1X2V4aXRcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfY3B1X2V4aXRcbiIpOwogCiAJaWYgKGRhdGEpIHsKIAkJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIocG9saWN5LT5jcHUpOwpAQCAtNDE4LDcgKzQxNiw3IEBACiBzdGF0aWMgaW50IF9faW5pdAogYWNwaV9jcHVmcmVxX2luaXQgKHZvaWQpCiB7Ci0JZHByaW50aygiYWNwaV9jcHVmcmVxX2luaXRcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfaW5pdFxuIik7CiAKICAJcmV0dXJuIGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2NwdWZyZXFfZHJpdmVyKTsKIH0KQEAgLTQyNyw3ICs0MjUsNyBAQAogc3RhdGljIHZvaWQgX19leGl0CiBhY3BpX2NwdWZyZXFfZXhpdCAodm9pZCkKIHsKLQlkcHJpbnRrKCJhY3BpX2NwdWZyZXFfZXhpdFxuIik7CisJcHJfZGVidWcoImFjcGlfY3B1ZnJlcV9leGl0XG4iKTsKIAogCWNwdWZyZXFfdW5yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfY3B1ZnJlcV9kcml2ZXIpOwogCXJldHVybjsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvY3ljbG9uZS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9jeWNsb25lLmMKaW5kZXggMWI4MTFjNi4uZjY0MDk3YiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9jeWNsb25lLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9jeWNsb25lLmMKQEAgLTMxLDggKzMxLDYgQEAKICAgICAgICAgLnJhdGluZyAgICAgICAgID0gMzAwLAogICAgICAgICAucmVhZCAgICAgICAgICAgPSByZWFkX2N5Y2xvbmUsCiAgICAgICAgIC5tYXNrICAgICAgICAgICA9ICgxTEwgPDwgNDApIC0gMSwKLSAgICAgICAgLm11bHQgICAgICAgICAgID0gMCwgLyp0byBiZSBjYWxjdWxhdGVkKi8KLSAgICAgICAgLnNoaWZ0ICAgICAgICAgID0gMTYsCiAgICAgICAgIC5mbGFncyAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtMTE4LDkgKzExNiw3IEBACiAJLyogaW5pdGlhbGl6ZSBsYXN0IHRpY2sgKi8KIAljeWNsb25lX21jID0gY3ljbG9uZV90aW1lcjsKIAljbG9ja3NvdXJjZV9jeWNsb25lLmZzeXNfbW1pbyA9IGN5Y2xvbmVfdGltZXI7Ci0JY2xvY2tzb3VyY2VfY3ljbG9uZS5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChDWUNMT05FX1RJTUVSX0ZSRVEsCi0JCQkJCQljbG9ja3NvdXJjZV9jeWNsb25lLnNoaWZ0KTsKLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfY3ljbG9uZSk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2N5Y2xvbmUsIENZQ0xPTkVfVElNRVJfRlJFUSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYwppbmRleCA1YjcwNDc0Li43ODJjM2EzNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2ludHJpbnNpY3MuaD4KQEAgLTQ5Niw2ICs0OTcsNyBAQAogCQkJc21wX2xvY2FsX2ZsdXNoX3RsYigpOwogCQkJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoSVNfUkVTQ0hFRFVMRSh2ZWN0b3IpKSkgeworCQkJc2NoZWR1bGVyX2lwaSgpOwogCQkJa3N0YXRfaW5jcl9pcnFzX3RoaXNfY3B1KGlycSwgZGVzYyk7CiAJCX0gZWxzZSB7CiAJCQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQ1JfVFBSLCB2ZWN0b3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwppbmRleCAxNTZhZDgwLi4wNDQ0MGNjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3RpbWUuYwpAQCAtNzMsOCArNzMsNiBAQAogCS5yYXRpbmcgICAgICAgICA9IDM1MCwKIAkucmVhZCAgICAgICAgICAgPSBpdGNfZ2V0X2N5Y2xlcywKIAkubWFzayAgICAgICAgICAgPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwKLQkubXVsdCAgICAgICAgICAgPSAwLCAvKnRvIGJlIGNhbGN1bGF0ZWQqLwotCS5zaGlmdCAgICAgICAgICA9IDE2LAogCS5mbGFncyAgICAgICAgICA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogI2lmZGVmIENPTkZJR19QQVJBVklSVAogCS5yZXN1bWUJCT0gcGFyYXZpcnRfY2xvY2tzb3VyY2VfcmVzdW1lLApAQCAtMzY1LDExICszNjMsOCBAQAogCWlhNjRfY3B1X2xvY2FsX3RpY2soKTsKIAogCWlmICghaXRjX2Nsb2Nrc291cmNlKSB7Ci0JCS8qIFNvcnQgb3V0IG11bHQvc2hpZnQgdmFsdWVzOiAqLwotCQljbG9ja3NvdXJjZV9pdGMubXVsdCA9Ci0JCQljbG9ja3NvdXJjZV9oejJtdWx0KGxvY2FsX2NwdV9kYXRhLT5pdGNfZnJlcSwKLQkJCQkJCWNsb2Nrc291cmNlX2l0Yy5zaGlmdCk7Ci0JCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9pdGMpOworCQljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfaXRjLAorCQkJCQkJbG9jYWxfY3B1X2RhdGEtPml0Y19mcmVxKTsKIAkJaXRjX2Nsb2Nrc291cmNlID0gJmNsb2Nrc291cmNlX2l0YzsKIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi90aW1lci5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvdGltZXIuYwppbmRleCAyMWQ2ZjA5Li5jMzRlZmRhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi90aW1lci5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3RpbWVyLmMKQEAgLTMzLDggKzMzLDYgQEAKICAgICAgICAgLnJhdGluZyAgICAgICAgID0gNDUwLAogICAgICAgICAucmVhZCAgICAgICAgICAgPSByZWFkX3NuMiwKICAgICAgICAgLm1hc2sgICAgICAgICAgID0gKDFMTCA8PCA1NSkgLSAxLAotICAgICAgICAubXVsdCAgICAgICAgICAgPSAwLAotICAgICAgICAuc2hpZnQgICAgICAgICAgPSAxMCwKICAgICAgICAgLmZsYWdzICAgICAgICAgID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC01Nyw5ICs1NSw3IEBACiB2b2lkIF9faW5pdCBzbl90aW1lcl9pbml0KHZvaWQpCiB7CiAJY2xvY2tzb3VyY2Vfc24yLmZzeXNfbW1pbyA9IFJUQ19DT1VOVEVSX0FERFI7Ci0JY2xvY2tzb3VyY2Vfc24yLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCwKLQkJCQkJCQljbG9ja3NvdXJjZV9zbjIuc2hpZnQpOwotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9zbjIpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9zbjIsIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CiAKIAlpYTY0X3VkZWxheSA9ICZpYTY0X3NuX3VkZWxheTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC94ZW4vaXJxX3hlbi5jIGIvYXJjaC9pYTY0L3hlbi9pcnFfeGVuLmMKaW5kZXggMTA4YmI4NS4uYjI3OWUxNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3hlbi9pcnFfeGVuLmMKKysrIGIvYXJjaC9pYTY0L3hlbi9pcnFfeGVuLmMKQEAgLTkyLDYgKzkyLDggQEAKIHN0YXRpYyBpbnQgeGVuX3NsYWJfcmVhZHk7CiAKICNpZmRlZiBDT05GSUdfU01QCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKwogLyogRHVtbXkgc3R1Yi4gVGhvdWdoIHdlIG1heSBjaGVjayBYRU5fUkVTQ0hFRFVMRV9WRUNUT1IgYmVmb3JlIF9fZG9fSVJRLAogICogaXQgZW5kcyB1cCB0byBpc3N1ZSBzZXZlcmFsIG1lbW9yeSBhY2Nlc3NlcyB1cG9uIHBlcmNwdSBkYXRhIGFuZAogICogdGh1cyBhZGRzIHVubmVjZXNzYXJ5IHRyYWZmaWMgdG8gb3RoZXIgcGF0aHMuCkBAIC05OSw3ICsxMDEsMTMgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdAogeGVuX2R1bW15X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogeworCXJldHVybiBJUlFfSEFORExFRDsKK30KIAorc3RhdGljIGlycXJldHVybl90Cit4ZW5fcmVzY2hlZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzY2hlZHVsZXJfaXBpKCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xMTAsNyArMTE4LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIHhlbl9yZXNjaGVkX2lycWFjdGlvbiA9IHsKLQkuaGFuZGxlciA9CXhlbl9kdW1teV9oYW5kbGVyLAorCS5oYW5kbGVyID0JeGVuX3Jlc2NoZWRfaGFuZGxlciwKIAkuZmxhZ3MgPQlJUlFGX0RJU0FCTEVELAogCS5uYW1lID0JCSJyZXNjaGVkIgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMgYi9hcmNoL20zMnIva2VybmVsL3NtcC5jCmluZGV4IDMxY2VmMjAuLmZjMTBiMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zbXAuYwpAQCAtMTIyLDggKzEyMiw2IEBACiAgKgogICogRGVzY3JpcHRpb246ICBUaGlzIHJvdXRpbmUgZXhlY3V0ZXMgb24gQ1BVIHdoaWNoIHJlY2VpdmVkCiAgKiAgICAgICAgICAgICAgICdSRVNDSEVEVUxFX0lQSScuCi0gKiAgICAgICAgICAgICAgIFJlc2NoZWR1bGluZyBpcyBwcm9jZXNzZWQgYXQgdGhlIGV4aXQgb2YgaW50ZXJydXB0Ci0gKiAgICAgICAgICAgICAgIG9wZXJhdGlvbi4KICAqCiAgKiBCb3JuIG9uIERhdGU6IDIwMDIuMDIuMDUKICAqCkBAIC0xMzgsNyArMTM2LDcgQEAKICAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogdm9pZCBzbXBfcmVzY2hlZHVsZV9pbnRlcnJ1cHQodm9pZCkKIHsKLQkvKiBub3RoaW5nIHRvIGRvICovCisJc2NoZWR1bGVyX2lwaSgpOwogfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYyBiL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMKaW5kZXggYjk5NTUxMy4uOTUwMjJiMCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYworKysgYi9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jCkBAIC0zNiwxMyArMzYsMTAgQEAKIAogLyogSG9vayBmb3IgTUlESSBzZXJpYWwgZHJpdmVyICovCiB2b2lkICgqYXRhcmlfTUlESV9pbnRlcnJ1cHRfaG9vaykgKHZvaWQpOwotLyogSG9vayBmb3IgbW91c2UgZHJpdmVyICovCi12b2lkICgqYXRhcmlfbW91c2VfaW50ZXJydXB0X2hvb2spIChjaGFyICopOwogLyogSG9vayBmb3Iga2V5Ym9hcmQgaW5wdXRkZXYgIGRyaXZlciAqLwogdm9pZCAoKmF0YXJpX2lucHV0X2tleWJvYXJkX2ludGVycnVwdF9ob29rKSAodW5zaWduZWQgY2hhciwgY2hhcik7CiAvKiBIb29rIGZvciBtb3VzZSBpbnB1dGRldiAgZHJpdmVyICovCiB2b2lkICgqYXRhcmlfaW5wdXRfbW91c2VfaW50ZXJydXB0X2hvb2spIChjaGFyICopOwotRVhQT1JUX1NZTUJPTChhdGFyaV9tb3VzZV9pbnRlcnJ1cHRfaG9vayk7CiBFWFBPUlRfU1lNQk9MKGF0YXJpX2lucHV0X2tleWJvYXJkX2ludGVycnVwdF9ob29rKTsKIEVYUE9SVF9TWU1CT0woYXRhcmlfaW5wdXRfbW91c2VfaW50ZXJydXB0X2hvb2spOwogCkBAIC0yNjMsOCArMjYwLDggQEAKIAkJCWtiX3N0YXRlLmJ1ZltrYl9zdGF0ZS5sZW4rK10gPSBzY2FuY29kZTsKIAkJCWlmIChrYl9zdGF0ZS5sZW4gPT0gMykgewogCQkJCWtiX3N0YXRlLnN0YXRlID0gS0VZQk9BUkQ7Ci0JCQkJaWYgKGF0YXJpX21vdXNlX2ludGVycnVwdF9ob29rKQotCQkJCQlhdGFyaV9tb3VzZV9pbnRlcnJ1cHRfaG9vayhrYl9zdGF0ZS5idWYpOworCQkJCWlmIChhdGFyaV9pbnB1dF9tb3VzZV9pbnRlcnJ1cHRfaG9vaykKKwkJCQkJYXRhcmlfaW5wdXRfbW91c2VfaW50ZXJydXB0X2hvb2soa2Jfc3RhdGUuYnVmKTsKIAkJCX0KIAkJCWJyZWFrOwogCkBAIC01NzUsNyArNTcyLDcgQEAKIAlrYl9zdGF0ZS5sZW4gPSAwOwogCiAJZXJyb3IgPSByZXF1ZXN0X2lycShJUlFfTUZQX0FDSUEsIGF0YXJpX2tleWJvYXJkX2ludGVycnVwdCwKLQkJCSAgICBJUlFfVFlQRV9TTE9XLCAia2V5Ym9hcmQvbW91c2UvTUlESSIsCisJCQkgICAgSVJRX1RZUEVfU0xPVywgImtleWJvYXJkLG1vdXNlLE1JREkiLAogCQkJICAgIGF0YXJpX2tleWJvYXJkX2ludGVycnVwdCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvYXRhcmkvc3RkbWEuYyBiL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCmluZGV4IDYwNDMyOWYuLmRkYmY0M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCisrKyBiL2FyY2gvbTY4ay9hdGFyaS9zdGRtYS5jCkBAIC0xODAsNyArMTgwLDcgQEAKIHsKIAlzdGRtYV9pc3IgPSBOVUxMOwogCWlmIChyZXF1ZXN0X2lycShJUlFfTUZQX0ZEQywgc3RkbWFfaW50LCBJUlFfVFlQRV9TTE9XIHwgSVJRRl9TSEFSRUQsCi0JCQkiU1QtRE1BOiBmbG9wcHkvQUNTSS9JREUvRmFsY29uLVNDU0kiLCBzdGRtYV9pbnQpKQorCQkJIlNULURNQSBmbG9wcHksQUNTSSxJREUsRmFsY29uLVNDU0kiLCBzdGRtYV9pbnQpKQogCQlwcl9lcnIoIkNvdWxkbid0IHJlZ2lzdGVyIFNULURNQSBpbnRlcnJ1cHRcbiIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlrYi5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2F0YXJpa2IuaAppbmRleCA1NDZlN2RhLi42OGYzNjIyIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYXRhcmlrYi5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9hdGFyaWtiLmgKQEAgLTM0LDggKzM0LDYgQEAKIAogLyogSG9vayBmb3IgTUlESSBzZXJpYWwgZHJpdmVyICovCiBleHRlcm4gdm9pZCAoKmF0YXJpX01JRElfaW50ZXJydXB0X2hvb2spICh2b2lkKTsKLS8qIEhvb2sgZm9yIG1vdXNlIGRyaXZlciAqLwotZXh0ZXJuIHZvaWQgKCphdGFyaV9tb3VzZV9pbnRlcnJ1cHRfaG9vaykgKGNoYXIgKik7CiAvKiBIb29rIGZvciBrZXlib2FyZCBpbnB1dGRldiAgZHJpdmVyICovCiBleHRlcm4gdm9pZCAoKmF0YXJpX2lucHV0X2tleWJvYXJkX2ludGVycnVwdF9ob29rKSAodW5zaWduZWQgY2hhciwgY2hhcik7CiAvKiBIb29rIGZvciBtb3VzZSBpbnB1dGRldiAgZHJpdmVyICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vYml0b3BzX21tLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vYml0b3BzX21tLmgKaW5kZXggOWQ2OWY2ZS4uZTkwMjBmOCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2JpdG9wc19tbS5oCisrKyBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9iaXRvcHNfbW0uaApAQCAtMTgxLDE0ICsxODEsMTUgQEAKIHsKIAljb25zdCB1bnNpZ25lZCBsb25nICpwID0gdmFkZHI7CiAJaW50IHJlcyA9IDMyOworCXVuc2lnbmVkIGludCB3b3JkczsKIAl1bnNpZ25lZCBsb25nIG51bTsKIAogCWlmICghc2l6ZSkKIAkJcmV0dXJuIDA7CiAKLQlzaXplID0gKHNpemUgKyAzMSkgPj4gNTsKKwl3b3JkcyA9IChzaXplICsgMzEpID4+IDU7CiAJd2hpbGUgKCEobnVtID0gfipwKyspKSB7Ci0JCWlmICghLS1zaXplKQorCQlpZiAoIS0td29yZHMpCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTE5Niw3ICsxOTcsOCBAQAogCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7CiAJcmVzIF49IDMxOwogb3V0OgotCXJldHVybiAoKGxvbmcpcCAtIChsb25nKXZhZGRyIC0gNCkgKiA4ICsgcmVzOworCXJlcyArPSAoKGxvbmcpcCAtIChsb25nKXZhZGRyIC0gNCkgKiA4OworCXJldHVybiByZXMgPCBzaXplID8gcmVzIDogc2l6ZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X3plcm9fYml0KGNvbnN0IHVuc2lnbmVkIGxvbmcgKnZhZGRyLCBpbnQgc2l6ZSwKQEAgLTIxNSwyNyArMjE3LDMyIEBACiAJCS8qIExvb2sgZm9yIHplcm8gaW4gZmlyc3QgbG9uZ3dvcmQgKi8KIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmZmbyAlMXsjMCwjMH0sJTAiCiAJCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7Ci0JCWlmIChyZXMgPCAzMikKLQkJCXJldHVybiBvZmZzZXQgKyAocmVzIF4gMzEpOworCQlpZiAocmVzIDwgMzIpIHsKKwkJCW9mZnNldCArPSByZXMgXiAzMTsKKwkJCXJldHVybiBvZmZzZXQgPCBzaXplID8gb2Zmc2V0IDogc2l6ZTsKKwkJfQogCQlvZmZzZXQgKz0gMzI7CisKKwkJaWYgKG9mZnNldCA+PSBzaXplKQorCQkJcmV0dXJuIHNpemU7CiAJfQogCS8qIE5vIHplcm8geWV0LCBzZWFyY2ggcmVtYWluaW5nIGZ1bGwgYnl0ZXMgZm9yIGEgemVybyAqLwotCXJlcyA9IGZpbmRfZmlyc3RfemVyb19iaXQocCwgc2l6ZSAtICgobG9uZylwIC0gKGxvbmcpdmFkZHIpICogOCk7Ci0JcmV0dXJuIG9mZnNldCArIHJlczsKKwlyZXR1cm4gb2Zmc2V0ICsgZmluZF9maXJzdF96ZXJvX2JpdChwLCBzaXplIC0gb2Zmc2V0KTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZmluZF9maXJzdF9iaXQoY29uc3QgdW5zaWduZWQgbG9uZyAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCiB7CiAJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHZhZGRyOwogCWludCByZXMgPSAzMjsKKwl1bnNpZ25lZCBpbnQgd29yZHM7CiAJdW5zaWduZWQgbG9uZyBudW07CiAKIAlpZiAoIXNpemUpCiAJCXJldHVybiAwOwogCi0Jc2l6ZSA9IChzaXplICsgMzEpID4+IDU7CisJd29yZHMgPSAoc2l6ZSArIDMxKSA+PiA1OwogCXdoaWxlICghKG51bSA9ICpwKyspKSB7Ci0JCWlmICghLS1zaXplKQorCQlpZiAoIS0td29yZHMpCiAJCQlnb3RvIG91dDsKIAl9CiAKQEAgLTI0Myw3ICsyNTAsOCBAQAogCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7CiAJcmVzIF49IDMxOwogb3V0OgotCXJldHVybiAoKGxvbmcpcCAtIChsb25nKXZhZGRyIC0gNCkgKiA4ICsgcmVzOworCXJlcyArPSAoKGxvbmcpcCAtIChsb25nKXZhZGRyIC0gNCkgKiA4OworCXJldHVybiByZXMgPCBzaXplID8gcmVzIDogc2l6ZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2JpdChjb25zdCB1bnNpZ25lZCBsb25nICp2YWRkciwgaW50IHNpemUsCkBAIC0yNjIsMTMgKzI3MCwxNyBAQAogCQkvKiBMb29rIGZvciBvbmUgaW4gZmlyc3QgbG9uZ3dvcmQgKi8KIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJiZmZmbyAlMXsjMCwjMH0sJTAiCiAJCQkJICAgICAgOiAiPWQiIChyZXMpIDogImQiIChudW0gJiAtbnVtKSk7Ci0JCWlmIChyZXMgPCAzMikKLQkJCXJldHVybiBvZmZzZXQgKyAocmVzIF4gMzEpOworCQlpZiAocmVzIDwgMzIpIHsKKwkJCW9mZnNldCArPSByZXMgXiAzMTsKKwkJCXJldHVybiBvZmZzZXQgPCBzaXplID8gb2Zmc2V0IDogc2l6ZTsKKwkJfQogCQlvZmZzZXQgKz0gMzI7CisKKwkJaWYgKG9mZnNldCA+PSBzaXplKQorCQkJcmV0dXJuIHNpemU7CiAJfQogCS8qIE5vIG9uZSB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCBieXRlcyBmb3IgYSBvbmUgKi8KLQlyZXMgPSBmaW5kX2ZpcnN0X2JpdChwLCBzaXplIC0gKChsb25nKXAgLSAobG9uZyl2YWRkcikgKiA4KTsKLQlyZXR1cm4gb2Zmc2V0ICsgcmVzOworCXJldHVybiBvZmZzZXQgKyBmaW5kX2ZpcnN0X2JpdChwLCBzaXplIC0gb2Zmc2V0KTsKIH0KIAogLyoKQEAgLTM2NiwyMyArMzc4LDI1IEBACiBzdGF0aWMgaW5saW5lIGludCBmaW5kX2ZpcnN0X3plcm9fYml0X2xlKGNvbnN0IHZvaWQgKnZhZGRyLCB1bnNpZ25lZCBzaXplKQogewogCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnAgPSB2YWRkciwgKmFkZHIgPSB2YWRkcjsKLQlpbnQgcmVzOworCWludCByZXMgPSAwOworCXVuc2lnbmVkIGludCB3b3JkczsKIAogCWlmICghc2l6ZSkKIAkJcmV0dXJuIDA7CiAKLQlzaXplID0gKHNpemUgPj4gNSkgKyAoKHNpemUgJiAzMSkgPiAwKTsKLQl3aGlsZSAoKnArKyA9PSB+MFVMKQotCXsKLQkJaWYgKC0tc2l6ZSA9PSAwKQotCQkJcmV0dXJuIChwIC0gYWRkcikgPDwgNTsKKwl3b3JkcyA9IChzaXplID4+IDUpICsgKChzaXplICYgMzEpID4gMCk7CisJd2hpbGUgKCpwKysgPT0gfjBVTCkgeworCQlpZiAoLS13b3JkcyA9PSAwKQorCQkJZ290byBvdXQ7CiAJfQogCiAJLS1wOwogCWZvciAocmVzID0gMDsgcmVzIDwgMzI7IHJlcysrKQogCQlpZiAoIXRlc3RfYml0X2xlKHJlcywgcCkpCiAJCQlicmVhazsKLQlyZXR1cm4gKHAgLSBhZGRyKSAqIDMyICsgcmVzOworb3V0OgorCXJlcyArPSAocCAtIGFkZHIpICogMzI7CisJcmV0dXJuIHJlcyA8IHNpemUgPyByZXMgOiBzaXplOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X3plcm9fYml0X2xlKGNvbnN0IHZvaWQgKmFkZHIsCkBAIC00MDAsMTAgKzQxNCwxNSBAQAogCQlvZmZzZXQgLT0gYml0OwogCQkvKiBMb29rIGZvciB6ZXJvIGluIGZpcnN0IGxvbmd3b3JkICovCiAJCWZvciAocmVzID0gYml0OyByZXMgPCAzMjsgcmVzKyspCi0JCQlpZiAoIXRlc3RfYml0X2xlKHJlcywgcCkpCi0JCQkJcmV0dXJuIG9mZnNldCArIHJlczsKKwkJCWlmICghdGVzdF9iaXRfbGUocmVzLCBwKSkgeworCQkJCW9mZnNldCArPSByZXM7CisJCQkJcmV0dXJuIG9mZnNldCA8IHNpemUgPyBvZmZzZXQgOiBzaXplOworCQkJfQogCQlwKys7CiAJCW9mZnNldCArPSAzMjsKKworCQlpZiAob2Zmc2V0ID49IHNpemUpCisJCQlyZXR1cm4gc2l6ZTsKIAl9CiAJLyogTm8gemVybyB5ZXQsIHNlYXJjaCByZW1haW5pbmcgZnVsbCBieXRlcyBmb3IgYSB6ZXJvICovCiAJcmV0dXJuIG9mZnNldCArIGZpbmRfZmlyc3RfemVyb19iaXRfbGUocCwgc2l6ZSAtIG9mZnNldCk7CkBAIC00MTIsMjIgKzQzMSwyNSBAQAogc3RhdGljIGlubGluZSBpbnQgZmluZF9maXJzdF9iaXRfbGUoY29uc3Qgdm9pZCAqdmFkZHIsIHVuc2lnbmVkIHNpemUpCiB7CiAJY29uc3QgdW5zaWduZWQgbG9uZyAqcCA9IHZhZGRyLCAqYWRkciA9IHZhZGRyOwotCWludCByZXM7CisJaW50IHJlcyA9IDA7CisJdW5zaWduZWQgaW50IHdvcmRzOwogCiAJaWYgKCFzaXplKQogCQlyZXR1cm4gMDsKIAotCXNpemUgPSAoc2l6ZSA+PiA1KSArICgoc2l6ZSAmIDMxKSA+IDApOworCXdvcmRzID0gKHNpemUgPj4gNSkgKyAoKHNpemUgJiAzMSkgPiAwKTsKIAl3aGlsZSAoKnArKyA9PSAwVUwpIHsKLQkJaWYgKC0tc2l6ZSA9PSAwKQotCQkJcmV0dXJuIChwIC0gYWRkcikgPDwgNTsKKwkJaWYgKC0td29yZHMgPT0gMCkKKwkJCWdvdG8gb3V0OwogCX0KIAogCS0tcDsKIAlmb3IgKHJlcyA9IDA7IHJlcyA8IDMyOyByZXMrKykKIAkJaWYgKHRlc3RfYml0X2xlKHJlcywgcCkpCiAJCQlicmVhazsKLQlyZXR1cm4gKHAgLSBhZGRyKSAqIDMyICsgcmVzOworb3V0OgorCXJlcyArPSAocCAtIGFkZHIpICogMzI7CisJcmV0dXJuIHJlcyA8IHNpemUgPyByZXMgOiBzaXplOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZmluZF9uZXh0X2JpdF9sZShjb25zdCB2b2lkICphZGRyLApAQCAtNDQ1LDEwICs0NjcsMTUgQEAKIAkJb2Zmc2V0IC09IGJpdDsKIAkJLyogTG9vayBmb3Igb25lIGluIGZpcnN0IGxvbmd3b3JkICovCiAJCWZvciAocmVzID0gYml0OyByZXMgPCAzMjsgcmVzKyspCi0JCQlpZiAodGVzdF9iaXRfbGUocmVzLCBwKSkKLQkJCQlyZXR1cm4gb2Zmc2V0ICsgcmVzOworCQkJaWYgKHRlc3RfYml0X2xlKHJlcywgcCkpIHsKKwkJCQlvZmZzZXQgKz0gcmVzOworCQkJCXJldHVybiBvZmZzZXQgPCBzaXplID8gb2Zmc2V0IDogc2l6ZTsKKwkJCX0KIAkJcCsrOwogCQlvZmZzZXQgKz0gMzI7CisKKwkJaWYgKG9mZnNldCA+PSBzaXplKQorCQkJcmV0dXJuIHNpemU7CiAJfQogCS8qIE5vIHNldCBiaXQgeWV0LCBzZWFyY2ggcmVtYWluaW5nIGZ1bGwgYnl0ZXMgZm9yIGEgc2V0IGJpdCAqLwogCXJldHVybiBvZmZzZXQgKyBmaW5kX2ZpcnN0X2JpdF9sZShwLCBzaXplIC0gb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCAyOWUxNzkwLi5mM2I2NDlkIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIF9fTlJfbWtub2QJCSAxNAogI2RlZmluZSBfX05SX2NobW9kCQkgMTUKICNkZWZpbmUgX19OUl9jaG93bgkJIDE2Ci0jZGVmaW5lIF9fTlJfYnJlYWsJCSAxNworLyojZGVmaW5lIF9fTlJfYnJlYWsJCSAxNyovCiAjZGVmaW5lIF9fTlJfb2xkc3RhdAkJIDE4CiAjZGVmaW5lIF9fTlJfbHNlZWsJCSAxOQogI2RlZmluZSBfX05SX2dldHBpZAkJIDIwCkBAIC0zNiwxMSArMzYsMTEgQEAKICNkZWZpbmUgX19OUl9vbGRmc3RhdAkJIDI4CiAjZGVmaW5lIF9fTlJfcGF1c2UJCSAyOQogI2RlZmluZSBfX05SX3V0aW1lCQkgMzAKLSNkZWZpbmUgX19OUl9zdHR5CQkgMzEKLSNkZWZpbmUgX19OUl9ndHR5CQkgMzIKKy8qI2RlZmluZSBfX05SX3N0dHkJCSAzMSovCisvKiNkZWZpbmUgX19OUl9ndHR5CQkgMzIqLwogI2RlZmluZSBfX05SX2FjY2VzcwkJIDMzCiAjZGVmaW5lIF9fTlJfbmljZQkJIDM0Ci0jZGVmaW5lIF9fTlJfZnRpbWUJCSAzNQorLyojZGVmaW5lIF9fTlJfZnRpbWUJCSAzNSovCiAjZGVmaW5lIF9fTlJfc3luYwkJIDM2CiAjZGVmaW5lIF9fTlJfa2lsbAkJIDM3CiAjZGVmaW5lIF9fTlJfcmVuYW1lCQkgMzgKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgX19OUl9kdXAJCSA0MQogI2RlZmluZSBfX05SX3BpcGUJCSA0MgogI2RlZmluZSBfX05SX3RpbWVzCQkgNDMKLSNkZWZpbmUgX19OUl9wcm9mCQkgNDQKKy8qI2RlZmluZSBfX05SX3Byb2YJCSA0NCovCiAjZGVmaW5lIF9fTlJfYnJrCQkgNDUKICNkZWZpbmUgX19OUl9zZXRnaWQJCSA0NgogI2RlZmluZSBfX05SX2dldGdpZAkJIDQ3CkBAIC01OCwxMyArNTgsMTMgQEAKICNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKICNkZWZpbmUgX19OUl9hY2N0CQkgNTEKICNkZWZpbmUgX19OUl91bW91bnQyCQkgNTIKLSNkZWZpbmUgX19OUl9sb2NrCQkgNTMKKy8qI2RlZmluZSBfX05SX2xvY2sJCSA1MyovCiAjZGVmaW5lIF9fTlJfaW9jdGwJCSA1NAogI2RlZmluZSBfX05SX2ZjbnRsCQkgNTUKLSNkZWZpbmUgX19OUl9tcHgJCSA1NgorLyojZGVmaW5lIF9fTlJfbXB4CQkgNTYqLwogI2RlZmluZSBfX05SX3NldHBnaWQJCSA1NwotI2RlZmluZSBfX05SX3VsaW1pdAkJIDU4Ci0jZGVmaW5lIF9fTlJfb2xkb2xkdW5hbWUJIDU5CisvKiNkZWZpbmUgX19OUl91bGltaXQJCSA1OCovCisvKiNkZWZpbmUgX19OUl9vbGRvbGR1bmFtZQkgNTkqLwogI2RlZmluZSBfX05SX3VtYXNrCQkgNjAKICNkZWZpbmUgX19OUl9jaHJvb3QJCSA2MQogI2RlZmluZSBfX05SX3VzdGF0CQkgNjIKQEAgLTEwMywxMCArMTAzLDEwIEBACiAjZGVmaW5lIF9fTlJfZmNob3duCQkgOTUKICNkZWZpbmUgX19OUl9nZXRwcmlvcml0eQkgOTYKICNkZWZpbmUgX19OUl9zZXRwcmlvcml0eQkgOTcKLSNkZWZpbmUgX19OUl9wcm9maWwJCSA5OAorLyojZGVmaW5lIF9fTlJfcHJvZmlsCQkgOTgqLwogI2RlZmluZSBfX05SX3N0YXRmcwkJIDk5CiAjZGVmaW5lIF9fTlJfZnN0YXRmcwkJMTAwCi0jZGVmaW5lIF9fTlJfaW9wZXJtCQkxMDEKKy8qI2RlZmluZSBfX05SX2lvcGVybQkJMTAxKi8KICNkZWZpbmUgX19OUl9zb2NrZXRjYWxsCQkxMDIKICNkZWZpbmUgX19OUl9zeXNsb2cJCTEwMwogI2RlZmluZSBfX05SX3NldGl0aW1lcgkJMTA0CkBAIC0xMTQsMTEgKzExNCwxMSBAQAogI2RlZmluZSBfX05SX3N0YXQJCTEwNgogI2RlZmluZSBfX05SX2xzdGF0CQkxMDcKICNkZWZpbmUgX19OUl9mc3RhdAkJMTA4Ci0jZGVmaW5lIF9fTlJfb2xkdW5hbWUJCTEwOQotI2RlZmluZSBfX05SX2lvcGwJCS8qIDExMCAqLyBub3Qgc3VwcG9ydGVkCisvKiNkZWZpbmUgX19OUl9vbGR1bmFtZQkJMTA5Ki8KKy8qI2RlZmluZSBfX05SX2lvcGwJCTExMCovIC8qIG5vdCBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgX19OUl92aGFuZ3VwCQkxMTEKLSNkZWZpbmUgX19OUl9pZGxlCQkvKiAxMTIgKi8gT2Jzb2xldGUKLSNkZWZpbmUgX19OUl92bTg2CQkvKiAxMTMgKi8gbm90IHN1cHBvcnRlZAorLyojZGVmaW5lIF9fTlJfaWRsZQkJMTEyKi8gLyogT2Jzb2xldGUgKi8KKy8qI2RlZmluZSBfX05SX3ZtODYJCTExMyovIC8qIG5vdCBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgX19OUl93YWl0NAkJMTE0CiAjZGVmaW5lIF9fTlJfc3dhcG9mZgkJMTE1CiAjZGVmaW5lIF9fTlJfc3lzaW5mbwkJMTE2CkBAIC0xMzIsMTcgKzEzMiwxNyBAQAogI2RlZmluZSBfX05SX2FkanRpbWV4CQkxMjQKICNkZWZpbmUgX19OUl9tcHJvdGVjdAkJMTI1CiAjZGVmaW5lIF9fTlJfc2lncHJvY21hc2sJMTI2Ci0jZGVmaW5lIF9fTlJfY3JlYXRlX21vZHVsZQkxMjcKKy8qI2RlZmluZSBfX05SX2NyZWF0ZV9tb2R1bGUJMTI3Ki8KICNkZWZpbmUgX19OUl9pbml0X21vZHVsZQkxMjgKICNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlCTEyOQotI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkxMzAKKy8qI2RlZmluZSBfX05SX2dldF9rZXJuZWxfc3ltcwkxMzAqLwogI2RlZmluZSBfX05SX3F1b3RhY3RsCQkxMzEKICNkZWZpbmUgX19OUl9nZXRwZ2lkCQkxMzIKICNkZWZpbmUgX19OUl9mY2hkaXIJCTEzMwogI2RlZmluZSBfX05SX2JkZmx1c2gJCTEzNAogI2RlZmluZSBfX05SX3N5c2ZzCQkxMzUKICNkZWZpbmUgX19OUl9wZXJzb25hbGl0eQkxMzYKLSNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcgLyogU3lzY2FsbCBmb3IgQW5kcmV3IEZpbGUgU3lzdGVtICovCisvKiNkZWZpbmUgX19OUl9hZnNfc3lzY2FsbAkxMzcqLyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KICNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQogI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MApAQCAtMTcyLDcgKzE3Miw3IEBACiAjZGVmaW5lIF9fTlJfc2V0cmVzdWlkCQkxNjQKICNkZWZpbmUgX19OUl9nZXRyZXN1aWQJCTE2NQogI2RlZmluZSBfX05SX2dldHBhZ2VzaXplCTE2NgotI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcKKy8qI2RlZmluZSBfX05SX3F1ZXJ5X21vZHVsZQkxNjcqLwogI2RlZmluZSBfX05SX3BvbGwJCTE2OAogI2RlZmluZSBfX05SX25mc3NlcnZjdGwJCTE2OQogI2RlZmluZSBfX05SX3NldHJlc2dpZAkJMTcwCkBAIC0xOTMsOCArMTkzLDggQEAKICNkZWZpbmUgX19OUl9jYXBzZXQJCTE4NQogI2RlZmluZSBfX05SX3NpZ2FsdHN0YWNrCTE4NgogI2RlZmluZSBfX05SX3NlbmRmaWxlCQkxODcKLSNkZWZpbmUgX19OUl9nZXRwbXNnCQkxODgJLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCi0jZGVmaW5lIF9fTlJfcHV0cG1zZwkJMTg5CS8qIHNvbWUgcGVvcGxlIGFjdHVhbGx5IHdhbnQgc3RyZWFtcyAqLworLyojZGVmaW5lIF9fTlJfZ2V0cG1zZwkJMTg4Ki8JLyogc29tZSBwZW9wbGUgYWN0dWFsbHkgd2FudCBzdHJlYW1zICovCisvKiNkZWZpbmUgX19OUl9wdXRwbXNnCQkxODkqLwkvKiBzb21lIHBlb3BsZSBhY3R1YWxseSB3YW50IHN0cmVhbXMgKi8KICNkZWZpbmUgX19OUl92Zm9yawkJMTkwCiAjZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCiAjZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgpAQCAtMjIzLDYgKzIyMyw4IEBACiAjZGVmaW5lIF9fTlJfc2V0ZnN1aWQzMgkJMjE1CiAjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMgkJMjE2CiAjZGVmaW5lIF9fTlJfcGl2b3Rfcm9vdAkJMjE3CisvKiAyMTgqLworLyogMjE5Ki8KICNkZWZpbmUgX19OUl9nZXRkZW50czY0CQkyMjAKICNkZWZpbmUgX19OUl9nZXR0aWQJCTIyMQogI2RlZmluZSBfX05SX3RraWxsCQkyMjIKQEAgLTI4MSw3ICsyODMsNyBAQAogI2RlZmluZSBfX05SX21xX25vdGlmeQkJMjc1CiAjZGVmaW5lIF9fTlJfbXFfZ2V0c2V0YXR0cgkyNzYKICNkZWZpbmUgX19OUl93YWl0aWQJCTI3NwotI2RlZmluZSBfX05SX3ZzZXJ2ZXIJCTI3OAorLyojZGVmaW5lIF9fTlJfdnNlcnZlcgkJMjc4Ki8KICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyNzkKICNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODAKICNkZWZpbmUgX19OUl9rZXljdGwJCTI4MQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZV9tbSBiL2FyY2gvbTY4ay9rZXJuZWwvTWFrZWZpbGVfbW0KaW5kZXggNTVkNWQ2Yi4uYWNlZDY3OCAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9NYWtlZmlsZV9tbQorKysgYi9hcmNoL202OGsva2VybmVsL01ha2VmaWxlX21tCkBAIC0xMCw3ICsxMCw3IEBACiBleHRyYS15CSs9IHZtbGludXgubGRzCiAKIG9iai15CTo9IGVudHJ5Lm8gcHJvY2Vzcy5vIHRyYXBzLm8gaW50cy5vIHNpZ25hbC5vIHB0cmFjZS5vIG1vZHVsZS5vIFwKLQkgICBzeXNfbTY4ay5vIHRpbWUubyBzZXR1cC5vIG02OGtfa3N5bXMubyBkZXZyZXMubworCSAgIHN5c19tNjhrLm8gdGltZS5vIHNldHVwLm8gbTY4a19rc3ltcy5vIGRldnJlcy5vIHN5c2NhbGx0YWJsZS5vCiAKIGRldnJlcy15ID0gLi4vLi4vLi4va2VybmVsL2lycS9kZXZyZXMubwogCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2VudHJ5X21tLlMgYi9hcmNoL202OGsva2VybmVsL2VudHJ5X21tLlMKaW5kZXggMTM1OWVlNi4uYmQwZWMwNSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeV9tbS5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnlfbW0uUwpAQCAtNDA3LDM1MSArNDA3LDMgQEAKIAogCXJ0cwogCi0uZGF0YQotQUxJR04KLXN5c19jYWxsX3RhYmxlOgotCS5sb25nIHN5c19yZXN0YXJ0X3N5c2NhbGwJLyogMCAtIG9sZCAic2V0dXAoKSIgc3lzdGVtIGNhbGwsIHVzZWQgZm9yIHJlc3RhcnRpbmcgKi8KLQkubG9uZyBzeXNfZXhpdAotCS5sb25nIHN5c19mb3JrCi0JLmxvbmcgc3lzX3JlYWQKLQkubG9uZyBzeXNfd3JpdGUKLQkubG9uZyBzeXNfb3BlbgkJLyogNSAqLwotCS5sb25nIHN5c19jbG9zZQotCS5sb25nIHN5c193YWl0cGlkCi0JLmxvbmcgc3lzX2NyZWF0Ci0JLmxvbmcgc3lzX2xpbmsKLQkubG9uZyBzeXNfdW5saW5rCS8qIDEwICovCi0JLmxvbmcgc3lzX2V4ZWN2ZQotCS5sb25nIHN5c19jaGRpcgotCS5sb25nIHN5c190aW1lCi0JLmxvbmcgc3lzX21rbm9kCi0JLmxvbmcgc3lzX2NobW9kCQkvKiAxNSAqLwotCS5sb25nIHN5c19jaG93bjE2Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3N0YXQKLQkubG9uZyBzeXNfbHNlZWsKLQkubG9uZyBzeXNfZ2V0cGlkCS8qIDIwICovCi0JLmxvbmcgc3lzX21vdW50Ci0JLmxvbmcgc3lzX29sZHVtb3VudAotCS5sb25nIHN5c19zZXR1aWQxNgotCS5sb25nIHN5c19nZXR1aWQxNgotCS5sb25nIHN5c19zdGltZQkJLyogMjUgKi8KLQkubG9uZyBzeXNfcHRyYWNlCi0JLmxvbmcgc3lzX2FsYXJtCi0JLmxvbmcgc3lzX2ZzdGF0Ci0JLmxvbmcgc3lzX3BhdXNlCi0JLmxvbmcgc3lzX3V0aW1lCQkvKiAzMCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCBzdHR5IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfYWNjZXNzCi0JLmxvbmcgc3lzX25pY2UKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAzNSAqLwkvKiBvbGQgZnRpbWUgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfc3luYwotCS5sb25nIHN5c19raWxsCi0JLmxvbmcgc3lzX3JlbmFtZQotCS5sb25nIHN5c19ta2RpcgotCS5sb25nIHN5c19ybWRpcgkJLyogNDAgKi8KLQkubG9uZyBzeXNfZHVwCi0JLmxvbmcgc3lzX3BpcGUKLQkubG9uZyBzeXNfdGltZXMKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBvbGQgcHJvZiBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19icmsJCS8qIDQ1ICovCi0JLmxvbmcgc3lzX3NldGdpZDE2Ci0JLmxvbmcgc3lzX2dldGdpZDE2Ci0JLmxvbmcgc3lzX3NpZ25hbAotCS5sb25nIHN5c19nZXRldWlkMTYKLQkubG9uZyBzeXNfZ2V0ZWdpZDE2CS8qIDUwICovCi0JLmxvbmcgc3lzX2FjY3QKLQkubG9uZyBzeXNfdW1vdW50CQkJCS8qIHJlY3ljbGVkIG5ldmVyIHVzZWQgcGh5cygpICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIGxvY2sgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfaW9jdGwKLQkubG9uZyBzeXNfZmNudGwJCS8qIDU1ICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIG1weCBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19zZXRwZ2lkCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogb2xkIHVsaW1pdCBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCi0JLmxvbmcgc3lzX3VtYXNrCQkvKiA2MCAqLwotCS5sb25nIHN5c19jaHJvb3QKLQkubG9uZyBzeXNfdXN0YXQKLQkubG9uZyBzeXNfZHVwMgotCS5sb25nIHN5c19nZXRwcGlkCi0JLmxvbmcgc3lzX2dldHBncnAJLyogNjUgKi8KLQkubG9uZyBzeXNfc2V0c2lkCi0JLmxvbmcgc3lzX3NpZ2FjdGlvbgotCS5sb25nIHN5c19zZ2V0bWFzawotCS5sb25nIHN5c19zc2V0bWFzawotCS5sb25nIHN5c19zZXRyZXVpZDE2CS8qIDcwICovCi0JLmxvbmcgc3lzX3NldHJlZ2lkMTYKLQkubG9uZyBzeXNfc2lnc3VzcGVuZAotCS5sb25nIHN5c19zaWdwZW5kaW5nCi0JLmxvbmcgc3lzX3NldGhvc3RuYW1lCi0JLmxvbmcgc3lzX3NldHJsaW1pdAkvKiA3NSAqLwotCS5sb25nIHN5c19vbGRfZ2V0cmxpbWl0Ci0JLmxvbmcgc3lzX2dldHJ1c2FnZQotCS5sb25nIHN5c19nZXR0aW1lb2ZkYXkKLQkubG9uZyBzeXNfc2V0dGltZW9mZGF5Ci0JLmxvbmcgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCi0JLmxvbmcgc3lzX3NldGdyb3VwczE2Ci0JLmxvbmcgc3lzX29sZF9zZWxlY3QKLQkubG9uZyBzeXNfc3ltbGluawotCS5sb25nIHN5c19sc3RhdAotCS5sb25nIHN5c19yZWFkbGluawkvKiA4NSAqLwotCS5sb25nIHN5c191c2VsaWIKLQkubG9uZyBzeXNfc3dhcG9uCi0JLmxvbmcgc3lzX3JlYm9vdAotCS5sb25nIHN5c19vbGRfcmVhZGRpcgotCS5sb25nIHN5c19vbGRfbW1hcAkvKiA5MCAqLwotCS5sb25nIHN5c19tdW5tYXAKLQkubG9uZyBzeXNfdHJ1bmNhdGUKLQkubG9uZyBzeXNfZnRydW5jYXRlCi0JLmxvbmcgc3lzX2ZjaG1vZAotCS5sb25nIHN5c19mY2hvd24xNgkvKiA5NSAqLwotCS5sb25nIHN5c19nZXRwcmlvcml0eQotCS5sb25nIHN5c19zZXRwcmlvcml0eQotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIG9sZCBwcm9maWwgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfc3RhdGZzCi0JLmxvbmcgc3lzX2ZzdGF0ZnMJLyogMTAwICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCQkJLyogaW9wZXJtIGZvciBpMzg2ICovCi0JLmxvbmcgc3lzX3NvY2tldGNhbGwKLQkubG9uZyBzeXNfc3lzbG9nCi0JLmxvbmcgc3lzX3NldGl0aW1lcgotCS5sb25nIHN5c19nZXRpdGltZXIJLyogMTA1ICovCi0JLmxvbmcgc3lzX25ld3N0YXQKLQkubG9uZyBzeXNfbmV3bHN0YXQKLQkubG9uZyBzeXNfbmV3ZnN0YXQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDExMCAqLwkvKiBpb3BsIGZvciBpMzg2ICovCi0JLmxvbmcgc3lzX3ZoYW5ndXAKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBvYnNvbGV0ZSBpZGxlKCkgc3lzY2FsbCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIHZtODZvbGQgZm9yIGkzODYgKi8KLQkubG9uZyBzeXNfd2FpdDQKLQkubG9uZyBzeXNfc3dhcG9mZgkvKiAxMTUgKi8KLQkubG9uZyBzeXNfc3lzaW5mbwotCS5sb25nIHN5c19pcGMKLQkubG9uZyBzeXNfZnN5bmMKLQkubG9uZyBzeXNfc2lncmV0dXJuCi0JLmxvbmcgc3lzX2Nsb25lCQkvKiAxMjAgKi8KLQkubG9uZyBzeXNfc2V0ZG9tYWlubmFtZQotCS5sb25nIHN5c19uZXd1bmFtZQotCS5sb25nIHN5c19jYWNoZWZsdXNoCQkJCS8qIG1vZGlmeV9sZHQgZm9yIGkzODYgKi8KLQkubG9uZyBzeXNfYWRqdGltZXgKLQkubG9uZyBzeXNfbXByb3RlY3QJLyogMTI1ICovCi0JLmxvbmcgc3lzX3NpZ3Byb2NtYXNrCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIG9sZCAiY3JlYXRlX21vZHVsZSIgKi8KLQkubG9uZyBzeXNfaW5pdF9tb2R1bGUKLQkubG9uZyBzeXNfZGVsZXRlX21vZHVsZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDEzMCAtIG9sZCAiZ2V0X2tlcm5lbF9zeW1zIiAqLwotCS5sb25nIHN5c19xdW90YWN0bAotCS5sb25nIHN5c19nZXRwZ2lkCi0JLmxvbmcgc3lzX2ZjaGRpcgotCS5sb25nIHN5c19iZGZsdXNoCi0JLmxvbmcgc3lzX3N5c2ZzCQkvKiAxMzUgKi8KLQkubG9uZyBzeXNfcGVyc29uYWxpdHkKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBmb3IgYWZzX3N5c2NhbGwgKi8KLQkubG9uZyBzeXNfc2V0ZnN1aWQxNgotCS5sb25nIHN5c19zZXRmc2dpZDE2Ci0JLmxvbmcgc3lzX2xsc2VlawkvKiAxNDAgKi8KLQkubG9uZyBzeXNfZ2V0ZGVudHMKLQkubG9uZyBzeXNfc2VsZWN0Ci0JLmxvbmcgc3lzX2Zsb2NrCi0JLmxvbmcgc3lzX21zeW5jCi0JLmxvbmcgc3lzX3JlYWR2CQkvKiAxNDUgKi8KLQkubG9uZyBzeXNfd3JpdGV2Ci0JLmxvbmcgc3lzX2dldHNpZAotCS5sb25nIHN5c19mZGF0YXN5bmMKLQkubG9uZyBzeXNfc3lzY3RsCi0JLmxvbmcgc3lzX21sb2NrCQkvKiAxNTAgKi8KLQkubG9uZyBzeXNfbXVubG9jawotCS5sb25nIHN5c19tbG9ja2FsbAotCS5sb25nIHN5c19tdW5sb2NrYWxsCi0JLmxvbmcgc3lzX3NjaGVkX3NldHBhcmFtCi0JLmxvbmcgc3lzX3NjaGVkX2dldHBhcmFtCS8qIDE1NSAqLwotCS5sb25nIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIKLQkubG9uZyBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyCi0JLmxvbmcgc3lzX3NjaGVkX3lpZWxkCi0JLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKLQkubG9uZyBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLyogMTYwICovCi0JLmxvbmcgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbAotCS5sb25nIHN5c19uYW5vc2xlZXAKLQkubG9uZyBzeXNfbXJlbWFwCi0JLmxvbmcgc3lzX3NldHJlc3VpZDE2Ci0JLmxvbmcgc3lzX2dldHJlc3VpZDE2CS8qIDE2NSAqLwotCS5sb25nIHN5c19nZXRwYWdlc2l6ZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBvbGQgc3lzX3F1ZXJ5X21vZHVsZSAqLwotCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25mc3NlcnZjdGwKLQkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJLyogMTcwICovCi0JLmxvbmcgc3lzX2dldHJlc2dpZDE2Ci0JLmxvbmcgc3lzX3ByY3RsCi0JLmxvbmcgc3lzX3J0X3NpZ3JldHVybgotCS5sb25nIHN5c19ydF9zaWdhY3Rpb24KLQkubG9uZyBzeXNfcnRfc2lncHJvY21hc2sJLyogMTc1ICovCi0JLmxvbmcgc3lzX3J0X3NpZ3BlbmRpbmcKLQkubG9uZyBzeXNfcnRfc2lndGltZWR3YWl0Ci0JLmxvbmcgc3lzX3J0X3NpZ3F1ZXVlaW5mbwotCS5sb25nIHN5c19ydF9zaWdzdXNwZW5kCi0JLmxvbmcgc3lzX3ByZWFkNjQJLyogMTgwICovCi0JLmxvbmcgc3lzX3B3cml0ZTY0Ci0JLmxvbmcgc3lzX2xjaG93bjE2OwotCS5sb25nIHN5c19nZXRjd2QKLQkubG9uZyBzeXNfY2FwZ2V0Ci0JLmxvbmcgc3lzX2NhcHNldAkvKiAxODUgKi8KLQkubG9uZyBzeXNfc2lnYWx0c3RhY2sKLQkubG9uZyBzeXNfc2VuZGZpbGUKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJCQkvKiBzdHJlYW1zMSAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkJCS8qIHN0cmVhbXMyICovCi0JLmxvbmcgc3lzX3Zmb3JrCQkvKiAxOTAgKi8KLQkubG9uZyBzeXNfZ2V0cmxpbWl0Ci0JLmxvbmcgc3lzX21tYXAyCi0JLmxvbmcgc3lzX3RydW5jYXRlNjQKLQkubG9uZyBzeXNfZnRydW5jYXRlNjQKLQkubG9uZyBzeXNfc3RhdDY0CS8qIDE5NSAqLwotCS5sb25nIHN5c19sc3RhdDY0Ci0JLmxvbmcgc3lzX2ZzdGF0NjQKLQkubG9uZyBzeXNfY2hvd24KLQkubG9uZyBzeXNfZ2V0dWlkCi0JLmxvbmcgc3lzX2dldGdpZAkvKiAyMDAgKi8KLQkubG9uZyBzeXNfZ2V0ZXVpZAotCS5sb25nIHN5c19nZXRlZ2lkCi0JLmxvbmcgc3lzX3NldHJldWlkCi0JLmxvbmcgc3lzX3NldHJlZ2lkCi0JLmxvbmcgc3lzX2dldGdyb3VwcwkvKiAyMDUgKi8KLQkubG9uZyBzeXNfc2V0Z3JvdXBzCi0JLmxvbmcgc3lzX2ZjaG93bgotCS5sb25nIHN5c19zZXRyZXN1aWQKLQkubG9uZyBzeXNfZ2V0cmVzdWlkCi0JLmxvbmcgc3lzX3NldHJlc2dpZAkvKiAyMTAgKi8KLQkubG9uZyBzeXNfZ2V0cmVzZ2lkCi0JLmxvbmcgc3lzX2xjaG93bgotCS5sb25nIHN5c19zZXR1aWQKLQkubG9uZyBzeXNfc2V0Z2lkCi0JLmxvbmcgc3lzX3NldGZzdWlkCS8qIDIxNSAqLwotCS5sb25nIHN5c19zZXRmc2dpZAotCS5sb25nIHN5c19waXZvdF9yb290Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAotCS5sb25nIHN5c19nZXRkZW50czY0CS8qIDIyMCAqLwotCS5sb25nIHN5c19nZXR0aWQKLQkubG9uZyBzeXNfdGtpbGwKLQkubG9uZyBzeXNfc2V0eGF0dHIKLQkubG9uZyBzeXNfbHNldHhhdHRyCi0JLmxvbmcgc3lzX2ZzZXR4YXR0cgkvKiAyMjUgKi8KLQkubG9uZyBzeXNfZ2V0eGF0dHIKLQkubG9uZyBzeXNfbGdldHhhdHRyCi0JLmxvbmcgc3lzX2ZnZXR4YXR0cgotCS5sb25nIHN5c19saXN0eGF0dHIKLQkubG9uZyBzeXNfbGxpc3R4YXR0cgkvKiAyMzAgKi8KLQkubG9uZyBzeXNfZmxpc3R4YXR0cgotCS5sb25nIHN5c19yZW1vdmV4YXR0cgotCS5sb25nIHN5c19scmVtb3ZleGF0dHIKLQkubG9uZyBzeXNfZnJlbW92ZXhhdHRyCi0JLmxvbmcgc3lzX2Z1dGV4CQkvKiAyMzUgKi8KLQkubG9uZyBzeXNfc2VuZGZpbGU2NAotCS5sb25nIHN5c19taW5jb3JlCi0JLmxvbmcgc3lzX21hZHZpc2UKLQkubG9uZyBzeXNfZmNudGw2NAotCS5sb25nIHN5c19yZWFkYWhlYWQJLyogMjQwICovCi0JLmxvbmcgc3lzX2lvX3NldHVwCi0JLmxvbmcgc3lzX2lvX2Rlc3Ryb3kKLQkubG9uZyBzeXNfaW9fZ2V0ZXZlbnRzCi0JLmxvbmcgc3lzX2lvX3N1Ym1pdAotCS5sb25nIHN5c19pb19jYW5jZWwJLyogMjQ1ICovCi0JLmxvbmcgc3lzX2ZhZHZpc2U2NAotCS5sb25nIHN5c19leGl0X2dyb3VwCi0JLmxvbmcgc3lzX2xvb2t1cF9kY29va2llCi0JLmxvbmcgc3lzX2Vwb2xsX2NyZWF0ZQotCS5sb25nIHN5c19lcG9sbF9jdGwJLyogMjUwICovCi0JLmxvbmcgc3lzX2Vwb2xsX3dhaXQKLQkubG9uZyBzeXNfcmVtYXBfZmlsZV9wYWdlcwotCS5sb25nIHN5c19zZXRfdGlkX2FkZHJlc3MKLQkubG9uZyBzeXNfdGltZXJfY3JlYXRlCi0JLmxvbmcgc3lzX3RpbWVyX3NldHRpbWUJLyogMjU1ICovCi0JLmxvbmcgc3lzX3RpbWVyX2dldHRpbWUKLQkubG9uZyBzeXNfdGltZXJfZ2V0b3ZlcnJ1bgotCS5sb25nIHN5c190aW1lcl9kZWxldGUKLQkubG9uZyBzeXNfY2xvY2tfc2V0dGltZQotCS5sb25nIHN5c19jbG9ja19nZXR0aW1lCS8qIDI2MCAqLwotCS5sb25nIHN5c19jbG9ja19nZXRyZXMKLQkubG9uZyBzeXNfY2xvY2tfbmFub3NsZWVwCi0JLmxvbmcgc3lzX3N0YXRmczY0Ci0JLmxvbmcgc3lzX2ZzdGF0ZnM2NAotCS5sb25nIHN5c190Z2tpbGwJLyogMjY1ICovCi0JLmxvbmcgc3lzX3V0aW1lcwotCS5sb25nIHN5c19mYWR2aXNlNjRfNjQKLQkubG9uZyBzeXNfbWJpbmQKLQkubG9uZyBzeXNfZ2V0X21lbXBvbGljeQotCS5sb25nIHN5c19zZXRfbWVtcG9saWN5CS8qIDI3MCAqLwotCS5sb25nIHN5c19tcV9vcGVuCi0JLmxvbmcgc3lzX21xX3VubGluawotCS5sb25nIHN5c19tcV90aW1lZHNlbmQKLQkubG9uZyBzeXNfbXFfdGltZWRyZWNlaXZlCi0JLmxvbmcgc3lzX21xX25vdGlmeQkvKiAyNzUgKi8KLQkubG9uZyBzeXNfbXFfZ2V0c2V0YXR0cgotCS5sb25nIHN5c193YWl0aWQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBmb3Igc3lzX3ZzZXJ2ZXIgKi8KLQkubG9uZyBzeXNfYWRkX2tleQotCS5sb25nIHN5c19yZXF1ZXN0X2tleQkvKiAyODAgKi8KLQkubG9uZyBzeXNfa2V5Y3RsCi0JLmxvbmcgc3lzX2lvcHJpb19zZXQKLQkubG9uZyBzeXNfaW9wcmlvX2dldAotCS5sb25nIHN5c19pbm90aWZ5X2luaXQKLQkubG9uZyBzeXNfaW5vdGlmeV9hZGRfd2F0Y2gJLyogMjg1ICovCi0JLmxvbmcgc3lzX2lub3RpZnlfcm1fd2F0Y2gKLQkubG9uZyBzeXNfbWlncmF0ZV9wYWdlcwotCS5sb25nIHN5c19vcGVuYXQKLQkubG9uZyBzeXNfbWtkaXJhdAotCS5sb25nIHN5c19ta25vZGF0CQkvKiAyOTAgKi8KLQkubG9uZyBzeXNfZmNob3duYXQKLQkubG9uZyBzeXNfZnV0aW1lc2F0Ci0JLmxvbmcgc3lzX2ZzdGF0YXQ2NAotCS5sb25nIHN5c191bmxpbmthdAotCS5sb25nIHN5c19yZW5hbWVhdAkJLyogMjk1ICovCi0JLmxvbmcgc3lzX2xpbmthdAotCS5sb25nIHN5c19zeW1saW5rYXQKLQkubG9uZyBzeXNfcmVhZGxpbmthdAotCS5sb25nIHN5c19mY2htb2RhdAotCS5sb25nIHN5c19mYWNjZXNzYXQJCS8qIDMwMCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBSZXNlcnZlZCBmb3IgcHNlbGVjdDYgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogUmVzZXJ2ZWQgZm9yIHBwb2xsICovCi0JLmxvbmcgc3lzX3Vuc2hhcmUKLQkubG9uZyBzeXNfc2V0X3JvYnVzdF9saXN0Ci0JLmxvbmcgc3lzX2dldF9yb2J1c3RfbGlzdAkvKiAzMDUgKi8KLQkubG9uZyBzeXNfc3BsaWNlCi0JLmxvbmcgc3lzX3N5bmNfZmlsZV9yYW5nZQotCS5sb25nIHN5c190ZWUKLQkubG9uZyBzeXNfdm1zcGxpY2UKLQkubG9uZyBzeXNfbW92ZV9wYWdlcwkJLyogMzEwICovCi0JLmxvbmcgc3lzX3NjaGVkX3NldGFmZmluaXR5Ci0JLmxvbmcgc3lzX3NjaGVkX2dldGFmZmluaXR5Ci0JLmxvbmcgc3lzX2tleGVjX2xvYWQKLQkubG9uZyBzeXNfZ2V0Y3B1Ci0JLmxvbmcgc3lzX2Vwb2xsX3B3YWl0CQkvKiAzMTUgKi8KLQkubG9uZyBzeXNfdXRpbWVuc2F0Ci0JLmxvbmcgc3lzX3NpZ25hbGZkCi0JLmxvbmcgc3lzX3RpbWVyZmRfY3JlYXRlCi0JLmxvbmcgc3lzX2V2ZW50ZmQKLQkubG9uZyBzeXNfZmFsbG9jYXRlCQkvKiAzMjAgKi8KLQkubG9uZyBzeXNfdGltZXJmZF9zZXR0aW1lCi0JLmxvbmcgc3lzX3RpbWVyZmRfZ2V0dGltZQotCS5sb25nIHN5c19zaWduYWxmZDQKLQkubG9uZyBzeXNfZXZlbnRmZDIKLQkubG9uZyBzeXNfZXBvbGxfY3JlYXRlMQkJLyogMzI1ICovCi0JLmxvbmcgc3lzX2R1cDMKLQkubG9uZyBzeXNfcGlwZTIKLQkubG9uZyBzeXNfaW5vdGlmeV9pbml0MQotCS5sb25nIHN5c19wcmVhZHYKLQkubG9uZyBzeXNfcHdyaXRldgkJLyogMzMwICovCi0JLmxvbmcgc3lzX3J0X3Rnc2lncXVldWVpbmZvCi0JLmxvbmcgc3lzX3BlcmZfZXZlbnRfb3BlbgotCS5sb25nIHN5c19nZXRfdGhyZWFkX2FyZWEKLQkubG9uZyBzeXNfc2V0X3RocmVhZF9hcmVhCi0JLmxvbmcgc3lzX2F0b21pY19jbXB4Y2hnXzMyCS8qIDMzNSAqLwotCS5sb25nIHN5c19hdG9taWNfYmFycmllcgotCS5sb25nIHN5c19mYW5vdGlmeV9pbml0Ci0JLmxvbmcgc3lzX2Zhbm90aWZ5X21hcmsKLQkubG9uZyBzeXNfcHJsaW1pdDY0Ci0JLmxvbmcgc3lzX25hbWVfdG9faGFuZGxlX2F0CS8qIDM0MCAqLwotCS5sb25nIHN5c19vcGVuX2J5X2hhbmRsZV9hdAotCS5sb25nIHN5c19jbG9ja19hZGp0aW1lCi0JLmxvbmcgc3lzX3N5bmNmcwotCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TIGIvYXJjaC9tNjhrL2tlcm5lbC9zeXNjYWxsdGFibGUuUwppbmRleCA5YjgzOTNkLi41OTA5ZTM5IDEwMDY0NAotLS0gYS9hcmNoL202OGsva2VybmVsL3N5c2NhbGx0YWJsZS5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKQEAgLTEsNiArMSw0IEBACiAvKgotICogIGxpbnV4L2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUwotICoKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIsIEdyZWcgVW5nZXJlciAoZ2VyZ0BzbmFwZ2Vhci5jb20pCiAgKgogICogIEJhc2VkIG9uIG9sZGVyIGVudHJ5LlMgZmlsZXMsIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0cyBhcHBseToKQEAgLTksMTcxICs3LDE3NiBAQAogICogICAgICAgICAgICAgICAgICAgICAgS2VubmV0aCBBbGJhbm93c2tpIDxramFoZHNAa2phaGRzLmNvbT4sCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAwICBMaW5lbyBJbmMuICh3d3cubGluZW8uY29tKSAKICAqICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKgorICogIExpbnV4L202OGsgc3VwcG9ydCBieSBIYW1pc2ggTWFjZG9uYWxkCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3N5cy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLS50ZXh0CisjaWZuZGVmIENPTkZJR19NTVUKKyNkZWZpbmUgc3lzX21tYXAyCQlzeXNfbW1hcF9wZ29mZgorI2VuZGlmCisKKy5zZWN0aW9uIC5yb2RhdGEKIEFMSUdOCiBFTlRSWShzeXNfY2FsbF90YWJsZSkKLQkubG9uZyBzeXNfcmVzdGFydF9zeXNjYWxsCS8qIDAgIC0gIG9sZCAic2V0dXAoKSIgc3lzdGVtIGNhbGwgKi8KKwkubG9uZyBzeXNfcmVzdGFydF9zeXNjYWxsCS8qIDAgLSBvbGQgInNldHVwKCkiIHN5c3RlbSBjYWxsLCB1c2VkIGZvciByZXN0YXJ0aW5nICovCiAJLmxvbmcgc3lzX2V4aXQKIAkubG9uZyBzeXNfZm9yawogCS5sb25nIHN5c19yZWFkCiAJLmxvbmcgc3lzX3dyaXRlCi0JLmxvbmcgc3lzX29wZW4JCS8qIDUgKi8KKwkubG9uZyBzeXNfb3BlbgkJCS8qIDUgKi8KIAkubG9uZyBzeXNfY2xvc2UKIAkubG9uZyBzeXNfd2FpdHBpZAogCS5sb25nIHN5c19jcmVhdAogCS5sb25nIHN5c19saW5rCi0JLmxvbmcgc3lzX3VubGluawkvKiAxMCAqLworCS5sb25nIHN5c191bmxpbmsJCS8qIDEwICovCiAJLmxvbmcgc3lzX2V4ZWN2ZQogCS5sb25nIHN5c19jaGRpcgogCS5sb25nIHN5c190aW1lCiAJLmxvbmcgc3lzX21rbm9kCi0JLmxvbmcgc3lzX2NobW9kCQkvKiAxNSAqLworCS5sb25nIHN5c19jaG1vZAkJCS8qIDE1ICovCiAJLmxvbmcgc3lzX2Nob3duMTYKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgYnJlYWsgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIGJyZWFrIHN5c2NhbGwgaG9sZGVyICovCiAJLmxvbmcgc3lzX3N0YXQKIAkubG9uZyBzeXNfbHNlZWsKLQkubG9uZyBzeXNfZ2V0cGlkCS8qIDIwICovCisJLmxvbmcgc3lzX2dldHBpZAkJLyogMjAgKi8KIAkubG9uZyBzeXNfbW91bnQKIAkubG9uZyBzeXNfb2xkdW1vdW50CiAJLmxvbmcgc3lzX3NldHVpZDE2CiAJLmxvbmcgc3lzX2dldHVpZDE2Ci0JLmxvbmcgc3lzX3N0aW1lCQkvKiAyNSAqLworCS5sb25nIHN5c19zdGltZQkJCS8qIDI1ICovCiAJLmxvbmcgc3lzX3B0cmFjZQogCS5sb25nIHN5c19hbGFybQogCS5sb25nIHN5c19mc3RhdAogCS5sb25nIHN5c19wYXVzZQotCS5sb25nIHN5c191dGltZQkJLyogMzAgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgc3R0eSBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBndHR5IHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3V0aW1lCQkJLyogMzAgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIHN0dHkgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBzeXNfYWNjZXNzCiAJLmxvbmcgc3lzX25pY2UKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAzNSAqLyAvKiBvbGQgZnRpbWUgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogMzUgLSBvbGQgZnRpbWUgc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBzeXNfc3luYwogCS5sb25nIHN5c19raWxsCiAJLmxvbmcgc3lzX3JlbmFtZQogCS5sb25nIHN5c19ta2RpcgotCS5sb25nIHN5c19ybWRpcgkJLyogNDAgKi8KKwkubG9uZyBzeXNfcm1kaXIJCQkvKiA0MCAqLwogCS5sb25nIHN5c19kdXAKIAkubG9uZyBzeXNfcGlwZQogCS5sb25nIHN5c190aW1lcwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBwcm9mIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX2JyawkJLyogNDUgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIHByb2Ygc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfYnJrCQkJLyogNDUgKi8KIAkubG9uZyBzeXNfc2V0Z2lkMTYKIAkubG9uZyBzeXNfZ2V0Z2lkMTYKIAkubG9uZyBzeXNfc2lnbmFsCiAJLmxvbmcgc3lzX2dldGV1aWQxNgotCS5sb25nIHN5c19nZXRlZ2lkMTYJLyogNTAgKi8KKwkubG9uZyBzeXNfZ2V0ZWdpZDE2CQkvKiA1MCAqLwogCS5sb25nIHN5c19hY2N0Ci0JLmxvbmcgc3lzX3Vtb3VudAkvKiByZWN5Y2xlZCBuZXZlciB1c2VkIHBoeXMoKSAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBsb2NrIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX3Vtb3VudAkJLyogcmVjeWNsZWQgbmV2ZXIgdXNlZCBwaHlzKCkgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIGxvY2sgc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBzeXNfaW9jdGwKLQkubG9uZyBzeXNfZmNudGwJCS8qIDU1ICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIG1weCBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19mY250bAkJCS8qIDU1ICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIG9sZCBtcHggc3lzY2FsbCBob2xkZXIgKi8KIAkubG9uZyBzeXNfc2V0cGdpZAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCB1bGltaXQgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIHVsaW1pdCBzeXNjYWxsIGhvbGRlciAqLwogCS5sb25nIHN5c19uaV9zeXNjYWxsCi0JLmxvbmcgc3lzX3VtYXNrCQkvKiA2MCAqLworCS5sb25nIHN5c191bWFzawkJCS8qIDYwICovCiAJLmxvbmcgc3lzX2Nocm9vdAogCS5sb25nIHN5c191c3RhdAogCS5sb25nIHN5c19kdXAyCiAJLmxvbmcgc3lzX2dldHBwaWQKLQkubG9uZyBzeXNfZ2V0cGdycAkvKiA2NSAqLworCS5sb25nIHN5c19nZXRwZ3JwCQkvKiA2NSAqLwogCS5sb25nIHN5c19zZXRzaWQKIAkubG9uZyBzeXNfc2lnYWN0aW9uCiAJLmxvbmcgc3lzX3NnZXRtYXNrCiAJLmxvbmcgc3lzX3NzZXRtYXNrCi0JLmxvbmcgc3lzX3NldHJldWlkMTYJLyogNzAgKi8KKwkubG9uZyBzeXNfc2V0cmV1aWQxNgkJLyogNzAgKi8KIAkubG9uZyBzeXNfc2V0cmVnaWQxNgogCS5sb25nIHN5c19zaWdzdXNwZW5kCiAJLmxvbmcgc3lzX3NpZ3BlbmRpbmcKIAkubG9uZyBzeXNfc2V0aG9zdG5hbWUKLQkubG9uZyBzeXNfc2V0cmxpbWl0CS8qIDc1ICovCisJLmxvbmcgc3lzX3NldHJsaW1pdAkJLyogNzUgKi8KIAkubG9uZyBzeXNfb2xkX2dldHJsaW1pdAogCS5sb25nIHN5c19nZXRydXNhZ2UKIAkubG9uZyBzeXNfZ2V0dGltZW9mZGF5CiAJLmxvbmcgc3lzX3NldHRpbWVvZmRheQotCS5sb25nIHN5c19nZXRncm91cHMxNgkvKiA4MCAqLworCS5sb25nIHN5c19nZXRncm91cHMxNgkJLyogODAgKi8KIAkubG9uZyBzeXNfc2V0Z3JvdXBzMTYKIAkubG9uZyBzeXNfb2xkX3NlbGVjdAogCS5sb25nIHN5c19zeW1saW5rCiAJLmxvbmcgc3lzX2xzdGF0Ci0JLmxvbmcgc3lzX3JlYWRsaW5rCS8qIDg1ICovCisJLmxvbmcgc3lzX3JlYWRsaW5rCQkvKiA4NSAqLwogCS5sb25nIHN5c191c2VsaWIKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfc3dhcG9uICovCisJLmxvbmcgc3lzX3N3YXBvbgogCS5sb25nIHN5c19yZWJvb3QKIAkubG9uZyBzeXNfb2xkX3JlYWRkaXIKLQkubG9uZyBzeXNfb2xkX21tYXAJLyogOTAgKi8KKwkubG9uZyBzeXNfb2xkX21tYXAJCS8qIDkwICovCiAJLmxvbmcgc3lzX211bm1hcAogCS5sb25nIHN5c190cnVuY2F0ZQogCS5sb25nIHN5c19mdHJ1bmNhdGUKIAkubG9uZyBzeXNfZmNobW9kCi0JLmxvbmcgc3lzX2ZjaG93bjE2CS8qIDk1ICovCisJLmxvbmcgc3lzX2ZjaG93bjE2CQkvKiA5NSAqLwogCS5sb25nIHN5c19nZXRwcmlvcml0eQogCS5sb25nIHN5c19zZXRwcmlvcml0eQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBwcm9maWwgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2xkIHByb2ZpbCBzeXNjYWxsIGhvbGRlciAqLwogCS5sb25nIHN5c19zdGF0ZnMKLQkubG9uZyBzeXNfZnN0YXRmcwkvKiAxMDAgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBpb3Blcm0gZm9yIGkzODYgKi8KKwkubG9uZyBzeXNfZnN0YXRmcwkJLyogMTAwICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIGlvcGVybSBmb3IgaTM4NiAqLwogCS5sb25nIHN5c19zb2NrZXRjYWxsCiAJLmxvbmcgc3lzX3N5c2xvZwogCS5sb25nIHN5c19zZXRpdGltZXIKLQkubG9uZyBzeXNfZ2V0aXRpbWVyCS8qIDEwNSAqLworCS5sb25nIHN5c19nZXRpdGltZXIJCS8qIDEwNSAqLwogCS5sb25nIHN5c19uZXdzdGF0CiAJLmxvbmcgc3lzX25ld2xzdGF0CiAJLmxvbmcgc3lzX25ld2ZzdGF0CiAJLmxvbmcgc3lzX25pX3N5c2NhbGwKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBpb3BsIGZvciBpMzg2ICovIC8qIDExMCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiAxMTAgLSBpb3BsIGZvciBpMzg2ICovCiAJLmxvbmcgc3lzX3ZoYW5ndXAKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvYnNvbGV0ZSBpZGxlKCkgc3lzY2FsbCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHZtODZvbGQgZm9yIGkzODYgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogb2Jzb2xldGUgaWRsZSgpIHN5c2NhbGwgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogdm04Nm9sZCBmb3IgaTM4NiAqLwogCS5sb25nIHN5c193YWl0NAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDExNSAqLyAvKiBzeXNfc3dhcG9mZiAqLworCS5sb25nIHN5c19zd2Fwb2ZmCQkvKiAxMTUgKi8KIAkubG9uZyBzeXNfc3lzaW5mbwogCS5sb25nIHN5c19pcGMKIAkubG9uZyBzeXNfZnN5bmMKIAkubG9uZyBzeXNfc2lncmV0dXJuCi0JLmxvbmcgc3lzX2Nsb25lCQkvKiAxMjAgKi8KKwkubG9uZyBzeXNfY2xvbmUJCQkvKiAxMjAgKi8KIAkubG9uZyBzeXNfc2V0ZG9tYWlubmFtZQogCS5sb25nIHN5c19uZXd1bmFtZQotCS5sb25nIHN5c19jYWNoZWZsdXNoCS8qIG1vZGlmeV9sZHQgZm9yIGkzODYgKi8KKwkubG9uZyBzeXNfY2FjaGVmbHVzaAkJLyogbW9kaWZ5X2xkdCBmb3IgaTM4NiAqLwogCS5sb25nIHN5c19hZGp0aW1leAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDEyNSAqLyAvKiBzeXNfbXByb3RlY3QgKi8KKwkubG9uZyBzeXNfbXByb3RlY3QJCS8qIDEyNSAqLwogCS5sb25nIHN5c19zaWdwcm9jbWFzawotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAiY3JlYXRfbW9kdWxlIiAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBvbGQgImNyZWF0ZV9tb2R1bGUiICovCiAJLmxvbmcgc3lzX2luaXRfbW9kdWxlCiAJLmxvbmcgc3lzX2RlbGV0ZV9tb2R1bGUKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAxMzA6IG9sZCAiZ2V0X2tlcm5lbF9zeW1zIiAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiAxMzAgLSBvbGQgImdldF9rZXJuZWxfc3ltcyIgKi8KIAkubG9uZyBzeXNfcXVvdGFjdGwKIAkubG9uZyBzeXNfZ2V0cGdpZAogCS5sb25nIHN5c19mY2hkaXIKIAkubG9uZyBzeXNfYmRmbHVzaAotCS5sb25nIHN5c19zeXNmcwkJLyogMTM1ICovCisJLmxvbmcgc3lzX3N5c2ZzCQkJLyogMTM1ICovCiAJLmxvbmcgc3lzX3BlcnNvbmFsaXR5Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogZm9yIGFmc19zeXNjYWxsICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIGZvciBhZnNfc3lzY2FsbCAqLwogCS5sb25nIHN5c19zZXRmc3VpZDE2CiAJLmxvbmcgc3lzX3NldGZzZ2lkMTYKLQkubG9uZyBzeXNfbGxzZWVrCS8qIDE0MCAqLworCS5sb25nIHN5c19sbHNlZWsJCS8qIDE0MCAqLwogCS5sb25nIHN5c19nZXRkZW50cwogCS5sb25nIHN5c19zZWxlY3QKIAkubG9uZyBzeXNfZmxvY2sKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfbXN5bmMgKi8KLQkubG9uZyBzeXNfcmVhZHYJCS8qIDE0NSAqLworCS5sb25nIHN5c19tc3luYworCS5sb25nIHN5c19yZWFkdgkJCS8qIDE0NSAqLwogCS5sb25nIHN5c193cml0ZXYKIAkubG9uZyBzeXNfZ2V0c2lkCiAJLmxvbmcgc3lzX2ZkYXRhc3luYwogCS5sb25nIHN5c19zeXNjdGwKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAxNTAgKi8gLyogc3lzX21sb2NrICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX211bmxvY2sgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfbWxvY2thbGwgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfbXVubG9ja2FsbCAqLworCS5sb25nIHN5c19tbG9jawkJCS8qIDE1MCAqLworCS5sb25nIHN5c19tdW5sb2NrCisJLmxvbmcgc3lzX21sb2NrYWxsCisJLmxvbmcgc3lzX211bmxvY2thbGwKIAkubG9uZyBzeXNfc2NoZWRfc2V0cGFyYW0KLQkubG9uZyBzeXNfc2NoZWRfZ2V0cGFyYW0gLyogMTU1ICovCisJLmxvbmcgc3lzX3NjaGVkX2dldHBhcmFtCS8qIDE1NSAqLwogCS5sb25nIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIKIAkubG9uZyBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyCiAJLmxvbmcgc3lzX3NjaGVkX3lpZWxkCkBAIC0xODEsMTI0ICsxODQsMTI0IEBACiAJLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9taW4gIC8qIDE2MCAqLwogCS5sb25nIHN5c19zY2hlZF9ycl9nZXRfaW50ZXJ2YWwKIAkubG9uZyBzeXNfbmFub3NsZWVwCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX21yZW1hcCAqLworCS5sb25nIHN5c19tcmVtYXAKIAkubG9uZyBzeXNfc2V0cmVzdWlkMTYKLQkubG9uZyBzeXNfZ2V0cmVzdWlkMTYJLyogMTY1ICovCi0JLmxvbmcgc3lzX2dldHBhZ2VzaXplCS8qIHN5c19nZXRwYWdlc2l6ZSAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAicXVlcnlfbW9kdWxlIiAqLworCS5sb25nIHN5c19nZXRyZXN1aWQxNgkJLyogMTY1ICovCisJLmxvbmcgc3lzX2dldHBhZ2VzaXplCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIG9sZCAicXVlcnlfbW9kdWxlIiAqLwogCS5sb25nIHN5c19wb2xsCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX25mc3NlcnZjdGwgKi8KLQkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJLyogMTcwICovCisJLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJCS8qIDE3MCAqLwogCS5sb25nIHN5c19nZXRyZXNnaWQxNgogCS5sb25nIHN5c19wcmN0bAogCS5sb25nIHN5c19ydF9zaWdyZXR1cm4KIAkubG9uZyBzeXNfcnRfc2lnYWN0aW9uCi0JLmxvbmcgc3lzX3J0X3NpZ3Byb2NtYXNrIC8qIDE3NSAqLworCS5sb25nIHN5c19ydF9zaWdwcm9jbWFzawkvKiAxNzUgKi8KIAkubG9uZyBzeXNfcnRfc2lncGVuZGluZwogCS5sb25nIHN5c19ydF9zaWd0aW1lZHdhaXQKIAkubG9uZyBzeXNfcnRfc2lncXVldWVpbmZvCiAJLmxvbmcgc3lzX3J0X3NpZ3N1c3BlbmQKLQkubG9uZyBzeXNfcHJlYWQ2NAkvKiAxODAgKi8KKwkubG9uZyBzeXNfcHJlYWQ2NAkJLyogMTgwICovCiAJLmxvbmcgc3lzX3B3cml0ZTY0CiAJLmxvbmcgc3lzX2xjaG93bjE2CiAJLmxvbmcgc3lzX2dldGN3ZAogCS5sb25nIHN5c19jYXBnZXQKLQkubG9uZyBzeXNfY2Fwc2V0CS8qIDE4NSAqLworCS5sb25nIHN5c19jYXBzZXQJCS8qIDE4NSAqLwogCS5sb25nIHN5c19zaWdhbHRzdGFjawogCS5sb25nIHN5c19zZW5kZmlsZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHN0cmVhbXMxICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3RyZWFtczIgKi8KLQkubG9uZyBzeXNfdmZvcmsJCS8qIDE5MCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBzdHJlYW1zMSAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCQkvKiBzdHJlYW1zMiAqLworCS5sb25nIHN5c192Zm9yawkJCS8qIDE5MCAqLwogCS5sb25nIHN5c19nZXRybGltaXQKLQkubG9uZyBzeXNfbW1hcF9wZ29mZgorCS5sb25nIHN5c19tbWFwMgogCS5sb25nIHN5c190cnVuY2F0ZTY0CiAJLmxvbmcgc3lzX2Z0cnVuY2F0ZTY0Ci0JLmxvbmcgc3lzX3N0YXQ2NAkvKiAxOTUgKi8KKwkubG9uZyBzeXNfc3RhdDY0CQkvKiAxOTUgKi8KIAkubG9uZyBzeXNfbHN0YXQ2NAogCS5sb25nIHN5c19mc3RhdDY0CiAJLmxvbmcgc3lzX2Nob3duCiAJLmxvbmcgc3lzX2dldHVpZAotCS5sb25nIHN5c19nZXRnaWQJLyogMjAwICovCisJLmxvbmcgc3lzX2dldGdpZAkJLyogMjAwICovCiAJLmxvbmcgc3lzX2dldGV1aWQKIAkubG9uZyBzeXNfZ2V0ZWdpZAogCS5sb25nIHN5c19zZXRyZXVpZAogCS5sb25nIHN5c19zZXRyZWdpZAotCS5sb25nIHN5c19nZXRncm91cHMJLyogMjA1ICovCisJLmxvbmcgc3lzX2dldGdyb3VwcwkJLyogMjA1ICovCiAJLmxvbmcgc3lzX3NldGdyb3VwcwogCS5sb25nIHN5c19mY2hvd24KIAkubG9uZyBzeXNfc2V0cmVzdWlkCiAJLmxvbmcgc3lzX2dldHJlc3VpZAotCS5sb25nIHN5c19zZXRyZXNnaWQJLyogMjEwICovCisJLmxvbmcgc3lzX3NldHJlc2dpZAkJLyogMjEwICovCiAJLmxvbmcgc3lzX2dldHJlc2dpZAogCS5sb25nIHN5c19sY2hvd24KIAkubG9uZyBzeXNfc2V0dWlkCiAJLmxvbmcgc3lzX3NldGdpZAotCS5sb25nIHN5c19zZXRmc3VpZAkvKiAyMTUgKi8KKwkubG9uZyBzeXNfc2V0ZnN1aWQJCS8qIDIxNSAqLwogCS5sb25nIHN5c19zZXRmc2dpZAogCS5sb25nIHN5c19waXZvdF9yb290CiAJLmxvbmcgc3lzX25pX3N5c2NhbGwKIAkubG9uZyBzeXNfbmlfc3lzY2FsbAotCS5sb25nIHN5c19nZXRkZW50czY0CS8qIDIyMCAqLworCS5sb25nIHN5c19nZXRkZW50czY0CQkvKiAyMjAgKi8KIAkubG9uZyBzeXNfZ2V0dGlkCiAJLmxvbmcgc3lzX3RraWxsCiAJLmxvbmcgc3lzX3NldHhhdHRyCiAJLmxvbmcgc3lzX2xzZXR4YXR0cgotCS5sb25nIHN5c19mc2V0eGF0dHIJLyogMjI1ICovCisJLmxvbmcgc3lzX2ZzZXR4YXR0cgkJLyogMjI1ICovCiAJLmxvbmcgc3lzX2dldHhhdHRyCiAJLmxvbmcgc3lzX2xnZXR4YXR0cgogCS5sb25nIHN5c19mZ2V0eGF0dHIKIAkubG9uZyBzeXNfbGlzdHhhdHRyCi0JLmxvbmcgc3lzX2xsaXN0eGF0dHIJLyogMjMwICovCisJLmxvbmcgc3lzX2xsaXN0eGF0dHIJCS8qIDIzMCAqLwogCS5sb25nIHN5c19mbGlzdHhhdHRyCiAJLmxvbmcgc3lzX3JlbW92ZXhhdHRyCiAJLmxvbmcgc3lzX2xyZW1vdmV4YXR0cgogCS5sb25nIHN5c19mcmVtb3ZleGF0dHIKLQkubG9uZyBzeXNfZnV0ZXgJCS8qIDIzNSAqLworCS5sb25nIHN5c19mdXRleAkJCS8qIDIzNSAqLwogCS5sb25nIHN5c19zZW5kZmlsZTY0Ci0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX21pbmNvcmUgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfbWFkdmlzZSAqLworCS5sb25nIHN5c19taW5jb3JlCisJLmxvbmcgc3lzX21hZHZpc2UKIAkubG9uZyBzeXNfZmNudGw2NAotCS5sb25nIHN5c19yZWFkYWhlYWQJLyogMjQwICovCisJLmxvbmcgc3lzX3JlYWRhaGVhZAkJLyogMjQwICovCiAJLmxvbmcgc3lzX2lvX3NldHVwCiAJLmxvbmcgc3lzX2lvX2Rlc3Ryb3kKIAkubG9uZyBzeXNfaW9fZ2V0ZXZlbnRzCiAJLmxvbmcgc3lzX2lvX3N1Ym1pdAotCS5sb25nIHN5c19pb19jYW5jZWwJLyogMjQ1ICovCisJLmxvbmcgc3lzX2lvX2NhbmNlbAkJLyogMjQ1ICovCiAJLmxvbmcgc3lzX2ZhZHZpc2U2NAogCS5sb25nIHN5c19leGl0X2dyb3VwCiAJLmxvbmcgc3lzX2xvb2t1cF9kY29va2llCiAJLmxvbmcgc3lzX2Vwb2xsX2NyZWF0ZQotCS5sb25nIHN5c19lcG9sbF9jdGwJLyogMjUwICovCisJLmxvbmcgc3lzX2Vwb2xsX2N0bAkJLyogMjUwICovCiAJLmxvbmcgc3lzX2Vwb2xsX3dhaXQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfcmVtYXBfZmlsZV9wYWdlcyAqLworCS5sb25nIHN5c19yZW1hcF9maWxlX3BhZ2VzCiAJLmxvbmcgc3lzX3NldF90aWRfYWRkcmVzcwogCS5sb25nIHN5c190aW1lcl9jcmVhdGUKLQkubG9uZyBzeXNfdGltZXJfc2V0dGltZQkvKiAyNTUgKi8KKwkubG9uZyBzeXNfdGltZXJfc2V0dGltZQkJLyogMjU1ICovCiAJLmxvbmcgc3lzX3RpbWVyX2dldHRpbWUKIAkubG9uZyBzeXNfdGltZXJfZ2V0b3ZlcnJ1bgogCS5sb25nIHN5c190aW1lcl9kZWxldGUKIAkubG9uZyBzeXNfY2xvY2tfc2V0dGltZQotCS5sb25nIHN5c19jbG9ja19nZXR0aW1lCS8qIDI2MCAqLworCS5sb25nIHN5c19jbG9ja19nZXR0aW1lCQkvKiAyNjAgKi8KIAkubG9uZyBzeXNfY2xvY2tfZ2V0cmVzCiAJLmxvbmcgc3lzX2Nsb2NrX25hbm9zbGVlcAogCS5sb25nIHN5c19zdGF0ZnM2NAogCS5sb25nIHN5c19mc3RhdGZzNjQKLQkubG9uZyBzeXNfdGdraWxsCS8qIDI2NSAqLworCS5sb25nIHN5c190Z2tpbGwJCS8qIDI2NSAqLwogCS5sb25nIHN5c191dGltZXMKIAkubG9uZyBzeXNfZmFkdmlzZTY0XzY0Ci0JLmxvbmcgc3lzX21iaW5kCQorCS5sb25nIHN5c19tYmluZAogCS5sb25nIHN5c19nZXRfbWVtcG9saWN5Ci0JLmxvbmcgc3lzX3NldF9tZW1wb2xpY3kJLyogMjcwICovCisJLmxvbmcgc3lzX3NldF9tZW1wb2xpY3kJCS8qIDI3MCAqLwogCS5sb25nIHN5c19tcV9vcGVuCiAJLmxvbmcgc3lzX21xX3VubGluawogCS5sb25nIHN5c19tcV90aW1lZHNlbmQKIAkubG9uZyBzeXNfbXFfdGltZWRyZWNlaXZlCi0JLmxvbmcgc3lzX21xX25vdGlmeQkvKiAyNzUgKi8KKwkubG9uZyBzeXNfbXFfbm90aWZ5CQkvKiAyNzUgKi8KIAkubG9uZyBzeXNfbXFfZ2V0c2V0YXR0cgogCS5sb25nIHN5c193YWl0aWQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBmb3Igc3lzX3ZzZXJ2ZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogZm9yIHN5c192c2VydmVyICovCiAJLmxvbmcgc3lzX2FkZF9rZXkKLQkubG9uZyBzeXNfcmVxdWVzdF9rZXkJLyogMjgwICovCisJLmxvbmcgc3lzX3JlcXVlc3Rfa2V5CQkvKiAyODAgKi8KIAkubG9uZyBzeXNfa2V5Y3RsCiAJLmxvbmcgc3lzX2lvcHJpb19zZXQKIAkubG9uZyBzeXNfaW9wcmlvX2dldApAQCAtMzE5LDggKzMyMiw4IEBACiAJLmxvbmcgc3lzX3JlYWRsaW5rYXQKIAkubG9uZyBzeXNfZmNobW9kYXQKIAkubG9uZyBzeXNfZmFjY2Vzc2F0CQkvKiAzMDAgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkJLyogUmVzZXJ2ZWQgZm9yIHBzZWxlY3Q2ICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIFJlc2VydmVkIGZvciBwcG9sbCAqLworCS5sb25nIHN5c19wc2VsZWN0NgorCS5sb25nIHN5c19wcG9sbAogCS5sb25nIHN5c191bnNoYXJlCiAJLmxvbmcgc3lzX3NldF9yb2J1c3RfbGlzdAogCS5sb25nIHN5c19nZXRfcm9idXN0X2xpc3QJLyogMzA1ICovCkBAIC0zNjMsNyArMzY2LDMgQEAKIAkubG9uZyBzeXNfY2xvY2tfYWRqdGltZQogCS5sb25nIHN5c19zeW5jZnMKIAotCS5yZXB0IE5SX3N5c2NhbGxzLSguLXN5c19jYWxsX3RhYmxlKS80Ci0JCS5sb25nIHN5c19uaV9zeXNjYWxsCi0JLmVuZHIKLQpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL21vdG9yb2xhLmMgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuYwppbmRleCAwMmI3YTAzLi44YjNkYjFjIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vbW90b3JvbGEuYworKysgYi9hcmNoL202OGsvbW0vbW90b3JvbGEuYwpAQCAtMzAwLDYgKzMwMCw4IEBACiAJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbTY4a19tZW1vcnlbaV0uc2l6ZSA+PiBQQUdFX1NISUZUOwogCQlmcmVlX2FyZWFfaW5pdF9ub2RlKGksIHpvbmVzX3NpemUsCiAJCQkJICAgIG02OGtfbWVtb3J5W2ldLmFkZHIgPj4gUEFHRV9TSElGVCwgTlVMTCk7CisJCWlmIChub2RlX3ByZXNlbnRfcGFnZXMoaSkpCisJCQlub2RlX3NldF9zdGF0ZShpLCBOX05PUk1BTF9NRU1PUlkpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC90aW1lci5jIGIvYXJjaC9taWNyb2JsYXplL2tlcm5lbC90aW1lci5jCmluZGV4IGQ4YTIxNGYuLmU1NTUwY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvdGltZXIuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3RpbWVyLmMKQEAgLTIxNywxNiArMjE3LDEyIEBACiAJLnJhdGluZwkJPSAzMDAsCiAJLnJlYWQJCT0gbWljcm9ibGF6ZV9yZWFkLAogCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5zaGlmdAkJPSA4LCAvKiBJIGNhbiBzaGlmdCBpdCAqLwogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1pY3JvYmxhemVfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQogewotCWNsb2Nrc291cmNlX21pY3JvYmxhemUubXVsdCA9Ci0JCQljbG9ja3NvdXJjZV9oejJtdWx0KHRpbWVyX2Nsb2NrX2ZyZXEsCi0JCQkJCQljbG9ja3NvdXJjZV9taWNyb2JsYXplLnNoaWZ0KTsKLQlpZiAoY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX21pY3JvYmxhemUpKQorCWlmIChjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfbWljcm9ibGF6ZSwgdGltZXJfY2xvY2tfZnJlcSkpCiAJCXBhbmljKCJmYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2tzb3VyY2UiKTsKIAogCS8qIHN0b3AgdGltZXIxICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvS2J1aWxkLnBsYXRmb3JtcyBiL2FyY2gvbWlwcy9LYnVpbGQucGxhdGZvcm1zCmluZGV4IDdmZjliNTQuLmFlZjZjOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9LYnVpbGQucGxhdGZvcm1zCisrKyBiL2FyY2gvbWlwcy9LYnVpbGQucGxhdGZvcm1zCkBAIC0xMSw2ICsxMSw3IEBACiBwbGF0Zm9ybXMgKz0gZW1tYQogcGxhdGZvcm1zICs9IGphenoKIHBsYXRmb3JtcyArPSBqejQ3NDAKK3BsYXRmb3JtcyArPSBsYW50aXEKIHBsYXRmb3JtcyArPSBsYXNhdAogcGxhdGZvcm1zICs9IGxvb25nc29uCiBwbGF0Zm9ybXMgKz0gbWlwc3NpbQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL0tjb25maWcgYi9hcmNoL21pcHMvS2NvbmZpZwppbmRleCA4ZTI1NmNjLi5jZWYxYTg1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvS2NvbmZpZworKysgYi9hcmNoL21pcHMvS2NvbmZpZwpAQCAtMjEyLDYgKzIxMiwyNCBAQAogCXNlbGVjdCBIQVZFX1BXTQogCXNlbGVjdCBIQVZFX0NMSwogCitjb25maWcgTEFOVElRCisJYm9vbCAiTGFudGlxIGJhc2VkIHBsYXRmb3JtcyIKKwlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCisJc2VsZWN0IElSUV9DUFUKKwlzZWxlY3QgQ0VWVF9SNEsKKwlzZWxlY3QgQ1NSQ19SNEsKKwlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCisJc2VsZWN0IFNZU19IQVNfQ1BVX01JUFMzMl9SMgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgorCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IFNZU19TVVBQT1JUU19NVUxUSVRIUkVBRElORworCXNlbGVjdCBTWVNfSEFTX0VBUkxZX1BSSU5USworCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBTV0FQX0lPX1NQQUNFCisJc2VsZWN0IEJPT1RfUkFXCisJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IE1JUFNfTUFDSElORQorCiBjb25maWcgTEFTQVQKIAlib29sICJMQVNBVCBOZXR3b3JrcyBwbGF0Zm9ybXMiCiAJc2VsZWN0IENFVlRfUjRLCkBAIC03MzYsNiArNzU0LDMzIEBACiAJCUhpa2FyaQogCSAgU2F5IFkgaGVyZSBmb3IgbW9zdCBPY3Rlb24gcmVmZXJlbmNlIGJvYXJkcy4KIAorY29uZmlnIE5MTV9YTFJfQk9BUkQKKwlib29sICJOZXRsb2dpYyBYTFIvWExTIGJhc2VkIHN5c3RlbXMiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgQk9PVF9FTEYzMgorCXNlbGVjdCBOTE1fQ09NTU9OCisJc2VsZWN0IE5MTV9YTFIKKwlzZWxlY3QgU1lTX0hBU19DUFVfWExSCisJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKKwlzZWxlY3QgSFdfSEFTX1BDSQorCXNlbGVjdCBTV0FQX0lPX1NQQUNFCisJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKKwlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTAorCXNlbGVjdCA2NEJJVF9QSFlTX0FERFIKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KKwlzZWxlY3QgU1lTX1NVUFBPUlRTX0hJR0hNRU0KKwlzZWxlY3QgRE1BX0NPSEVSRU5UCisJc2VsZWN0IE5SX0NQVVNfREVGQVVMVF8zMgorCXNlbGVjdCBDRVZUX1I0SworCXNlbGVjdCBDU1JDX1I0SworCXNlbGVjdCBJUlFfQ1BVCisJc2VsZWN0IFpPTkVfRE1BIGlmIDY0QklUCisJc2VsZWN0IFNZTkNfUjRLCisJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCisJaGVscAorCSAgU3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiBOZXRsb2dpYyBYTFIgYW5kIFhMUyBwcm9jZXNzb3JzLgorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFhMUiBvciBYTFMgYmFzZWQgYm9hcmQuCisKIGVuZGNob2ljZQogCiBzb3VyY2UgImFyY2gvbWlwcy9hbGNoZW15L0tjb25maWciCkBAIC03NDMsNiArNzg4LDcgQEAKIHNvdXJjZSAiYXJjaC9taXBzL2JjbTYzeHgvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2phenovS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2p6NDc0MC9LY29uZmlnIgorc291cmNlICJhcmNoL21pcHMvbGFudGlxL0tjb25maWciCiBzb3VyY2UgImFyY2gvbWlwcy9sYXNhdC9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvcG1jLXNpZXJyYS9LY29uZmlnIgogc291cmNlICJhcmNoL21pcHMvcG93ZXJ0di9LY29uZmlnIgpAQCAtNzUyLDYgKzc5OCw3IEBACiBzb3VyY2UgImFyY2gvbWlwcy92cjQxeHgvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9taXBzL2xvb25nc29uL0tjb25maWciCitzb3VyY2UgImFyY2gvbWlwcy9uZXRsb2dpYy9LY29uZmlnIgogCiBlbmRtZW51CiAKQEAgLTk5Nyw5ICsxMDQ0LDYgQEAKIGNvbmZpZyBJUlFfR0lDCiAJYm9vbAogCi1jb25maWcgSVJRX0NQVV9PQ1RFT04KLQlib29sCi0KIGNvbmZpZyBNSVBTX0JPQVJEU19HRU4KIAlib29sCiAKQEAgLTEzNTksOCArMTQwMyw2IEBACiBjb25maWcgQ1BVX0NBVklVTV9PQ1RFT04KIAlib29sICJDYXZpdW0gT2N0ZW9uIHByb2Nlc3NvciIKIAlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX0NBVklVTV9PQ1RFT04KLQlzZWxlY3QgSVJRX0NQVQotCXNlbGVjdCBJUlFfQ1BVX09DVEVPTgogCXNlbGVjdCBDUFVfSEFTX1BSRUZFVENICiAJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUApAQCAtMTQyNSw2ICsxNDY3LDE3IEBACiAJaGVscAogCSAgQnJvYWRjb20gQk1JUFM1MDAwIHByb2Nlc3NvcnMuCiAKK2NvbmZpZyBDUFVfWExSCisJYm9vbCAiTmV0bG9naWMgWExSIFNvQyIKKwlkZXBlbmRzIG9uIFNZU19IQVNfQ1BVX1hMUgorCXNlbGVjdCBDUFVfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCisJc2VsZWN0IENQVV9TVVBQT1JUU182NEJJVF9LRVJORUwKKwlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hJR0hNRU0KKwlzZWxlY3QgV0VBS19PUkRFUklORworCXNlbGVjdCBXRUFLX1JFT1JERVJJTkdfQkVZT05EX0xMU0MKKwlzZWxlY3QgQ1BVX1NVUFBPUlRTX0hVR0VQQUdFUworCWhlbHAKKwkgIE5ldGxvZ2ljIE1pY3Jvc3lzdGVtcyBYTFIvWExTIHByb2Nlc3NvcnMuCiBlbmRjaG9pY2UKIAogaWYgQ1BVX0xPT05HU09OMkYKQEAgLTE1NTUsNiArMTYwOCw5IEBACiBjb25maWcgU1lTX0hBU19DUFVfQk1JUFM1MDAwCiAJYm9vbAogCitjb25maWcgU1lTX0hBU19DUFVfWExSCisJYm9vbAorCiAjCiAjIENQVSBtYXkgcmVvcmRlciBSLT5SLCBSLT5XLCBXLT5SLCBXLT5XCiAjIFJlb3JkZXJpbmcgYmV5b25kIExMIGFuZCBTQyBpcyBoYW5kbGVkIGluIFdFQUtfUkVPUkRFUklOR19CRVlPTkRfTExTQwpAQCAtMjMzOSw2ICsyMzk1LDcgQEAKIAogY29uZmlnIEk4MjUzCiAJYm9vbAorCXNlbGVjdCBDTEtTUkNfSTgyNTMKIAlzZWxlY3QgTUlQU19FWFRFUk5BTF9USU1FUgogCiBjb25maWcgWk9ORV9ETUEzMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDUzZTM1MTQuLjg4NDgxOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTE5MSw2ICsxOTEsMTggQEAKICMKIGluY2x1ZGUgJChzcmN0cmVlKS9hcmNoL21pcHMvS2J1aWxkLnBsYXRmb3JtcwogCisjCisjIE5FVExPR0lDIFNPQyBDb21tb24gKGNvbW1vbikKKyMKK2NmbGFncy0kKENPTkZJR19OTE1fQ09NTU9OKQkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLW5ldGxvZ2ljCitjZmxhZ3MtJChDT05GSUdfTkxNX0NPTU1PTikJCSs9IC1JJChzcmN0cmVlKS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMKKworIworIyBORVRMT0dJQyBYTFIvWExTIFNvQywgU2ltdWxhdG9yIGFuZCBib2FyZHMKKyMKK2NvcmUtJChDT05GSUdfTkxNX1hMUikgICAgICAJCSs9IGFyY2gvbWlwcy9uZXRsb2dpYy94bHIvCitsb2FkLSQoQ09ORklHX05MTV9YTFJfQk9BUkQpCQkrPSAweGZmZmZmZmZmODQwMDAwMDAKKwogY2ZsYWdzLXkJCQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtZ2VuZXJpYwogZHJpdmVycy0kKENPTkZJR19QQ0kpCQkrPSBhcmNoL21pcHMvcGNpLwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZGJkbWEuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCmluZGV4IGNhMDUwNmEuLjNhNWFiYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kYmRtYS5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CiAKQEAgLTU4LDcgKzU4LDggQEAKIC8qIEkgY291bGRuJ3QgZmluZCBhIG1hY3JvIHRoYXQgZGlkIHRoaXMuLi4gKi8KICNkZWZpbmUgQUxJR05fQUREUih4LCBhKQkoKCgodTMyKSh4KSkgKyAoYS0xKSkgJiB+KGEtMSkpCiAKLXN0YXRpYyBkYmRtYV9nbG9iYWxfdCAqZGJkbWFfZ3B0ciA9IChkYmRtYV9nbG9iYWxfdCAqKURETUFfR0xPQkFMX0JBU0U7CitzdGF0aWMgZGJkbWFfZ2xvYmFsX3QgKmRiZG1hX2dwdHIgPQorCQkJKGRiZG1hX2dsb2JhbF90ICopS1NFRzFBRERSKEFVMTU1MF9EQkRNQV9DT05GX1BIWVNfQUREUik7CiBzdGF0aWMgaW50IGRiZG1hX2luaXRpYWxpemVkOwogCiBzdGF0aWMgZGJkZXZfdGFiX3QgZGJkZXZfdGFiW10gPSB7CkBAIC0yOTksNyArMzAwLDcgQEAKIAlpZiAoY3RwICE9IE5VTEwpIHsKIAkJbWVtc2V0KGN0cCwgMCwgc2l6ZW9mKGNoYW5fdGFiX3QpKTsKIAkJY3RwLT5jaGFuX2luZGV4ID0gY2hhbiA9IGk7Ci0JCWRjcCA9IERETUFfQ0hBTk5FTF9CQVNFOworCQlkY3AgPSBLU0VHMUFERFIoQVUxNTUwX0RCRE1BX1BIWVNfQUREUik7CiAJCWRjcCArPSAoMHgwMTAwICogY2hhbik7CiAJCWN0cC0+Y2hhbl9wdHIgPSAoYXUxeF9kbWFfY2hhbl90ICopZGNwOwogCQljcCA9IChhdTF4X2RtYV9jaGFuX3QgKilkY3A7CkBAIC05NTgsMTA1ICs5NTksNzUgQEAKIH0KIAogCi1zdHJ1Y3QgYWxjaGVteV9kYmRtYV9zeXNkZXYgewotCXN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKLQl1MzIgcG1fcmVnc1tOVU1fREJETUFfQ0hBTlMgKyAxXVs2XTsKLX07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGNoZW15X2RiZG1hX3BtX2RhdGFbTlVNX0RCRE1BX0NIQU5TICsgMV1bNl07CiAKLXN0YXRpYyBpbnQgYWxjaGVteV9kYmRtYV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsCi0JCQkJIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgYWxjaGVteV9kYmRtYV9zdXNwZW5kKHZvaWQpCiB7Ci0Jc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2ICpzZGV2ID0KLQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2LCBzeXNkZXYpOwogCWludCBpOwotCXUzMiBhZGRyOworCXZvaWQgX19pb21lbSAqYWRkcjsKIAotCWFkZHIgPSBERE1BX0dMT0JBTF9CQVNFOwotCXNkZXYtPnBtX3JlZ3NbMF1bMF0gPSBhdV9yZWFkbChhZGRyICsgMHgwMCk7Ci0Jc2Rldi0+cG1fcmVnc1swXVsxXSA9IGF1X3JlYWRsKGFkZHIgKyAweDA0KTsKLQlzZGV2LT5wbV9yZWdzWzBdWzJdID0gYXVfcmVhZGwoYWRkciArIDB4MDgpOwotCXNkZXYtPnBtX3JlZ3NbMF1bM10gPSBhdV9yZWFkbChhZGRyICsgMHgwYyk7CisJYWRkciA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTUwX0RCRE1BX0NPTkZfUEhZU19BRERSKTsKKwlhbGNoZW15X2RiZG1hX3BtX2RhdGFbMF1bMF0gPSBfX3Jhd19yZWFkbChhZGRyICsgMHgwMCk7CisJYWxjaGVteV9kYmRtYV9wbV9kYXRhWzBdWzFdID0gX19yYXdfcmVhZGwoYWRkciArIDB4MDQpOworCWFsY2hlbXlfZGJkbWFfcG1fZGF0YVswXVsyXSA9IF9fcmF3X3JlYWRsKGFkZHIgKyAweDA4KTsKKwlhbGNoZW15X2RiZG1hX3BtX2RhdGFbMF1bM10gPSBfX3Jhd19yZWFkbChhZGRyICsgMHgwYyk7CiAKIAkvKiBzYXZlIGNoYW5uZWwgY29uZmlndXJhdGlvbnMgKi8KLQlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPD0gTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKLQkJc2Rldi0+cG1fcmVnc1tpXVswXSA9IGF1X3JlYWRsKGFkZHIgKyAweDAwKTsKLQkJc2Rldi0+cG1fcmVnc1tpXVsxXSA9IGF1X3JlYWRsKGFkZHIgKyAweDA0KTsKLQkJc2Rldi0+cG1fcmVnc1tpXVsyXSA9IGF1X3JlYWRsKGFkZHIgKyAweDA4KTsKLQkJc2Rldi0+cG1fcmVnc1tpXVszXSA9IGF1X3JlYWRsKGFkZHIgKyAweDBjKTsKLQkJc2Rldi0+cG1fcmVnc1tpXVs0XSA9IGF1X3JlYWRsKGFkZHIgKyAweDEwKTsKLQkJc2Rldi0+cG1fcmVnc1tpXVs1XSA9IGF1X3JlYWRsKGFkZHIgKyAweDE0KTsKKwlhZGRyID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTE1NTBfREJETUFfUEhZU19BRERSKTsKKwlmb3IgKGkgPSAxOyBpIDw9IE5VTV9EQkRNQV9DSEFOUzsgaSsrKSB7CisJCWFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVswXSA9IF9fcmF3X3JlYWRsKGFkZHIgKyAweDAwKTsKKwkJYWxjaGVteV9kYmRtYV9wbV9kYXRhW2ldWzFdID0gX19yYXdfcmVhZGwoYWRkciArIDB4MDQpOworCQlhbGNoZW15X2RiZG1hX3BtX2RhdGFbaV1bMl0gPSBfX3Jhd19yZWFkbChhZGRyICsgMHgwOCk7CisJCWFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVszXSA9IF9fcmF3X3JlYWRsKGFkZHIgKyAweDBjKTsKKwkJYWxjaGVteV9kYmRtYV9wbV9kYXRhW2ldWzRdID0gX19yYXdfcmVhZGwoYWRkciArIDB4MTApOworCQlhbGNoZW15X2RiZG1hX3BtX2RhdGFbaV1bNV0gPSBfX3Jhd19yZWFkbChhZGRyICsgMHgxNCk7CiAKIAkJLyogaGFsdCBjaGFubmVsICovCi0JCWF1X3dyaXRlbChzZGV2LT5wbV9yZWdzW2ldWzBdICYgfjEsIGFkZHIgKyAweDAwKTsKLQkJYXVfc3luYygpOwotCQl3aGlsZSAoIShhdV9yZWFkbChhZGRyICsgMHgxNCkgJiAxKSkKLQkJCWF1X3N5bmMoKTsKKwkJX19yYXdfd3JpdGVsKGFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVswXSAmIH4xLCBhZGRyICsgMHgwMCk7CisJCXdtYigpOworCQl3aGlsZSAoIShfX3Jhd19yZWFkbChhZGRyICsgMHgxNCkgJiAxKSkKKwkJCXdtYigpOwogCiAJCWFkZHIgKz0gMHgxMDA7CS8qIG5leHQgY2hhbm5lbCBiYXNlICovCiAJfQogCS8qIGRpc2FibGUgY2hhbm5lbCBpbnRlcnJ1cHRzICovCi0JYXVfd3JpdGVsKDAsIERETUFfR0xPQkFMX0JBU0UgKyAweDBjKTsKLQlhdV9zeW5jKCk7CisJYWRkciA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTUwX0RCRE1BX0NPTkZfUEhZU19BRERSKTsKKwlfX3Jhd193cml0ZWwoMCwgYWRkciArIDB4MGMpOworCXdtYigpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWxjaGVteV9kYmRtYV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGFsY2hlbXlfZGJkbWFfcmVzdW1lKHZvaWQpCiB7Ci0Jc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2ICpzZGV2ID0KLQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2LCBzeXNkZXYpOwogCWludCBpOwotCXUzMiBhZGRyOworCXZvaWQgX19pb21lbSAqYWRkcjsKIAotCWFkZHIgPSBERE1BX0dMT0JBTF9CQVNFOwotCWF1X3dyaXRlbChzZGV2LT5wbV9yZWdzWzBdWzBdLCBhZGRyICsgMHgwMCk7Ci0JYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbMF1bMV0sIGFkZHIgKyAweDA0KTsKLQlhdV93cml0ZWwoc2Rldi0+cG1fcmVnc1swXVsyXSwgYWRkciArIDB4MDgpOwotCWF1X3dyaXRlbChzZGV2LT5wbV9yZWdzWzBdWzNdLCBhZGRyICsgMHgwYyk7CisJYWRkciA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTUwX0RCRE1BX0NPTkZfUEhZU19BRERSKTsKKwlfX3Jhd193cml0ZWwoYWxjaGVteV9kYmRtYV9wbV9kYXRhWzBdWzBdLCBhZGRyICsgMHgwMCk7CisJX19yYXdfd3JpdGVsKGFsY2hlbXlfZGJkbWFfcG1fZGF0YVswXVsxXSwgYWRkciArIDB4MDQpOworCV9fcmF3X3dyaXRlbChhbGNoZW15X2RiZG1hX3BtX2RhdGFbMF1bMl0sIGFkZHIgKyAweDA4KTsKKwlfX3Jhd193cml0ZWwoYWxjaGVteV9kYmRtYV9wbV9kYXRhWzBdWzNdLCBhZGRyICsgMHgwYyk7CiAKIAkvKiByZXN0b3JlIGNoYW5uZWwgY29uZmlndXJhdGlvbnMgKi8KLQlmb3IgKGkgPSAxLCBhZGRyID0gRERNQV9DSEFOTkVMX0JBU0U7IGkgPD0gTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bMF0sIGFkZHIgKyAweDAwKTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bMV0sIGFkZHIgKyAweDA0KTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bMl0sIGFkZHIgKyAweDA4KTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bM10sIGFkZHIgKyAweDBjKTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bNF0sIGFkZHIgKyAweDEwKTsKLQkJYXVfd3JpdGVsKHNkZXYtPnBtX3JlZ3NbaV1bNV0sIGFkZHIgKyAweDE0KTsKLQkJYXVfc3luYygpOworCWFkZHIgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTU1MF9EQkRNQV9QSFlTX0FERFIpOworCWZvciAoaSA9IDE7IGkgPD0gTlVNX0RCRE1BX0NIQU5TOyBpKyspIHsKKwkJX19yYXdfd3JpdGVsKGFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVswXSwgYWRkciArIDB4MDApOworCQlfX3Jhd193cml0ZWwoYWxjaGVteV9kYmRtYV9wbV9kYXRhW2ldWzFdLCBhZGRyICsgMHgwNCk7CisJCV9fcmF3X3dyaXRlbChhbGNoZW15X2RiZG1hX3BtX2RhdGFbaV1bMl0sIGFkZHIgKyAweDA4KTsKKwkJX19yYXdfd3JpdGVsKGFsY2hlbXlfZGJkbWFfcG1fZGF0YVtpXVszXSwgYWRkciArIDB4MGMpOworCQlfX3Jhd193cml0ZWwoYWxjaGVteV9kYmRtYV9wbV9kYXRhW2ldWzRdLCBhZGRyICsgMHgxMCk7CisJCV9fcmF3X3dyaXRlbChhbGNoZW15X2RiZG1hX3BtX2RhdGFbaV1bNV0sIGFkZHIgKyAweDE0KTsKKwkJd21iKCk7CiAJCWFkZHIgKz0gMHgxMDA7CS8qIG5leHQgY2hhbm5lbCBiYXNlICovCiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGFsY2hlbXlfZGJkbWFfc3lzZGV2X2NsYXNzID0gewotCS5uYW1lCQk9ICJkYmRtYSIsCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGFsY2hlbXlfZGJkbWFfc3lzY29yZV9vcHMgPSB7CiAJLnN1c3BlbmQJPSBhbGNoZW15X2RiZG1hX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBhbGNoZW15X2RiZG1hX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFsY2hlbXlfZGJkbWFfc3lzZGV2X2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgYWxjaGVteV9kYmRtYV9zeXNkZXYgKnNkZXY7Ci0JaW50IHJldDsKLQotCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmYWxjaGVteV9kYmRtYV9zeXNkZXZfY2xhc3MpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlzZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFsY2hlbXlfZGJkbWFfc3lzZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXNkZXYtPnN5c2Rldi5pZCA9IC0xOwotCXNkZXYtPnN5c2Rldi5jbHMgPSAmYWxjaGVteV9kYmRtYV9zeXNkZXZfY2xhc3M7Ci0JcmV0ID0gc3lzZGV2X3JlZ2lzdGVyKCZzZGV2LT5zeXNkZXYpOwotCWlmIChyZXQpCi0JCWtmcmVlKHNkZXYpOwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBfX2luaXQgYXUxeHh4X2RiZG1hX2luaXQodm9pZCkKIHsKIAlpbnQgaXJxX25yLCByZXQ7CkBAIC0xMDg0LDExICsxMDU1LDcgQEAKIAllbHNlIHsKIAkJZGJkbWFfaW5pdGlhbGl6ZWQgPSAxOwogCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15IERCRE1BIGluaXRpYWxpemVkXG4iKTsKLQkJcmV0ID0gYWxjaGVteV9kYmRtYV9zeXNkZXZfaW5pdCgpOwotCQlpZiAocmV0KSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkRCRE1BIFBNIGluaXQgZmFpbGVkXG4iKTsKLQkJCXJldCA9IDA7Ci0JCX0KKwkJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmFsY2hlbXlfZGJkbWFfc3lzY29yZV9vcHMpOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZG1hLmMKaW5kZXggZDUyNzg4Ny4uMzQ3OTgwZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2RtYS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9kbWEuYwpAQCAtNTgsNiArNTgsOSBAQAogICogcmV0dXJuZWQgZnJvbSByZXF1ZXN0X2RtYS4KICAqLwogCisvKiBETUEgQ2hhbm5lbCByZWdpc3RlciBibG9jayBzcGFjaW5nICovCisjZGVmaW5lIERNQV9DSEFOTkVMX0xFTgkJMHgwMDAwMDEwMAorCiBERUZJTkVfU1BJTkxPQ0soYXUxMDAwX2RtYV9zcGluX2xvY2spOwogCiBzdHJ1Y3QgZG1hX2NoYW4gYXUxMDAwX2RtYV90YWJsZVtOVU1fQVUxMDAwX0RNQV9DSEFOTkVMU10gPSB7CkBAIC03NywyMiArODAsMjMgQEAKIAl1bnNpZ25lZCBpbnQgZmlmb19hZGRyOwogCXVuc2lnbmVkIGludCBkbWFfbW9kZTsKIH0gZG1hX2Rldl90YWJsZVtETUFfTlVNX0RFVl0gPSB7Ci0Je1VBUlQwX0FERFIgKyBVQVJUX1RYLCAwfSwKLQl7VUFSVDBfQUREUiArIFVBUlRfUlgsIDB9LAotCXswLCAwfSwKLQl7MCwgMH0sCi0Je0FDOTdDX0RBVEEsIERNQV9EVzE2IH0sICAgICAgICAgIC8qIGNvaGVyZW50ICovCi0Je0FDOTdDX0RBVEEsIERNQV9EUiB8IERNQV9EVzE2IH0sIC8qIGNvaGVyZW50ICovCi0Je1VBUlQzX0FERFIgKyBVQVJUX1RYLCBETUFfRFc4IHwgRE1BX05DfSwKLQl7VUFSVDNfQUREUiArIFVBUlRfUlgsIERNQV9EUiB8IERNQV9EVzggfCBETUFfTkN9LAotCXtVU0JEX0VQMFJELCBETUFfRFIgfCBETUFfRFc4IHwgRE1BX05DfSwKLQl7VVNCRF9FUDBXUiwgRE1BX0RXOCB8IERNQV9OQ30sCi0Je1VTQkRfRVAyV1IsIERNQV9EVzggfCBETUFfTkN9LAotCXtVU0JEX0VQM1dSLCBETUFfRFc4IHwgRE1BX05DfSwKLQl7VVNCRF9FUDRSRCwgRE1BX0RSIHwgRE1BX0RXOCB8IERNQV9OQ30sCi0Je1VTQkRfRVA1UkQsIERNQV9EUiB8IERNQV9EVzggfCBETUFfTkN9LAotCXtJMlNfREFUQSwgRE1BX0RXMzIgfCBETUFfTkN9LAotCXtJMlNfREFUQSwgRE1BX0RSIHwgRE1BX0RXMzIgfCBETUFfTkN9CisJeyBBVTEwMDBfVUFSVDBfUEhZU19BRERSICsgMHgwNCwgRE1BX0RXOCB9LAkJLyogVUFSVDBfVFggKi8KKwl7IEFVMTAwMF9VQVJUMF9QSFlTX0FERFIgKyAweDAwLCBETUFfRFc4IHwgRE1BX0RSIH0sCS8qIFVBUlQwX1JYICovCisJeyAwLCAwIH0sCS8qIERNQV9SRVEwICovCisJeyAwLCAwIH0sCS8qIERNQV9SRVExICovCisJeyBBVTEwMDBfQUM5N19QSFlTX0FERFIgKyAweDA4LCBETUFfRFcxNiB9LAkJLyogQUM5NyBUWCBjICovCisJeyBBVTEwMDBfQUM5N19QSFlTX0FERFIgKyAweDA4LCBETUFfRFcxNiB8IERNQV9EUiB9LAkvKiBBQzk3IFJYIGMgKi8KKwl7IEFVMTAwMF9VQVJUM19QSFlTX0FERFIgKyAweDA0LCBETUFfRFc4IHwgRE1BX05DIH0sCS8qIFVBUlQzX1RYICovCisJeyBBVTEwMDBfVUFSVDNfUEhZU19BRERSICsgMHgwMCwgRE1BX0RXOCB8IERNQV9OQyB8IERNQV9EUiB9LCAvKiBVQVJUM19SWCAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgwMCwgRE1BX0RXOCB8IERNQV9OQyB8IERNQV9EUiB9LCAvKiBFUDBSRCAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgwNCwgRE1BX0RXOCB8IERNQV9OQyB9LCAvKiBFUDBXUiAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgwOCwgRE1BX0RXOCB8IERNQV9OQyB9LCAvKiBFUDJXUiAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgwYywgRE1BX0RXOCB8IERNQV9OQyB9LCAvKiBFUDNXUiAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgxMCwgRE1BX0RXOCB8IERNQV9OQyB8IERNQV9EUiB9LCAvKiBFUDRSRCAqLworCXsgQVUxMDAwX1VTQkRfUEhZU19BRERSICsgMHgxNCwgRE1BX0RXOCB8IERNQV9OQyB8IERNQV9EUiB9LCAvKiBFUDVSRCAqLworCS8qIG9uIEF1MTUwMCwgdGhlc2UgMiBhcmUgRE1BX1JFUTIvMyAoR1BJTzIwOC8yMDkpIGluc3RlYWQhICovCisJeyBBVTEwMDBfSTJTX1BIWVNfQUREUiArIDB4MDAsIERNQV9EVzMyIHwgRE1BX05DfSwJLyogSTJTIFRYICovCisJeyBBVTEwMDBfSTJTX1BIWVNfQUREUiArIDB4MDAsIERNQV9EVzMyIHwgRE1BX05DIHwgRE1BX0RSfSwgLyogSTJTIFJYICovCiB9OwogCiBpbnQgYXUxMDAwX2RtYV9yZWFkX3Byb2MoY2hhciAqYnVmLCBjaGFyICoqc3RhcnQsIG9mZl90IGZwb3MsCkBAIC0xMjMsMTAgKzEyNywxMCBAQAogCiAvKiBEZXZpY2UgRklGTyBhZGRyZXNzZXMgYW5kIGRlZmF1bHQgRE1BIG1vZGVzIC0gMm5kIGJhbmsgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZG1hX2RldiBkbWFfZGV2X3RhYmxlX2JhbmsyW0RNQV9OVU1fREVWX0JBTksyXSA9IHsKLQl7IFNEMF9YTUlUX0ZJRk8sIERNQV9EUyB8IERNQV9EVzggfSwJCS8qIGNvaGVyZW50ICovCi0JeyBTRDBfUkVDVl9GSUZPLCBETUFfRFMgfCBETUFfRFIgfCBETUFfRFc4IH0sCS8qIGNvaGVyZW50ICovCi0JeyBTRDFfWE1JVF9GSUZPLCBETUFfRFMgfCBETUFfRFc4IH0sCQkvKiBjb2hlcmVudCAqLwotCXsgU0QxX1JFQ1ZfRklGTywgRE1BX0RTIHwgRE1BX0RSIHwgRE1BX0RXOCB9CS8qIGNvaGVyZW50ICovCisJeyBBVTExMDBfU0QwX1BIWVNfQUREUiArIDB4MDAsIERNQV9EUyB8IERNQV9EVzggfSwJCS8qIGNvaGVyZW50ICovCisJeyBBVTExMDBfU0QwX1BIWVNfQUREUiArIDB4MDQsIERNQV9EUyB8IERNQV9EVzggfCBETUFfRFIgfSwJLyogY29oZXJlbnQgKi8KKwl7IEFVMTEwMF9TRDFfUEhZU19BRERSICsgMHgwMCwgRE1BX0RTIHwgRE1BX0RXOCB9LAkJLyogY29oZXJlbnQgKi8KKwl7IEFVMTEwMF9TRDFfUEhZU19BRERSICsgMHgwNCwgRE1BX0RTIHwgRE1BX0RXOCB8IERNQV9EUiB9CS8qIGNvaGVyZW50ICovCiB9OwogCiB2b2lkIGR1bXBfYXUxMDAwX2RtYV9jaGFubmVsKHVuc2lnbmVkIGludCBkbWFucikKQEAgLTIwMiw3ICsyMDYsNyBAQAogCX0KIAogCS8qIGZpbGwgaXQgaW4gKi8KLQljaGFuLT5pbyA9IERNQV9DSEFOTkVMX0JBU0UgKyBpICogRE1BX0NIQU5ORUxfTEVOOworCWNoYW4tPmlvID0gS1NFRzFBRERSKEFVMTAwMF9ETUFfUEhZU19BRERSKSArIGkgKiBETUFfQ0hBTk5FTF9MRU47CiAJY2hhbi0+ZGV2X2lkID0gZGV2X2lkOwogCWNoYW4tPmRldl9zdHIgPSBkZXZfc3RyOwogCWNoYW4tPmZpZm9fYWRkciA9IGRldi0+Zmlmb19hZGRyOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2lycS5jCmluZGV4IDU1ZGQ3YzguLjhiNjBiYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9pcnEuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vaXJxLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9pcnFfY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL21pcHNyZWdzLmg+CkBAIC0zOSw2ICszOSwzNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjEwMDAuaD4KICNlbmRpZgogCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciByZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIElDX0NGRzBSRAkweDQwCisjZGVmaW5lIElDX0NGRzBTRVQJMHg0MAorI2RlZmluZSBJQ19DRkcwQ0xSCTB4NDQKKyNkZWZpbmUgSUNfQ0ZHMVJECTB4NDgKKyNkZWZpbmUgSUNfQ0ZHMVNFVAkweDQ4CisjZGVmaW5lIElDX0NGRzFDTFIJMHg0QworI2RlZmluZSBJQ19DRkcyUkQJMHg1MAorI2RlZmluZSBJQ19DRkcyU0VUCTB4NTAKKyNkZWZpbmUgSUNfQ0ZHMkNMUgkweDU0CisjZGVmaW5lIElDX1JFUTBJTlQJMHg1NAorI2RlZmluZSBJQ19TUkNSRAkweDU4CisjZGVmaW5lIElDX1NSQ1NFVAkweDU4CisjZGVmaW5lIElDX1NSQ0NMUgkweDVDCisjZGVmaW5lIElDX1JFUTFJTlQJMHg1QworI2RlZmluZSBJQ19BU1NJR05SRAkweDYwCisjZGVmaW5lIElDX0FTU0lHTlNFVAkweDYwCisjZGVmaW5lIElDX0FTU0lHTkNMUgkweDY0CisjZGVmaW5lIElDX1dBS0VSRAkweDY4CisjZGVmaW5lIElDX1dBS0VTRVQJMHg2OAorI2RlZmluZSBJQ19XQUtFQ0xSCTB4NkMKKyNkZWZpbmUgSUNfTUFTS1JECTB4NzAKKyNkZWZpbmUgSUNfTUFTS1NFVAkweDcwCisjZGVmaW5lIElDX01BU0tDTFIJMHg3NAorI2RlZmluZSBJQ19SSVNJTkdSRAkweDc4CisjZGVmaW5lIElDX1JJU0lOR0NMUgkweDc4CisjZGVmaW5lIElDX0ZBTExJTkdSRAkweDdDCisjZGVmaW5lIElDX0ZBTExJTkdDTFIJMHg3QworI2RlZmluZSBJQ19URVNUQklUCTB4ODAKKwogc3RhdGljIGludCBhdTF4X2ljX3NldHR5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKTsKIAogLyogTk9URSBvbiBpbnRlcnJ1cHQgcHJpb3JpdGllczogVGhlIG9yaWdpbmFsIHdyaXRlcnMgb2YgdGhpcyBjb2RlIHNhaWQ6CkBAIC0yMjEsODkgKzI1MSwxMDEgQEAKIHN0YXRpYyB2b2lkIGF1MXhfaWMwX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9IGQtPmlycSAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9NQVNLU0VUKTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9XQUtFU0VUKTsKLQlhdV9zeW5jKCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMwX1BIWVNfQUREUik7CisKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19NQVNLU0VUKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19XQUtFU0VUKTsKKwl3bWIoKTsKIH0KIAogc3RhdGljIHZvaWQgYXUxeF9pYzFfdW5tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKIHsKIAl1bnNpZ25lZCBpbnQgYml0ID0gZC0+aXJxIC0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX01BU0tTRVQpOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX1dBS0VTRVQpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMV9QSFlTX0FERFIpOworCisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfTUFTS1NFVCk7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfV0FLRVNFVCk7CiAKIC8qIHZlcnkgaGFja3kuIGRvZXMgdGhlIHBiMTAwMCBjcGxkIGF1dG8tZGlzYWJsZSB0aGlzIGludD8KICAqIG5vd2hlcmUgaW4gdGhlIGN1cnJlbnQga2VybmVsIHNvdXJjZXMgaXMgaXQgZGlzYWJsZWQuCS0tbWxhdQogICovCiAjaWYgZGVmaW5lZChDT05GSUdfTUlQU19QQjEwMDApCiAJaWYgKGQtPmlycSA9PSBBVTEwMDBfR1BJTzE1X0lOVCkKLQkJYXVfd3JpdGVsKDB4NDAwMCwgUEIxMDAwX01EUik7IC8qIGVuYWJsZSBpbnQgKi8KKwkJX19yYXdfd3JpdGVsKDB4NDAwMCwgKHZvaWQgX19pb21lbSAqKVBCMTAwMF9NRFIpOyAvKiBlbmFibGUgaW50ICovCiAjZW5kaWYKLQlhdV9zeW5jKCk7CisJd21iKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF1MXhfaWMwX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBkLT5pcnEgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfTUFTS0NMUik7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfV0FLRUNMUik7Ci0JYXVfc3luYygpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMF9QSFlTX0FERFIpOworCisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfTUFTS0NMUik7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfV0FLRUNMUik7CisJd21iKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF1MXhfaWMxX21hc2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBkLT5pcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfTUFTS0NMUik7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfV0FLRUNMUik7Ci0JYXVfc3luYygpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMV9QSFlTX0FERFIpOworCisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfTUFTS0NMUik7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfV0FLRUNMUik7CisJd21iKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF1MXhfaWMwX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9IGQtPmlycSAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzBfUEhZU19BRERSKTsKIAogCS8qCiAJICogVGhpcyBtYXkgYXNzdW1lIHRoYXQgd2UgZG9uJ3QgZ2V0IGludGVycnVwdHMgZnJvbQogCSAqIGJvdGggZWRnZXMgYXQgb25jZSwgb3IgaWYgd2UgZG8sIHRoYXQgd2UgZG9uJ3QgY2FyZS4KIAkgKi8KLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9GQUxMSU5HQ0xSKTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMF9SSVNJTkdDTFIpOwotCWF1X3N5bmMoKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19GQUxMSU5HQ0xSKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19SSVNJTkdDTFIpOworCXdtYigpOwogfQogCiBzdGF0aWMgdm9pZCBhdTF4X2ljMV9hY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBkLT5pcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUik7CiAKIAkvKgogCSAqIFRoaXMgbWF5IGFzc3VtZSB0aGF0IHdlIGRvbid0IGdldCBpbnRlcnJ1cHRzIGZyb20KIAkgKiBib3RoIGVkZ2VzIGF0IG9uY2UsIG9yIGlmIHdlIGRvLCB0aGF0IHdlIGRvbid0IGNhcmUuCiAJICovCi0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfRkFMTElOR0NMUik7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzFfUklTSU5HQ0xSKTsKLQlhdV9zeW5jKCk7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfRkFMTElOR0NMUik7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfUklTSU5HQ0xSKTsKKwl3bWIoKTsKIH0KIAogc3RhdGljIHZvaWQgYXUxeF9pYzBfbWFza2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdW5zaWduZWQgaW50IGJpdCA9IGQtPmlycSAtIEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzBfUEhZU19BRERSKTsKIAotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX1dBS0VDTFIpOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX01BU0tDTFIpOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX1JJU0lOR0NMUik7Ci0JYXVfd3JpdGVsKDEgPDwgYml0LCBJQzBfRkFMTElOR0NMUik7Ci0JYXVfc3luYygpOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX1dBS0VDTFIpOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX01BU0tDTFIpOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX1JJU0lOR0NMUik7CisJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfRkFMTElOR0NMUik7CisJd21iKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGF1MXhfaWMxX21hc2thY2soc3RydWN0IGlycV9kYXRhICpkKQogewogCXVuc2lnbmVkIGludCBiaXQgPSBkLT5pcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUik7CiAKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9XQUtFQ0xSKTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9NQVNLQ0xSKTsKLQlhdV93cml0ZWwoMSA8PCBiaXQsIElDMV9SSVNJTkdDTFIpOwotCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0ZBTExJTkdDTFIpOwotCWF1X3N5bmMoKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19XQUtFQ0xSKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19NQVNLQ0xSKTsKKwlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19SSVNJTkdDTFIpOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0ZBTExJTkdDTFIpOworCXdtYigpOwogfQogCiBzdGF0aWMgaW50IGF1MXhfaWMxX3NldHdha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgb24pCkBAIC0zMTgsMTMgKzM2MCwxMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl3YWtlbXNrID0gYXVfcmVhZGwoU1lTX1dBS0VNU0spOworCXdha2Vtc2sgPSBfX3Jhd19yZWFkbCgodm9pZCBfX2lvbWVtICopU1lTX1dBS0VNU0spOwogCWlmIChvbikKIAkJd2FrZW1zayB8PSAxIDw8IGJpdDsKIAllbHNlCiAJCXdha2Vtc2sgJj0gfigxIDw8IGJpdCk7Ci0JYXVfd3JpdGVsKHdha2Vtc2ssIFNZU19XQUtFTVNLKTsKLQlhdV9zeW5jKCk7CisJX19yYXdfd3JpdGVsKHdha2Vtc2ssICh2b2lkIF9faW9tZW0gKilTWVNfV0FLRU1TSyk7CisJd21iKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0zNTYsODEgKzM5OCw3NCBAQAogc3RhdGljIGludCBhdTF4X2ljX3NldHR5cGUoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQogewogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcDsKLQl1bnNpZ25lZCBsb25nIGljcls2XTsKLQl1bnNpZ25lZCBpbnQgYml0LCBpYywgaXJxID0gZC0+aXJxOworCXVuc2lnbmVkIGludCBiaXQsIGlycSA9IGQtPmlycTsKIAlpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlciA9IE5VTEw7CiAJdW5zaWduZWQgY2hhciAqbmFtZSA9IE5VTEw7CisJdm9pZCBfX2lvbWVtICpiYXNlOwogCWludCByZXQ7CiAKIAlpZiAoaXJxID49IEFVMTAwMF9JTlRDMV9JTlRfQkFTRSkgewogCQliaXQgPSBpcnEgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CiAJCWNoaXAgPSAmYXUxeF9pYzFfY2hpcDsKLQkJaWMgPSAxOworCQliYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUik7CiAJfSBlbHNlIHsKIAkJYml0ID0gaXJxIC0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOwogCQljaGlwID0gJmF1MXhfaWMwX2NoaXA7Ci0JCWljID0gMDsKKwkJYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMF9QSFlTX0FERFIpOwogCX0KIAogCWlmIChiaXQgPiAzMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpY3JbMF0gPSBpYyA/IElDMV9DRkcwU0VUIDogSUMwX0NGRzBTRVQ7Ci0JaWNyWzFdID0gaWMgPyBJQzFfQ0ZHMVNFVCA6IElDMF9DRkcxU0VUOwotCWljclsyXSA9IGljID8gSUMxX0NGRzJTRVQgOiBJQzBfQ0ZHMlNFVDsKLQlpY3JbM10gPSBpYyA/IElDMV9DRkcwQ0xSIDogSUMwX0NGRzBDTFI7Ci0JaWNyWzRdID0gaWMgPyBJQzFfQ0ZHMUNMUiA6IElDMF9DRkcxQ0xSOwotCWljcls1XSA9IGljID8gSUMxX0NGRzJDTFIgOiBJQzBfQ0ZHMkNMUjsKLQogCXJldCA9IDA7CiAKIAlzd2l0Y2ggKGZsb3dfdHlwZSkgewkvKiBjZmdyZWdzIDI6MTowICovCiAJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoJLyogMDowOjEgKi8KLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbNV0pOwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljcls0XSk7Ci0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzBdKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMkNMUik7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzFDTFIpOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcwU0VUKTsKIAkJaGFuZGxlciA9IGhhbmRsZV9lZGdlX2lycTsKIAkJbmFtZSA9ICJyaXNlZWRnZSI7CiAJCWJyZWFrOwogCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgkvKiAwOjE6MCAqLwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljcls1XSk7Ci0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzFdKTsKLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbM10pOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcyQ0xSKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMVNFVCk7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzBDTFIpOwogCQloYW5kbGVyID0gaGFuZGxlX2VkZ2VfaXJxOwogCQluYW1lID0gImZhbGxlZGdlIjsKIAkJYnJlYWs7CiAJY2FzZSBJUlFfVFlQRV9FREdFX0JPVEg6CS8qIDA6MToxICovCi0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzVdKTsKLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbMV0pOwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljclswXSk7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzJDTFIpOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcxU0VUKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMFNFVCk7CiAJCWhhbmRsZXIgPSBoYW5kbGVfZWRnZV9pcnE7CiAJCW5hbWUgPSAiYm90aGVkZ2UiOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX0xFVkVMX0hJR0g6CS8qIDE6MDoxICovCi0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzJdKTsKLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbNF0pOwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljclswXSk7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzJTRVQpOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcxQ0xSKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMFNFVCk7CiAJCWhhbmRsZXIgPSBoYW5kbGVfbGV2ZWxfaXJxOwogCQluYW1lID0gImhpbGV2ZWwiOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoJLyogMToxOjAgKi8KLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbMl0pOwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljclsxXSk7Ci0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzNdKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMlNFVCk7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzFTRVQpOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcwQ0xSKTsKIAkJaGFuZGxlciA9IGhhbmRsZV9sZXZlbF9pcnE7CiAJCW5hbWUgPSAibG93bGV2ZWwiOwogCQlicmVhazsKIAljYXNlIElSUV9UWVBFX05PTkU6CQkvKiAwOjA6MCAqLwotCQlhdV93cml0ZWwoMSA8PCBiaXQsIGljcls1XSk7Ci0JCWF1X3dyaXRlbCgxIDw8IGJpdCwgaWNyWzRdKTsKLQkJYXVfd3JpdGVsKDEgPDwgYml0LCBpY3JbM10pOworCQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIGJhc2UgKyBJQ19DRkcyQ0xSKTsKKwkJX19yYXdfd3JpdGVsKDEgPDwgYml0LCBiYXNlICsgSUNfQ0ZHMUNMUik7CisJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0NGRzBDTFIpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwogCX0KIAlfX2lycV9zZXRfY2hpcF9oYW5kbGVyX25hbWVfbG9ja2VkKGQtPmlycSwgY2hpcCwgaGFuZGxlciwgbmFtZSk7CiAKLQlhdV9zeW5jKCk7CisJd21iKCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDQ0LDIxICs0NzksMjEgQEAKIAkJb2ZmID0gTUlQU19DUFVfSVJRX0JBU0UgKyA3OwogCQlnb3RvIGhhbmRsZTsKIAl9IGVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVAyKSB7Ci0JCXMgPSBJQzBfUkVRMElOVDsKKwkJcyA9IEtTRUcxQUREUihBVTEwMDBfSUMwX1BIWVNfQUREUikgKyBJQ19SRVEwSU5UOwogCQlvZmYgPSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7CiAJfSBlbHNlIGlmIChwZW5kaW5nICYgQ0FVU0VGX0lQMykgewotCQlzID0gSUMwX1JFUTFJTlQ7CisJCXMgPSBLU0VHMUFERFIoQVUxMDAwX0lDMF9QSFlTX0FERFIpICsgSUNfUkVRMUlOVDsKIAkJb2ZmID0gQVUxMDAwX0lOVEMwX0lOVF9CQVNFOwogCX0gZWxzZSBpZiAocGVuZGluZyAmIENBVVNFRl9JUDQpIHsKLQkJcyA9IElDMV9SRVEwSU5UOworCQlzID0gS1NFRzFBRERSKEFVMTAwMF9JQzFfUEhZU19BRERSKSArIElDX1JFUTBJTlQ7CiAJCW9mZiA9IEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKIAl9IGVsc2UgaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA1KSB7Ci0JCXMgPSBJQzFfUkVRMUlOVDsKKwkJcyA9IEtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUikgKyBJQ19SRVExSU5UOwogCQlvZmYgPSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7CiAJfSBlbHNlCiAJCWdvdG8gc3B1cmlvdXM7CiAKLQlzID0gYXVfcmVhZGwocyk7CisJcyA9IF9fcmF3X3JlYWRsKCh2b2lkIF9faW9tZW0gKilzKTsKIAlpZiAodW5saWtlbHkoIXMpKSB7CiBzcHVyaW91czoKIAkJc3B1cmlvdXNfaW50ZXJydXB0KCk7CkBAIC00NjksNDggKzUwNCw0MiBAQAogCWRvX0lSUShvZmYpOwogfQogCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpY19pbml0KHZvaWQgX19pb21lbSAqYmFzZSkKK3sKKwkvKiBpbml0aWFsaXplIGludGVycnVwdCBjb250cm9sbGVyIHRvIGEgc2FmZSBzdGF0ZSAqLworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSUNfQ0ZHMENMUik7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhc2UgKyBJQ19DRkcxQ0xSKTsKKwlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFzZSArIElDX0NGRzJDTFIpOworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSUNfTUFTS0NMUik7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhc2UgKyBJQ19BU1NJR05DTFIpOworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSUNfV0FLRUNMUik7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhc2UgKyBJQ19TUkNTRVQpOworCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBiYXNlICsgSUNfRkFMTElOR0NMUik7CisJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhc2UgKyBJQ19SSVNJTkdDTFIpOworCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYXNlICsgSUNfVEVTVEJJVCk7CisJd21iKCk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBhdTEwMDBfaW5pdF9pcnEoc3RydWN0IGF1MXh4eF9pcnFtYXAgKm1hcCkKIHsKIAl1bnNpZ25lZCBpbnQgYml0LCBpcnFfbnI7Ci0JaW50IGk7CisJdm9pZCBfX2lvbWVtICpiYXNlOwogCi0JLyoKLQkgKiBJbml0aWFsaXplIGludGVycnVwdCBjb250cm9sbGVycyB0byBhIHNhZmUgc3RhdGUuCi0JICovCi0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9DRkcwQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0NGRzFDTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzBfQ0ZHMkNMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9NQVNLQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX0FTU0lHTkNMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9XQUtFQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX1NSQ1NFVCk7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMF9GQUxMSU5HQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMwX1JJU0lOR0NMUik7Ci0JYXVfd3JpdGVsKDB4MDAwMDAwMDAsIElDMF9URVNUQklUKTsKLQotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfQ0ZHMENMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9DRkcxQ0xSKTsKLQlhdV93cml0ZWwoMHhmZmZmZmZmZiwgSUMxX0NGRzJDTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfTUFTS0NMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9BU1NJR05DTFIpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfV0FLRUNMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9TUkNTRVQpOwotCWF1X3dyaXRlbCgweGZmZmZmZmZmLCBJQzFfRkFMTElOR0NMUik7Ci0JYXVfd3JpdGVsKDB4ZmZmZmZmZmYsIElDMV9SSVNJTkdDTFIpOwotCWF1X3dyaXRlbCgweDAwMDAwMDAwLCBJQzFfVEVTVEJJVCk7Ci0KKwlpY19pbml0KCh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMF9QSFlTX0FERFIpKTsKKwlpY19pbml0KCh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX0lDMV9QSFlTX0FERFIpKTsKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCiAJLyogcmVnaXN0ZXIgYWxsIDY0IHBvc3NpYmxlIElDMCtJQzEgaXJxIHNvdXJjZXMgYXMgdHlwZSAibm9uZSIuCiAJICogVXNlIHNldF9pcnFfdHlwZSgpIHRvIHNldCBlZGdlL2xldmVsIGJlaGF2aW91ciBhdCBydW50aW1lLgogCSAqLwotCWZvciAoaSA9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKLQkgICAgIChpIDwgQVUxMDAwX0lOVEMwX0lOVF9CQVNFICsgMzIpOyBpKyspCi0JCWF1MXhfaWNfc2V0dHlwZShpcnFfZ2V0X2lycV9kYXRhKGkpLCBJUlFfVFlQRV9OT05FKTsKKwlmb3IgKGlycV9uciA9IEFVMTAwMF9JTlRDMF9JTlRfQkFTRTsKKwkgICAgIChpcnFfbnIgPCBBVTEwMDBfSU5UQzBfSU5UX0JBU0UgKyAzMik7IGlycV9ucisrKQorCQlhdTF4X2ljX3NldHR5cGUoaXJxX2dldF9pcnFfZGF0YShpcnFfbnIpLCBJUlFfVFlQRV9OT05FKTsKIAotCWZvciAoaSA9IEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKLQkgICAgIChpIDwgQVUxMDAwX0lOVEMxX0lOVF9CQVNFICsgMzIpOyBpKyspCi0JCWF1MXhfaWNfc2V0dHlwZShpcnFfZ2V0X2lycV9kYXRhKGkpLCBJUlFfVFlQRV9OT05FKTsKKwlmb3IgKGlycV9uciA9IEFVMTAwMF9JTlRDMV9JTlRfQkFTRTsKKwkgICAgIChpcnFfbnIgPCBBVTEwMDBfSU5UQzFfSU5UX0JBU0UgKyAzMik7IGlycV9ucisrKQorCQlhdTF4X2ljX3NldHR5cGUoaXJxX2dldF9pcnFfZGF0YShpcnFfbnIpLCBJUlFfVFlQRV9OT05FKTsKIAogCS8qCiAJICogSW5pdGlhbGl6ZSBJQzAsIHdoaWNoIGlzIGZpeGVkIHBlciBwcm9jZXNzb3IuCkBAIC01MjAsMTMgKzU0OSwxMyBAQAogCiAJCWlmIChpcnFfbnIgPj0gQVUxMDAwX0lOVEMxX0lOVF9CQVNFKSB7CiAJCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzFfSU5UX0JBU0U7Ci0JCQlpZiAobWFwLT5pbV9yZXF1ZXN0KQotCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMxX0FTU0lHTlNFVCk7CisJCQliYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUik7CiAJCX0gZWxzZSB7CiAJCQliaXQgPSBpcnFfbnIgLSBBVTEwMDBfSU5UQzBfSU5UX0JBU0U7Ci0JCQlpZiAobWFwLT5pbV9yZXF1ZXN0KQotCQkJCWF1X3dyaXRlbCgxIDw8IGJpdCwgSUMwX0FTU0lHTlNFVCk7CisJCQliYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMwX1BIWVNfQUREUik7CiAJCX0KKwkJaWYgKG1hcC0+aW1fcmVxdWVzdCkKKwkJCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgYmFzZSArIElDX0FTU0lHTlNFVCk7CiAKIAkJYXUxeF9pY19zZXR0eXBlKGlycV9nZXRfaXJxX2RhdGEoaXJxX25yKSwgbWFwLT5pbV90eXBlKTsKIAkJKyttYXA7CkBAIC01NTYsOTAgKzU4NSw2MiBAQAogCX0KIH0KIAotc3RydWN0IGFsY2hlbXlfaWNfc3lzZGV2IHsKLQlzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwotCXVuc2lnbmVkIGxvbmcgcG1kYXRhWzddOwotfTsKIAotc3RhdGljIGludCBhbGNoZW15X2ljX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgYWxjaGVteV9pY19wbWRhdGFbNyAqIDJdOworCitzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV9pY19zdXNwZW5kX29uZSh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgKmQpCiB7Ci0Jc3RydWN0IGFsY2hlbXlfaWNfc3lzZGV2ICppY2RldiA9Ci0JCQljb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgYWxjaGVteV9pY19zeXNkZXYsIHN5c2Rldik7CisJZFswXSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBJQ19DRkcwUkQpOworCWRbMV0gPSBfX3Jhd19yZWFkbChiYXNlICsgSUNfQ0ZHMVJEKTsKKwlkWzJdID0gX19yYXdfcmVhZGwoYmFzZSArIElDX0NGRzJSRCk7CisJZFszXSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBJQ19TUkNSRCk7CisJZFs0XSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBJQ19BU1NJR05SRCk7CisJZFs1XSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBJQ19XQUtFUkQpOworCWRbNl0gPSBfX3Jhd19yZWFkbChiYXNlICsgSUNfTUFTS1JEKTsKKwlpY19pbml0KGJhc2UpOwkJLyogc2h1dCBpdCB1cCB0b28gd2hpbGUgYXQgaXQgKi8KK30KIAotCWljZGV2LT5wbWRhdGFbMF0gPSBfX3Jhd19yZWFkbChpY2Rldi0+YmFzZSArIElDX0NGRzBSRCk7Ci0JaWNkZXYtPnBtZGF0YVsxXSA9IF9fcmF3X3JlYWRsKGljZGV2LT5iYXNlICsgSUNfQ0ZHMVJEKTsKLQlpY2Rldi0+cG1kYXRhWzJdID0gX19yYXdfcmVhZGwoaWNkZXYtPmJhc2UgKyBJQ19DRkcyUkQpOwotCWljZGV2LT5wbWRhdGFbM10gPSBfX3Jhd19yZWFkbChpY2Rldi0+YmFzZSArIElDX1NSQ1JEKTsKLQlpY2Rldi0+cG1kYXRhWzRdID0gX19yYXdfcmVhZGwoaWNkZXYtPmJhc2UgKyBJQ19BU1NJR05SRCk7Ci0JaWNkZXYtPnBtZGF0YVs1XSA9IF9fcmF3X3JlYWRsKGljZGV2LT5iYXNlICsgSUNfV0FLRVJEKTsKLQlpY2Rldi0+cG1kYXRhWzZdID0gX19yYXdfcmVhZGwoaWNkZXYtPmJhc2UgKyBJQ19NQVNLUkQpOworc3RhdGljIGlubGluZSB2b2lkIGFsY2hlbXlfaWNfcmVzdW1lX29uZSh2b2lkIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGxvbmcgKmQpCit7CisJaWNfaW5pdChiYXNlKTsKIAorCV9fcmF3X3dyaXRlbChkWzBdLCBiYXNlICsgSUNfQ0ZHMFNFVCk7CisJX19yYXdfd3JpdGVsKGRbMV0sIGJhc2UgKyBJQ19DRkcxU0VUKTsKKwlfX3Jhd193cml0ZWwoZFsyXSwgYmFzZSArIElDX0NGRzJTRVQpOworCV9fcmF3X3dyaXRlbChkWzNdLCBiYXNlICsgSUNfU1JDU0VUKTsKKwlfX3Jhd193cml0ZWwoZFs0XSwgYmFzZSArIElDX0FTU0lHTlNFVCk7CisJX19yYXdfd3JpdGVsKGRbNV0sIGJhc2UgKyBJQ19XQUtFU0VUKTsKKwl3bWIoKTsKKworCV9fcmF3X3dyaXRlbChkWzZdLCBiYXNlICsgSUNfTUFTS1NFVCk7CisJd21iKCk7Cit9CisKK3N0YXRpYyBpbnQgYWxjaGVteV9pY19zdXNwZW5kKHZvaWQpCit7CisJYWxjaGVteV9pY19zdXNwZW5kX29uZSgodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzBfUEhZU19BRERSKSwKKwkJCSAgICAgICBhbGNoZW15X2ljX3BtZGF0YSk7CisJYWxjaGVteV9pY19zdXNwZW5kX29uZSgodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzFfUEhZU19BRERSKSwKKwkJCSAgICAgICAmYWxjaGVteV9pY19wbWRhdGFbN10pOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGFsY2hlbXlfaWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBhbGNoZW15X2ljX3Jlc3VtZSh2b2lkKQogewotCXN0cnVjdCBhbGNoZW15X2ljX3N5c2RldiAqaWNkZXYgPQotCQkJY29udGFpbmVyX29mKGRldiwgc3RydWN0IGFsY2hlbXlfaWNfc3lzZGV2LCBzeXNkZXYpOwotCi0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfTUFTS0NMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfQ0ZHMENMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfQ0ZHMUNMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfQ0ZHMkNMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfU1JDQ0xSKTsKLQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgaWNkZXYtPmJhc2UgKyBJQ19BU1NJR05DTFIpOwotCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBpY2Rldi0+YmFzZSArIElDX1dBS0VDTFIpOwotCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBpY2Rldi0+YmFzZSArIElDX1JJU0lOR0NMUik7Ci0JX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGljZGV2LT5iYXNlICsgSUNfRkFMTElOR0NMUik7Ci0JX19yYXdfd3JpdGVsKDB4MDAwMDAwMDAsIGljZGV2LT5iYXNlICsgSUNfVEVTVEJJVCk7Ci0Jd21iKCk7Ci0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbMF0sIGljZGV2LT5iYXNlICsgSUNfQ0ZHMFNFVCk7Ci0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbMV0sIGljZGV2LT5iYXNlICsgSUNfQ0ZHMVNFVCk7Ci0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbMl0sIGljZGV2LT5iYXNlICsgSUNfQ0ZHMlNFVCk7Ci0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbM10sIGljZGV2LT5iYXNlICsgSUNfU1JDU0VUKTsKLQlfX3Jhd193cml0ZWwoaWNkZXYtPnBtZGF0YVs0XSwgaWNkZXYtPmJhc2UgKyBJQ19BU1NJR05TRVQpOwotCV9fcmF3X3dyaXRlbChpY2Rldi0+cG1kYXRhWzVdLCBpY2Rldi0+YmFzZSArIElDX1dBS0VTRVQpOwotCXdtYigpOwotCi0JX19yYXdfd3JpdGVsKGljZGV2LT5wbWRhdGFbNl0sIGljZGV2LT5iYXNlICsgSUNfTUFTS1NFVCk7Ci0Jd21iKCk7Ci0KLQlyZXR1cm4gMDsKKwlhbGNoZW15X2ljX3Jlc3VtZV9vbmUoKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTEwMDBfSUMxX1BIWVNfQUREUiksCisJCQkgICAgICAmYWxjaGVteV9pY19wbWRhdGFbN10pOworCWFsY2hlbXlfaWNfcmVzdW1lX29uZSgodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9JQzBfUEhZU19BRERSKSwKKwkJCSAgICAgIGFsY2hlbXlfaWNfcG1kYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgYWxjaGVteV9pY19zeXNkZXZfY2xhc3MgPSB7Ci0JLm5hbWUJCT0gImljIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgYWxjaGVteV9pY19zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IGFsY2hlbXlfaWNfc3VzcGVuZCwKIAkucmVzdW1lCQk9IGFsY2hlbXlfaWNfcmVzdW1lLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgYWxjaGVteV9pY19zeXNkZXZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYWxjaGVteV9pY19wbV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGFsY2hlbXlfaWNfc3lzZGV2ICppY2RldjsKLQl1bnNpZ25lZCBsb25nIGljYmFzZVsyXSA9IHsgSUMwX1BIWVNfQUREUiwgSUMxX1BIWVNfQUREUiB9OwotCWludCBlcnIsIGk7Ci0KLQllcnIgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmFsY2hlbXlfaWNfc3lzZGV2X2NsYXNzKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQlpY2RldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhbGNoZW15X2ljX3N5c2RldiksIEdGUF9LRVJORUwpOwotCQlpZiAoIWljZGV2KQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJaWNkZXYtPmJhc2UgPSBpb3JlbWFwKGljYmFzZVtpXSwgMHgxMDAwKTsKLQotCQlpY2Rldi0+c3lzZGV2LmlkID0gaTsKLQkJaWNkZXYtPnN5c2Rldi5jbHMgPSAmYWxjaGVteV9pY19zeXNkZXZfY2xhc3M7Ci0JCWVyciA9IHN5c2Rldl9yZWdpc3RlcigmaWNkZXYtPnN5c2Rldik7Ci0JCWlmIChlcnIpIHsKLQkJCWtmcmVlKGljZGV2KTsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9Ci0KKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmYWxjaGVteV9pY19zeXNjb3JlX29wcyk7CiAJcmV0dXJuIDA7CiB9Ci1kZXZpY2VfaW5pdGNhbGwoYWxjaGVteV9pY19zeXNkZXZfaW5pdCk7CitkZXZpY2VfaW5pdGNhbGwoYWxjaGVteV9pY19wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9wbGF0Zm9ybS5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKaW5kZXggOWU3ODE0ZC4uM2IyYzE4YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3BsYXRmb3JtLmMKQEAgLTEzLDkgKzEzLDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTF4eHguaD4KICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmg+CkBAIC0zMCwyMSArMzEsMTIgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSAwOgotCQlpZiAoKF9fcmF3X3JlYWRsKHBvcnQtPm1lbWJhc2UgKyBVQVJUX01PRF9DTlRSTCkgJiAzKSAhPSAzKSB7Ci0JCQkvKiBwb3dlci1vbiBzZXF1ZW5jZSBhcyBzdWdnZXN0ZWQgaW4gdGhlIGRhdGFib29rcyAqLwotCQkJX19yYXdfd3JpdGVsKDAsIHBvcnQtPm1lbWJhc2UgKyBVQVJUX01PRF9DTlRSTCk7Ci0JCQl3bWIoKTsKLQkJCV9fcmF3X3dyaXRlbCgxLCBwb3J0LT5tZW1iYXNlICsgVUFSVF9NT0RfQ05UUkwpOwotCQkJd21iKCk7Ci0JCX0KLQkJX19yYXdfd3JpdGVsKDMsIHBvcnQtPm1lbWJhc2UgKyBVQVJUX01PRF9DTlRSTCk7IC8qIGZ1bGwgb24gKi8KLQkJd21iKCk7CisJCWFsY2hlbXlfdWFydF9lbmFibGUoQ1BIWVNBRERSKHBvcnQtPm1lbWJhc2UpKTsKIAkJc2VyaWFsODI1MF9kb19wbShwb3J0LCBzdGF0ZSwgb2xkX3N0YXRlKTsKIAkJYnJlYWs7CiAJY2FzZSAzOgkJLyogcG93ZXIgb2ZmICovCiAJCXNlcmlhbDgyNTBfZG9fcG0ocG9ydCwgc3RhdGUsIG9sZF9zdGF0ZSk7Ci0JCV9fcmF3X3dyaXRlbCgwLCBwb3J0LT5tZW1iYXNlICsgVUFSVF9NT0RfQ05UUkwpOwotCQl3bWIoKTsKKwkJYWxjaGVteV91YXJ0X2Rpc2FibGUoQ1BIWVNBRERSKHBvcnQtPm1lbWJhc2UpKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJc2VyaWFsODI1MF9kb19wbShwb3J0LCBzdGF0ZSwgb2xkX3N0YXRlKTsKQEAgLTY1LDM4ICs1Nyw2MCBAQAogCQkucG0JCT0gYWxjaGVteV84MjUwX3BtLAkJXAogCX0KIAotc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBhdTF4MDBfdWFydF9kYXRhW10gPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTAwMF9VQVJUMV9JTlQpLAotCVBPUlQoVUFSVDJfUEhZU19BRERSLCBBVTEwMDBfVUFSVDJfSU5UKSwKLQlQT1JUKFVBUlQzX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQzX0lOVCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTE1MDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQzX1BIWVNfQUREUiwgQVUxNTAwX1VBUlQzX0lOVCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMTAwKQotCVBPUlQoVUFSVDBfUEhZU19BRERSLCBBVTExMDBfVUFSVDBfSU5UKSwKLQlQT1JUKFVBUlQxX1BIWVNfQUREUiwgQVUxMTAwX1VBUlQxX0lOVCksCi0JUE9SVChVQVJUM19QSFlTX0FERFIsIEFVMTEwMF9VQVJUM19JTlQpLAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlQT1JUKFVBUlQwX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQwX0lOVCksCi0JUE9SVChVQVJUMV9QSFlTX0FERFIsIEFVMTU1MF9VQVJUMV9JTlQpLAotCVBPUlQoVUFSVDNfUEhZU19BRERSLCBBVTE1NTBfVUFSVDNfSU5UKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEyMDApCi0JUE9SVChVQVJUMF9QSFlTX0FERFIsIEFVMTIwMF9VQVJUMF9JTlQpLAotCVBPUlQoVUFSVDFfUEhZU19BRERSLCBBVTEyMDBfVUFSVDFfSU5UKSwKLSNlbmRpZgotCXsgfSwKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgYXUxeDAwX3VhcnRfZGF0YVtdWzRdIF9faW5pdGRhdGEgPSB7CisJW0FMQ0hFTVlfQ1BVX0FVMTAwMF0gPSB7CisJCVBPUlQoQVUxMDAwX1VBUlQwX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQwX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQxX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQxX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQyX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQyX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQzX1BIWVNfQUREUiwgQVUxMDAwX1VBUlQzX0lOVCksCisJfSwKKwlbQUxDSEVNWV9DUFVfQVUxNTAwXSA9IHsKKwkJUE9SVChBVTEwMDBfVUFSVDBfUEhZU19BRERSLCBBVTE1MDBfVUFSVDBfSU5UKSwKKwkJUE9SVChBVTEwMDBfVUFSVDNfUEhZU19BRERSLCBBVTE1MDBfVUFSVDNfSU5UKSwKKwl9LAorCVtBTENIRU1ZX0NQVV9BVTExMDBdID0geworCQlQT1JUKEFVMTAwMF9VQVJUMF9QSFlTX0FERFIsIEFVMTEwMF9VQVJUMF9JTlQpLAorCQlQT1JUKEFVMTAwMF9VQVJUMV9QSFlTX0FERFIsIEFVMTEwMF9VQVJUMV9JTlQpLAorCQlQT1JUKEFVMTAwMF9VQVJUM19QSFlTX0FERFIsIEFVMTEwMF9VQVJUM19JTlQpLAorCX0sCisJW0FMQ0hFTVlfQ1BVX0FVMTU1MF0gPSB7CisJCVBPUlQoQVUxMDAwX1VBUlQwX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQwX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQxX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQxX0lOVCksCisJCVBPUlQoQVUxMDAwX1VBUlQzX1BIWVNfQUREUiwgQVUxNTUwX1VBUlQzX0lOVCksCisJfSwKKwlbQUxDSEVNWV9DUFVfQVUxMjAwXSA9IHsKKwkJUE9SVChBVTEwMDBfVUFSVDBfUEhZU19BRERSLCBBVTEyMDBfVUFSVDBfSU5UKSwKKwkJUE9SVChBVTEwMDBfVUFSVDFfUEhZU19BRERSLCBBVTEyMDBfVUFSVDFfSU5UKSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXUxeHgwX3VhcnRfZGV2aWNlID0gewogCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCiAJLmlkCQkJPSBQTEFUODI1MF9ERVZfQVUxWDAwLAotCS5kZXYJCQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSBhdTF4MDBfdWFydF9kYXRhLAotCX0sCiB9OwogCitzdGF0aWMgdm9pZCBfX2luaXQgYWxjaGVteV9zZXR1cF91YXJ0cyhpbnQgY3R5cGUpCit7CisJdW5zaWduZWQgaW50IHVhcnRjbGsgPSBnZXRfYXUxeDAwX3VhcnRfYmF1ZF9iYXNlKCkgKiAxNjsKKwlpbnQgcyA9IHNpemVvZihzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQpOworCWludCBjID0gYWxjaGVteV9nZXRfdWFydHMoY3R5cGUpOworCXN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCAqcG9ydHM7CisKKwlwb3J0cyA9IGt6YWxsb2MocyAqIChjICsgMSksIEdGUF9LRVJORUwpOworCWlmICghcG9ydHMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteTogbm8gbWVtb3J5IGZvciBVQVJUIGRhdGFcbiIpOworCQlyZXR1cm47CisJfQorCW1lbWNweShwb3J0cywgYXUxeDAwX3VhcnRfZGF0YVtjdHlwZV0sIHMgKiBjKTsKKwlhdTF4eDBfdWFydF9kZXZpY2UuZGV2LnBsYXRmb3JtX2RhdGEgPSBwb3J0czsKKworCS8qIEZpbGwgdXAgdWFydGNsay4gKi8KKwlmb3IgKHMgPSAwOyBzIDwgYzsgcysrKQorCQlwb3J0c1tzXS51YXJ0Y2xrID0gdWFydGNsazsKKwlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdTF4eDBfdWFydF9kZXZpY2UpKQorCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15OiBmYWlsZWQgdG8gcmVnaXN0ZXIgVUFSVHNcbiIpOworfQorCiAvKiBPSENJIChVU0IgZnVsbCBzcGVlZCBob3N0IGNvbnRyb2xsZXIpICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXh4eF91c2Jfb2hjaV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CkBAIC0yNjksOCArMjgzLDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTEyMDBfbW1jMF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydCAgICAgICAgICA9IFNEMF9QSFlTX0FERFIsCi0JCS5lbmQgICAgICAgICAgICA9IFNEMF9QSFlTX0FERFIgKyAweDdmZmZmLAorCQkuc3RhcnQgICAgICAgICAgPSBBVTExMDBfU0QwX1BIWVNfQUREUiwKKwkJLmVuZCAgICAgICAgICAgID0gQVUxMTAwX1NEMF9QSFlTX0FERFIgKyAweGZmZiwKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7CkBAIC0zMDUsOCArMzE5LDggQEAKICNpZm5kZWYgQ09ORklHX01JUFNfREIxMjAwCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MTIwMF9tbWMxX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0ICAgICAgICAgID0gU0QxX1BIWVNfQUREUiwKLQkJLmVuZCAgICAgICAgICAgID0gU0QxX1BIWVNfQUREUiArIDB4N2ZmZmYsCisJCS5zdGFydCAgICAgICAgICA9IEFVMTEwMF9TRDFfUEhZU19BRERSLAorCQkuZW5kICAgICAgICAgICAgPSBBVTExMDBfU0QxX1BIWVNfQUREUiArIDB4ZmZmLAogCQkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKQEAgLTM1OSwxNSArMzczLDE2IEBACiAjZW5kaWYKIAogLyogTWFjcm8gdG8gaGVscCBkZWZpbmluZyB0aGUgRXRoZXJuZXQgTUFDIHJlc291cmNlcyAqLworI2RlZmluZSBNQUNfUkVTX0NPVU5UCTMJLyogTUFDIHJlZ3MgYmFzZSwgTUFDIGVuYWJsZSByZWcsIE1BQyBJTlQgKi8KICNkZWZpbmUgTUFDX1JFUyhfYmFzZSwgX2VuYWJsZSwgX2lycSkJCQlcCiAJewkJCQkJCVwKLQkJLnN0YXJ0CT0gQ1BIWVNBRERSKF9iYXNlKSwJCVwKLQkJLmVuZAk9IENQSFlTQUREUihfYmFzZSArIDB4ZmZmZiksCVwKKwkJLnN0YXJ0CT0gX2Jhc2UsCQkJXAorCQkuZW5kCT0gX2Jhc2UgKyAweGZmZmYsCQlcCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkJXAogCX0sCQkJCQkJXAogCXsJCQkJCQlcCi0JCS5zdGFydAk9IENQSFlTQUREUihfZW5hYmxlKSwJCVwKLQkJLmVuZAk9IENQSFlTQUREUihfZW5hYmxlICsgMHgzKSwJXAorCQkuc3RhcnQJPSBfZW5hYmxlLAkJCVwKKwkJLmVuZAk9IF9lbmFibGUgKyAweDMsCQlcCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkJXAogCX0sCQkJCQkJXAogCXsJCQkJCQlcCkBAIC0zNzYsMTkgKzM5MSwyOSBAQAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQkJXAogCX0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTF4eHhfZXRoMF9yZXNvdXJjZXNbXSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCU1BQ19SRVMoQVUxMDAwX0VUSDBfQkFTRSwgQVUxMDAwX01BQzBfRU5BQkxFLCBBVTEwMDBfTUFDMF9ETUFfSU5UKSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NPQ19BVTExMDApCi0JTUFDX1JFUyhBVTExMDBfRVRIMF9CQVNFLCBBVTExMDBfTUFDMF9FTkFCTEUsIEFVMTEwMF9NQUMwX0RNQV9JTlQpLAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlNQUNfUkVTKEFVMTU1MF9FVEgwX0JBU0UsIEFVMTU1MF9NQUMwX0VOQUJMRSwgQVUxNTUwX01BQzBfRE1BX0lOVCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCU1BQ19SRVMoQVUxNTAwX0VUSDBfQkFTRSwgQVUxNTAwX01BQzBfRU5BQkxFLCBBVTE1MDBfTUFDMF9ETUFfSU5UKSwKLSNlbmRpZgorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTF4eHhfZXRoMF9yZXNvdXJjZXNbXVtNQUNfUkVTX0NPVU5UXSBfX2luaXRkYXRhID0geworCVtBTENIRU1ZX0NQVV9BVTEwMDBdID0geworCQlNQUNfUkVTKEFVMTAwMF9NQUMwX1BIWVNfQUREUiwKKwkJCUFVMTAwMF9NQUNFTl9QSFlTX0FERFIsCisJCQlBVTEwMDBfTUFDMF9ETUFfSU5UKQorCX0sCisJW0FMQ0hFTVlfQ1BVX0FVMTUwMF0gPSB7CisJCU1BQ19SRVMoQVUxNTAwX01BQzBfUEhZU19BRERSLAorCQkJQVUxNTAwX01BQ0VOX1BIWVNfQUREUiwKKwkJCUFVMTUwMF9NQUMwX0RNQV9JTlQpCisJfSwKKwlbQUxDSEVNWV9DUFVfQVUxMTAwXSA9IHsKKwkJTUFDX1JFUyhBVTEwMDBfTUFDMF9QSFlTX0FERFIsCisJCQlBVTEwMDBfTUFDRU5fUEhZU19BRERSLAorCQkJQVUxMTAwX01BQzBfRE1BX0lOVCkKKwl9LAorCVtBTENIRU1ZX0NQVV9BVTE1NTBdID0geworCQlNQUNfUkVTKEFVMTAwMF9NQUMwX1BIWVNfQUREUiwKKwkJCUFVMTAwMF9NQUNFTl9QSFlTX0FERFIsCisJCQlBVTE1NTBfTUFDMF9ETUFfSU5UKQorCX0sCiB9OwogCi0KIHN0YXRpYyBzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhIGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLnBoeTFfc2VhcmNoX21hYzAgPSAxLAogfTsKQEAgLTM5NiwyMCArNDIxLDI2IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhdTF4eHhfZXRoMF9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gImF1MTAwMC1ldGgiLAogCS5pZAkJPSAwLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShhdTF4eHhfZXRoMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGF1MXh4eF9ldGgwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IE1BQ19SRVNfQ09VTlQsCiAJLmRldi5wbGF0Zm9ybV9kYXRhID0gJmF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEsCiB9OwogCi0jaWZuZGVmIENPTkZJR19TT0NfQVUxMTAwCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGF1MXh4eF9ldGgxX3Jlc291cmNlc1tdID0gewotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JTUFDX1JFUyhBVTEwMDBfRVRIMV9CQVNFLCBBVTEwMDBfTUFDMV9FTkFCTEUsIEFVMTAwMF9NQUMxX0RNQV9JTlQpLAotI2VsaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTU1MCkKLQlNQUNfUkVTKEFVMTU1MF9FVEgxX0JBU0UsIEFVMTU1MF9NQUMxX0VOQUJMRSwgQVUxNTUwX01BQzFfRE1BX0lOVCksCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKQotCU1BQ19SRVMoQVUxNTAwX0VUSDFfQkFTRSwgQVUxNTAwX01BQzFfRU5BQkxFLCBBVTE1MDBfTUFDMV9ETUFfSU5UKSwKLSNlbmRpZgorc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdTF4eHhfZXRoMV9yZXNvdXJjZXNbXVtNQUNfUkVTX0NPVU5UXSBfX2luaXRkYXRhID0geworCVtBTENIRU1ZX0NQVV9BVTEwMDBdID0geworCQlNQUNfUkVTKEFVMTAwMF9NQUMxX1BIWVNfQUREUiwKKwkJCUFVMTAwMF9NQUNFTl9QSFlTX0FERFIgKyA0LAorCQkJQVUxMDAwX01BQzFfRE1BX0lOVCkKKwl9LAorCVtBTENIRU1ZX0NQVV9BVTE1MDBdID0geworCQlNQUNfUkVTKEFVMTUwMF9NQUMxX1BIWVNfQUREUiwKKwkJCUFVMTUwMF9NQUNFTl9QSFlTX0FERFIgKyA0LAorCQkJQVUxNTAwX01BQzFfRE1BX0lOVCkKKwl9LAorCVtBTENIRU1ZX0NQVV9BVTE1NTBdID0geworCQlNQUNfUkVTKEFVMTAwMF9NQUMxX1BIWVNfQUREUiwKKwkJCUFVMTAwMF9NQUNFTl9QSFlTX0FERFIgKyA0LAorCQkJQVUxNTUwX01BQzFfRE1BX0lOVCkKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEgYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSA9IHsKQEAgLTQxOSwxMSArNDUwLDkgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF1MXh4eF9ldGgxX2RldmljZSA9IHsKIAkubmFtZQkJPSAiYXUxMDAwLWV0aCIsCiAJLmlkCQk9IDEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGF1MXh4eF9ldGgxX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gYXUxeHh4X2V0aDFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gTUFDX1JFU19DT1VOVCwKIAkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmYXUxeHh4X2V0aDFfcGxhdGZvcm1fZGF0YSwKIH07Ci0jZW5kaWYKIAogdm9pZCBfX2luaXQgYXUxeHh4X292ZXJyaWRlX2V0aF9jZmcodW5zaWduZWQgaW50IHBvcnQsCiAJCQlzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhICpldGhfZGF0YSkKQEAgLTQzNCwxNSArNDYzLDY1IEBACiAJaWYgKHBvcnQgPT0gMCkKIAkJbWVtY3B5KCZhdTF4eHhfZXRoMF9wbGF0Zm9ybV9kYXRhLCBldGhfZGF0YSwKIAkJCXNpemVvZihzdHJ1Y3QgYXUxMDAwX2V0aF9wbGF0Zm9ybV9kYXRhKSk7Ci0jaWZuZGVmIENPTkZJR19TT0NfQVUxMTAwCiAJZWxzZQogCQltZW1jcHkoJmF1MXh4eF9ldGgxX3BsYXRmb3JtX2RhdGEsIGV0aF9kYXRhLAogCQkJc2l6ZW9mKHN0cnVjdCBhdTEwMDBfZXRoX3BsYXRmb3JtX2RhdGEpKTsKLSNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYWxjaGVteV9zZXR1cF9tYWNzKGludCBjdHlwZSkKK3sKKwlpbnQgcmV0LCBpOworCXVuc2lnbmVkIGNoYXIgZXRoYWRkcls2XTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1hY3JlczsKKworCS8qIEhhbmRsZSAxc3QgTUFDICovCisJaWYgKGFsY2hlbXlfZ2V0X21hY3MoY3R5cGUpIDwgMSkKKwkJcmV0dXJuOworCisJbWFjcmVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIE1BQ19SRVNfQ09VTlQsIEdGUF9LRVJORUwpOworCWlmICghbWFjcmVzKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkFsY2hlbXk6IG5vIG1lbW9yeSBmb3IgTUFDMCByZXNvdXJjZXNcbiIpOworCQlyZXR1cm47CisJfQorCW1lbWNweShtYWNyZXMsIGF1MXh4eF9ldGgwX3Jlc291cmNlc1tjdHlwZV0sCisJICAgICAgIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogTUFDX1JFU19DT1VOVCk7CisJYXUxeHh4X2V0aDBfZGV2aWNlLnJlc291cmNlID0gbWFjcmVzOworCisJaSA9IHByb21fZ2V0X2V0aGVybmV0X2FkZHIoZXRoYWRkcik7CisJaWYgKCFpICYmICFpc192YWxpZF9ldGhlcl9hZGRyKGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEubWFjKSkKKwkJbWVtY3B5KGF1MXh4eF9ldGgwX3BsYXRmb3JtX2RhdGEubWFjLCBldGhhZGRyLCA2KTsKKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmYXUxeHh4X2V0aDBfZGV2aWNlKTsKKwlpZiAoIXJldCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQWxjaGVteTogZmFpbGVkIHRvIHJlZ2lzdGVyIE1BQzBcbiIpOworCisKKwkvKiBIYW5kbGUgMm5kIE1BQyAqLworCWlmIChhbGNoZW15X2dldF9tYWNzKGN0eXBlKSA8IDIpCisJCXJldHVybjsKKworCW1hY3JlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkgKiBNQUNfUkVTX0NPVU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1hY3JlcykgeworCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15OiBubyBtZW1vcnkgZm9yIE1BQzEgcmVzb3VyY2VzXG4iKTsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkobWFjcmVzLCBhdTF4eHhfZXRoMV9yZXNvdXJjZXNbY3R5cGVdLAorCSAgICAgICBzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIE1BQ19SRVNfQ09VTlQpOworCWF1MXh4eF9ldGgxX2RldmljZS5yZXNvdXJjZSA9IG1hY3JlczsKKworCWV0aGFkZHJbNV0gKz0gMTsJLyogbmV4dCBhZGRyIGZvciAybmQgTUFDICovCisJaWYgKCFpICYmICFpc192YWxpZF9ldGhlcl9hZGRyKGF1MXh4eF9ldGgxX3BsYXRmb3JtX2RhdGEubWFjKSkKKwkJbWVtY3B5KGF1MXh4eF9ldGgxX3BsYXRmb3JtX2RhdGEubWFjLCBldGhhZGRyLCA2KTsKKworCS8qIFJlZ2lzdGVyIHNlY29uZCBNQUMgaWYgZW5hYmxlZCBpbiBwaW5mdW5jICovCisJaWYgKCEoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMilTWVNfUEZfTkkyKSkgeworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmF1MXh4eF9ldGgxX2RldmljZSk7CisJCWlmIChyZXQpCisJCQlwcmludGsoS0VSTl9JTkZPICJBbGNoZW15OiBmYWlsZWQgdG8gcmVnaXN0ZXIgTUFDMVxuIik7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXUxeHh4X3BsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZhdTF4eDBfdWFydF9kZXZpY2UsCiAJJmF1MXh4eF91c2Jfb2hjaV9kZXZpY2UsCiAjaWZkZWYgQ09ORklHX0ZCX0FVMTEwMAogCSZhdTExMDBfbGNkX2RldmljZSwKQEAgLTQ2MCwzNiArNTM5LDE3IEBACiAjaWZkZWYgU01CVVNfUFNDX0JBU0UKIAkmcGJkYl9zbWJ1c19kZXZpY2UsCiAjZW5kaWYKLQkmYXUxeHh4X2V0aDBfZGV2aWNlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYXUxeHh4X3BsYXRmb3JtX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgdWFydGNsayA9IGdldF9hdTF4MDBfdWFydF9iYXVkX2Jhc2UoKSAqIDE2OwotCWludCBlcnIsIGk7Ci0JdW5zaWduZWQgY2hhciBldGhhZGRyWzZdOworCWludCBlcnIsIGN0eXBlID0gYWxjaGVteV9nZXRfY3B1dHlwZSgpOwogCi0JLyogRmlsbCB1cCB1YXJ0Y2xrLiAqLwotCWZvciAoaSA9IDA7IGF1MXgwMF91YXJ0X2RhdGFbaV0uZmxhZ3M7IGkrKykKLQkJYXUxeDAwX3VhcnRfZGF0YVtpXS51YXJ0Y2xrID0gdWFydGNsazsKLQotCS8qIHVzZSBmaXJtd2FyZS1wcm92aWRlZCBtYWMgYWRkciBpZiBhdmFpbGFibGUgYW5kIG5lY2Vzc2FyeSAqLwotCWkgPSBwcm9tX2dldF9ldGhlcm5ldF9hZGRyKGV0aGFkZHIpOwotCWlmICghaSAmJiAhaXNfdmFsaWRfZXRoZXJfYWRkcihhdTF4eHhfZXRoMF9wbGF0Zm9ybV9kYXRhLm1hYykpCi0JCW1lbWNweShhdTF4eHhfZXRoMF9wbGF0Zm9ybV9kYXRhLm1hYywgZXRoYWRkciwgNik7CisJYWxjaGVteV9zZXR1cF91YXJ0cyhjdHlwZSk7CisJYWxjaGVteV9zZXR1cF9tYWNzKGN0eXBlKTsKIAogCWVyciA9IHBsYXRmb3JtX2FkZF9kZXZpY2VzKGF1MXh4eF9wbGF0Zm9ybV9kZXZpY2VzLAogCQkJCSAgIEFSUkFZX1NJWkUoYXUxeHh4X3BsYXRmb3JtX2RldmljZXMpKTsKLSNpZm5kZWYgQ09ORklHX1NPQ19BVTExMDAKLQlldGhhZGRyWzVdICs9IDE7CS8qIG5leHQgYWRkciBmb3IgMm5kIE1BQyAqLwotCWlmICghaSAmJiAhaXNfdmFsaWRfZXRoZXJfYWRkcihhdTF4eHhfZXRoMV9wbGF0Zm9ybV9kYXRhLm1hYykpCi0JCW1lbWNweShhdTF4eHhfZXRoMV9wbGF0Zm9ybV9kYXRhLm1hYywgZXRoYWRkciwgNik7Ci0KLQkvKiBSZWdpc3RlciBzZWNvbmQgTUFDIGlmIGVuYWJsZWQgaW4gcGluZnVuYyAqLwotCWlmICghZXJyICYmICEoYXVfcmVhZGwoU1lTX1BJTkZVTkMpICYgKHUzMilTWVNfUEZfTkkyKSkKLQkJZXJyID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZhdTF4eHhfZXRoMV9kZXZpY2UpOwotI2VuZGlmCi0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jCmluZGV4IDU2MWU1ZGEuLjFiODg3YzggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9zZXR1cC5jCkBAIC01Miw4ICs1Miw2IEBACiAJLyogdGhpcyBpcyBmYXN0ZXIgdGhhbiB3YXN0aW5nIGN5Y2xlcyB0cnlpbmcgdG8gYXBwcm94aW1hdGUgaXQgKi8KIAlwcmVzZXRfbHBqID0gKGVzdF9mcmVxID4+IDEpIC8gSFo7CiAKLQlib2FyZF9zZXR1cCgpOyAgLyogYm9hcmQgc3BlY2lmaWMgc2V0dXAgKi8KLQogCWlmIChhdTF4eHhfY3B1X25lZWRzX2NvbmZpZ19vZCgpKQogCQkvKiBWYXJpb3VzIGVhcmx5IEF1MXh4MCBlcnJhdGEgY29ycmVjdGVkIGJ5IHRoaXMgKi8KIAkJc2V0X2MwX2NvbmZpZygxIDw8IDE5KTsgLyogU2V0IENvbmZpZ1tPRF0gKi8KQEAgLTYxLDYgKzU5LDggQEAKIAkJLyogQ2xlYXIgdG8gb2J0YWluIGJlc3Qgc3lzdGVtIGJ1cyBwZXJmb3JtYW5jZSAqLwogCQljbGVhcl9jMF9jb25maWcoMSA8PCAxOSk7IC8qIENsZWFyIENvbmZpZ1tPRF0gKi8KIAorCWJvYXJkX3NldHVwKCk7ICAvKiBib2FyZCBzcGVjaWZpYyBzZXR1cCAqLworCiAJLyogSU8vTUVNIHJlc291cmNlcy4gKi8KIAlzZXRfaW9fcG9ydF9iYXNlKDApOwogCWlvcG9ydF9yZXNvdXJjZS5zdGFydCA9IElPUE9SVF9SRVNPVVJDRV9TVEFSVDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMgYi9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vdGltZS5jCmluZGV4IDJhZWNiMmYuLmQ1ZGE2YWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi90aW1lLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL3RpbWUuYwpAQCAtMTQxLDggKzE0MSw3IEBACiAJCWdvdG8gY250cl9lcnI7CiAKIAkvKiByZWdpc3RlciBjb3VudGVyMSBjbG9ja3NvdXJjZSBhbmQgZXZlbnQgZGV2aWNlICovCi0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKCZhdTF4X2NvdW50ZXIxX2Nsb2Nrc291cmNlLCAzMjc2OCk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmF1MXhfY291bnRlcjFfY2xvY2tzb3VyY2UpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZhdTF4X2NvdW50ZXIxX2Nsb2Nrc291cmNlLCAzMjc2OCk7CiAKIAljZC0+c2hpZnQgPSAzMjsKIAljZC0+bXVsdCA9IGRpdl9zYygzMjc2OCwgTlNFQ19QRVJfU0VDLCBjZC0+c2hpZnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMTIwMC9zZXR1cC5jCmluZGV4IDRhODk4MDAuLjFkYWM0ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjEyMDAvc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxMjAwL3NldHVwLmMKQEAgLTIzLDYgKzIzLDEzIEBACiAJdW5zaWduZWQgbG9uZyBmcmVxMCwgY2xrc3JjLCBkaXYsIHBmYzsKIAl1bnNpZ25lZCBzaG9ydCB3aG9hbWk7CiAKKwkvKiBTZXQgQ29uZmlnW09EXSAoZGlzYWJsZSBvdmVybGFwcGluZyBidXMgdHJhbnNhY3Rpb24pOgorCSAqIFRoaXMgZ2V0cyByaWQgb2YgYSBfbG90XyBvZiBzcHVyaW91cyBpbnRlcnJ1cHRzIChlc3BlY2lhbGx5CisJICogd3J0LiBJREUpOyBidXQgaW5jdXJzIH4xMCUgcGVyZm9ybWFuY2UgaGl0IGluIHNvbWUKKwkgKiBjcHUtYm91bmQgYXBwbGljYXRpb25zLgorCSAqLworCXNldF9jMF9jb25maWcoMSA8PCAxOSk7CisKIAliY3NyX2luaXQoREIxMjAwX0JDU1JfUEhZU19BRERSLAogCQkgIERCMTIwMF9CQ1NSX1BIWVNfQUREUiArIERCMTIwMF9CQ1NSX0hFWExFRF9PRlMpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvZGIxeDAwL2JvYXJkX3NldHVwLmMKaW5kZXggMDVmMTIwZi4uNWM5NTZmZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL2RiMXgwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9kYjF4MDAvYm9hcmRfc2V0dXAuYwpAQCAtMTI3LDEzICsxMjcsMTAgQEAKIHZvaWQgX19pbml0IGJvYXJkX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBiY3NyMSwgYmNzcjI7Ci0JdTMyIHBpbl9mdW5jOwogCiAJYmNzcjEgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFI7CiAJYmNzcjIgPSBEQjEwMDBfQkNTUl9QSFlTX0FERFIgKyBEQjEwMDBfQkNTUl9IRVhMRURfT0ZTOwogCi0JcGluX2Z1bmMgPSAwOwotCiAjaWZkZWYgQ09ORklHX01JUFNfREIxMDAwCiAJcHJpbnRrKEtFUk5fSU5GTyAiQU1EIEFsY2hlbXkgQXUxMDAwL0RiMTAwMCBCb2FyZFxuIik7CiAjZW5kaWYKQEAgLTE2NCwxMiArMTYxLDE2IEBACiAJLyogTm90IHZhbGlkIGZvciBBdTE1NTAgKi8KICNpZiBkZWZpbmVkKENPTkZJR19JUkRBKSAmJiBcCiAgICAoZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkgfHwgZGVmaW5lZChDT05GSUdfU09DX0FVMTEwMCkpCi0JLyogU2V0IElSRklSU0VMIGluc3RlYWQgb2YgR1BJTzE1ICovCi0JcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQykgfCBTWVNfUEZfSVJGOwotCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwotCS8qIFBvd2VyIG9mZiB1bnRpbCB0aGUgZHJpdmVyIGlzIGluIHVzZSAqLwotCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSywKLQkJCQlCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGKTsKKwl7CisJCXUzMiBwaW5fZnVuYzsKKworCQkvKiBTZXQgSVJGSVJTRUwgaW5zdGVhZCBvZiBHUElPMTUgKi8KKwkJcGluX2Z1bmMgPSBhdV9yZWFkbChTWVNfUElORlVOQykgfCBTWVNfUEZfSVJGOworCQlhdV93cml0ZWwocGluX2Z1bmMsIFNZU19QSU5GVU5DKTsKKwkJLyogUG93ZXIgb2ZmIHVudGlsIHRoZSBkcml2ZXIgaXMgaW4gdXNlICovCisJCWJjc3JfbW9kKEJDU1JfUkVTRVRTLCBCQ1NSX1JFU0VUU19JUkRBX01PREVfTUFTSywKKwkJCSBCQ1NSX1JFU0VUU19JUkRBX01PREVfT0ZGKTsKKwl9CiAjZW5kaWYKIAliY3NyX3dyaXRlKEJDU1JfUENNQ0lBLCAwKTsJLyogdHVybiBvZmYgUENNQ0lBIHBvd2VyICovCiAKQEAgLTE3NywzMSArMTc4LDM1IEBACiAJYWxjaGVteV9ncGlvMV9pbnB1dF9lbmFibGUoKTsKIAogI2lmZGVmIENPTkZJR19NSVBTX01JUkFHRQotCS8qIEdQSU9bMjBdIGlzIG91dHB1dCAqLwotCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIwLCAwKTsKKwl7CisJCXUzMiBwaW5fZnVuYzsKIAotCS8qIFNldCBHUElPWzIxMDoyMDhdIGluc3RlYWQgb2YgU1NJXzAgKi8KLQlwaW5fZnVuYyA9IGF1X3JlYWRsKFNZU19QSU5GVU5DKSB8IFNZU19QRl9TMDsKKwkJLyogR1BJT1syMF0gaXMgb3V0cHV0ICovCisJCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDIwLCAwKTsKIAotCS8qIFNldCBHUElPWzIxNToyMTFdIGZvciBMRURzICovCi0JcGluX2Z1bmMgfD0gNSA8PCAyOworCQkvKiBTZXQgR1BJT1syMTA6MjA4XSBpbnN0ZWFkIG9mIFNTSV8wICovCisJCXBpbl9mdW5jID0gYXVfcmVhZGwoU1lTX1BJTkZVTkMpIHwgU1lTX1BGX1MwOwogCi0JLyogU2V0IEdQSU9bMjE0OjIxM10gZm9yIG1vcmUgTEVEcyAqLwotCXBpbl9mdW5jIHw9IDUgPDwgMTI7CisJCS8qIFNldCBHUElPWzIxNToyMTFdIGZvciBMRURzICovCisJCXBpbl9mdW5jIHw9IDUgPDwgMjsKIAotCS8qIFNldCBHUElPWzIwNzoyMDBdIGluc3RlYWQgb2YgUENNQ0lBL0xDRCAqLwotCXBpbl9mdW5jIHw9IFNZU19QRl9MQ0QgfCBTWVNfUEZfUEM7Ci0JYXVfd3JpdGVsKHBpbl9mdW5jLCBTWVNfUElORlVOQyk7CisJCS8qIFNldCBHUElPWzIxNDoyMTNdIGZvciBtb3JlIExFRHMgKi8KKwkJcGluX2Z1bmMgfD0gNSA8PCAxMjsKIAotCS8qCi0JICogRW5hYmxlIHNwZWFrZXIgYW1wbGlmaWVyLiAgVGhpcyBzaG91bGQKLQkgKiBiZSBwYXJ0IG9mIHRoZSBhdWRpbyBkcml2ZXIuCi0JICovCi0JYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjA5LCAxKTsKKwkJLyogU2V0IEdQSU9bMjA3OjIwMF0gaW5zdGVhZCBvZiBQQ01DSUEvTENEICovCisJCXBpbl9mdW5jIHw9IFNZU19QRl9MQ0QgfCBTWVNfUEZfUEM7CisJCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwogCi0JcG1fcG93ZXJfb2ZmID0gbWlyYWdlX3Bvd2VyX29mZjsKLQlfbWFjaGluZV9oYWx0ID0gbWlyYWdlX3Bvd2VyX29mZjsKLQlfbWFjaGluZV9yZXN0YXJ0ID0gKHZvaWQoKikoY2hhciAqKSltaXBzX3NvZnRyZXNldDsKKwkJLyoKKwkJICogRW5hYmxlIHNwZWFrZXIgYW1wbGlmaWVyLiAgVGhpcyBzaG91bGQKKwkJICogYmUgcGFydCBvZiB0aGUgYXVkaW8gZHJpdmVyLgorCQkgKi8KKwkJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMjA5LCAxKTsKKworCQlwbV9wb3dlcl9vZmYgPSBtaXJhZ2VfcG93ZXJfb2ZmOworCQlfbWFjaGluZV9oYWx0ID0gbWlyYWdlX3Bvd2VyX29mZjsKKwkJX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkKCopKGNoYXIgKikpbWlwc19zb2Z0cmVzZXQ7CisJfQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTUlQU19CT1NQT1JVUwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTAwMC9ib2FyZF9zZXR1cC5jCmluZGV4IDJkODVjNGIuLmU2NGZkY2IgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEwMDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMDAwL2JvYXJkX3NldHVwLmMKQEAgLTY1LDcgKzY1LDcgQEAKIAogCS8qIFNldCBBVVggY2xvY2sgdG8gMTIgTUh6ICogOCA9IDk2IE1IeiAqLwogCWF1X3dyaXRlbCg4LCBTWVNfQVVYUExMKTsKLQlhdV93cml0ZWwoMCwgU1lTX1BJTlNUQVRFUkQpOworCWFsY2hlbXlfZ3BpbzFfaW5wdXRfZW5hYmxlKCk7CiAJdWRlbGF5KDEwMCk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfT0hDSV9IQ0QpIHx8IGRlZmluZWQoQ09ORklHX1VTQl9PSENJX0hDRF9NT0RVTEUpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxNTAwL2JvYXJkX3NldHVwLmMKaW5kZXggODNmNDYyMS4uM2I0ZmEzMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTUwMC9ib2FyZF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjE1MDAvYm9hcmRfc2V0dXAuYwpAQCAtNTYsNyArNTYsNyBAQAogCXN5c19jbGtzcmMgPSBzeXNfZnJlcWN0cmwgPSBwaW5fZnVuYyA9IDA7CiAJLyogU2V0IEFVWCBjbG9jayB0byAxMiBNSHogKiA4ID0gOTYgTUh6ICovCiAJYXVfd3JpdGVsKDgsIFNZU19BVVhQTEwpOwotCWF1X3dyaXRlbCgwLCBTWVNfUElOU1RBVEVSRCk7CisJYWxjaGVteV9ncGlvMV9pbnB1dF9lbmFibGUoKTsKIAl1ZGVsYXkoMTAwKTsKIAogCS8qIEdQSU8yMDEgaXMgaW5wdXQgZm9yIFBDTUNJQSBjYXJkIGRldGVjdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3Byb20uYyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wcm9tLmMKaW5kZXggYmFlYjIxMy4uZTUzMDZiNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3Byb20uYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcHJvbS5jCkBAIC02Miw1ICs2Miw1IEBACiAKIHZvaWQgcHJvbV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsKLSAgICBhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworCWFsY2hlbXlfdWFydF9wdXRjaGFyKEFVMTAwMF9VQVJUMF9QSFlTX0FERFIsIGMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZ3ByL2JvYXJkX3NldHVwLmMgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvYm9hcmRfc2V0dXAuYwppbmRleCBhZDJlM2YxLi41ZjhmMDY5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9ncHIvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvYm9hcmRfc2V0dXAuYwpAQCAtMzYsOSArMzYsNiBAQAogCiAjaW5jbHVkZSA8cHJvbS5oPgogCi0jZGVmaW5lIFVBUlQxX0FERFIJS1NFRzFBRERSKFVBUlQxX1BIWVNfQUREUikKLSNkZWZpbmUgVUFSVDNfQUREUglLU0VHMUFERFIoVUFSVDNfUEhZU19BRERSKQotCiBjaGFyIGlycV90YWJfYWxjaGVteVtdWzVdIF9faW5pdGRhdGEgPSB7CiAJWzBdID0geyAtMSwgQVUxNTAwX1BDSV9JTlRBLCBBVTE1MDBfUENJX0lOVEIsIDB4ZmYsIDB4ZmYgfSwKIH07CkBAIC02NywxOCArNjQsMTUgQEAKIAogdm9pZCBfX2luaXQgYm9hcmRfc2V0dXAodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJUYXJwZXplIElUUyBHUFIgYm9hcmRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlRyYXBlemUgSVRTIEdQUiBib2FyZFxuIik7CiAKIAlwbV9wb3dlcl9vZmYgPSBncHJfcG93ZXJfb2ZmOwogCV9tYWNoaW5lX2hhbHQgPSBncHJfcG93ZXJfb2ZmOwogCV9tYWNoaW5lX3Jlc3RhcnQgPSBncHJfcmVzZXQ7CiAKLQkvKiBFbmFibGUgVUFSVDMgKi8KLQlhdV93cml0ZWwoMHgxLCBVQVJUM19BRERSICsgVUFSVF9NT0RfQ05UUkwpOy8qIGNsb2NrIGVuYWJsZSAoQ0UpICovCi0JYXVfd3JpdGVsKDB4MywgVUFSVDNfQUREUiArIFVBUlRfTU9EX0NOVFJMKTsgLyogQ0UgYW5kICJlbmFibGUiICovCi0JLyogRW5hYmxlIFVBUlQxICovCi0JYXVfd3JpdGVsKDB4MSwgVUFSVDFfQUREUiArIFVBUlRfTU9EX0NOVFJMKTsgLyogY2xvY2sgZW5hYmxlIChDRSkgKi8KLQlhdV93cml0ZWwoMHgzLCBVQVJUMV9BRERSICsgVUFSVF9NT0RfQ05UUkwpOyAvKiBDRSBhbmQgImVuYWJsZSIgKi8KKwkvKiBFbmFibGUgVUFSVDEvMyAqLworCWFsY2hlbXlfdWFydF9lbmFibGUoQVUxMDAwX1VBUlQzX1BIWVNfQUREUik7CisJYWxjaGVteV91YXJ0X2VuYWJsZShBVTEwMDBfVUFSVDFfUEhZU19BRERSKTsKIAogCS8qIFRha2UgYXdheSBSZXNldCBvZiBVTVRTLWNhcmQgKi8KIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgyMTUsIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvZ3ByL2luaXQuYyBiL2FyY2gvbWlwcy9hbGNoZW15L2dwci9pbml0LmMKaW5kZXggZjA0NGY0Yy4uMjI5YWFmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZ3ByL2luaXQuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9ncHIvaW5pdC5jCkBAIC01OSw1ICs1OSw1IEBACiAKIHZvaWQgcHJvbV9wdXRjaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsKLQlhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworCWFsY2hlbXlfdWFydF9wdXRjaGFyKEFVMTAwMF9VQVJUMF9QSFlTX0FERFIsIGMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2JvYXJkX3NldHVwLmMKaW5kZXggY2Y0MzZhYi4uM2FlOTg0YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9ib2FyZF9zZXR1cC5jCkBAIC04Nyw3ICs4Nyw3IEBACiAJYXVfd3JpdGVsKFNZU19QRl9OSTIsIFNZU19QSU5GVU5DKTsKIAogCS8qIEluaXRpYWxpemUgR1BJTyAqLwotCWF1X3dyaXRlbCgweEZGRkZGRkZGLCBTWVNfVFJJT1VUQ0xSKTsKKwlhdV93cml0ZWwofjAsIEtTRUcxQUREUihBVTEwMDBfU1lTX1BIWVNfQUREUikgKyBTWVNfVFJJT1VUQ0xSKTsKIAlhbGNoZW15X2dwaW9fZGlyZWN0aW9uX291dHB1dCgwLCAwKTsJLyogRGlzYWJsZSBNNjZFTiAoUENJIDY2TUh6KSAqLwogCWFsY2hlbXlfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDMsIDEpOwkvKiBEaXNhYmxlIFBDSSBDTEtSVU4jICovCiAJYWxjaGVteV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoMSwgMSk7CS8qIEVuYWJsZSBFWFRfSU8zICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pbml0LmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9pbml0LmMKaW5kZXggZjhkMjU1Ny4uMmU4MWNjNyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL2luaXQuYwpAQCAtNjIsNSArNjIsNSBAQAogCiB2b2lkIHByb21fcHV0Y2hhcih1bnNpZ25lZCBjaGFyIGMpCiB7Ci0JYWxjaGVteV91YXJ0X3B1dGNoYXIoVUFSVDBfUEhZU19BRERSLCBjKTsKKwlhbGNoZW15X3VhcnRfcHV0Y2hhcihBVTEwMDBfVUFSVDBfUEhZU19BRERSLCBjKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9tdHgtMS9wbGF0Zm9ybS5jCmluZGV4IDk1NmY5NDYuLjU1NjI4ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L210eC0xL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2FsY2hlbXkvbXR4LTEvcGxhdGZvcm0uYwpAQCAtNTMsOCArNTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG10eDFfd2R0X3Jlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gMTUsCi0JCS5lbmQJPSAxNSwKKwkJLnN0YXJ0CT0gMjE1LAorCQkuZW5kCT0gMjE1LAogCQkubmFtZQk9ICJtdHgxLXdkdC1ncGlvIiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jIGIvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9ib2FyZF9zZXR1cC5jCmluZGV4IGZlYmZiMGYuLjgxZTU3ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hbGNoZW15L3h4czE1MDAvYm9hcmRfc2V0dXAuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2JvYXJkX3NldHVwLmMKQEAgLTY2LDEzICs2NiwxMCBAQAogCWF1X3dyaXRlbChwaW5fZnVuYywgU1lTX1BJTkZVTkMpOwogCiAJLyogRW5hYmxlIFVBUlQgKi8KLQlhdV93cml0ZWwoMHgwMSwgVUFSVDNfQUREUiArIFVBUlRfTU9EX0NOVFJMKTsgLyogY2xvY2sgZW5hYmxlIChDRSkgKi8KLQltZGVsYXkoMTApOwotCWF1X3dyaXRlbCgweDAzLCBVQVJUM19BRERSICsgVUFSVF9NT0RfQ05UUkwpOyAvKiBDRSBhbmQgImVuYWJsZSIgKi8KLQltZGVsYXkoMTApOwotCi0JLyogRW5hYmxlIERUUiA9IFVTQiBwb3dlciB1cCAqLwotCWF1X3dyaXRlbCgweDAxLCBVQVJUM19BRERSICsgVUFSVF9NQ1IpOyAvKiBVQVJUX01DUl9EVFIgaXMgMHgwMT8/PyAqLworCWFsY2hlbXlfdWFydF9lbmFibGUoQVUxMDAwX1VBUlQzX1BIWVNfQUREUik7CisJLyogRW5hYmxlIERUUiAoTUNSIGJpdCAwKSA9IFVTQiBwb3dlciB1cCAqLworCV9fcmF3X3dyaXRlbCgxLCAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9VQVJUM19QSFlTX0FERFIgKyAweDE4KSk7CisJd21iKCk7CiAKICNpZmRlZiBDT05GSUdfUENJCiAjaWYgZGVmaW5lZChfX01JUFNFQl9fKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkveHhzMTUwMC9pbml0LmMgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYwppbmRleCAxNTEyNWMyLi4wZWUwMmNmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYworKysgYi9hcmNoL21pcHMvYWxjaGVteS94eHMxNTAwL2luaXQuYwpAQCAtNTEsMTQgKzUxLDEzIEBACiAJcHJvbV9pbml0X2NtZGxpbmUoKTsKIAogCW1lbXNpemVfc3RyID0gcHJvbV9nZXRlbnYoIm1lbXNpemUiKTsKLQlpZiAoIW1lbXNpemVfc3RyKQorCWlmICghbWVtc2l6ZV9zdHIgfHwgc3RyaWN0X3N0cnRvdWwobWVtc2l6ZV9zdHIsIDAsICZtZW1zaXplKSkKIAkJbWVtc2l6ZSA9IDB4MDQwMDAwMDA7Ci0JZWxzZQotCQlzdHJpY3Rfc3RydG91bChtZW1zaXplX3N0ciwgMCwgJm1lbXNpemUpOworCiAJYWRkX21lbW9yeV9yZWdpb24oMCwgbWVtc2l6ZSwgQk9PVF9NRU1fUkFNKTsKIH0KIAogdm9pZCBwcm9tX3B1dGNoYXIodW5zaWduZWQgY2hhciBjKQogewotCWFsY2hlbXlfdWFydF9wdXRjaGFyKFVBUlQwX1BIWVNfQUREUiwgYyk7CisJYWxjaGVteV91YXJ0X3B1dGNoYXIoQVUxMDAwX1VBUlQwX1BIWVNfQUREUiwgYyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYXI3L2dwaW8uYyBiL2FyY2gvbWlwcy9hcjcvZ3Bpby5jCmluZGV4IDQyNWRmYTUuLmJiNTcxYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hcjcvZ3Bpby5jCisrKyBiL2FyY2gvbWlwcy9hcjcvZ3Bpby5jCkBAIC0zMjUsOSArMzI1LDcgQEAKIAkJc2l6ZSA9IDB4MWY7CiAJfQogCi0JZ3BjaC0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShBUjdfUkVHU19HUElPLAotCQkJCQlBUjdfUkVHU19HUElPICsgMHgxMCk7Ci0KKwlncGNoLT5yZWdzID0gaW9yZW1hcF9ub2NhY2hlKEFSN19SRUdTX0dQSU8sIHNpemUpOwogCWlmICghZ3BjaC0+cmVncykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gaW9yZW1hcCByZWdzXG4iLAogCQkJCQlncGNoLT5jaGlwLmxhYmVsKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY200N3h4L252cmFtLmMgYi9hcmNoL21pcHMvYmNtNDd4eC9udnJhbS5jCmluZGV4IGU1YjY2MTUuLjU0ZGI4MTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iY200N3h4L252cmFtLmMKKysrIGIvYXJjaC9taXBzL2JjbTQ3eHgvbnZyYW0uYwpAQCAtMyw2ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqIENvcHlyaWdodCAoQykgMjAwNiBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBIYXVrZSBNZWhydGVucyA8aGF1a2VAaGF1a2UtbS5kZT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjMsNyArMjQsNyBAQAogc3RhdGljIGNoYXIgbnZyYW1fYnVmW05WUkFNX1NQQUNFXTsKIAogLyogUHJvYmUgZm9yIE5WUkFNIGhlYWRlciAqLwotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X252cmFtX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIGVhcmx5X252cmFtX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3Qgc3NiX21pcHNjb3JlICptY29yZSA9ICZzc2JfYmNtNDd4eC5taXBzY29yZTsKIAlzdHJ1Y3QgbnZyYW1faGVhZGVyICpoZWFkZXI7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jIGIvYXJjaC9taXBzL2JjbTQ3eHgvc2V0dXAuYwppbmRleCBjOTVmOTBiLi43M2I1MjliIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYmNtNDd4eC9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9iY200N3h4L3NldHVwLmMKQEAgLTMsNiArMyw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEZlbGl4IEZpZXRrYXUgPG5iZEBvcGVud3J0Lm9yZz4KICAqICBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KICAqICBDb3B5cmlnaHQgKEMpIDIwMTAgV2FsZGVtYXIgQnJvZGtvcmIgPHdieEBvcGVuYWRrLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxMSBIYXVrZSBNZWhydGVucyA8aGF1a2VAaGF1a2UtbS5kZT4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC01NywxMCArNTgsNDkgQEAKIH0KIAogI2RlZmluZSBSRUFEX0ZST01fTlZSQU0oX291dHZhciwgbmFtZSwgYnVmKSBcCi0JaWYgKG52cmFtX2dldGVudihuYW1lLCBidWYsIHNpemVvZihidWYpKSA+PSAwKVwKKwlpZiAobnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgbmFtZSwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMClcCiAJCXNwcm9tLT5fb3V0dmFyID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAotc3RhdGljIHZvaWQgYmNtNDd4eF9maWxsX3Nwcm9tKHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKQorI2RlZmluZSBSRUFEX0ZST01fTlZSQU0yKF9vdXR2YXIsIG5hbWUxLCBuYW1lMiwgYnVmKSBcCisJaWYgKG52cmFtX2dldHByZWZpeChwcmVmaXgsIG5hbWUxLCBidWYsIHNpemVvZihidWYpKSA+PSAwIHx8IFwKKwkgICAgbnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgbmFtZTIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID49IDApXAorCQlzcHJvbS0+X291dHZhciA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IG52cmFtX2dldHByZWZpeChjb25zdCBjaGFyICpwcmVmaXgsIGNoYXIgKm5hbWUsCisJCQkJICBjaGFyICpidWYsIGludCBsZW4pCit7CisJaWYgKHByZWZpeCkgeworCQljaGFyIGtleVsxMDBdOworCisJCXNucHJpbnRmKGtleSwgc2l6ZW9mKGtleSksICIlcyVzIiwgcHJlZml4LCBuYW1lKTsKKwkJcmV0dXJuIG52cmFtX2dldGVudihrZXksIGJ1ZiwgbGVuKTsKKwl9CisKKwlyZXR1cm4gbnZyYW1fZ2V0ZW52KG5hbWUsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIHUzMiBudnJhbV9nZXR1MzIoY29uc3QgY2hhciAqbmFtZSwgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWludCBydjsKKwljaGFyIGtleVsxMDBdOworCXUxNiB2YXIwLCB2YXIxOworCisJc25wcmludGYoa2V5LCBzaXplb2Yoa2V5KSwgIiVzMCIsIG5hbWUpOworCXJ2ID0gbnZyYW1fZ2V0ZW52KGtleSwgYnVmLCBsZW4pOworCS8qIHJldHVybiAwIGhlcmUgc28gdGhpcyBsb29rcyBsaWtlIHVuc2V0ICovCisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIDA7CisJdmFyMCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisKKwlzbnByaW50ZihrZXksIHNpemVvZihrZXkpLCAiJXMxIiwgbmFtZSk7CisJcnYgPSBudnJhbV9nZXRlbnYoa2V5LCBidWYsIGxlbik7CisJaWYgKHJ2IDwgMCkKKwkJcmV0dXJuIDA7CisJdmFyMSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CisJcmV0dXJuIHZhcjEgPDwgMTYgfCB2YXIwOworfQorCitzdGF0aWMgdm9pZCBiY200N3h4X2ZpbGxfc3Byb20oc3RydWN0IHNzYl9zcHJvbSAqc3Byb20sIGNvbnN0IGNoYXIgKnByZWZpeCkKIHsKIAljaGFyIGJ1ZlsxMDBdOwogCXUzMiBib2FyZGZsYWdzOwpAQCAtNjksMTEgKzEwOSwxMiBAQAogCiAJc3Byb20tPnJldmlzaW9uID0gMTsgLyogRmFsbGJhY2s6IE9sZCBoYXJkd2FyZSBkb2VzIG5vdCBkZWZpbmUgdGhpcy4gKi8KIAlSRUFEX0ZST01fTlZSQU0ocmV2aXNpb24sICJzcm9tcmV2IiwgYnVmKTsKLQlpZiAobnZyYW1fZ2V0ZW52KCJpbDBtYWNhZGRyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKKwlpZiAobnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgImlsMG1hY2FkZHIiLCBidWYsIHNpemVvZihidWYpKSA+PSAwIHx8CisJICAgIG52cmFtX2dldHByZWZpeChwcmVmaXgsICJtYWNhZGRyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKIAkJbnZyYW1fcGFyc2VfbWFjYWRkcihidWYsIHNwcm9tLT5pbDBtYWMpOwotCWlmIChudnJhbV9nZXRlbnYoImV0MG1hY2FkZHIiLCBidWYsIHNpemVvZihidWYpKSA+PSAwKQorCWlmIChudnJhbV9nZXRwcmVmaXgocHJlZml4LCAiZXQwbWFjYWRkciIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID49IDApCiAJCW52cmFtX3BhcnNlX21hY2FkZHIoYnVmLCBzcHJvbS0+ZXQwbWFjKTsKLQlpZiAobnZyYW1fZ2V0ZW52KCJldDFtYWNhZGRyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKKwlpZiAobnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgImV0MW1hY2FkZHIiLCBidWYsIHNpemVvZihidWYpKSA+PSAwKQogCQludnJhbV9wYXJzZV9tYWNhZGRyKGJ1Ziwgc3Byb20tPmV0MW1hYyk7CiAJUkVBRF9GUk9NX05WUkFNKGV0MHBoeWFkZHIsICJldDBwaHlhZGRyIiwgYnVmKTsKIAlSRUFEX0ZST01fTlZSQU0oZXQxcGh5YWRkciwgImV0MXBoeWFkZHIiLCBidWYpOwpAQCAtOTUsMjAgKzEzNiwzNiBAQAogCVJFQURfRlJPTV9OVlJBTShwYTFoaWIwLCAicGExaGliMCIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHBhMWhpYjIsICJwYTFoaWIxIiwgYnVmKTsKIAlSRUFEX0ZST01fTlZSQU0ocGExaGliMSwgInBhMWhpYjIiLCBidWYpOwotCVJFQURfRlJPTV9OVlJBTShncGlvMCwgIndsMGdwaW8wIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0oZ3BpbzEsICJ3bDBncGlvMSIsIGJ1Zik7Ci0JUkVBRF9GUk9NX05WUkFNKGdwaW8yLCAid2wwZ3BpbzIiLCBidWYpOwotCVJFQURfRlJPTV9OVlJBTShncGlvMywgIndsMGdwaW8zIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0obWF4cHdyX2JnLCAicGEwbWF4cHdyIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0obWF4cHdyX2FsLCAicGExbG9tYXhwd3IiLCBidWYpOwotCVJFQURfRlJPTV9OVlJBTShtYXhwd3JfYSwgInBhMW1heHB3ciIsIGJ1Zik7Ci0JUkVBRF9GUk9NX05WUkFNKG1heHB3cl9haCwgInBhMWhpbWF4cHdyIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0oaXRzc2lfYSwgInBhMWl0c3NpdCIsIGJ1Zik7Ci0JUkVBRF9GUk9NX05WUkFNKGl0c3NpX2JnLCAicGEwaXRzc2l0IiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGdwaW8wLCAibGVkYmgwIiwgIndsMGdwaW8wIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGdwaW8xLCAibGVkYmgxIiwgIndsMGdwaW8xIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGdwaW8yLCAibGVkYmgyIiwgIndsMGdwaW8yIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGdwaW8zLCAibGVkYmgzIiwgIndsMGdwaW8zIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKG1heHB3cl9iZywgIm1heHAyZ2EwIiwgInBhMG1heHB3ciIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNMihtYXhwd3JfYWwsICJtYXhwNWdsYTAiLCAicGExbG9tYXhwd3IiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTTIobWF4cHdyX2EsICJtYXhwNWdhMCIsICJwYTFtYXhwd3IiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTTIobWF4cHdyX2FoLCAibWF4cDVnaGEwIiwgInBhMWhpbWF4cHdyIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0yKGl0c3NpX2JnLCAiaXR0NWdhMCIsICJwYTBpdHNzaXQiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTTIoaXRzc2lfYSwgIml0dDJnYTAiLCAicGExaXRzc2l0IiwgYnVmKTsKIAlSRUFEX0ZST01fTlZSQU0odHJpMmcsICJ0cmkyZyIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHRyaTVnbCwgInRyaTVnbCIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHRyaTVnLCAidHJpNWciLCBidWYpOwogCVJFQURfRlJPTV9OVlJBTSh0cmk1Z2gsICJ0cmk1Z2giLCBidWYpOworCVJFQURfRlJPTV9OVlJBTSh0eHBpZDJnWzBdLCAidHhwaWQyZ2EwIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0odHhwaWQyZ1sxXSwgInR4cGlkMmdhMSIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkMmdbMl0sICJ0eHBpZDJnYTIiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTSh0eHBpZDJnWzNdLCAidHhwaWQyZ2EzIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0odHhwaWQ1Z1swXSwgInR4cGlkNWdhMCIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdbMV0sICJ0eHBpZDVnYTEiLCBidWYpOworCVJFQURfRlJPTV9OVlJBTSh0eHBpZDVnWzJdLCAidHhwaWQ1Z2EyIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0odHhwaWQ1Z1szXSwgInR4cGlkNWdhMyIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdsWzBdLCAidHhwaWQ1Z2xhMCIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdsWzFdLCAidHhwaWQ1Z2xhMSIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdsWzJdLCAidHhwaWQ1Z2xhMiIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdsWzNdLCAidHhwaWQ1Z2xhMyIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdoWzBdLCAidHhwaWQ1Z2hhMCIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdoWzFdLCAidHhwaWQ1Z2hhMSIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdoWzJdLCAidHhwaWQ1Z2hhMiIsIGJ1Zik7CisJUkVBRF9GUk9NX05WUkFNKHR4cGlkNWdoWzNdLCAidHhwaWQ1Z2hhMyIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHJ4cG8yZywgInJ4cG8yZyIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHJ4cG81ZywgInJ4cG81ZyIsIGJ1Zik7CiAJUkVBRF9GUk9NX05WUkFNKHJzc2lzYXYyZywgInJzc2lzYXYyZyIsIGJ1Zik7CkBAIC0xMjAsMTkgKzE3NywyNyBAQAogCVJFQURfRlJPTV9OVlJBTShyc3Npc21mNWcsICJyc3Npc21mNWciLCBidWYpOwogCVJFQURfRlJPTV9OVlJBTShieGE1ZywgImJ4YTVnIiwgYnVmKTsKIAlSRUFEX0ZST01fTlZSQU0oY2NrMmdwbywgImNjazJncG8iLCBidWYpOwotCVJFQURfRlJPTV9OVlJBTShvZmRtMmdwbywgIm9mZG0yZ3BvIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0ob2ZkbTVnbHBvLCAib2ZkbTVnbHBvIiwgYnVmKTsKLQlSRUFEX0ZST01fTlZSQU0ob2ZkbTVncG8sICJvZmRtNWdwbyIsIGJ1Zik7Ci0JUkVBRF9GUk9NX05WUkFNKG9mZG01Z2hwbywgIm9mZG01Z2hwbyIsIGJ1Zik7CiAKLQlpZiAobnZyYW1fZ2V0ZW52KCJib2FyZGZsYWdzIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkgeworCXNwcm9tLT5vZmRtMmdwbyA9IG52cmFtX2dldHUzMigib2ZkbTJncG8iLCBidWYsIHNpemVvZihidWYpKTsKKwlzcHJvbS0+b2ZkbTVnbHBvID0gbnZyYW1fZ2V0dTMyKCJvZmRtNWdscG8iLCBidWYsIHNpemVvZihidWYpKTsKKwlzcHJvbS0+b2ZkbTVncG8gPSBudnJhbV9nZXR1MzIoIm9mZG01Z3BvIiwgYnVmLCBzaXplb2YoYnVmKSk7CisJc3Byb20tPm9mZG01Z2hwbyA9IG52cmFtX2dldHUzMigib2ZkbTVnaHBvIiwgYnVmLCBzaXplb2YoYnVmKSk7CisKKwlSRUFEX0ZST01fTlZSQU0oYW50ZW5uYV9nYWluLmdoejI0LmEwLCAiYWcwIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0oYW50ZW5uYV9nYWluLmdoejI0LmExLCAiYWcxIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0oYW50ZW5uYV9nYWluLmdoejI0LmEyLCAiYWcyIiwgYnVmKTsKKwlSRUFEX0ZST01fTlZSQU0oYW50ZW5uYV9nYWluLmdoejI0LmEzLCAiYWczIiwgYnVmKTsKKwltZW1jcHkoJnNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6NSwgJnNwcm9tLT5hbnRlbm5hX2dhaW4uZ2h6MjQsCisJICAgICAgIHNpemVvZihzcHJvbS0+YW50ZW5uYV9nYWluLmdoejUpKTsKKworCWlmIChudnJhbV9nZXRwcmVmaXgocHJlZml4LCAiYm9hcmRmbGFncyIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID49IDApIHsKIAkJYm9hcmRmbGFncyA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAJCWlmIChib2FyZGZsYWdzKSB7CiAJCQlzcHJvbS0+Ym9hcmRmbGFnc19sbyA9IChib2FyZGZsYWdzICYgMHgwMDAwRkZGRlUpOwogCQkJc3Byb20tPmJvYXJkZmxhZ3NfaGkgPSAoYm9hcmRmbGFncyAmIDB4RkZGRjAwMDBVKSA+PiAxNjsKIAkJfQogCX0KLQlpZiAobnZyYW1fZ2V0ZW52KCJib2FyZGZsYWdzMiIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID49IDApIHsKKwlpZiAobnZyYW1fZ2V0cHJlZml4KHByZWZpeCwgImJvYXJkZmxhZ3MyIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkgewogCQlib2FyZGZsYWdzID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAkJaWYgKGJvYXJkZmxhZ3MpIHsKIAkJCXNwcm9tLT5ib2FyZGZsYWdzMl9sbyA9IChib2FyZGZsYWdzICYgMHgwMDAwRkZGRlUpOwpAQCAtMTQxLDYgKzIwNiwyMiBAQAogCX0KIH0KIAoraW50IGJjbTQ3eHhfZ2V0X3Nwcm9tKHN0cnVjdCBzc2JfYnVzICpidXMsIHN0cnVjdCBzc2Jfc3Byb20gKm91dCkKK3sKKwljaGFyIHByZWZpeFsxMF07CisKKwlpZiAoYnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDSSkgeworCQlzbnByaW50ZihwcmVmaXgsIHNpemVvZihwcmVmaXgpLCAicGNpLyV1LyV1LyIsCisJCQkgYnVzLT5ob3N0X3BjaS0+YnVzLT5udW1iZXIgKyAxLAorCQkJIFBDSV9TTE9UKGJ1cy0+aG9zdF9wY2ktPmRldmZuKSk7CisJCWJjbTQ3eHhfZmlsbF9zcHJvbShvdXQsIHByZWZpeCk7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJjbTQ3eHg6IHVuYWJsZSB0byBmaWxsIFNQUk9NIGZvciBnaXZlbiBidXN0eXBlLlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKwogc3RhdGljIGludCBiY200N3h4X2dldF9pbnZhcmlhbnRzKHN0cnVjdCBzc2JfYnVzICpidXMsCiAJCQkJICAgc3RydWN0IHNzYl9pbml0X2ludmFyaWFudHMgKml2KQogewpAQCAtMTU4LDcgKzIzOSw3IEBACiAJaWYgKG52cmFtX2dldGVudigiYm9hcmRyZXYiLCBidWYsIHNpemVvZihidWYpKSA+PSAwKQogCQlpdi0+Ym9hcmRpbmZvLnJldiA9ICh1MTYpc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAotCWJjbTQ3eHhfZmlsbF9zcHJvbSgmaXYtPnNwcm9tKTsKKwliY200N3h4X2ZpbGxfc3Byb20oJml2LT5zcHJvbSwgTlVMTCk7CiAKIAlpZiAobnZyYW1fZ2V0ZW52KCJjYXJkYnVzIiwgYnVmLCBzaXplb2YoYnVmKSkgPj0gMCkKIAkJaXYtPmhhc19jYXJkYnVzX3Nsb3QgPSAhIXNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwpAQCAtMTcyLDYgKzI1MywxMSBAQAogCWNoYXIgYnVmWzEwMF07CiAJc3RydWN0IHNzYl9taXBzY29yZSAqbWNvcmU7CiAKKwllcnIgPSBzc2JfYXJjaF9yZWdpc3Rlcl9mYWxsYmFja19zcHJvbSgmYmNtNDd4eF9nZXRfc3Byb20pOworCWlmIChlcnIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJjbTQ3eHg6IHNvbWVvbmUgZWxzZSBhbHJlYWR5IHJlZ2lzdGVyZWQiCisJCQkiIGEgc3NiIFNQUk9NIGNhbGxiYWNrIGhhbmRsZXIgKGVyciAlZClcbiIsIGVycik7CisKIAllcnIgPSBzc2JfYnVzX3NzYmJ1c19yZWdpc3Rlcigmc3NiX2JjbTQ3eHgsIFNTQl9FTlVNX0JBU0UsCiAJCQkJICAgICAgYmNtNDd4eF9nZXRfaW52YXJpYW50cyk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9iY202M3h4L2JvYXJkcy9ib2FyZF9iY205NjN4eC5jIGIvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMKaW5kZXggOGRiYThjZi4uNDBiMjIzYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMKKysrIGIvYXJjaC9taXBzL2JjbTYzeHgvYm9hcmRzL2JvYXJkX2JjbTk2M3h4LmMKQEAgLTY0Myw2ICs2NDMsMTcgQEAKIAkuYm9hcmRmbGFnc19sbwkJPSAweDI4NDgsCiAJLmJvYXJkZmxhZ3NfaGkJCT0gMHgwMDAwLAogfTsKKworaW50IGJjbTYzeHhfZ2V0X2ZhbGxiYWNrX3Nwcm9tKHN0cnVjdCBzc2JfYnVzICpidXMsIHN0cnVjdCBzc2Jfc3Byb20gKm91dCkKK3sKKwlpZiAoYnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1BDSSkgeworCQltZW1jcHkob3V0LCAmYmNtNjN4eF9zcHJvbSwgc2l6ZW9mKHN0cnVjdCBzc2Jfc3Byb20pKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidW5hYmxlIHRvIGZpbGwgU1BST00gZm9yIGdpdmVuIGJ1c3R5cGUuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQogI2VuZGlmCiAKIC8qCkBAIC03OTMsOCArODA0LDkgQEAKIAlpZiAoIWJvYXJkX2dldF9tYWNfYWRkcmVzcyhiY202M3h4X3Nwcm9tLmlsMG1hYykpIHsKIAkJbWVtY3B5KGJjbTYzeHhfc3Byb20uZXQwbWFjLCBiY202M3h4X3Nwcm9tLmlsMG1hYywgRVRIX0FMRU4pOwogCQltZW1jcHkoYmNtNjN4eF9zcHJvbS5ldDFtYWMsIGJjbTYzeHhfc3Byb20uaWwwbWFjLCBFVEhfQUxFTik7Ci0JCWlmIChzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20oJmJjbTYzeHhfc3Byb20pIDwgMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGZhbGxiYWNrIFNQUk9NXG4iKTsKKwkJaWYgKHNzYl9hcmNoX3JlZ2lzdGVyX2ZhbGxiYWNrX3Nwcm9tKAorCQkJCSZiY202M3h4X2dldF9mYWxsYmFja19zcHJvbSkgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGZhbGxiYWNrIFNQUk9NXG4iKTsKIAl9CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvY2FsY192bWxpbnV6X2xvYWRfYWRkci5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC9jYWxjX3ZtbGludXpfbG9hZF9hZGRyLmMKaW5kZXggODhjOWQ5NjMuLjlhNjI0MzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvY2FsY192bWxpbnV6X2xvYWRfYWRkci5jCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvY2FsY192bWxpbnV6X2xvYWRfYWRkci5jCkBAIC0xNiw4ICsxNiw4IEBACiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CisJdW5zaWduZWQgbG9uZyBsb25nIHZtbGludXhfc2l6ZSwgdm1saW51eF9sb2FkX2FkZHIsIHZtbGludXpfbG9hZF9hZGRyOwogCXN0cnVjdCBzdGF0IHNiOwotCXVpbnQ2NF90IHZtbGludXhfc2l6ZSwgdm1saW51eF9sb2FkX2FkZHIsIHZtbGludXpfbG9hZF9hZGRyOwogCiAJaWYgKGFyZ2MgIT0gMykgewogCQlmcHJpbnRmKHN0ZGVyciwgIlVzYWdlOiAlcyA8cGF0aG5hbWU+IDx2bWxpbnV4X2xvYWRfYWRkcj5cbiIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtYWxjaGVteS5jIGIvYXJjaC9taXBzL2Jvb3QvY29tcHJlc3NlZC91YXJ0LWFsY2hlbXkuYwppbmRleCAxYmZmMjJmLi5lYjA2M2U2IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYm9vdC9jb21wcmVzc2VkL3VhcnQtYWxjaGVteS5jCisrKyBiL2FyY2gvbWlwcy9ib290L2NvbXByZXNzZWQvdWFydC1hbGNoZW15LmMKQEAgLTMsNSArMyw1IEBACiB2b2lkIHB1dGMoY2hhciBjKQogewogCS8qIGFsbCBjdXJyZW50IChKYW4uIDIwMTApIGluLWtlcm5lbCBib2FyZHMgKi8KLQlhbGNoZW15X3VhcnRfcHV0Y2hhcihVQVJUMF9QSFlTX0FERFIsIGMpOworCWFsY2hlbXlfdWFydF9wdXRjaGFyKEFVMTAwMF9VQVJUMF9QSFlTX0FERFIsIGMpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vS2NvbmZpZyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL0tjb25maWcKaW5kZXggY2FhZTIyOC4uY2FkNTU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vS2NvbmZpZworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9LY29uZmlnCkBAIC0xLDExICsxLDcgQEAKLWNvbmZpZyBDQVZJVU1fT0NURU9OX1NQRUNJRklDX09QVElPTlMKLQlib29sICJFbmFibGUgT2N0ZW9uIHNwZWNpZmljIG9wdGlvbnMiCi0JZGVwZW5kcyBvbiBDUFVfQ0FWSVVNX09DVEVPTgotCWRlZmF1bHQgInkiCitpZiBDUFVfQ0FWSVVNX09DVEVPTgogCiBjb25maWcgQ0FWSVVNX0NONjNYWFAxCiAJYm9vbCAiRW5hYmxlIENONjNYWFAxIGVycmF0YSB3b3Jhcm91bmRzIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAibiIKIAloZWxwCiAJICBUaGUgQ042M1hYUDEgY2hpcCByZXF1aXJlcyBidWlsZCB0aW1lIHdvcmthcm91bmRzIHRvCkBAIC0xNiw3ICsxMiw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OXzJORF9LRVJORUwKIAlib29sICJCdWlsZCB0aGUga2VybmVsIHRvIGJlIHVzZWQgYXMgYSAybmQga2VybmVsIG9uIHRoZSBzYW1lIGNoaXAiCi0JZGVwZW5kcyBvbiBDQVZJVU1fT0NURU9OX1NQRUNJRklDX09QVElPTlMKIAlkZWZhdWx0ICJuIgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGNvbmZpZ3VyZXMgdGhpcyBrZXJuZWwgdG8gYmUgbGlua2VkIGF0IGEgZGlmZmVyZW50CkBAIC0yNiw3ICsyMSw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OX0hXX0ZJWF9VTkFMSUdORUQKIAlib29sICJFbmFibGUgaGFyZHdhcmUgZml4dXBzIG9mIHVuYWxpZ25lZCBsb2FkcyBhbmQgc3RvcmVzIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAieSIKIAloZWxwCiAJICBDb25maWd1cmUgdGhlIE9jdGVvbiBoYXJkd2FyZSB0byBhdXRvbWF0aWNhbGx5IGZpeCB1bmFsaWduZWQgbG9hZHMKQEAgLTM4LDcgKzMyLDYgQEAKIAogY29uZmlnIENBVklVTV9PQ1RFT05fQ1ZNU0VHX1NJWkUKIAlpbnQgIk51bWJlciBvZiBMMSBjYWNoZSBsaW5lcyByZXNlcnZlZCBmb3IgQ1ZNU0VHIG1lbW9yeSIKLQlkZXBlbmRzIG9uIENBVklVTV9PQ1RFT05fU1BFQ0lGSUNfT1BUSU9OUwogCXJhbmdlIDAgNTQKIAlkZWZhdWx0IDEKIAloZWxwCkBAIC01MCw3ICs0Myw2IEBACiAKIGNvbmZpZyBDQVZJVU1fT0NURU9OX0xPQ0tfTDIKIAlib29sICJMb2NrIG9mdGVuIHVzZWQga2VybmVsIGNvZGUgaW4gdGhlIEwyIgotCWRlcGVuZHMgb24gQ0FWSVVNX09DVEVPTl9TUEVDSUZJQ19PUFRJT05TCiAJZGVmYXVsdCAieSIKIAloZWxwCiAJICBFbmFibGUgbG9ja2luZyBwYXJ0cyBvZiB0aGUga2VybmVsIGludG8gdGhlIEwyIGNhY2hlLgpAQCAtOTMsNyArODUsNiBAQAogY29uZmlnIEFSQ0hfU1BBUlNFTUVNX0VOQUJMRQogCWRlZl9ib29sIHkKIAlzZWxlY3QgU1BBUlNFTUVNX1NUQVRJQwotCWRlcGVuZHMgb24gQ1BVX0NBVklVTV9PQ1RFT04KIAogY29uZmlnIENBVklVTV9PQ1RFT05fSEVMUEVSCiAJZGVmX2Jvb2wgeQpAQCAtMTA3LDYgKzk4LDggQEAKIAogY29uZmlnIFNXSU9UTEIKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBDUFVfQ0FWSVVNX09DVEVPTgogCXNlbGVjdCBJT01NVV9IRUxQRVIKIAlzZWxlY3QgTkVFRF9TR19ETUFfTEVOR1RICisKKworZW5kaWYgIyBDUFVfQ0FWSVVNX09DVEVPTgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3NyYy1vY3Rlb24uYyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2NzcmMtb2N0ZW9uLmMKaW5kZXggMjZiZjcxMS4uMjlkNTZhZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vY3NyYy1vY3Rlb24uYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9jc3JjLW9jdGVvbi5jCkBAIC0xMDUsOCArMTA1LDcgQEAKIHZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCiB7CiAJY2xvY2tzb3VyY2VfbWlwcy5yYXRpbmcgPSAzMDA7Ci0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKCZjbG9ja3NvdXJjZV9taXBzLCBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKSk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX21pcHMpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9taXBzLCBvY3Rlb25fZ2V0X2Nsb2NrX3JhdGUoKSk7CiB9CiAKIHN0YXRpYyB1NjQgb2N0ZW9uX3VkZWxheV9mYWN0b3I7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc2V0dXAuYwppbmRleCAwNzA3ZmFlLi4yZDkwMjhmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL3NldHVwLmMKQEAgLTI4OCw3ICsyODgsNiBAQAogCXVuaW9uIG9jdGVvbl9jdm1lbWN0bCBjdm1tZW1jdGw7CiAJdW5pb24gY3ZteF9pb2JfZmF1X3RpbWVvdXQgZmF1X3RpbWVvdXQ7CiAJdW5pb24gY3ZteF9wb3dfbndfdGltIG5tX3RpbTsKLQl1aW50NjRfdCBjdm1jdGw7CiAKIAkvKiBHZXQgdGhlIGN1cnJlbnQgc2V0dGluZ3MgZm9yIENQMF9DVk1NRU1DVExfUkVHICovCiAJY3ZtbWVtY3RsLnU2NCA9IHJlYWRfYzBfY3ZtbWVtY3RsKCk7CkBAIC0zOTIsMTIgKzM5MSw2IEBACiAJCQkgIENPTkZJR19DQVZJVU1fT0NURU9OX0NWTVNFR19TSVpFLAogCQkJICBDT05GSUdfQ0FWSVVNX09DVEVPTl9DVk1TRUdfU0laRSAqIDEyOCk7CiAKLQkvKiBNb3ZlIHRoZSBwZXJmb3JtYW5jZSBjb3VudGVyIGludGVycnVwdHMgdG8gSVJRIDYgKi8KLQljdm1jdGwgPSByZWFkX2MwX2N2bWN0bCgpOwotCWN2bWN0bCAmPSB+KDcgPDwgNyk7Ci0JY3ZtY3RsIHw9IDYgPDwgNzsKLQl3cml0ZV9jMF9jdm1jdGwoY3ZtY3RsKTsKLQogCS8qIFNldCBhIGRlZmF1bHQgZm9yIHRoZSBoYXJkd2FyZSB0aW1lb3V0cyAqLwogCWZhdV90aW1lb3V0LnU2NCA9IDA7CiAJZmF1X3RpbWVvdXQucy50b3V0X3ZhbCA9IDB4ZmZmOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vc21wLmMgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwppbmRleCBiYTc4YjIxLi44YjYwNjQyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9zbXAuYwpAQCAtMzcsMTMgKzM3LDE1IEBACiAJdWludDY0X3QgYWN0aW9uOwogCiAJLyogTG9hZCB0aGUgbWFpbGJveCByZWdpc3RlciB0byBmaWd1cmUgb3V0IHdoYXQgd2UncmUgc3VwcG9zZWQgdG8gZG8gKi8KLQlhY3Rpb24gPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX01CT1hfQ0xSWChjb3JlaWQpKTsKKwlhY3Rpb24gPSBjdm14X3JlYWRfY3NyKENWTVhfQ0lVX01CT1hfQ0xSWChjb3JlaWQpKSAmIDB4ZmZmZjsKIAogCS8qIENsZWFyIHRoZSBtYWlsYm94IHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KIAljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9NQk9YX0NMUlgoY29yZWlkKSwgYWN0aW9uKTsKIAogCWlmIChhY3Rpb24gJiBTTVBfQ0FMTF9GVU5DVElPTikKIAkJc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CisJaWYgKGFjdGlvbiAmIFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGKQorCQlzY2hlZHVsZXJfaXBpKCk7CiAKIAkvKiBDaGVjayBpZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gZmx1c2ggdGhlIGljYWNoZSAqLwogCWlmIChhY3Rpb24gJiBTTVBfSUNBQ0hFX0ZMVVNIKQpAQCAtMjAwLDE2ICsyMDIsMTUgQEAKIAlpZiAobGFiaS0+bGFiaV9zaWduYXR1cmUgIT0gTEFCSV9TSUdOQVRVUkUpCiAJCXBhbmljKCJUaGUgYm9vdGxvYWRlciB2ZXJzaW9uIG9uIHRoaXMgYm9hcmQgaXMgaW5jb3JyZWN0LiIpOwogI2VuZGlmCi0KLQljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9NQk9YX0NMUlgoY3ZteF9nZXRfY29yZV9udW0oKSksIDB4ZmZmZmZmZmYpOworCS8qCisJICogT25seSB0aGUgbG93IG9yZGVyIG1haWxib3ggYml0cyBhcmUgdXNlZCBmb3IgSVBJcywgbGVhdmUKKwkgKiB0aGUgb3RoZXIgYml0cyBhbG9uZS4KKwkgKi8KKwljdm14X3dyaXRlX2NzcihDVk1YX0NJVV9NQk9YX0NMUlgoY3ZteF9nZXRfY29yZV9udW0oKSksIDB4ZmZmZik7CiAJaWYgKHJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfTUJPWDAsIG1haWxib3hfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAotCQkJIm1haWxib3gwIiwgbWFpbGJveF9pbnRlcnJ1cHQpKSB7CisJCQkiU01QLUlQSSIsIG1haWxib3hfaW50ZXJydXB0KSkgewogCQlwYW5pYygiQ2Fubm90IHJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfTUJPWDApXG4iKTsKIAl9Ci0JaWYgKHJlcXVlc3RfaXJxKE9DVEVPTl9JUlFfTUJPWDEsIG1haWxib3hfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAotCQkJIm1haWxib3gxIiwgbWFpbGJveF9pbnRlcnJ1cHQpKSB7Ci0JCXBhbmljKCJDYW5ub3QgcmVxdWVzdF9pcnEoT0NURU9OX0lSUV9NQk9YMSlcbiIpOwotCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9sZW1vdGUyZl9kZWZjb25maWcKaW5kZXggMTY3YzFkMC4uYjZhY2QyZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbGVtb3RlMmZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2xlbW90ZTJmX2RlZmNvbmZpZwpAQCAtODYsOCArODYsOCBAQAogQ09ORklHX05FVF9FTUFUQ0g9eQogQ09ORklHX05FVF9DTFNfQUNUPXkKIENPTkZJR19CVD1tCi1DT05GSUdfQlRfTDJDQVA9bQotQ09ORklHX0JUX1NDTz1tCitDT05GSUdfQlRfTDJDQVA9eQorQ09ORklHX0JUX1NDTz15CiBDT05GSUdfQlRfUkZDT01NPW0KIENPTkZJR19CVF9SRkNPTU1fVFRZPXkKIENPTkZJR19CVF9CTkVQPW0KQEAgLTMyOSw3ICszMjksNyBAQAogQ09ORklHX1VTQl9HQURHRVQ9bQogQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyPXkKIENPTkZJR19NTUM9bQotQ09ORklHX0xFRFNfQ0xBU1M9bQorQ09ORklHX0xFRFNfQ0xBU1M9eQogQ09ORklHX1NUQUdJTkc9eQogIyBDT05GSUdfU1RBR0lOR19FWENMVURFX0JVSUxEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9TTTdYWD15CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKaW5kZXggNzI3MGYzMS4uNTUyN2FiYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwpAQCAtMzc0LDcgKzM3NCw3IEBACiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRT15CiBDT05GSUdfSElEPW0KLUNPTkZJR19MRURTX0NMQVNTPW0KK0NPTkZJR19MRURTX0NMQVNTPXkKIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVI9bQogQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSz15CiBDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tdHgxX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnCmluZGV4IGE5N2E0MmMuLjM3ODYyYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL210eDFfZGVmY29uZmlnCkBAIC0yMjUsOCArMjI1LDggQEAKIENPTkZJR19WTFNJX0ZJUj1tCiBDT05GSUdfTUNTX0ZJUj1tCiBDT05GSUdfQlQ9bQotQ09ORklHX0JUX0wyQ0FQPW0KLUNPTkZJR19CVF9TQ089bQorQ09ORklHX0JUX0wyQ0FQPXkKK0NPTkZJR19CVF9TQ089eQogQ09ORklHX0JUX1JGQ09NTT1tCiBDT05GSUdfQlRfUkZDT01NX1RUWT15CiBDT05GSUdfQlRfQk5FUD1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9ubG1feGxyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL25sbV94bHJfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YjM5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvY29uZmlncy9ubG1feGxyX2RlZmNvbmZpZwpAQCAtMCwwICsxLDU3NCBAQAorQ09ORklHX05MTV9YTFJfQk9BUkQ9eQorQ09ORklHX0hJR0hNRU09eQorQ09ORklHX0tTTT15CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTY1NTM2CitDT05GSUdfU01QPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWT15CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ1JPU1NfQ09NUElMRT0ibWlwczY0LXVua25vd24tbGludXgtZ251LSIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjM9eQorQ09ORklHX1RBU0tTVEFUUz15CitDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKK0NPTkZJR19UQVNLX1hBQ0NUPXkKK0NPTkZJR19UQVNLX0lPX0FDQ09VTlRJTkc9eQorQ09ORklHX0FVRElUPXkKK0NPTkZJR19OQU1FU1BBQ0VTPXkKK0NPTkZJR19TQ0hFRF9BVVRPR1JPVVA9eQorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSJ1c3IvZGV2X2ZpbGVfbGlzdCB1c3Ivcm9vdGZzIgorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19JTklUUkFNRlNfQ09NUFJFU1NJT05fR1pJUD15CisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfRVhQRVJUPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfRUxGX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfUENTUEtSX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BFUkZfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX1BST0ZJTElORz15CitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CitDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFk9eQorQ09ORklHX0JJTkZNVF9NSVNDPW0KK0NPTkZJR19QTV9SVU5USU1FPXkKK0NPTkZJR19QTV9ERUJVRz15CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorQ09ORklHX05FVF9LRVk9bQorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSD15CitDT05GSUdfSVBfUk9VVEVfVkVSQk9TRT15CitDT05GSUdfTkVUX0lQSVA9bQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD1tCitDT05GSUdfVENQX0NPTkdfQURWQU5DRUQ9eQorQ09ORklHX1RDUF9DT05HX0hTVENQPW0KK0NPTkZJR19UQ1BfQ09OR19IWUJMQT1tCitDT05GSUdfVENQX0NPTkdfU0NBTEFCTEU9bQorQ09ORklHX1RDUF9DT05HX0xQPW0KK0NPTkZJR19UQ1BfQ09OR19WRU5PPW0KK0NPTkZJR19UQ1BfQ09OR19ZRUFIPW0KK0NPTkZJR19UQ1BfQ09OR19JTExJTk9JUz1tCitDT05GSUdfVENQX01ENVNJRz15CitDT05GSUdfSVBWNj15CitDT05GSUdfSVBWNl9QUklWQUNZPXkKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9CRUVUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT049bQorQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfSVBWNl9NVUxUSVBMRV9UQUJMRVM9eQorQ09ORklHX05FVExBQkVMPXkKK0NPTkZJR19ORVRGSUxURVI9eQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NFQ01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX05GX0NUX1BST1RPX1VEUExJVEU9bQorQ09ORklHX05GX0NPTk5UUkFDS19BTUFOREE9bQorQ09ORklHX05GX0NPTk5UUkFDS19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19IMzIzPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfTkVUQklPU19OUz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BQVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19TQU5FPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfVEZUUD1tCitDT05GSUdfTkZfQ1RfTkVUTElOSz1tCitDT05GSUdfTkVURklMVEVSX1RQUk9YWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OU0VDTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9OT1RSQUNLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RQUk9YWT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRT1tCitDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9TRUNNQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EU0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRVNQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xFTkdUSD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09TRj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX09XTkVSPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFVj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1Q9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NPQ0tFVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVElTVElDPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVENQTVNTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVElNRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMj1tCitDT05GSUdfSVBfVlM9bQorQ09ORklHX0lQX1ZTX0lQVjY9eQorQ09ORklHX0lQX1ZTX1BST1RPX1RDUD15CitDT05GSUdfSVBfVlNfUFJPVE9fVURQPXkKK0NPTkZJR19JUF9WU19QUk9UT19FU1A9eQorQ09ORklHX0lQX1ZTX1BST1RPX0FIPXkKK0NPTkZJR19JUF9WU19SUj1tCitDT05GSUdfSVBfVlNfV1JSPW0KK0NPTkZJR19JUF9WU19MQz1tCitDT05GSUdfSVBfVlNfV0xDPW0KK0NPTkZJR19JUF9WU19MQkxDPW0KK0NPTkZJR19JUF9WU19MQkxDUj1tCitDT05GSUdfSVBfVlNfREg9bQorQ09ORklHX0lQX1ZTX1NIPW0KK0NPTkZJR19JUF9WU19TRUQ9bQorQ09ORklHX0lQX1ZTX05RPW0KK0NPTkZJR19JUF9WU19GVFA9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0FIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX1RUTD1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9NQU5HTEU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfU0VDVVJJVFk9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWNj1tCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9NSD1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX0ZJTFRFUj1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQNl9ORl9NQU5HTEU9bQorQ09ORklHX0lQNl9ORl9SQVc9bQorQ09ORklHX0lQNl9ORl9TRUNVUklUWT1tCitDT05GSUdfREVDTkVUX05GX0dSQUJVTEFUT1I9bQorQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUz1tCitDT05GSUdfQlJJREdFX0VCVF9CUk9VVEU9bQorQ09ORklHX0JSSURHRV9FQlRfVF9GSUxURVI9bQorQ09ORklHX0JSSURHRV9FQlRfVF9OQVQ9bQorQ09ORklHX0JSSURHRV9FQlRfODAyXzM9bQorQ09ORklHX0JSSURHRV9FQlRfQU1PTkc9bQorQ09ORklHX0JSSURHRV9FQlRfQVJQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQPW0KK0NPTkZJR19CUklER0VfRUJUX0lQNj1tCitDT05GSUdfQlJJREdFX0VCVF9MSU1JVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLPW0KK0NPTkZJR19CUklER0VfRUJUX1BLVFRZUEU9bQorQ09ORklHX0JSSURHRV9FQlRfU1RQPW0KK0NPTkZJR19CUklER0VfRUJUX1ZMQU49bQorQ09ORklHX0JSSURHRV9FQlRfQVJQUkVQTFk9bQorQ09ORklHX0JSSURHRV9FQlRfRE5BVD1tCitDT05GSUdfQlJJREdFX0VCVF9NQVJLX1Q9bQorQ09ORklHX0JSSURHRV9FQlRfUkVESVJFQ1Q9bQorQ09ORklHX0JSSURHRV9FQlRfU05BVD1tCitDT05GSUdfQlJJREdFX0VCVF9MT0c9bQorQ09ORklHX0JSSURHRV9FQlRfVUxPRz1tCitDT05GSUdfQlJJREdFX0VCVF9ORkxPRz1tCitDT05GSUdfSVBfRENDUD1tCitDT05GSUdfUkRTPW0KK0NPTkZJR19SRFNfVENQPW0KK0NPTkZJR19USVBDPW0KK0NPTkZJR19BVE09bQorQ09ORklHX0FUTV9DTElQPW0KK0NPTkZJR19BVE1fTEFORT1tCitDT05GSUdfQVRNX01QT0E9bQorQ09ORklHX0FUTV9CUjI2ODQ9bQorQ09ORklHX0JSSURHRT1tCitDT05GSUdfVkxBTl84MDIxUT1tCitDT05GSUdfVkxBTl84MDIxUV9HVlJQPXkKK0NPTkZJR19ERUNORVQ9bQorQ09ORklHX0xMQzI9bQorQ09ORklHX0lQWD1tCitDT05GSUdfQVRBTEs9bQorQ09ORklHX0RFVl9BUFBMRVRBTEs9bQorQ09ORklHX0lQRERQPW0KK0NPTkZJR19JUEREUF9FTkNBUD15CitDT05GSUdfSVBERFBfREVDQVA9eQorQ09ORklHX1gyNT1tCitDT05GSUdfTEFQQj1tCitDT05GSUdfRUNPTkVUPW0KK0NPTkZJR19FQ09ORVRfQVVOVURQPXkKK0NPTkZJR19FQ09ORVRfTkFUSVZFPXkKK0NPTkZJR19XQU5fUk9VVEVSPW0KK0NPTkZJR19QSE9ORVQ9bQorQ09ORklHX0lFRUU4MDIxNTQ9bQorQ09ORklHX05FVF9TQ0hFRD15CitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KK0NPTkZJR19ORVRfU0NIX0hGU0M9bQorQ09ORklHX05FVF9TQ0hfQVRNPW0KK0NPTkZJR19ORVRfU0NIX1BSSU89bQorQ09ORklHX05FVF9TQ0hfTVVMVElRPW0KK0NPTkZJR19ORVRfU0NIX1JFRD1tCitDT05GSUdfTkVUX1NDSF9TRlE9bQorQ09ORklHX05FVF9TQ0hfVEVRTD1tCitDT05GSUdfTkVUX1NDSF9UQkY9bQorQ09ORklHX05FVF9TQ0hfR1JFRD1tCitDT05GSUdfTkVUX1NDSF9EU01BUks9bQorQ09ORklHX05FVF9TQ0hfTkVURU09bQorQ09ORklHX05FVF9TQ0hfRFJSPW0KK0NPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQorQ09ORklHX05FVF9DTFNfQkFTSUM9bQorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KK0NPTkZJR19DTFNfVTMyX01BUks9eQorQ09ORklHX05FVF9DTFNfUlNWUD1tCitDT05GSUdfTkVUX0NMU19SU1ZQNj1tCitDT05GSUdfTkVUX0NMU19GTE9XPW0KK0NPTkZJR19ORVRfRU1BVENIPXkKK0NPTkZJR19ORVRfRU1BVENIX0NNUD1tCitDT05GSUdfTkVUX0VNQVRDSF9OQllURT1tCitDT05GSUdfTkVUX0VNQVRDSF9VMzI9bQorQ09ORklHX05FVF9FTUFUQ0hfTUVUQT1tCitDT05GSUdfTkVUX0VNQVRDSF9URVhUPW0KK0NPTkZJR19ORVRfQ0xTX0FDVD15CitDT05GSUdfTkVUX0FDVF9QT0xJQ0U9bQorQ09ORklHX05FVF9BQ1RfR0FDVD1tCitDT05GSUdfR0FDVF9QUk9CPXkKK0NPTkZJR19ORVRfQUNUX01JUlJFRD1tCitDT05GSUdfTkVUX0FDVF9JUFQ9bQorQ09ORklHX05FVF9BQ1RfTkFUPW0KK0NPTkZJR19ORVRfQUNUX1BFRElUPW0KK0NPTkZJR19ORVRfQUNUX1NJTVA9bQorQ09ORklHX05FVF9BQ1RfU0tCRURJVD1tCitDT05GSUdfRENCPXkKK0NPTkZJR19ORVRfUEtUR0VOPW0KKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZUTVBGUz15CitDT05GSUdfREVWVE1QRlNfTU9VTlQ9eQorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPXkKK0NPTkZJR19NVEQ9bQorQ09ORklHX0JMS19ERVZfTE9PUD15CitDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KK0NPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9PU0Q9bQorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CitDT05GSUdfQ0RST01fUEtUQ0RWRD15CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKK0NPTkZJR19SQUlEX0FUVFJTPW0KK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1RHVD1tCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD1tCitDT05GSUdfQ0hSX0RFVl9PU1NUPW0KK0NPTkZJR19CTEtfREVWX1NSPXkKK0NPTkZJR19DSFJfREVWX1NHPXkKK0NPTkZJR19DSFJfREVWX1NDSD1tCitDT05GSUdfU0NTSV9NVUxUSV9MVU49eQorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKK0NPTkZJR19TQ1NJX0xPR0dJTkc9eQorQ09ORklHX1NDU0lfU0NBTl9BU1lOQz15CitDT05GSUdfU0NTSV9TUElfQVRUUlM9bQorQ09ORklHX1NDU0lfRkNfVEdUX0FUVFJTPXkKK0NPTkZJR19TQ1NJX1NBU19MSUJTQVM9bQorQ09ORklHX1NDU0lfU1JQX0FUVFJTPW0KK0NPTkZJR19TQ1NJX1NSUF9UR1RfQVRUUlM9eQorQ09ORklHX0lTQ1NJX1RDUD1tCitDT05GSUdfTElCRkNPRT1tCitDT05GSUdfU0NTSV9ERUJVRz1tCitDT05GSUdfU0NTSV9ESD15CitDT05GSUdfU0NTSV9ESF9SREFDPW0KK0NPTkZJR19TQ1NJX0RIX0hQX1NXPW0KK0NPTkZJR19TQ1NJX0RIX0VNQz1tCitDT05GSUdfU0NTSV9ESF9BTFVBPW0KK0NPTkZJR19TQ1NJX09TRF9JTklUSUFUT1I9bQorQ09ORklHX1NDU0lfT1NEX1VMRD1tCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorQ09ORklHX0lOUFVUX0VWQlVHPW0KKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19TRVJQT1JUPW0KK0NPTkZJR19TRVJJT19MSUJQUzI9eQorQ09ORklHX1NFUklPX1JBVz1tCitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKK0NPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTAKK0NPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQorQ09ORklHX05fSERMQz1tCisjIENPTkZJR19ERVZLTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFMRFJWPXkKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NDgKK0NPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRD15CitDT05GSUdfU0VSSUFMXzgyNTBfTUFOWV9QT1JUUz15CitDT05GSUdfU0VSSUFMXzgyNTBfU0hBUkVfSVJRPXkKK0NPTkZJR19TRVJJQUxfODI1MF9SU0E9eQorQ09ORklHX0hXX1JBTkRPTT15CitDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU09bQorQ09ORklHX1JBV19EUklWRVI9bQorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VJTz15CitDT05GSUdfVUlPX1BEUlY9bQorQ09ORklHX1VJT19QRFJWX0dFTklSUT1tCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDJfRlNfU0VDVVJJVFk9eQorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZPXkKK0NPTkZJR19FWFQ0X0ZTPXkKK0NPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUNF9GU19TRUNVUklUWT15CitDT05GSUdfR0ZTMl9GUz1tCitDT05GSUdfR0ZTMl9GU19MT0NLSU5HX0RMTT15CitDT05GSUdfT0NGUzJfRlM9bQorQ09ORklHX0JUUkZTX0ZTPW0KK0NPTkZJR19CVFJGU19GU19QT1NJWF9BQ0w9eQorQ09ORklHX05JTEZTMl9GUz1tCitDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0U9eQorIyBDT05GSUdfUFJJTlRfUVVPVEFfV0FSTklORyBpcyBub3Qgc2V0CitDT05GSUdfUUZNVF9WMT1tCitDT05GSUdfUUZNVF9WMj1tCitDT05GSUdfQVVUT0ZTNF9GUz1tCitDT05GSUdfRlVTRV9GUz15CitDT05GSUdfQ1VTRT1tCitDT05GSUdfRlNDQUNIRT1tCitDT05GSUdfRlNDQUNIRV9TVEFUUz15CitDT05GSUdfRlNDQUNIRV9ISVNUT0dSQU09eQorQ09ORklHX0NBQ0hFRklMRVM9bQorQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19OVEZTX0ZTPW0KK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19DT05GSUdGU19GUz15CitDT05GSUdfQURGU19GUz1tCitDT05GSUdfQUZGU19GUz1tCitDT05GSUdfRUNSWVBUX0ZTPXkKK0NPTkZJR19IRlNfRlM9bQorQ09ORklHX0hGU1BMVVNfRlM9bQorQ09ORklHX0JFRlNfRlM9bQorQ09ORklHX0JGU19GUz1tCitDT05GSUdfRUZTX0ZTPW0KK0NPTkZJR19DUkFNRlM9bQorQ09ORklHX1NRVUFTSEZTPW0KK0NPTkZJR19WWEZTX0ZTPW0KK0NPTkZJR19NSU5JWF9GUz1tCitDT05GSUdfT01GU19GUz1tCitDT05GSUdfSFBGU19GUz1tCitDT05GSUdfUU5YNEZTX0ZTPW0KK0NPTkZJR19ST01GU19GUz1tCitDT05GSUdfU1lTVl9GUz1tCitDT05GSUdfVUZTX0ZTPW0KK0NPTkZJR19FWE9GU19GUz1tCitDT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorQ09ORklHX05GU19WND15CitDT05GSUdfTkZTX0ZTQ0FDSEU9eQorQ09ORklHX05GU0Q9bQorQ09ORklHX05GU0RfVjNfQUNMPXkKK0NPTkZJR19ORlNEX1Y0PXkKK0NPTkZJR19DSUZTPW0KK0NPTkZJR19DSUZTX1dFQUtfUFdfSEFTSD15CitDT05GSUdfQ0lGU19VUENBTEw9eQorQ09ORklHX0NJRlNfWEFUVFI9eQorQ09ORklHX0NJRlNfUE9TSVg9eQorQ09ORklHX0NJRlNfREZTX1VQQ0FMTD15CitDT05GSUdfQ0lGU19FWFBFUklNRU5UQUw9eQorQ09ORklHX05DUF9GUz1tCitDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkc9eQorQ09ORklHX05DUEZTX0lPQ1RMX0xPQ0tJTkc9eQorQ09ORklHX05DUEZTX1NUUk9ORz15CitDT05GSUdfTkNQRlNfTkZTX05TPXkKK0NPTkZJR19OQ1BGU19PUzJfTlM9eQorQ09ORklHX05DUEZTX05MUz15CitDT05GSUdfTkNQRlNfRVhUUkFTPXkKK0NPTkZJR19DT0RBX0ZTPW0KK0NPTkZJR19BRlNfRlM9bQorQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CitDT05GSUdfQUNPUk5fUEFSVElUSU9OPXkKK0NPTkZJR19BQ09STl9QQVJUSVRJT05fSUNTPXkKK0NPTkZJR19BQ09STl9QQVJUSVRJT05fUklTQ0lYPXkKK0NPTkZJR19PU0ZfUEFSVElUSU9OPXkKK0NPTkZJR19BTUlHQV9QQVJUSVRJT049eQorQ09ORklHX0FUQVJJX1BBUlRJVElPTj15CitDT05GSUdfTUFDX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CitDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OPXkKK0NPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQorQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTD15CitDT05GSUdfTERNX1BBUlRJVElPTj15CitDT05GSUdfU0dJX1BBUlRJVElPTj15CitDT05GSUdfVUxUUklYX1BBUlRJVElPTj15CitDT05GSUdfU1VOX1BBUlRJVElPTj15CitDT05GSUdfS0FSTUFfUEFSVElUSU9OPXkKK0NPTkZJR19FRklfUEFSVElUSU9OPXkKK0NPTkZJR19TWVNWNjhfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJjcDQzNyIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfUFJJTlRLX1RJTUU9eQorIyBDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfVU5VU0VEX1NZTUJPTFM9eQorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CitDT05GSUdfU0NIRURTVEFUUz15CitDT05GSUdfVElNRVJfU1RBVFM9eQorQ09ORklHX0RFQlVHX0lORk89eQorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfU0NIRURfVFJBQ0VSPXkKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKK0NPTkZJR19LR0RCPXkKK0NPTkZJR19TRUNVUklUWT15CitDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CitDT05GSUdfTFNNX01NQVBfTUlOX0FERFI9MAorQ09ORklHX1NFQ1VSSVRZX1NFTElOVVg9eQorQ09ORklHX1NFQ1VSSVRZX1NFTElOVVhfQk9PVFBBUkFNPXkKK0NPTkZJR19TRUNVUklUWV9TRUxJTlVYX0JPT1RQQVJBTV9WQUxVRT0wCitDT05GSUdfU0VDVVJJVFlfU0VMSU5VWF9ESVNBQkxFPXkKK0NPTkZJR19TRUNVUklUWV9TTUFDSz15CitDT05GSUdfU0VDVVJJVFlfVE9NT1lPPXkKK0NPTkZJR19DUllQVE9fTlVMTD1tCitDT05GSUdfQ1JZUFRPX0NSWVBURD1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorQ09ORklHX0NSWVBUT19DQ009bQorQ09ORklHX0NSWVBUT19HQ009bQorQ09ORklHX0NSWVBUT19DVFM9bQorQ09ORklHX0NSWVBUT19MUlc9bQorQ09ORklHX0NSWVBUT19QQ0JDPW0KK0NPTkZJR19DUllQVE9fWFRTPW0KK0NPTkZJR19DUllQVE9fSE1BQz15CitDT05GSUdfQ1JZUFRPX1hDQkM9bQorQ09ORklHX0NSWVBUT19WTUFDPW0KK0NPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQorQ09ORklHX0NSWVBUT19STUQxMjg9bQorQ09ORklHX0NSWVBUT19STUQxNjA9bQorQ09ORklHX0NSWVBUT19STUQyNTY9bQorQ09ORklHX0NSWVBUT19STUQzMjA9bQorQ09ORklHX0NSWVBUT19TSEEyNTY9bQorQ09ORklHX0NSWVBUT19TSEE1MTI9bQorQ09ORklHX0NSWVBUT19UR1IxOTI9bQorQ09ORklHX0NSWVBUT19XUDUxMj1tCitDT05GSUdfQ1JZUFRPX0FOVUJJUz1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KK0NPTkZJR19DUllQVE9fQ0FNRUxMSUE9bQorQ09ORklHX0NSWVBUT19DQVNUNT1tCitDT05GSUdfQ1JZUFRPX0NBU1Q2PW0KK0NPTkZJR19DUllQVE9fRkNSWVBUPW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fU0FMU0EyMD1tCitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1pMSUI9bQorQ09ORklHX0NSWVBUT19MWk89bQorQ09ORklHX0NSQ19DQ0lUVD1tCitDT05GSUdfQ1JDNz1tCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY2FjaGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jYWNoZS5oCmluZGV4IDY1MGFjOWIuLmI0ZGI2OWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jYWNoZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jYWNoZS5oCkBAIC0xNyw2ICsxNyw2IEBACiAjZGVmaW5lIFNNUF9DQUNIRV9TSElGVAkJTDFfQ0FDSEVfU0hJRlQKICNkZWZpbmUgU01QX0NBQ0hFX0JZVEVTCQlMMV9DQUNIRV9CWVRFUwogCi0jZGVmaW5lIF9fcmVhZF9tb3N0bHkgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhLnJlYWRfbW9zdGx5IikpKQorI2RlZmluZSBfX3JlYWRfbW9zdGx5IF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YS4ucmVhZF9tb3N0bHkiKSkpCiAKICNlbmRpZiAvKiBfQVNNX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jZXZ0LXI0ay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmgKaW5kZXggZmE0MzI4Zi4uNjVmOWJkZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NldnQtcjRrLmgKQEAgLTE0LDYgKzE0LDkgQEAKICNpZm5kZWYgX19BU01fQ0VWVF9SNEtfSAogI2RlZmluZSBfX0FTTV9DRVZUX1I0S19ICiAKKyNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIG1pcHNfY2xvY2tldmVudF9kZXZpY2UpOwogCiB2b2lkIG1pcHNfZXZlbnRfaGFuZGxlcihzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IDg2ODc3NTMuLjM0YzBkM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTMzLDYgKzMzLDcgQEAKICNkZWZpbmUgUFJJRF9DT01QX1RPU0hJQkEJMHgwNzAwMDAKICNkZWZpbmUgUFJJRF9DT01QX0xTSQkJMHgwODAwMDAKICNkZWZpbmUgUFJJRF9DT01QX0xFWFJBCQkweDBiMDAwMAorI2RlZmluZSBQUklEX0NPTVBfTkVUTE9HSUMJMHgwYzAwMDAKICNkZWZpbmUgUFJJRF9DT01QX0NBVklVTQkweDBkMDAwMAogI2RlZmluZSBQUklEX0NPTVBfSU5HRU5JQwkweGQwMDAwMAogCkBAIC0xNDIsNiArMTQzLDMxIEBACiAjZGVmaW5lIFBSSURfSU1QX0paUklTQyAgICAgICAgMHgwMjAwCiAKIC8qCisgKiBUaGVzZSBhcmUgdGhlIFBSSUQncyBmb3Igd2hlbiAyMzoxNiA9PSBQUklEX0NPTVBfTkVUTE9HSUMKKyAqLworI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFI3MzIJMHgwMDAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUjcxNgkweDAyMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExSNTMyCTB4MDkwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFIzMDgJMHgwNjAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUjUzMkMJMHgwODAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUjUxNkMJMHgwYTAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUjUwOEMJMHgwYjAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUjMwOEMJMHgwZjAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUzYwOAkweDgwMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTNDA4CTB4ODgwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MDQJMHg4YzAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUzIwOAkweDhlMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTMjA0CTB4OGYwMAorI2RlZmluZSBQUklEX0lNUF9ORVRMT0dJQ19YTFMxMDgJMHhjZTAwCisjZGVmaW5lIFBSSURfSU1QX05FVExPR0lDX1hMUzEwNAkweGNmMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTNjE2QgkweDQwMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTNjA4QgkweDRhMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTNDE2QgkweDQ0MDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTNDEyQgkweDRjMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTNDA4QgkweDRlMDAKKyNkZWZpbmUgUFJJRF9JTVBfTkVUTE9HSUNfWExTNDA0QgkweDRmMDAKKworLyoKICAqIERlZmluaXRpb25zIGZvciA3OjAgb24gbGVnYWN5IHByb2Nlc3NvcnMKICAqLwogCkBAIC0yMzQsNiArMjYwLDcgQEAKIAkgKi8KIAlDUFVfNUtDLCBDUFVfMjBLQywgQ1BVXzI1S0YsIENQVV9TQjEsIENQVV9TQjFBLCBDUFVfTE9PTkdTT04yLAogCUNQVV9DQVZJVU1fT0NURU9OLCBDUFVfQ0FWSVVNX09DVEVPTl9QTFVTLCBDUFVfQ0FWSVVNX09DVEVPTjIsCisJQ1BVX1hMUiwKIAogCUNQVV9MQVNUCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA2NTVmODQ5Li43YWEzN2RkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtNSw3ICs1LDkgQEAKICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaD4KIAorI2lmbmRlZiBDT05GSUdfU0dJX0lQMjcJLyogS2x1ZGdlIHRvIGZpeCAyLjYuMzkgYnVpbGQgZm9yIElQMjcgKi8KICNpbmNsdWRlIDxkbWEtY29oZXJlbmNlLmg+CisjZW5kaWYKIAogZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyAqbWlwc19kbWFfbWFwX29wczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9odWdldGxiLmgKaW5kZXggZjVlODU2MC4uYzU2NWI3YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2h1Z2V0bGIuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaHVnZXRsYi5oCkBAIC03MCw2ICs3MCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaHVnZV9wdGVwX2NsZWFyX2ZsdXNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlcCkKIHsKKwlmbHVzaF90bGJfbW0odm1hLT52bV9tbSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGh1Z2VfcHRlX25vbmUocHRlX3QgcHRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2k4MjUzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaTgyNTMuaAppbmRleCA0OGJiODIzLi45YWQwMTEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vaTgyNTMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaTgyNTMuaApAQCAtMTIsOCArMTIsMTMgQEAKICNkZWZpbmUgUElUX0NIMAkJCTB4NDAKICNkZWZpbmUgUElUX0NIMgkJCTB4NDIKIAorI2RlZmluZSBQSVRfTEFUQ0gJCUxBVENICisKIGV4dGVybiByYXdfc3BpbmxvY2tfdCBpODI1M19sb2NrOwogCiBleHRlcm4gdm9pZCBzZXR1cF9waXRfdGltZXIodm9pZCk7CiAKKyNkZWZpbmUgaW5iX3BpdCBpbmJfcAorI2RlZmluZSBvdXRiX3BpdCBvdXRiX3AKKwogI2VuZGlmIC8qIF9fQVNNX0k4MjUzX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCmluZGV4IDc2MjJjY2YuLjE4ODFiMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaApAQCAtMjAsMTYgKzIwLDE4IEBACiAjZGVmaW5lIFdPUkRfSU5TTiAiLndvcmQiCiAjZW5kaWYKIAotI2RlZmluZSBKVU1QX0xBQkVMKGtleSwgbGFiZWwpCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJYXNtIGdvdG8oIjE6XHRub3Bcblx0IgkJCQkJXAotCQkJIm5vcFxuXHQiCQkJCQlcCi0JCQkiLnB1c2hzZWN0aW9uIF9fanVtcF90YWJsZSwgIFwiYVwiXG5cdCIJCVwKLQkJCVdPUkRfSU5TTiAiIDFiLCAlbFsiICNsYWJlbCAiXSwgJTBcblx0IgkJXAotCQkJIi5wb3BzZWN0aW9uXG5cdCIJCQkJXAotCQkJOiA6ICAiaSIgKGtleSkgOiAgOiBsYWJlbCk7CQkJXAotCX0gd2hpbGUgKDApCi0KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBhcmNoX3N0YXRpY19icmFuY2goc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkpCit7CisJYXNtIGdvdG8oIjE6XHRub3Bcblx0IgorCQkibm9wXG5cdCIKKwkJIi5wdXNoc2VjdGlvbiBfX2p1bXBfdGFibGUsICBcImF3XCJcblx0IgorCQlXT1JEX0lOU04gIiAxYiwgJWxbbF95ZXNdLCAlMFxuXHQiCisJCSIucG9wc2VjdGlvblxuXHQiCisJCTogOiAgImkiIChrZXkpIDogOiBsX3llcyk7CisJcmV0dXJuIGZhbHNlOworbF95ZXM6CisJcmV0dXJuIHRydWU7Cit9CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaAppbmRleCBhNjk3NjYxLi5mMjYwZWJlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oCkBAIC0xNjEsNiArMTYxLDQ1IEBACiAJcmV0dXJuIEFMQ0hFTVlfQ1BVX1VOS05PV047CiB9CiAKKy8qIHJldHVybiBudW1iZXIgb2YgdWFydHMgb24gYSBnaXZlbiBjcHV0eXBlICovCitzdGF0aWMgaW5saW5lIGludCBhbGNoZW15X2dldF91YXJ0cyhpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEFMQ0hFTVlfQ1BVX0FVMTAwMDoKKwkJcmV0dXJuIDQ7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEyMDA6CisJCXJldHVybiAyOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCWNhc2UgQUxDSEVNWV9DUFVfQVUxNTUwOgorCQlyZXR1cm4gMzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIGVuYWJsZSBhbiBVQVJUIGJsb2NrIGlmIGl0IGlzbid0IGFscmVhZHkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBhbGNoZW15X3VhcnRfZW5hYmxlKHUzMiB1YXJ0X3BoeXMpCit7CisJdm9pZCBfX2lvbWVtICphZGRyID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUih1YXJ0X3BoeXMpOworCisJLyogcmVzZXQsIGVuYWJsZSBjbG9jaywgZGVhc3NlcnQgcmVzZXQgKi8KKwlpZiAoKF9fcmF3X3JlYWRsKGFkZHIgKyAweDEwMCkgJiAzKSAhPSAzKSB7CisJCV9fcmF3X3dyaXRlbCgwLCBhZGRyICsgMHgxMDApOworCQl3bWIoKTsKKwkJX19yYXdfd3JpdGVsKDEsIGFkZHIgKyAweDEwMCk7CisJCXdtYigpOworCX0KKwlfX3Jhd193cml0ZWwoMywgYWRkciArIDB4MTAwKTsKKwl3bWIoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFsY2hlbXlfdWFydF9kaXNhYmxlKHUzMiB1YXJ0X3BoeXMpCit7CisJdm9pZCBfX2lvbWVtICphZGRyID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUih1YXJ0X3BoeXMpOworCV9fcmF3X3dyaXRlbCgwLCBhZGRyICsgMHgxMDApOwkvKiBVQVJUX01PRF9DTlRSTCAqLworCXdtYigpOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV91YXJ0X3B1dGNoYXIodTMyIHVhcnRfcGh5cywgdTggYykKIHsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKHVhcnRfcGh5cyk7CkBAIC0xODAsNiArMjE5LDIwIEBACiAJd21iKCk7CiB9CiAKKy8qIHJldHVybiBudW1iZXIgb2YgZXRoZXJuZXQgTUFDcyBvbiBhIGdpdmVuIGNwdXR5cGUgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ2V0X21hY3MoaW50IHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBBTENIRU1ZX0NQVV9BVTEwMDA6CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1MDA6CisJY2FzZSBBTENIRU1ZX0NQVV9BVTE1NTA6CisJCXJldHVybiAyOworCWNhc2UgQUxDSEVNWV9DUFVfQVUxMTAwOgorCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qIGFyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2Nsb2Nrcy5jICovCiBleHRlcm4gdm9pZCBzZXRfYXUxeDAwX3NwZWVkKHVuc2lnbmVkIGludCBuZXdfZnJlcSk7CiBleHRlcm4gdW5zaWduZWQgaW50IGdldF9hdTF4MDBfc3BlZWQodm9pZCk7CkBAIC02MzAsMzggKzY4Myw0MiBAQAogCiAvKgogICogUGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMgZm9yIGludGVncmF0ZWQgcGVyaXBoZXJhbHMKKyAqIDAuLmF1MTAwMCAxLi5hdTE1MDAgMi4uYXUxMTAwIDMuLmF1MTU1MCA0Li5hdTEyMDAKICAqLwogCisjZGVmaW5lIEFVMTAwMF9BQzk3X1BIWVNfQUREUgkJMHgxMDAwMDAwMCAvKiAwMTIgKi8KKyNkZWZpbmUgQVUxMDAwX1VTQkRfUEhZU19BRERSCQkweDEwMjAwMDAwIC8qIDAxMjMgKi8KKyNkZWZpbmUgQVUxMDAwX0lDMF9QSFlTX0FERFIJCTB4MTA0MDAwMDAgLyogMDEyMzQgKi8KKyNkZWZpbmUgQVUxMDAwX01BQzBfUEhZU19BRERSCQkweDEwNTAwMDAwIC8qIDAyMyAqLworI2RlZmluZSBBVTEwMDBfTUFDMV9QSFlTX0FERFIJCTB4MTA1MTAwMDAgLyogMDIzICovCisjZGVmaW5lIEFVMTAwMF9NQUNFTl9QSFlTX0FERFIJCTB4MTA1MjAwMDAgLyogMDIzICovCisjZGVmaW5lIEFVMTEwMF9TRDBfUEhZU19BRERSCQkweDEwNjAwMDAwIC8qIDI0ICovCisjZGVmaW5lIEFVMTEwMF9TRDFfUEhZU19BRERSCQkweDEwNjgwMDAwIC8qIDI0ICovCisjZGVmaW5lIEFVMTAwMF9JMlNfUEhZU19BRERSCQkweDExMDAwMDAwIC8qIDAyICovCisjZGVmaW5lIEFVMTUwMF9NQUMwX1BIWVNfQUREUgkJMHgxMTUwMDAwMCAvKiAxICovCisjZGVmaW5lIEFVMTUwMF9NQUMxX1BIWVNfQUREUgkJMHgxMTUxMDAwMCAvKiAxICovCisjZGVmaW5lIEFVMTUwMF9NQUNFTl9QSFlTX0FERFIJCTB4MTE1MjAwMDAgLyogMSAqLworI2RlZmluZSBBVTEwMDBfVUFSVDBfUEhZU19BRERSCQkweDExMTAwMDAwIC8qIDAxMjM0ICovCisjZGVmaW5lIEFVMTAwMF9VQVJUMV9QSFlTX0FERFIJCTB4MTEyMDAwMDAgLyogMDIzNCAqLworI2RlZmluZSBBVTEwMDBfVUFSVDJfUEhZU19BRERSCQkweDExMzAwMDAwIC8qIDAgKi8KKyNkZWZpbmUgQVUxMDAwX1VBUlQzX1BIWVNfQUREUgkJMHgxMTQwMDAwMCAvKiAwMTIzICovCisjZGVmaW5lIEFVMTUwMF9HUElPMl9QSFlTX0FERFIJCTB4MTE3MDAwMDAgLyogMTIzNCAqLworI2RlZmluZSBBVTEwMDBfSUMxX1BIWVNfQUREUgkJMHgxMTgwMDAwMCAvKiAwMTIzNCAqLworI2RlZmluZSBBVTEwMDBfU1lTX1BIWVNfQUREUgkJMHgxMTkwMDAwMCAvKiAwMTIzNCAqLworI2RlZmluZSBBVTEwMDBfRE1BX1BIWVNfQUREUgkJMHgxNDAwMjAwMCAvKiAwMTIgKi8KKyNkZWZpbmUgQVUxNTUwX0RCRE1BX1BIWVNfQUREUgkJMHgxNDAwMjAwMCAvKiAzNCAqLworI2RlZmluZSBBVTE1NTBfREJETUFfQ09ORl9QSFlTX0FERFIJMHgxNDAwMzAwMCAvKiAzNCAqLworI2RlZmluZSBBVTEwMDBfTUFDRE1BMF9QSFlTX0FERFIJMHgxNDAwNDAwMCAvKiAwMTIzICovCisjZGVmaW5lIEFVMTAwMF9NQUNETUExX1BIWVNfQUREUgkweDE0MDA0MjAwIC8qIDAxMjMgKi8KKworCiAjaWZkZWYgQ09ORklHX1NPQ19BVTEwMDAKICNkZWZpbmUJTUVNX1BIWVNfQUREUgkJMHgxNDAwMDAwMAogI2RlZmluZQlTVEFUSUNfTUVNX1BIWVNfQUREUgkweDE0MDAxMDAwCi0jZGVmaW5lCURNQTBfUEhZU19BRERSCQkweDE0MDAyMDAwCi0jZGVmaW5lCURNQTFfUEhZU19BRERSCQkweDE0MDAyMTAwCi0jZGVmaW5lCURNQTJfUEhZU19BRERSCQkweDE0MDAyMjAwCi0jZGVmaW5lCURNQTNfUEhZU19BRERSCQkweDE0MDAyMzAwCi0jZGVmaW5lCURNQTRfUEhZU19BRERSCQkweDE0MDAyNDAwCi0jZGVmaW5lCURNQTVfUEhZU19BRERSCQkweDE0MDAyNTAwCi0jZGVmaW5lCURNQTZfUEhZU19BRERSCQkweDE0MDAyNjAwCi0jZGVmaW5lCURNQTdfUEhZU19BRERSCQkweDE0MDAyNzAwCi0jZGVmaW5lCUlDMF9QSFlTX0FERFIJCTB4MTA0MDAwMDAKLSNkZWZpbmUJSUMxX1BIWVNfQUREUgkJMHgxMTgwMDAwMAotI2RlZmluZQlBQzk3X1BIWVNfQUREUgkJMHgxMDAwMDAwMAogI2RlZmluZQlVU0JIX1BIWVNfQUREUgkJMHgxMDEwMDAwMAotI2RlZmluZQlVU0JEX1BIWVNfQUREUgkJMHgxMDIwMDAwMAogI2RlZmluZQlJUkRBX1BIWVNfQUREUgkJMHgxMDMwMDAwMAotI2RlZmluZQlNQUMwX1BIWVNfQUREUgkJMHgxMDUwMDAwMAotI2RlZmluZQlNQUMxX1BIWVNfQUREUgkJMHgxMDUxMDAwMAotI2RlZmluZQlNQUNFTl9QSFlTX0FERFIJCTB4MTA1MjAwMDAKLSNkZWZpbmUJTUFDRE1BMF9QSFlTX0FERFIJMHgxNDAwNDAwMAotI2RlZmluZQlNQUNETUExX1BIWVNfQUREUgkweDE0MDA0MjAwCi0jZGVmaW5lCUkyU19QSFlTX0FERFIJCTB4MTEwMDAwMDAKLSNkZWZpbmUJVUFSVDBfUEhZU19BRERSCQkweDExMTAwMDAwCi0jZGVmaW5lCVVBUlQxX1BIWVNfQUREUgkJMHgxMTIwMDAwMAotI2RlZmluZQlVQVJUMl9QSFlTX0FERFIJCTB4MTEzMDAwMDAKLSNkZWZpbmUJVUFSVDNfUEhZU19BRERSCQkweDExNDAwMDAwCiAjZGVmaW5lCVNTSTBfUEhZU19BRERSCQkweDExNjAwMDAwCiAjZGVmaW5lCVNTSTFfUEhZU19BRERSCQkweDExNjgwMDAwCi0jZGVmaW5lCVNZU19QSFlTX0FERFIJCTB4MTE5MDAwMDAKICNkZWZpbmUgUENNQ0lBX0lPX1BIWVNfQUREUgkweEYwMDAwMDAwMFVMTAogI2RlZmluZSBQQ01DSUFfQVRUUl9QSFlTX0FERFIJMHhGNDAwMDAwMDBVTEwKICNkZWZpbmUgUENNQ0lBX01FTV9QSFlTX0FERFIJMHhGODAwMDAwMDBVTEwKQEAgLTY3MiwzMCArNzI5LDggQEAKICNpZmRlZiBDT05GSUdfU09DX0FVMTUwMAogI2RlZmluZQlNRU1fUEhZU19BRERSCQkweDE0MDAwMDAwCiAjZGVmaW5lCVNUQVRJQ19NRU1fUEhZU19BRERSCTB4MTQwMDEwMDAKLSNkZWZpbmUJRE1BMF9QSFlTX0FERFIJCTB4MTQwMDIwMDAKLSNkZWZpbmUJRE1BMV9QSFlTX0FERFIJCTB4MTQwMDIxMDAKLSNkZWZpbmUJRE1BMl9QSFlTX0FERFIJCTB4MTQwMDIyMDAKLSNkZWZpbmUJRE1BM19QSFlTX0FERFIJCTB4MTQwMDIzMDAKLSNkZWZpbmUJRE1BNF9QSFlTX0FERFIJCTB4MTQwMDI0MDAKLSNkZWZpbmUJRE1BNV9QSFlTX0FERFIJCTB4MTQwMDI1MDAKLSNkZWZpbmUJRE1BNl9QSFlTX0FERFIJCTB4MTQwMDI2MDAKLSNkZWZpbmUJRE1BN19QSFlTX0FERFIJCTB4MTQwMDI3MDAKLSNkZWZpbmUJSUMwX1BIWVNfQUREUgkJMHgxMDQwMDAwMAotI2RlZmluZQlJQzFfUEhZU19BRERSCQkweDExODAwMDAwCi0jZGVmaW5lCUFDOTdfUEhZU19BRERSCQkweDEwMDAwMDAwCiAjZGVmaW5lCVVTQkhfUEhZU19BRERSCQkweDEwMTAwMDAwCi0jZGVmaW5lCVVTQkRfUEhZU19BRERSCQkweDEwMjAwMDAwCiAjZGVmaW5lIFBDSV9QSFlTX0FERFIJCTB4MTQwMDUwMDAKLSNkZWZpbmUJTUFDMF9QSFlTX0FERFIJCTB4MTE1MDAwMDAKLSNkZWZpbmUJTUFDMV9QSFlTX0FERFIJCTB4MTE1MTAwMDAKLSNkZWZpbmUJTUFDRU5fUEhZU19BRERSCQkweDExNTIwMDAwCi0jZGVmaW5lCU1BQ0RNQTBfUEhZU19BRERSCTB4MTQwMDQwMDAKLSNkZWZpbmUJTUFDRE1BMV9QSFlTX0FERFIJMHgxNDAwNDIwMAotI2RlZmluZQlJMlNfUEhZU19BRERSCQkweDExMDAwMDAwCi0jZGVmaW5lCVVBUlQwX1BIWVNfQUREUgkJMHgxMTEwMDAwMAotI2RlZmluZQlVQVJUM19QSFlTX0FERFIJCTB4MTE0MDAwMDAKLSNkZWZpbmUgR1BJTzJfUEhZU19BRERSCQkweDExNzAwMDAwCi0jZGVmaW5lCVNZU19QSFlTX0FERFIJCTB4MTE5MDAwMDAKICNkZWZpbmUgUENJX01FTV9QSFlTX0FERFIJMHg0MDAwMDAwMDBVTEwKICNkZWZpbmUgUENJX0lPX1BIWVNfQUREUgkweDUwMDAwMDAwMFVMTAogI2RlZmluZSBQQ0lfQ09ORklHMF9QSFlTX0FERFIJMHg2MDAwMDAwMDBVTEwKQEAgLTcxMCwzNCArNzQ1LDEwIEBACiAjaWZkZWYgQ09ORklHX1NPQ19BVTExMDAKICNkZWZpbmUJTUVNX1BIWVNfQUREUgkJMHgxNDAwMDAwMAogI2RlZmluZQlTVEFUSUNfTUVNX1BIWVNfQUREUgkweDE0MDAxMDAwCi0jZGVmaW5lCURNQTBfUEhZU19BRERSCQkweDE0MDAyMDAwCi0jZGVmaW5lCURNQTFfUEhZU19BRERSCQkweDE0MDAyMTAwCi0jZGVmaW5lCURNQTJfUEhZU19BRERSCQkweDE0MDAyMjAwCi0jZGVmaW5lCURNQTNfUEhZU19BRERSCQkweDE0MDAyMzAwCi0jZGVmaW5lCURNQTRfUEhZU19BRERSCQkweDE0MDAyNDAwCi0jZGVmaW5lCURNQTVfUEhZU19BRERSCQkweDE0MDAyNTAwCi0jZGVmaW5lCURNQTZfUEhZU19BRERSCQkweDE0MDAyNjAwCi0jZGVmaW5lCURNQTdfUEhZU19BRERSCQkweDE0MDAyNzAwCi0jZGVmaW5lCUlDMF9QSFlTX0FERFIJCTB4MTA0MDAwMDAKLSNkZWZpbmUgU0QwX1BIWVNfQUREUgkJMHgxMDYwMDAwMAotI2RlZmluZSBTRDFfUEhZU19BRERSCQkweDEwNjgwMDAwCi0jZGVmaW5lCUlDMV9QSFlTX0FERFIJCTB4MTE4MDAwMDAKLSNkZWZpbmUJQUM5N19QSFlTX0FERFIJCTB4MTAwMDAwMDAKICNkZWZpbmUJVVNCSF9QSFlTX0FERFIJCTB4MTAxMDAwMDAKLSNkZWZpbmUJVVNCRF9QSFlTX0FERFIJCTB4MTAyMDAwMDAKICNkZWZpbmUJSVJEQV9QSFlTX0FERFIJCTB4MTAzMDAwMDAKLSNkZWZpbmUJTUFDMF9QSFlTX0FERFIJCTB4MTA1MDAwMDAKLSNkZWZpbmUJTUFDRU5fUEhZU19BRERSCQkweDEwNTIwMDAwCi0jZGVmaW5lCU1BQ0RNQTBfUEhZU19BRERSCTB4MTQwMDQwMDAKLSNkZWZpbmUJTUFDRE1BMV9QSFlTX0FERFIJMHgxNDAwNDIwMAotI2RlZmluZQlJMlNfUEhZU19BRERSCQkweDExMDAwMDAwCi0jZGVmaW5lCVVBUlQwX1BIWVNfQUREUgkJMHgxMTEwMDAwMAotI2RlZmluZQlVQVJUMV9QSFlTX0FERFIJCTB4MTEyMDAwMDAKLSNkZWZpbmUJVUFSVDNfUEhZU19BRERSCQkweDExNDAwMDAwCiAjZGVmaW5lCVNTSTBfUEhZU19BRERSCQkweDExNjAwMDAwCiAjZGVmaW5lCVNTSTFfUEhZU19BRERSCQkweDExNjgwMDAwCi0jZGVmaW5lIEdQSU8yX1BIWVNfQUREUgkJMHgxMTcwMDAwMAotI2RlZmluZQlTWVNfUEhZU19BRERSCQkweDExOTAwMDAwCiAjZGVmaW5lIExDRF9QSFlTX0FERFIJCTB4MTUwMDAwMDAKICNkZWZpbmUgUENNQ0lBX0lPX1BIWVNfQUREUgkweEYwMDAwMDAwMFVMTAogI2RlZmluZSBQQ01DSUFfQVRUUl9QSFlTX0FERFIJMHhGNDAwMDAwMDBVTEwKQEAgLTc0OSwyMiArNzYwLDggQEAKICNpZmRlZiBDT05GSUdfU09DX0FVMTU1MAogI2RlZmluZQlNRU1fUEhZU19BRERSCQkweDE0MDAwMDAwCiAjZGVmaW5lCVNUQVRJQ19NRU1fUEhZU19BRERSCTB4MTQwMDEwMDAKLSNkZWZpbmUJSUMwX1BIWVNfQUREUgkJMHgxMDQwMDAwMAotI2RlZmluZQlJQzFfUEhZU19BRERSCQkweDExODAwMDAwCiAjZGVmaW5lCVVTQkhfUEhZU19BRERSCQkweDE0MDIwMDAwCi0jZGVmaW5lCVVTQkRfUEhZU19BRERSCQkweDEwMjAwMDAwCiAjZGVmaW5lIFBDSV9QSFlTX0FERFIJCTB4MTQwMDUwMDAKLSNkZWZpbmUJTUFDMF9QSFlTX0FERFIJCTB4MTA1MDAwMDAKLSNkZWZpbmUJTUFDMV9QSFlTX0FERFIJCTB4MTA1MTAwMDAKLSNkZWZpbmUJTUFDRU5fUEhZU19BRERSCQkweDEwNTIwMDAwCi0jZGVmaW5lCU1BQ0RNQTBfUEhZU19BRERSCTB4MTQwMDQwMDAKLSNkZWZpbmUJTUFDRE1BMV9QSFlTX0FERFIJMHgxNDAwNDIwMAotI2RlZmluZQlVQVJUMF9QSFlTX0FERFIJCTB4MTExMDAwMDAKLSNkZWZpbmUJVUFSVDFfUEhZU19BRERSCQkweDExMjAwMDAwCi0jZGVmaW5lCVVBUlQzX1BIWVNfQUREUgkJMHgxMTQwMDAwMAotI2RlZmluZSBHUElPMl9QSFlTX0FERFIJCTB4MTE3MDAwMDAKLSNkZWZpbmUJU1lTX1BIWVNfQUREUgkJMHgxMTkwMDAwMAotI2RlZmluZQlERE1BX1BIWVNfQUREUgkJMHgxNDAwMjAwMAogI2RlZmluZSBQRV9QSFlTX0FERFIJCTB4MTQwMDgwMDAKICNkZWZpbmUgUFNDMF9QSFlTX0FERFIJCTB4MTFBMDAwMDAKICNkZWZpbmUgUFNDMV9QSFlTX0FERFIJCTB4MTFCMDAwMDAKQEAgLTc4NiwxOSArNzgzLDEwIEBACiAjZGVmaW5lCVNUQVRJQ19NRU1fUEhZU19BRERSCTB4MTQwMDEwMDAKICNkZWZpbmUgQUVTX1BIWVNfQUREUgkJMHgxMDMwMDAwMAogI2RlZmluZSBDSU1fUEhZU19BRERSCQkweDE0MDA0MDAwCi0jZGVmaW5lCUlDMF9QSFlTX0FERFIJCTB4MTA0MDAwMDAKLSNkZWZpbmUJSUMxX1BIWVNfQUREUgkJMHgxMTgwMDAwMAogI2RlZmluZSBVU0JNX1BIWVNfQUREUgkJMHgxNDAyMDAwMAogI2RlZmluZQlVU0JIX1BIWVNfQUREUgkJMHgxNDAyMDEwMAotI2RlZmluZQlVQVJUMF9QSFlTX0FERFIJCTB4MTExMDAwMDAKLSNkZWZpbmUJVUFSVDFfUEhZU19BRERSCQkweDExMjAwMDAwCi0jZGVmaW5lIEdQSU8yX1BIWVNfQUREUgkJMHgxMTcwMDAwMAotI2RlZmluZQlTWVNfUEhZU19BRERSCQkweDExOTAwMDAwCi0jZGVmaW5lCURETUFfUEhZU19BRERSCQkweDE0MDAyMDAwCiAjZGVmaW5lIFBTQzBfUEhZU19BRERSCSAJMHgxMUEwMDAwMAogI2RlZmluZSBQU0MxX1BIWVNfQUREUgkgCTB4MTFCMDAwMDAKLSNkZWZpbmUgU0QwX1BIWVNfQUREUgkJMHgxMDYwMDAwMAotI2RlZmluZSBTRDFfUEhZU19BRERSCQkweDEwNjgwMDAwCiAjZGVmaW5lIExDRF9QSFlTX0FERFIJCTB4MTUwMDAwMDAKICNkZWZpbmUgU1dDTlRfUEhZU19BRERSCQkweDExMTAwMTBDCiAjZGVmaW5lIE1BRUZFX1BIWVNfQUREUgkJMHgxNDAxMjAwMApAQCAtODM1LDE4MyArODIzLDQzIEBACiAjZW5kaWYKIAogCi0vKiBJbnRlcnJ1cHQgQ29udHJvbGxlciByZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIElDX0NGRzBSRAkJMHg0MAotI2RlZmluZSBJQ19DRkcwU0VUCQkweDQwCi0jZGVmaW5lIElDX0NGRzBDTFIJCTB4NDQKLSNkZWZpbmUgSUNfQ0ZHMVJECQkweDQ4Ci0jZGVmaW5lIElDX0NGRzFTRVQJCTB4NDgKLSNkZWZpbmUgSUNfQ0ZHMUNMUgkJMHg0QwotI2RlZmluZSBJQ19DRkcyUkQJCTB4NTAKLSNkZWZpbmUgSUNfQ0ZHMlNFVAkJMHg1MAotI2RlZmluZSBJQ19DRkcyQ0xSCQkweDU0Ci0jZGVmaW5lIElDX1JFUTBJTlQJCTB4NTQKLSNkZWZpbmUgSUNfU1JDUkQJCTB4NTgKLSNkZWZpbmUgSUNfU1JDU0VUCQkweDU4Ci0jZGVmaW5lIElDX1NSQ0NMUgkJMHg1QwotI2RlZmluZSBJQ19SRVExSU5UCQkweDVDCi0jZGVmaW5lIElDX0FTU0lHTlJECQkweDYwCi0jZGVmaW5lIElDX0FTU0lHTlNFVAkJMHg2MAotI2RlZmluZSBJQ19BU1NJR05DTFIJCTB4NjQKLSNkZWZpbmUgSUNfV0FLRVJECQkweDY4Ci0jZGVmaW5lIElDX1dBS0VTRVQJCTB4NjgKLSNkZWZpbmUgSUNfV0FLRUNMUgkJMHg2QwotI2RlZmluZSBJQ19NQVNLUkQJCTB4NzAKLSNkZWZpbmUgSUNfTUFTS1NFVAkJMHg3MAotI2RlZmluZSBJQ19NQVNLQ0xSCQkweDc0Ci0jZGVmaW5lIElDX1JJU0lOR1JECQkweDc4Ci0jZGVmaW5lIElDX1JJU0lOR0NMUgkJMHg3OAotI2RlZmluZSBJQ19GQUxMSU5HUkQJCTB4N0MKLSNkZWZpbmUgSUNfRkFMTElOR0NMUgkJMHg3QwotI2RlZmluZSBJQ19URVNUQklUCQkweDgwCi0KLQotLyogSW50ZXJydXB0IENvbnRyb2xsZXIgMCAqLwotI2RlZmluZSBJQzBfQ0ZHMFJECQkweEIwNDAwMDQwCi0jZGVmaW5lIElDMF9DRkcwU0VUCQkweEIwNDAwMDQwCi0jZGVmaW5lIElDMF9DRkcwQ0xSCQkweEIwNDAwMDQ0Ci0KLSNkZWZpbmUgSUMwX0NGRzFSRAkJMHhCMDQwMDA0OAotI2RlZmluZSBJQzBfQ0ZHMVNFVAkJMHhCMDQwMDA0OAotI2RlZmluZSBJQzBfQ0ZHMUNMUgkJMHhCMDQwMDA0QwotCi0jZGVmaW5lIElDMF9DRkcyUkQJCTB4QjA0MDAwNTAKLSNkZWZpbmUgSUMwX0NGRzJTRVQJCTB4QjA0MDAwNTAKLSNkZWZpbmUgSUMwX0NGRzJDTFIJCTB4QjA0MDAwNTQKLQotI2RlZmluZSBJQzBfUkVRMElOVAkJMHhCMDQwMDA1NAotI2RlZmluZSBJQzBfU1JDUkQJCTB4QjA0MDAwNTgKLSNkZWZpbmUgSUMwX1NSQ1NFVAkJMHhCMDQwMDA1OAotI2RlZmluZSBJQzBfU1JDQ0xSCQkweEIwNDAwMDVDCi0jZGVmaW5lIElDMF9SRVExSU5UCQkweEIwNDAwMDVDCi0KLSNkZWZpbmUgSUMwX0FTU0lHTlJECQkweEIwNDAwMDYwCi0jZGVmaW5lIElDMF9BU1NJR05TRVQJCTB4QjA0MDAwNjAKLSNkZWZpbmUgSUMwX0FTU0lHTkNMUgkJMHhCMDQwMDA2NAotCi0jZGVmaW5lIElDMF9XQUtFUkQJCTB4QjA0MDAwNjgKLSNkZWZpbmUgSUMwX1dBS0VTRVQJCTB4QjA0MDAwNjgKLSNkZWZpbmUgSUMwX1dBS0VDTFIJCTB4QjA0MDAwNkMKLQotI2RlZmluZSBJQzBfTUFTS1JECQkweEIwNDAwMDcwCi0jZGVmaW5lIElDMF9NQVNLU0VUCQkweEIwNDAwMDcwCi0jZGVmaW5lIElDMF9NQVNLQ0xSCQkweEIwNDAwMDc0Ci0KLSNkZWZpbmUgSUMwX1JJU0lOR1JECQkweEIwNDAwMDc4Ci0jZGVmaW5lIElDMF9SSVNJTkdDTFIJCTB4QjA0MDAwNzgKLSNkZWZpbmUgSUMwX0ZBTExJTkdSRAkJMHhCMDQwMDA3QwotI2RlZmluZSBJQzBfRkFMTElOR0NMUgkJMHhCMDQwMDA3QwotCi0jZGVmaW5lIElDMF9URVNUQklUCQkweEIwNDAwMDgwCi0KLS8qIEludGVycnVwdCBDb250cm9sbGVyIDEgKi8KLSNkZWZpbmUgSUMxX0NGRzBSRAkJMHhCMTgwMDA0MAotI2RlZmluZSBJQzFfQ0ZHMFNFVAkJMHhCMTgwMDA0MAotI2RlZmluZSBJQzFfQ0ZHMENMUgkJMHhCMTgwMDA0NAotCi0jZGVmaW5lIElDMV9DRkcxUkQJCTB4QjE4MDAwNDgKLSNkZWZpbmUgSUMxX0NGRzFTRVQJCTB4QjE4MDAwNDgKLSNkZWZpbmUgSUMxX0NGRzFDTFIJCTB4QjE4MDAwNEMKLQotI2RlZmluZSBJQzFfQ0ZHMlJECQkweEIxODAwMDUwCi0jZGVmaW5lIElDMV9DRkcyU0VUCQkweEIxODAwMDUwCi0jZGVmaW5lIElDMV9DRkcyQ0xSCQkweEIxODAwMDU0Ci0KLSNkZWZpbmUgSUMxX1JFUTBJTlQJCTB4QjE4MDAwNTQKLSNkZWZpbmUgSUMxX1NSQ1JECQkweEIxODAwMDU4Ci0jZGVmaW5lIElDMV9TUkNTRVQJCTB4QjE4MDAwNTgKLSNkZWZpbmUgSUMxX1NSQ0NMUgkJMHhCMTgwMDA1QwotI2RlZmluZSBJQzFfUkVRMUlOVAkJMHhCMTgwMDA1QwotCi0jZGVmaW5lIElDMV9BU1NJR05SRCAgICAgICAgICAgIDB4QjE4MDAwNjAKLSNkZWZpbmUgSUMxX0FTU0lHTlNFVCAgICAgICAgICAgMHhCMTgwMDA2MAotI2RlZmluZSBJQzFfQVNTSUdOQ0xSICAgICAgICAgICAweEIxODAwMDY0Ci0KLSNkZWZpbmUgSUMxX1dBS0VSRAkJMHhCMTgwMDA2OAotI2RlZmluZSBJQzFfV0FLRVNFVAkJMHhCMTgwMDA2OAotI2RlZmluZSBJQzFfV0FLRUNMUgkJMHhCMTgwMDA2QwotCi0jZGVmaW5lIElDMV9NQVNLUkQJCTB4QjE4MDAwNzAKLSNkZWZpbmUgSUMxX01BU0tTRVQJCTB4QjE4MDAwNzAKLSNkZWZpbmUgSUMxX01BU0tDTFIJCTB4QjE4MDAwNzQKLQotI2RlZmluZSBJQzFfUklTSU5HUkQJCTB4QjE4MDAwNzgKLSNkZWZpbmUgSUMxX1JJU0lOR0NMUgkJMHhCMTgwMDA3OAotI2RlZmluZSBJQzFfRkFMTElOR1JECQkweEIxODAwMDdDCi0jZGVmaW5lIElDMV9GQUxMSU5HQ0xSCQkweEIxODAwMDdDCi0KLSNkZWZpbmUgSUMxX1RFU1RCSVQJCTB4QjE4MDAwODAKIAogCiAvKiBBdTEwMDAgKi8KICNpZmRlZiBDT05GSUdfU09DX0FVMTAwMAogCi0jZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKLSNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAotCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTAxMDAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCMDE3RkZGQwogI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxMDAwX1VTQl9IT1NUX0lOVAotCi0jZGVmaW5lIEFVMTAwMF9FVEgwX0JBU0UJMHhCMDUwMDAwMAotI2RlZmluZSBBVTEwMDBfRVRIMV9CQVNFCTB4QjA1MTAwMDAKLSNkZWZpbmUgQVUxMDAwX01BQzBfRU5BQkxFCTB4QjA1MjAwMDAKLSNkZWZpbmUgQVUxMDAwX01BQzFfRU5BQkxFCTB4QjA1MjAwMDQKLSNkZWZpbmUgTlVNX0VUSF9JTlRFUkZBQ0VTIDIKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTAwMCAqLwogCiAvKiBBdTE1MDAgKi8KICNpZmRlZiBDT05GSUdfU09DX0FVMTUwMAogCi0jZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKLSNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAotCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTAxMDAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCMDE3ZmZmYwogI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxNTAwX1VTQl9IT1NUX0lOVAotCi0jZGVmaW5lIEFVMTUwMF9FVEgwX0JBU0UJMHhCMTUwMDAwMAotI2RlZmluZSBBVTE1MDBfRVRIMV9CQVNFCTB4QjE1MTAwMDAKLSNkZWZpbmUgQVUxNTAwX01BQzBfRU5BQkxFCTB4QjE1MjAwMDAKLSNkZWZpbmUgQVUxNTAwX01BQzFfRU5BQkxFCTB4QjE1MjAwMDQKLSNkZWZpbmUgTlVNX0VUSF9JTlRFUkZBQ0VTIDIKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTUwMCAqLwogCiAvKiBBdTExMDAgKi8KICNpZmRlZiBDT05GSUdfU09DX0FVMTEwMAogCi0jZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKLSNkZWZpbmUgVUFSVDNfQUREUgkJMHhCMTQwMDAwMAotCiAjZGVmaW5lIFVTQl9PSENJX0JBU0UJCTB4MTAxMDAwMDAJLyogcGh5cyBhZGRyIGZvciBpb3JlbWFwICovCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCMDE3RkZGQwogI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxMTAwX1VTQl9IT1NUX0lOVAotCi0jZGVmaW5lIEFVMTEwMF9FVEgwX0JBU0UJMHhCMDUwMDAwMAotI2RlZmluZSBBVTExMDBfTUFDMF9FTkFCTEUJMHhCMDUyMDAwMAotI2RlZmluZSBOVU1fRVRIX0lOVEVSRkFDRVMgMQogI2VuZGlmIC8qIENPTkZJR19TT0NfQVUxMTAwICovCiAKICNpZmRlZiBDT05GSUdfU09DX0FVMTU1MAotI2RlZmluZSBVQVJUMF9BRERSCQkweEIxMTAwMDAwCiAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxNDAyMDAwMAkvKiBwaHlzIGFkZHIgZm9yIGlvcmVtYXAgKi8KICNkZWZpbmUgVVNCX09IQ0lfTEVOCQkweDAwMDYwMDAwCiAjZGVmaW5lIFVTQl9IT1NUX0NPTkZJRyAJMHhCNDAyN2ZmYwogI2RlZmluZSBGT1JfUExBVEZPUk1fQ19VU0JfSE9TVF9JTlQgQVUxNTUwX1VTQl9IT1NUX0lOVAotCi0jZGVmaW5lIEFVMTU1MF9FVEgwX0JBU0UJMHhCMDUwMDAwMAotI2RlZmluZSBBVTE1NTBfRVRIMV9CQVNFCTB4QjA1MTAwMDAKLSNkZWZpbmUgQVUxNTUwX01BQzBfRU5BQkxFCTB4QjA1MjAwMDAKLSNkZWZpbmUgQVUxNTUwX01BQzFfRU5BQkxFCTB4QjA1MjAwMDQKLSNkZWZpbmUgTlVNX0VUSF9JTlRFUkZBQ0VTIDIKICNlbmRpZiAvKiBDT05GSUdfU09DX0FVMTU1MCAqLwogCiAKICNpZmRlZiBDT05GSUdfU09DX0FVMTIwMAogCi0jZGVmaW5lIFVBUlQwX0FERFIJCTB4QjExMDAwMDAKLQogI2RlZmluZSBVU0JfVU9DX0JBU0UJCTB4MTQwMjAwMjAKICNkZWZpbmUgVVNCX1VPQ19MRU4JCTB4MjAKICNkZWZpbmUgVVNCX09IQ0lfQkFTRQkJMHgxNDAyMDEwMApAQCAtMTUwNCwyMiArMTM1Miw2IEBACiAjZGVmaW5lIFNZU19QSU5GVU5DX1MxQiAJKDEgPDwgMikKICNlbmRpZgogCi0jZGVmaW5lIFNZU19UUklPVVRSRAkJMHhCMTkwMDEwMAotI2RlZmluZSBTWVNfVFJJT1VUQ0xSCQkweEIxOTAwMTAwCi0jZGVmaW5lIFNZU19PVVRQVVRSRAkJMHhCMTkwMDEwOAotI2RlZmluZSBTWVNfT1VUUFVUU0VUCQkweEIxOTAwMTA4Ci0jZGVmaW5lIFNZU19PVVRQVVRDTFIJCTB4QjE5MDAxMEMKLSNkZWZpbmUgU1lTX1BJTlNUQVRFUkQJCTB4QjE5MDAxMTAKLSNkZWZpbmUgU1lTX1BJTklOUFVURU4JCTB4QjE5MDAxMTAKLQotLyogR1BJTzIsIEF1MTUwMCwgQXUxNTUwIG9ubHkgKi8KLSNkZWZpbmUgR1BJTzJfQkFTRQkJMHhCMTcwMDAwMAotI2RlZmluZSBHUElPMl9ESVIJCShHUElPMl9CQVNFICsgMCkKLSNkZWZpbmUgR1BJTzJfT1VUUFVUCQkoR1BJTzJfQkFTRSArIDgpCi0jZGVmaW5lIEdQSU8yX1BJTlNUQVRFCQkoR1BJTzJfQkFTRSArIDB4QykKLSNkZWZpbmUgR1BJTzJfSU5URU5BQkxFIAkoR1BJTzJfQkFTRSArIDB4MTApCi0jZGVmaW5lIEdQSU8yX0VOQUJMRQkJKEdQSU8yX0JBU0UgKyAweDE0KQotCiAvKiBQb3dlciBNYW5hZ2VtZW50ICovCiAjZGVmaW5lIFNZU19TQ1JBVENIMAkJMHhCMTkwMDAxOAogI2RlZmluZSBTWVNfU0NSQVRDSDEJCTB4QjE5MDAwMUMKQEAgLTE2MzUsMTIgKzE0NjcsNiBAQAogIyAgZGVmaW5lIEFDOTdDX1JTCQkoMSA8PCAxKQogIyAgZGVmaW5lIEFDOTdDX0NFCQkoMSA8PCAwKQogCi0vKiBTZWN1cmUgRGlnaXRhbCAoU0QpIENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgU0QwX1hNSVRfRklGTwkweEIwNjAwMDAwCi0jZGVmaW5lIFNEMF9SRUNWX0ZJRk8JMHhCMDYwMDAwNAotI2RlZmluZSBTRDFfWE1JVF9GSUZPCTB4QjA2ODAwMDAKLSNkZWZpbmUgU0QxX1JFQ1ZfRklGTwkweEIwNjgwMDA0Ci0KICNpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTAwKSB8fCBkZWZpbmVkKENPTkZJR19TT0NfQVUxNTUwKQogLyogQXUxNTAwIFBDSSBDb250cm9sbGVyICovCiAjZGVmaW5lIEF1MTUwMF9DRkdfQkFTRSAJMHhCNDAwNTAwMAkvKiB2aXJ0dWFsLCBLU0VHMSBhZGRyICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwX2RtYS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MTAwMF9kbWEuaAppbmRleCBjMzMzYjRlLi41OWY1YjU1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxMDAwX2RtYS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9hdTEwMDBfZG1hLmgKQEAgLTM3LDEwICszNyw2IEBACiAKICNkZWZpbmUgTlVNX0FVMTAwMF9ETUFfQ0hBTk5FTFMJOAogCi0vKiBETUEgQ2hhbm5lbCBCYXNlIEFkZHJlc3NlcyAqLwotI2RlZmluZSBETUFfQ0hBTk5FTF9CQVNFCTB4QjQwMDIwMDAKLSNkZWZpbmUgRE1BX0NIQU5ORUxfTEVOCQkweDAwMDAwMTAwCi0KIC8qIERNQSBDaGFubmVsIFJlZ2lzdGVyIE9mZnNldHMgKi8KICNkZWZpbmUgRE1BX01PREVfU0VUCQkweDAwMDAwMDAwCiAjZGVmaW5lIERNQV9NT0RFX1JFQUQJCURNQV9NT0RFX1NFVApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCmluZGV4IGM4YTU1M2EzLi4yZmRhY2ZlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvYXUxeHh4X2RiZG1hLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2F1MXh4eF9kYmRtYS5oCkBAIC0zNywxNCArMzcsNiBAQAogCiAjaWZuZGVmIF9MQU5HVUFHRV9BU1NFTUJMWQogCi0vKgotICogVGhlIERNQSBiYXNlIGFkZHJlc3Nlcy4KLSAqIFRoZSBjaGFubmVscyBhcmUgZXZlcnkgMjU2IGJ5dGVzICgweDAxMDApIGZyb20gdGhlIGNoYW5uZWwgMCBiYXNlLgotICogSW50ZXJydXB0IHN0YXR1cy9lbmFibGUgaXMgYml0cyAxNTowIGZvciBjaGFubmVscyAxNSB0byB6ZXJvLgotICovCi0jZGVmaW5lIERETUFfR0xPQkFMX0JBU0UJMHhiNDAwMzAwMAotI2RlZmluZSBERE1BX0NIQU5ORUxfQkFTRQkweGI0MDAyMDAwCi0KIHR5cGVkZWYgdm9sYXRpbGUgc3RydWN0IGRiZG1hX2dsb2JhbCB7CiAJdTMyCWRkbWFfY29uZmlnOwogCXUzMglkZG1hX2ludHN0YXQ7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby1hdTEwMDAuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCmluZGV4IDYyZDJmMTMuLjFmNDFhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLWF1MTAwMC5oCkBAIC0yNCw2ICsyNCwyMyBAQAogCiAjZGVmaW5lIE1BS0VfSVJRKGludGMsIG9mZikJKEFVMTAwMF9JTlRDIyNpbnRjIyNfSU5UX0JBU0UgKyAob2ZmKSkKIAorLyogR1BJTzEgcmVnaXN0ZXJzIHdpdGhpbiBTWVNfIGFyZWEgKi8KKyNkZWZpbmUgU1lTX1RSSU9VVFJECQkweDEwMAorI2RlZmluZSBTWVNfVFJJT1VUQ0xSCQkweDEwMAorI2RlZmluZSBTWVNfT1VUUFVUUkQJCTB4MTA4CisjZGVmaW5lIFNZU19PVVRQVVRTRVQJCTB4MTA4CisjZGVmaW5lIFNZU19PVVRQVVRDTFIJCTB4MTBDCisjZGVmaW5lIFNZU19QSU5TVEFURVJECQkweDExMAorI2RlZmluZSBTWVNfUElOSU5QVVRFTgkJMHgxMTAKKworLyogcmVnaXN0ZXIgb2Zmc2V0cyB3aXRoaW4gR1BJTzIgYmxvY2sgKi8KKyNkZWZpbmUgR1BJTzJfRElSCQkweDAwCisjZGVmaW5lIEdQSU8yX09VVFBVVAkJMHgwOAorI2RlZmluZSBHUElPMl9QSU5TVEFURQkJMHgwQworI2RlZmluZSBHUElPMl9JTlRFTkFCTEUJCTB4MTAKKyNkZWZpbmUgR1BJTzJfRU5BQkxFCQkweDE0CisKK3N0cnVjdCBncGlvOwogCiBzdGF0aWMgaW5saW5lIGludCBhdTEwMDBfZ3BpbzFfdG9faXJxKGludCBncGlvKQogewpAQCAtMjAwLDIzICsyMTcsMjYgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGFsY2hlbXlfZ3BpbzFfc2V0X3ZhbHVlKGludCBncGlvLCBpbnQgdikKIHsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9TWVNfUEhZU19BRERSKTsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChncGlvIC0gQUxDSEVNWV9HUElPMV9CQVNFKTsKIAl1bnNpZ25lZCBsb25nIHIgPSB2ID8gU1lTX09VVFBVVFNFVCA6IFNZU19PVVRQVVRDTFI7Ci0JYXVfd3JpdGVsKG1hc2ssIHIpOwotCWF1X3N5bmMoKTsKKwlfX3Jhd193cml0ZWwobWFzaywgYmFzZSArIHIpOworCXdtYigpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBhbGNoZW15X2dwaW8xX2dldF92YWx1ZShpbnQgZ3BpbykKIHsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9TWVNfUEhZU19BRERSKTsKIAl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChncGlvIC0gQUxDSEVNWV9HUElPMV9CQVNFKTsKLQlyZXR1cm4gYXVfcmVhZGwoU1lTX1BJTlNUQVRFUkQpICYgbWFzazsKKwlyZXR1cm4gX19yYXdfcmVhZGwoYmFzZSArIFNZU19QSU5TVEFURVJEKSAmIG1hc2s7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ3BpbzFfZGlyZWN0aW9uX2lucHV0KGludCBncGlvKQogeworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxMDAwX1NZU19QSFlTX0FERFIpOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IDEgPDwgKGdwaW8gLSBBTENIRU1ZX0dQSU8xX0JBU0UpOwotCWF1X3dyaXRlbChtYXNrLCBTWVNfVFJJT1VUQ0xSKTsKLQlhdV9zeW5jKCk7CisJX19yYXdfd3JpdGVsKG1hc2ssIGJhc2UgKyBTWVNfVFJJT1VUQ0xSKTsKKwl3bWIoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjU3LDI3ICsyNzcsMzEgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fYWxjaGVteV9ncGlvMl9tb2RfZGlyKGludCBncGlvLCBpbnQgdG9fb3V0KQogeworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTAwX0dQSU8yX1BIWVNfQUREUik7CiAJdW5zaWduZWQgbG9uZyBtYXNrID0gMSA8PCAoZ3BpbyAtIEFMQ0hFTVlfR1BJTzJfQkFTRSk7Ci0JdW5zaWduZWQgbG9uZyBkID0gYXVfcmVhZGwoR1BJTzJfRElSKTsKKwl1bnNpZ25lZCBsb25nIGQgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJTzJfRElSKTsKKwogCWlmICh0b19vdXQpCiAJCWQgfD0gbWFzazsKIAllbHNlCiAJCWQgJj0gfm1hc2s7Ci0JYXVfd3JpdGVsKGQsIEdQSU8yX0RJUik7Ci0JYXVfc3luYygpOworCV9fcmF3X3dyaXRlbChkLCBiYXNlICsgR1BJTzJfRElSKTsKKwl3bWIoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGFsY2hlbXlfZ3BpbzJfc2V0X3ZhbHVlKGludCBncGlvLCBpbnQgdikKIHsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTUwMF9HUElPMl9QSFlTX0FERFIpOwogCXVuc2lnbmVkIGxvbmcgbWFzazsKIAltYXNrID0gKCh2KSA/IDB4MDAwMTAwMDEgOiAweDAwMDEwMDAwKSA8PCAoZ3BpbyAtIEFMQ0hFTVlfR1BJTzJfQkFTRSk7Ci0JYXVfd3JpdGVsKG1hc2ssIEdQSU8yX09VVFBVVCk7Ci0JYXVfc3luYygpOworCV9fcmF3X3dyaXRlbChtYXNrLCBiYXNlICsgR1BJTzJfT1VUUFVUKTsKKwl3bWIoKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgYWxjaGVteV9ncGlvMl9nZXRfdmFsdWUoaW50IGdwaW8pCiB7Ci0JcmV0dXJuIGF1X3JlYWRsKEdQSU8yX1BJTlNUQVRFKSAmICgxIDw8IChncGlvIC0gQUxDSEVNWV9HUElPMl9CQVNFKSk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgX19pb21lbSAqKUtTRUcxQUREUihBVTE1MDBfR1BJTzJfUEhZU19BRERSKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoYmFzZSArIEdQSU8yX1BJTlNUQVRFKSAmICgxIDw8IChncGlvIC0gQUxDSEVNWV9HUElPMl9CQVNFKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsY2hlbXlfZ3BpbzJfZGlyZWN0aW9uX2lucHV0KGludCBncGlvKQpAQCAtMzI5LDIxICszNTMsMjMgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGFsY2hlbXlfZ3BpbzFfaW5wdXRfZW5hYmxlKHZvaWQpCiB7Ci0JYXVfd3JpdGVsKDAsIFNZU19QSU5JTlBVVEVOKTsJLyogdGhlIHdyaXRlIG9wIGlzIGtleSAqLwotCWF1X3N5bmMoKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTAwMF9TWVNfUEhZU19BRERSKTsKKwlfX3Jhd193cml0ZWwoMCwgYmFzZSArIFNZU19QSU5JTlBVVEVOKTsJLyogdGhlIHdyaXRlIG9wIGlzIGtleSAqLworCXdtYigpOwogfQogCiAvKiBHUElPMiBzaGFyZWQgaW50ZXJydXB0cyBhbmQgY29udHJvbCAqLwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19hbGNoZW15X2dwaW8yX21vZF9pbnQoaW50IGdwaW8yLCBpbnQgZW4pCiB7Ci0JdW5zaWduZWQgbG9uZyByID0gYXVfcmVhZGwoR1BJTzJfSU5URU5BQkxFKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTUwMF9HUElPMl9QSFlTX0FERFIpOworCXVuc2lnbmVkIGxvbmcgciA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPMl9JTlRFTkFCTEUpOwogCWlmIChlbikKIAkJciB8PSAxIDw8IGdwaW8yOwogCWVsc2UKIAkJciAmPSB+KDEgPDwgZ3BpbzIpOwotCWF1X3dyaXRlbChyLCBHUElPMl9JTlRFTkFCTEUpOwotCWF1X3N5bmMoKTsKKwlfX3Jhd193cml0ZWwociwgYmFzZSArIEdQSU8yX0lOVEVOQUJMRSk7CisJd21iKCk7CiB9CiAKIC8qKgpAQCAtNDE4LDEwICs0NDQsMTEgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGFsY2hlbXlfZ3BpbzJfZW5hYmxlKHZvaWQpCiB7Ci0JYXVfd3JpdGVsKDMsIEdQSU8yX0VOQUJMRSk7CS8qIHJlc2V0LCBjbG9jayBlbmFibGVkICovCi0JYXVfc3luYygpOwotCWF1X3dyaXRlbCgxLCBHUElPMl9FTkFCTEUpOwkvKiBjbG9jayBlbmFibGVkICovCi0JYXVfc3luYygpOworCXZvaWQgX19pb21lbSAqYmFzZSA9ICh2b2lkIF9faW9tZW0gKilLU0VHMUFERFIoQVUxNTAwX0dQSU8yX1BIWVNfQUREUik7CisJX19yYXdfd3JpdGVsKDMsIGJhc2UgKyBHUElPMl9FTkFCTEUpOwkvKiByZXNldCwgY2xvY2sgZW5hYmxlZCAqLworCXdtYigpOworCV9fcmF3X3dyaXRlbCgxLCBiYXNlICsgR1BJTzJfRU5BQkxFKTsJLyogY2xvY2sgZW5hYmxlZCAqLworCXdtYigpOwogfQogCiAvKioKQEAgLTQzMSw4ICs0NTgsOSBAQAogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgYWxjaGVteV9ncGlvMl9kaXNhYmxlKHZvaWQpCiB7Ci0JYXVfd3JpdGVsKDIsIEdQSU8yX0VOQUJMRSk7CS8qIHJlc2V0LCBjbG9jayBkaXNhYmxlZCAqLwotCWF1X3N5bmMoKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCBfX2lvbWVtICopS1NFRzFBRERSKEFVMTUwMF9HUElPMl9QSFlTX0FERFIpOworCV9fcmF3X3dyaXRlbCgyLCBiYXNlICsgR1BJTzJfRU5BQkxFKTsJLyogcmVzZXQsIGNsb2NrIGRpc2FibGVkICovCisJd21iKCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNTU2LDYgKzU4NCwxNiBAQAogCWFsY2hlbXlfZ3Bpb19zZXRfdmFsdWUoZ3Bpbywgdik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWVfY2Fuc2xlZXAodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCWdwaW9fc2V0X3ZhbHVlKGdwaW8sIHZhbHVlKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgZ3Bpb19pc192YWxpZChpbnQgZ3BpbykKIHsKIAlyZXR1cm4gYWxjaGVteV9ncGlvX2lzX3ZhbGlkKGdwaW8pOwpAQCAtNTgxLDEwICs2MTksNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0X29uZSh1bnNpZ25lZCBncGlvLAorCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0X2FycmF5KHN0cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGdwaW9fZnJlZSh1bnNpZ25lZCBncGlvKQogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19mcmVlX2FycmF5KHN0cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb19zZXRfZGVib3VuY2UodW5zaWduZWQgZ3BpbywgdW5zaWduZWQgZGVib3VuY2UpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZXhwb3J0KHVuc2lnbmVkIGdwaW8sIGJvb2wgZGlyZWN0aW9uX21heV9jaGFuZ2UpCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fZXhwb3J0X2xpbmsoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgIHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGdwaW9fc3lzZnNfc2V0X2FjdGl2ZV9sb3codW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb191bmV4cG9ydCh1bnNpZ25lZCBncGlvKQoreworfQorCiAjZW5kaWYJLyogIUNPTkZJR19BTENIRU1ZX0dQSU9fSU5ESVJFQ1QgKi8KIAogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L252cmFtLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY200N3h4L252cmFtLmgKaW5kZXggOTc1OTU4OC4uMTg0ZDVlYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNDd4eC9udnJhbS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTQ3eHgvbnZyYW0uaApAQCAtMzksOCArMzksMTYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG52cmFtX3BhcnNlX21hY2FkZHIoY2hhciAqYnVmLCB1OCAqbWFjYWRkcikKIHsKLQlzc2NhbmYoYnVmLCAiJWhoeDolaGh4OiVoaHg6JWhoeDolaGh4OiVoaHgiLCAmbWFjYWRkclswXSwgJm1hY2FkZHJbMV0sCi0JICAgICAgICZtYWNhZGRyWzJdLCAmbWFjYWRkclszXSwgJm1hY2FkZHJbNF0sICZtYWNhZGRyWzVdKTsKKwlpZiAoc3RyY2hyKGJ1ZiwgJzonKSkKKwkJc3NjYW5mKGJ1ZiwgIiVoaHg6JWhoeDolaGh4OiVoaHg6JWhoeDolaGh4IiwgJm1hY2FkZHJbMF0sCisJCQkmbWFjYWRkclsxXSwgJm1hY2FkZHJbMl0sICZtYWNhZGRyWzNdLCAmbWFjYWRkcls0XSwKKwkJCSZtYWNhZGRyWzVdKTsKKwllbHNlIGlmIChzdHJjaHIoYnVmLCAnLScpKQorCQlzc2NhbmYoYnVmLCAiJWhoeC0laGh4LSVoaHgtJWhoeC0laGh4LSVoaHgiLCAmbWFjYWRkclswXSwKKwkJCSZtYWNhZGRyWzFdLCAmbWFjYWRkclsyXSwgJm1hY2FkZHJbM10sICZtYWNhZGRyWzRdLAorCQkJJm1hY2FkZHJbNV0pOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuIG5vdCBwYXJzZSBtYWMgYWRkcmVzczogJXNcbiIsIGJ1Zik7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY205NjN4eF90YWcuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWJjbTYzeHgvYmNtOTYzeHhfdGFnLmgKaW5kZXggMzI5NzhkMy4uZWQ3MmU2YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYmNtNjN4eC9iY205NjN4eF90YWcuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1iY202M3h4L2JjbTk2M3h4X3RhZy5oCkBAIC04OCw3ICs4OCw3IEBACiAJY2hhciBrZXJuZWxfY3JjW0NSQ19MRU5dOwogCS8qIDIyOC0yMzU6IFVudXNlZCBhdCBwcmVzZW50ICovCiAJY2hhciByZXNlcnZlZDFbOF07Ci0JLyogMjM2LTIzOTogQ1JDMzIgb2YgaGVhZGVyIGV4Y2x1ZGluZyB0YWdWZXJzaW9uICovCisJLyogMjM2LTIzOTogQ1JDMzIgb2YgaGVhZGVyIGV4Y2x1ZGluZyBsYXN0IDIwIGJ5dGVzICovCiAJY2hhciBoZWFkZXJfY3JjW0NSQ19MRU5dOwogCS8qIDI0MC0yNTU6IFVudXNlZCBhdCBwcmVzZW50ICovCiAJY2hhciByZXNlcnZlZDJbMTZdOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9rZXJuZWwtZW50cnktaW5pdC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtY2F2aXVtLW9jdGVvbi9rZXJuZWwtZW50cnktaW5pdC5oCmluZGV4IDBiMmI1ZWIuLmRlZGVmN2QgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWNhdml1bS1vY3Rlb24va2VybmVsLWVudHJ5LWluaXQuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1jYXZpdW0tb2N0ZW9uL2tlcm5lbC1lbnRyeS1pbml0LmgKQEAgLTYzLDYgKzYzLDExIEBACiAJIyBDTjMwWFggRGlzYWJsZSBpbnN0cnVjdGlvbiBwcmVmZXRjaGluZwogCW9yICB2MCwgdjAsIDB4MjAwMAogc2tpcDoKKwkjIEZpcnN0IGNsZWFyIG9mZiBDdm1DdGxbSVBQQ0ldIGJpdCBhbmQgbW92ZSB0aGUgcGVyZm9ybWFuY2UKKwkjIGNvdW50ZXJzIGludGVycnVwdCB0byBJUlEgNgorCWxpCXYxLCB+KDcgPDwgNykKKwlhbmQJdjAsIHYwLCB2MQorCW9yaQl2MCwgdjAsICg2IDw8IDcpCiAJIyBXcml0ZSB0aGUgY2F2aXVtIGNvbnRyb2wgcmVnaXN0ZXIKIAlkbXRjMCAgIHYwLCBDUDBfQ1ZNQ1RMX1JFRwogCXN5bmMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS9sYW50aXEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS9sYW50aXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTJmMDI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL2xhbnRpcS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKyNpZm5kZWYgX0xBTlRJUV9IX18KKyNkZWZpbmUgX0xBTlRJUV9IX18KKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisvKiBnZW5lcmljIHJlZyBhY2Nlc3MgZnVuY3Rpb25zICovCisjZGVmaW5lIGx0cV9yMzIocmVnKQkJX19yYXdfcmVhZGwocmVnKQorI2RlZmluZSBsdHFfdzMyKHZhbCwgcmVnKQlfX3Jhd193cml0ZWwodmFsLCByZWcpCisjZGVmaW5lIGx0cV93MzJfbWFzayhjbGVhciwgc2V0LCByZWcpCVwKKwlsdHFfdzMyKChsdHFfcjMyKHJlZykgJiB+KGNsZWFyKSkgfCAoc2V0KSwgcmVnKQorI2RlZmluZSBsdHFfcjgocmVnKQkJX19yYXdfcmVhZGIocmVnKQorI2RlZmluZSBsdHFfdzgodmFsLCByZWcpCV9fcmF3X3dyaXRlYih2YWwsIHJlZykKKworLyogcmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyBmb3IgRUJVIGFuZCBDR1UgKi8KKyNkZWZpbmUgbHRxX2VidV93MzIoeCwgeSkJbHRxX3czMigoeCksIGx0cV9lYnVfbWVtYmFzZSArICh5KSkKKyNkZWZpbmUgbHRxX2VidV9yMzIoeCkJCWx0cV9yMzIobHRxX2VidV9tZW1iYXNlICsgKHgpKQorI2RlZmluZSBsdHFfY2d1X3czMih4LCB5KQlsdHFfdzMyKCh4KSwgbHRxX2NndV9tZW1iYXNlICsgKHkpKQorI2RlZmluZSBsdHFfY2d1X3IzMih4KQkJbHRxX3IzMihsdHFfY2d1X21lbWJhc2UgKyAoeCkpCisKK2V4dGVybiBfX2lvbWVtIHZvaWQgKmx0cV9lYnVfbWVtYmFzZTsKK2V4dGVybiBfX2lvbWVtIHZvaWQgKmx0cV9jZ3VfbWVtYmFzZTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCBsdHFfZ2V0X2NwdV92ZXIodm9pZCk7CitleHRlcm4gdW5zaWduZWQgaW50IGx0cV9nZXRfc29jX3R5cGUodm9pZCk7CisKKy8qIGNsb2NrIHNwZWVkcyAqLworI2RlZmluZSBDTE9DS182ME0JNjAwMDAwMDAKKyNkZWZpbmUgQ0xPQ0tfODNNCTgzMzMzMzMzCisjZGVmaW5lIENMT0NLXzExMU0JMTExMTExMTExCisjZGVmaW5lIENMT0NLXzEzM00JMTMzMzMzMzMzCisjZGVmaW5lIENMT0NLXzE2N00JMTY2NjY2NjY3CisjZGVmaW5lIENMT0NLXzIwME0JMjAwMDAwMDAwCisjZGVmaW5lIENMT0NLXzI2Nk0JMjY2NjY2NjY2CisjZGVmaW5lIENMT0NLXzMzM00JMzMzMzMzMzMzCisjZGVmaW5lIENMT0NLXzQwME0JNDAwMDAwMDAwCisKKy8qIHNwaW5sb2NrIGFsbCBlYnUgaS9vICovCitleHRlcm4gc3BpbmxvY2tfdCBlYnVfbG9jazsKKworLyogc29tZSBpcnEgaGVscGVycyAqLworZXh0ZXJuIHZvaWQgbHRxX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitleHRlcm4gdm9pZCBsdHFfbWFza19hbmRfYWNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworZXh0ZXJuIHZvaWQgbHRxX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKKworLyogZmluZCBvdXQgd2hhdCBjYXVzZWQgdGhlIGxhc3QgY3B1IHJlc2V0ICovCitleHRlcm4gaW50IGx0cV9yZXNldF9jYXVzZSh2b2lkKTsKKyNkZWZpbmUgTFRRX1JTVF9DQVVTRV9XRFRSU1QJMHgyMAorCisjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIElPUE9SVF9SRVNPVVJDRV9FTkQJMHhmZmZmZmZmZgorI2RlZmluZSBJT01FTV9SRVNPVVJDRV9TVEFSVAkweDEwMDAwMDAwCisjZGVmaW5lIElPTUVNX1JFU09VUkNFX0VORAkweGZmZmZmZmZmCisjZGVmaW5lIExUUV9GTEFTSF9TVEFSVAkJMHgxMDAwMDAwMAorI2RlZmluZSBMVFFfRkxBU0hfTUFYCQkweDA0MDAwMDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL2xhbnRpcV9wbGF0Zm9ybS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL2xhbnRpcV9wbGF0Zm9ybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMDVmMWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEvbGFudGlxX3BsYXRmb3JtLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaWZuZGVmIF9MQU5USVFfUExBVEZPUk1fSF9fCisjZGVmaW5lIF9MQU5USVFfUExBVEZPUk1fSF9fCisKKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorCisvKiBzdHJ1Y3QgdXNlZCB0byBwYXNzIGluZm8gdG8gdGhlIHBjaSBjb3JlICovCitlbnVtIHsKKwlQQ0lfQ0xPQ0tfSU5UID0gMCwKKwlQQ0lfQ0xPQ0tfRVhUCit9OworCisjZGVmaW5lIFBDSV9FWElOMAkweDAwMDEKKyNkZWZpbmUgUENJX0VYSU4xCTB4MDAwMgorI2RlZmluZSBQQ0lfRVhJTjIJMHgwMDA0CisjZGVmaW5lIFBDSV9FWElOMwkweDAwMDgKKyNkZWZpbmUgUENJX0VYSU40CTB4MDAxMAorI2RlZmluZSBQQ0lfRVhJTjUJMHgwMDIwCisjZGVmaW5lIFBDSV9FWElOX01BWAk2CisKKyNkZWZpbmUgUENJX0dOVDEJMHgwMDQwCisjZGVmaW5lIFBDSV9HTlQyCTB4MDA4MAorI2RlZmluZSBQQ0lfR05UMwkweDAxMDAKKyNkZWZpbmUgUENJX0dOVDQJMHgwMjAwCisKKyNkZWZpbmUgUENJX1JFUTEJMHgwNDAwCisjZGVmaW5lIFBDSV9SRVEyCTB4MDgwMAorI2RlZmluZSBQQ0lfUkVRMwkweDEwMDAKKyNkZWZpbmUgUENJX1JFUTQJMHgyMDAwCisjZGVmaW5lIFBDSV9SRVFfU0hJRlQJMTAKKyNkZWZpbmUgUENJX1JFUV9NQVNLCTB4ZgorCitzdHJ1Y3QgbHRxX3BjaV9kYXRhIHsKKwlpbnQgY2xvY2s7CisJaW50IGdwaW87CisJaW50IGlycVsxNl07Cit9OworCisvKiBzdHJ1Y3QgdXNlZCB0byBwYXNzIGluZm8gdG8gbmV0d29yayBkcml2ZXJzICovCitzdHJ1Y3QgbHRxX2V0aF9kYXRhIHsKKwlzdHJ1Y3Qgc29ja2FkZHIgbWFjOworCWludCBtaWlfbW9kZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL3dhci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL3dhci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYjA4ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEvd2FyLmgKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX01BQ0hfTEFOVElRX1dBUl9ICisjZGVmaW5lIF9fQVNNX01JUFNfTUFDSF9MQU5USVFfV0FSX0gKKworI2RlZmluZSBSNDYwMF9WMV9JTkRFWF9JQ0FDSEVPUF9XQVIgICAgIDAKKyNkZWZpbmUgUjQ2MDBfVjFfSElUX0NBQ0hFT1BfV0FSICAgICAgICAwCisjZGVmaW5lIFI0NjAwX1YyX0hJVF9DQUNIRU9QX1dBUiAgICAgICAgMAorI2RlZmluZSBSNTQzMl9DUDBfSU5URVJSVVBUX1dBUiAgICAgICAgIDAKKyNkZWZpbmUgQkNNMTI1MF9NM19XQVIgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFNJQllURV8xOTU2X1dBUiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSVBTNEtfSUNBQ0hFX1JFRklMTF9XQVIgICAgICAgIDAKKyNkZWZpbmUgTUlQU19DQUNIRV9TWU5DX1dBUiAgICAgICAgICAgICAwCisjZGVmaW5lIFRYNDlYWF9JQ0FDSEVfSU5ERVhfSU5WX1dBUiAgICAgMAorI2RlZmluZSBSTTkwMDBfQ0RFWF9TTVBfV0FSICAgICAgICAgICAgIDAKKyNkZWZpbmUgSUNBQ0hFX1JFRklMTFNfV09SS0FST1VORF9XQVIgICAwCisjZGVmaW5lIFIxMDAwMF9MTFNDX1dBUiAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSVBTMzRLX01JU1NFRF9JVExCX1dBUiAgICAgICAgIDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEveHdheS9pcnEuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNDcxZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEveHdheS9pcnEuaApAQCAtMCwwICsxLDE4IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX19MQU5USVFfSVJRX0gKKyNkZWZpbmUgX19MQU5USVFfSVJRX0gKKworI2luY2x1ZGUgPGxhbnRpcV9pcnEuaD4KKworI2RlZmluZSBOUl9JUlFTIDI1NgorCisjaW5jbHVkZV9uZXh0IDxpcnEuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEveHdheS9sYW50aXFfaXJxLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEveHdheS9sYW50aXFfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ0NjVhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5L2xhbnRpcV9pcnEuaApAQCAtMCwwICsxLDY2IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX0xBTlRJUV9YV0FZX0lSUV9IX18KKyNkZWZpbmUgX0xBTlRJUV9YV0FZX0lSUV9IX18KKworI2RlZmluZSBJTlRfTlVNX0lSUTAJCTgKKyNkZWZpbmUgSU5UX05VTV9JTTBfSVJMMAkoSU5UX05VTV9JUlEwICsgMCkKKyNkZWZpbmUgSU5UX05VTV9JTTFfSVJMMAkoSU5UX05VTV9JUlEwICsgMzIpCisjZGVmaW5lIElOVF9OVU1fSU0yX0lSTDAJKElOVF9OVU1fSVJRMCArIDY0KQorI2RlZmluZSBJTlRfTlVNX0lNM19JUkwwCShJTlRfTlVNX0lSUTAgKyA5NikKKyNkZWZpbmUgSU5UX05VTV9JTTRfSVJMMAkoSU5UX05VTV9JUlEwICsgMTI4KQorI2RlZmluZSBJTlRfTlVNX0lNX09GRlNFVAkoSU5UX05VTV9JTTFfSVJMMCAtIElOVF9OVU1fSU0wX0lSTDApCisKKyNkZWZpbmUgTFRRX0FTQ19USVIoeCkJCShJTlRfTlVNX0lNM19JUkwwICsgKHggKiA4KSkKKyNkZWZpbmUgTFRRX0FTQ19SSVIoeCkJCShJTlRfTlVNX0lNM19JUkwwICsgKHggKiA4KSArIDEpCisjZGVmaW5lIExUUV9BU0NfRUlSKHgpCQkoSU5UX05VTV9JTTNfSVJMMCArICh4ICogOCkgKyAyKQorCisjZGVmaW5lIExUUV9BU0NfQVNFX1RJUgkJSU5UX05VTV9JTTJfSVJMMAorI2RlZmluZSBMVFFfQVNDX0FTRV9SSVIJCShJTlRfTlVNX0lNMl9JUkwwICsgMikKKyNkZWZpbmUgTFRRX0FTQ19BU0VfRUlSCQkoSU5UX05VTV9JTTJfSVJMMCArIDMpCisKKyNkZWZpbmUgTFRRX1NTQ19USVIJCShJTlRfTlVNX0lNMF9JUkwwICsgMTUpCisjZGVmaW5lIExUUV9TU0NfUklSCQkoSU5UX05VTV9JTTBfSVJMMCArIDE0KQorI2RlZmluZSBMVFFfU1NDX0VJUgkJKElOVF9OVU1fSU0wX0lSTDAgKyAxNikKKworI2RlZmluZSBMVFFfTUVJX0RZSU5HX0dBU1BfSU5UCShJTlRfTlVNX0lNMV9JUkwwICsgMjEpCisjZGVmaW5lIExUUV9NRUlfSU5UCQkoSU5UX05VTV9JTTFfSVJMMCArIDIzKQorCisjZGVmaW5lIExUUV9USU1FUjZfSU5UCQkoSU5UX05VTV9JTTFfSVJMMCArIDIzKQorI2RlZmluZSBMVFFfVVNCX0lOVAkJKElOVF9OVU1fSU0xX0lSTDAgKyAyMikKKyNkZWZpbmUgTFRRX1VTQl9PQ19JTlQJCShJTlRfTlVNX0lNNF9JUkwwICsgMjMpCisKKyNkZWZpbmUgTUlQU19DUFVfVElNRVJfSVJRCQk3CisKKyNkZWZpbmUgTFRRX0RNQV9DSDBfSU5UCQkoSU5UX05VTV9JTTJfSVJMMCkKKyNkZWZpbmUgTFRRX0RNQV9DSDFfSU5UCQkoSU5UX05VTV9JTTJfSVJMMCArIDEpCisjZGVmaW5lIExUUV9ETUFfQ0gyX0lOVAkJKElOVF9OVU1fSU0yX0lSTDAgKyAyKQorI2RlZmluZSBMVFFfRE1BX0NIM19JTlQJCShJTlRfTlVNX0lNMl9JUkwwICsgMykKKyNkZWZpbmUgTFRRX0RNQV9DSDRfSU5UCQkoSU5UX05VTV9JTTJfSVJMMCArIDQpCisjZGVmaW5lIExUUV9ETUFfQ0g1X0lOVAkJKElOVF9OVU1fSU0yX0lSTDAgKyA1KQorI2RlZmluZSBMVFFfRE1BX0NINl9JTlQJCShJTlRfTlVNX0lNMl9JUkwwICsgNikKKyNkZWZpbmUgTFRRX0RNQV9DSDdfSU5UCQkoSU5UX05VTV9JTTJfSVJMMCArIDcpCisjZGVmaW5lIExUUV9ETUFfQ0g4X0lOVAkJKElOVF9OVU1fSU0yX0lSTDAgKyA4KQorI2RlZmluZSBMVFFfRE1BX0NIOV9JTlQJCShJTlRfTlVNX0lNMl9JUkwwICsgOSkKKyNkZWZpbmUgTFRRX0RNQV9DSDEwX0lOVAkoSU5UX05VTV9JTTJfSVJMMCArIDEwKQorI2RlZmluZSBMVFFfRE1BX0NIMTFfSU5UCShJTlRfTlVNX0lNMl9JUkwwICsgMTEpCisjZGVmaW5lIExUUV9ETUFfQ0gxMl9JTlQJKElOVF9OVU1fSU0yX0lSTDAgKyAyNSkKKyNkZWZpbmUgTFRRX0RNQV9DSDEzX0lOVAkoSU5UX05VTV9JTTJfSVJMMCArIDI2KQorI2RlZmluZSBMVFFfRE1BX0NIMTRfSU5UCShJTlRfTlVNX0lNMl9JUkwwICsgMjcpCisjZGVmaW5lIExUUV9ETUFfQ0gxNV9JTlQJKElOVF9OVU1fSU0yX0lSTDAgKyAyOCkKKyNkZWZpbmUgTFRRX0RNQV9DSDE2X0lOVAkoSU5UX05VTV9JTTJfSVJMMCArIDI5KQorI2RlZmluZSBMVFFfRE1BX0NIMTdfSU5UCShJTlRfTlVNX0lNMl9JUkwwICsgMzApCisjZGVmaW5lIExUUV9ETUFfQ0gxOF9JTlQJKElOVF9OVU1fSU0yX0lSTDAgKyAxNikKKyNkZWZpbmUgTFRRX0RNQV9DSDE5X0lOVAkoSU5UX05VTV9JTTJfSVJMMCArIDIxKQorCisjZGVmaW5lIExUUV9QUEVfTUJPWF9JTlQJKElOVF9OVU1fSU0yX0lSTDAgKyAyNCkKKworI2RlZmluZSBJTlRfTlVNX0lNNF9JUkwxNAkoSU5UX05VTV9JTTRfSVJMMCArIDE0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5L2xhbnRpcV9zb2MuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5L2xhbnRpcV9zb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTNjNmJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL3h3YXkvbGFudGlxX3NvYy5oCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX0xUUV9YV0FZX0hfXworI2RlZmluZSBfTFRRX1hXQVlfSF9fCisKKyNpZmRlZiBDT05GSUdfU09DX1RZUEVfWFdBWQorCisjaW5jbHVkZSA8bGFudGlxLmg+CisKKy8qIENoaXAgSURzICovCisjZGVmaW5lIFNPQ19JRF9EQU5VQkUxCQkweDEyOQorI2RlZmluZSBTT0NfSURfREFOVUJFMgkJMHgxMkIKKyNkZWZpbmUgU09DX0lEX1RXSU5QQVNTCQkweDEyRAorI2RlZmluZSBTT0NfSURfQU1BWk9OX1NFCTB4MTUyCisjZGVmaW5lIFNPQ19JRF9BUlgxODgJCTB4MTZDCisjZGVmaW5lIFNPQ19JRF9BUlgxNjgJCTB4MTZECisjZGVmaW5lIFNPQ19JRF9BUlgxODIJCTB4MTZGCisKKy8qIFNvQyBUeXBlcyAqLworI2RlZmluZSBTT0NfVFlQRV9EQU5VQkUJCTB4MDEKKyNkZWZpbmUgU09DX1RZUEVfVFdJTlBBU1MJMHgwMgorI2RlZmluZSBTT0NfVFlQRV9BUjkJCTB4MDMKKyNkZWZpbmUgU09DX1RZUEVfVlI5CQkweDA0CisjZGVmaW5lIFNPQ19UWVBFX0FNQVpPTl9TRQkweDA1CisKKy8qIEFTQzAvMSAtIHNlcmlhbCBwb3J0ICovCisjZGVmaW5lIExUUV9BU0MwX0JBU0VfQUREUgkweDFFMTAwNDAwCisjZGVmaW5lIExUUV9BU0MxX0JBU0VfQUREUgkweDFFMTAwQzAwCisjZGVmaW5lIExUUV9BU0NfU0laRQkJMHg0MDAKKworLyogUkNVIC0gcmVzZXQgY29udHJvbCB1bml0ICovCisjZGVmaW5lIExUUV9SQ1VfQkFTRV9BRERSCTB4MUYyMDMwMDAKKyNkZWZpbmUgTFRRX1JDVV9TSVpFCQkweDEwMDAKKworLyogR1BUVSAtIGdlbmVyYWwgcHVycG9zZSB0aW1lciB1bml0ICovCisjZGVmaW5lIExUUV9HUFRVX0JBU0VfQUREUgkweDE4MDAwMzAwCisjZGVmaW5lIExUUV9HUFRVX1NJWkUJCTB4MTAwCisKKy8qIEVCVSAtIGV4dGVybmFsIGJ1cyB1bml0ICovCisjZGVmaW5lIExUUV9FQlVfR1BJT19TVEFSVAkweDE0MDAwMDAwCisjZGVmaW5lIExUUV9FQlVfR1BJT19TSVpFCTB4MTAwMAorCisjZGVmaW5lIExUUV9FQlVfQkFTRV9BRERSCTB4MUUxMDUzMDAKKyNkZWZpbmUgTFRRX0VCVV9TSVpFCQkweDEwMAorCisjZGVmaW5lIExUUV9FQlVfQlVTQ09OMAkJMHgwMDYwCisjZGVmaW5lIExUUV9FQlVfUENDX0NPTgkJMHgwMDkwCisjZGVmaW5lIExUUV9FQlVfUENDX0lFTgkJMHgwMEE0CisjZGVmaW5lIExUUV9FQlVfUENDX0lTVEFUCTB4MDBBMAorI2RlZmluZSBMVFFfRUJVX0JVU0NPTjEJCTB4MDA2NAorI2RlZmluZSBMVFFfRUJVX0FERFJTRUwxCTB4MDAyNAorI2RlZmluZSBFQlVfV1JESVMJCTB4ODAwMDAwMDAKKworLyogQ0dVIC0gY2xvY2sgZ2VuZXJhdGlvbiB1bml0ICovCisjZGVmaW5lIExUUV9DR1VfQkFTRV9BRERSCTB4MUYxMDMwMDAKKyNkZWZpbmUgTFRRX0NHVV9TSVpFCQkweDEwMDAKKworLyogSUNVIC0gaW50ZXJydXB0IGNvbnRyb2wgdW5pdCAqLworI2RlZmluZSBMVFFfSUNVX0JBU0VfQUREUgkweDFGODgwMjAwCisjZGVmaW5lIExUUV9JQ1VfU0laRQkJMHgxMDAKKworLyogRUlVIC0gZXh0ZXJuYWwgaW50ZXJydXB0IHVuaXQgKi8KKyNkZWZpbmUgTFRRX0VJVV9CQVNFX0FERFIJMHgxRjEwMTAwMAorI2RlZmluZSBMVFFfRUlVX1NJWkUJCTB4MTAwMAorCisvKiBQTVUgLSBwb3dlciBtYW5hZ2VtZW50IHVuaXQgKi8KKyNkZWZpbmUgTFRRX1BNVV9CQVNFX0FERFIJMHgxRjEwMjAwMAorI2RlZmluZSBMVFFfUE1VX1NJWkUJCTB4MTAwMAorCisjZGVmaW5lIFBNVV9ETUEJCQkweDAwMjAKKyNkZWZpbmUgUE1VX1VTQgkJCTB4ODA0MQorI2RlZmluZSBQTVVfTEVECQkJMHgwODAwCisjZGVmaW5lIFBNVV9HUFQJCQkweDEwMDAKKyNkZWZpbmUgUE1VX1BQRQkJCTB4MjAwMAorI2RlZmluZSBQTVVfRlBJCQkJMHg0MDAwCisjZGVmaW5lIFBNVV9TV0lUQ0gJCTB4MTAwMDAwMDAKKworLyogRVRPUCAtIGV0aGVybmV0ICovCisjZGVmaW5lIExUUV9FVE9QX0JBU0VfQUREUgkweDFFMTgwMDAwCisjZGVmaW5lIExUUV9FVE9QX1NJWkUJCTB4NDAwMDAKKworLyogRE1BICovCisjZGVmaW5lIExUUV9ETUFfQkFTRV9BRERSCTB4MUUxMDQxMDAKKyNkZWZpbmUgTFRRX0RNQV9TSVpFCQkweDgwMAorCisvKiBQQ0kgKi8KKyNkZWZpbmUgUENJX0NSX0JBU0VfQUREUgkweDFFMTA1NDAwCisjZGVmaW5lIFBDSV9DUl9TSVpFCQkweDQwMAorCisvKiBXRFQgKi8KKyNkZWZpbmUgTFRRX1dEVF9CQVNFX0FERFIJMHgxRjg4MDNGMAorI2RlZmluZSBMVFFfV0RUX1NJWkUJCTB4MTAKKworLyogU1RQIC0gc2VyaWFsIHRvIHBhcmFsbGVsIGNvbnZlcnNpb24gdW5pdCAqLworI2RlZmluZSBMVFFfU1RQX0JBU0VfQUREUgkweDFFMTAwQkIwCisjZGVmaW5lIExUUV9TVFBfU0laRQkJMHg0MAorCisvKiBHUElPICovCisjZGVmaW5lIExUUV9HUElPMF9CQVNFX0FERFIJMHgxRTEwMEIxMAorI2RlZmluZSBMVFFfR1BJTzFfQkFTRV9BRERSCTB4MUUxMDBCNDAKKyNkZWZpbmUgTFRRX0dQSU8yX0JBU0VfQUREUgkweDFFMTAwQjcwCisjZGVmaW5lIExUUV9HUElPX1NJWkUJCTB4MzAKKworLyogU1NDICovCisjZGVmaW5lIExUUV9TU0NfQkFTRV9BRERSCTB4MWUxMDA4MDAKKyNkZWZpbmUgTFRRX1NTQ19TSVpFCQkweDEwMAorCisvKiBNRUkgLSBkc2wgY29yZSAqLworI2RlZmluZSBMVFFfTUVJX0JBU0VfQUREUgkweDFFMTE2MDAwCisKKy8qIERFVSAtIGRhdGEgZW5jcnlwdGlvbiB1bml0ICovCisjZGVmaW5lIExUUV9ERVVfQkFTRV9BRERSCTB4MUUxMDMxMDAKKworLyogTVBTIC0gbXVsdGkgcHJvY2Vzc29yIHVuaXQgKHZvaWNlKSAqLworI2RlZmluZSBMVFFfTVBTX0JBU0VfQUREUgkoS1NFRzEgKyAweDFGMTA3MDAwKQorI2RlZmluZSBMVFFfTVBTX0NISVBJRAkJKCh1MzIgKikoTFRRX01QU19CQVNFX0FERFIgKyAweDAzNDQpKQorCisvKiByZXF1ZXN0IGEgbm9uLWdwaW8gYW5kIHNldCB0aGUgUElPIGNvbmZpZyAqLworZXh0ZXJuIGludCAgbHRxX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgYWx0MCwKKwl1bnNpZ25lZCBpbnQgYWx0MSwgdW5zaWduZWQgaW50IGRpciwgY29uc3QgY2hhciAqbmFtZSk7CitleHRlcm4gdm9pZCBsdHFfcG11X2VuYWJsZSh1bnNpZ25lZCBpbnQgbW9kdWxlKTsKK2V4dGVybiB2b2lkIGx0cV9wbXVfZGlzYWJsZSh1bnNpZ25lZCBpbnQgbW9kdWxlKTsKKworc3RhdGljIGlubGluZSBpbnQgbHRxX2lzX2FyOSh2b2lkKQoreworCXJldHVybiAobHRxX2dldF9zb2NfdHlwZSgpID09IFNPQ19UWVBFX0FSOSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGx0cV9pc192cjkodm9pZCkKK3sKKwlyZXR1cm4gKGx0cV9nZXRfc29jX3R5cGUoKSA9PSBTT0NfVFlQRV9WUjkpOworfQorCisjZW5kaWYgLyogQ09ORklHX1NPQ19UWVBFX1hXQVkgKi8KKyNlbmRpZiAvKiBfTFRRX1hXQVlfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1sYW50aXEveHdheS94d2F5X2RtYS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL3h3YXkveHdheV9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzI5NDNhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxL3h3YXkveHdheV9kbWEuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTEgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2lmbmRlZiBMVFFfRE1BX0hfXworI2RlZmluZSBMVFFfRE1BX0hfXworCisjZGVmaW5lIExUUV9ERVNDX1NJWkUJCTB4MDgJLyogZWFjaCBkZXNjcmlwdG9yIGlzIDY0Yml0ICovCisjZGVmaW5lIExUUV9ERVNDX05VTQkJMHg0MAkvKiA2NCBkZXNjcmlwdG9ycyAvIGNoYW5uZWwgKi8KKworI2RlZmluZSBMVFFfRE1BX09XTgkJQklUKDMxKQkvKiBvd25lciBiaXQgKi8KKyNkZWZpbmUgTFRRX0RNQV9DCQlCSVQoMzApIC8qIGNvbXBsZXRlIGJpdCAqLworI2RlZmluZSBMVFFfRE1BX1NPUAkJQklUKDI5KSAvKiBzdGFydCBvZiBwYWNrZXQgKi8KKyNkZWZpbmUgTFRRX0RNQV9FT1AJCUJJVCgyOCkgLyogZW5kIG9mIHBhY2tldCAqLworI2RlZmluZSBMVFFfRE1BX1RYX09GRlNFVCh4KQkoKHggJiAweDFmKSA8PCAyMykgLyogZGF0YSBieXRlcyBvZmZzZXQgKi8KKyNkZWZpbmUgTFRRX0RNQV9SWF9PRkZTRVQoeCkJKCh4ICYgMHg3KSA8PCAyMykgLyogZGF0YSBieXRlcyBvZmZzZXQgKi8KKyNkZWZpbmUgTFRRX0RNQV9TSVpFX01BU0sJKDB4ZmZmZikgLyogdGhlIHNpemUgZmllbGQgaXMgMTYgYml0ICovCisKK3N0cnVjdCBsdHFfZG1hX2Rlc2MgeworCXUzMiBjdGw7CisJdTMyIGFkZHI7Cit9OworCitzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsIHsKKwlpbnQgbnI7CQkJCS8qIHRoZSBjaGFubmVsIG51bWJlciAqLworCWludCBpcnE7CQkJLyogdGhlIG1hcHBlZCBpcnEgKi8KKwlpbnQgZGVzYzsJCQkvKiB0aGUgY3VycmVudCBkZXNjcmlwdG9yICovCisJc3RydWN0IGx0cV9kbWFfZGVzYyAqZGVzY19iYXNlOwkvKiB0aGUgZGVzY3JpcHRvciBiYXNlICovCisJaW50IHBoeXM7CQkJLyogcGh5c2ljYWwgYWRkciAqLworfTsKKworZW51bSB7CisJRE1BX1BPUlRfRVRPUCA9IDAsCisJRE1BX1BPUlRfREVVLAorfTsKKworZXh0ZXJuIHZvaWQgbHRxX2RtYV9lbmFibGVfaXJxKHN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgKmNoKTsKK2V4dGVybiB2b2lkIGx0cV9kbWFfZGlzYWJsZV9pcnEoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpOworZXh0ZXJuIHZvaWQgbHRxX2RtYV9hY2tfaXJxKHN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgKmNoKTsKK2V4dGVybiB2b2lkIGx0cV9kbWFfb3BlbihzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCk7CitleHRlcm4gdm9pZCBsdHFfZG1hX2Nsb3NlKHN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgKmNoKTsKK2V4dGVybiB2b2lkIGx0cV9kbWFfYWxsb2NfdHgoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpOworZXh0ZXJuIHZvaWQgbHRxX2RtYV9hbGxvY19yeChzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCk7CitleHRlcm4gdm9pZCBsdHFfZG1hX2ZyZWUoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpOworZXh0ZXJuIHZvaWQgbHRxX2RtYV9pbml0X3BvcnQoaW50IHApOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLW5ldGxvZ2ljL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbmV0bG9naWMvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I3MjgyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLW5ldGxvZ2ljL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTmV0bG9naWMgTWljcm9zeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgUmFsZiBCYWVjaGxlCisgKi8KKyNpZm5kZWYgX19BU01fTUFDSF9ORVRMT0dJQ19DUFVfRkVBVFVSRV9PVkVSUklERVNfSAorI2RlZmluZSBfX0FTTV9NQUNIX05FVExPR0lDX0NQVV9GRUFUVVJFX09WRVJSSURFU19ICisKKyNkZWZpbmUgY3B1X2hhc180a2V4CQkxCisjZGVmaW5lIGNwdV9oYXNfNGtfY2FjaGUJMQorI2RlZmluZSBjcHVfaGFzX3dhdGNoCQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczE2CQkwCisjZGVmaW5lIGNwdV9oYXNfY291bnRlcgkJMQorI2RlZmluZSBjcHVfaGFzX2RpdmVjCQkxCisjZGVmaW5lIGNwdV9oYXNfdmNlCQkwCisjZGVmaW5lIGNwdV9oYXNfY2FjaGVfY2RleF9wCTAKKyNkZWZpbmUgY3B1X2hhc19jYWNoZV9jZGV4X3MJMAorI2RlZmluZSBjcHVfaGFzX3ByZWZldGNoCTEKKyNkZWZpbmUgY3B1X2hhc19tY2hlY2sJCTEKKyNkZWZpbmUgY3B1X2hhc19lanRhZwkJMQorCisjZGVmaW5lIGNwdV9oYXNfbGxzYwkJMQorI2RlZmluZSBjcHVfaGFzX3Z0YWdfaWNhY2hlCTAKKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCTAKKyNkZWZpbmUgY3B1X2hhc19pY19maWxsc19mX2RjCTAKKyNkZWZpbmUgY3B1X2hhc19kc3AJCTAKKyNkZWZpbmUgY3B1X2hhc19taXBzbXQJCTAKKyNkZWZpbmUgY3B1X2hhc191c2VybG9jYWwJMAorI2RlZmluZSBjcHVfaWNhY2hlX3Nub29wc19yZW1vdGVfc3RvcmUJMAorCisjZGVmaW5lIGNwdV9oYXNfbm9mcHVleAkJMAorI2RlZmluZSBjcHVfaGFzXzY0Yml0cwkJMQorCisjZGVmaW5lIGNwdV9oYXNfbWlwczMycjEJMQorI2RlZmluZSBjcHVfaGFzX21pcHMzMnIyCTAKKyNkZWZpbmUgY3B1X2hhc19taXBzNjRyMQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczY0cjIJMAorCisjZGVmaW5lIGNwdV9oYXNfaW5jbHVzaXZlX3BjYWNoZXMJMAorCisjZGVmaW5lIGNwdV9kY2FjaGVfbGluZV9zaXplKCkJMzIKKyNkZWZpbmUgY3B1X2ljYWNoZV9saW5lX3NpemUoKQkzMgorCisjZW5kaWYgLyogX19BU01fTUFDSF9ORVRMT0dJQ19DUFVfRkVBVFVSRV9PVkVSUklERVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbmV0bG9naWMvaXJxLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1uZXRsb2dpYy9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTkwMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbmV0bG9naWMvaXJxLmgKQEAgLTAsMCArMSwxNCBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBOZXRsb2dpYyBNaWNyb3N5c3RlbXMuCisgKi8KKyNpZm5kZWYgX19BU01fTkVUTE9HSUNfSVJRX0gKKyNkZWZpbmUgX19BU01fTkVUTE9HSUNfSVJRX0gKKworI2RlZmluZSBOUl9JUlFTCQkJNjQKKyNkZWZpbmUgTUlQU19DUFVfSVJRX0JBU0UJMAorCisjZW5kaWYgLyogX19BU01fTkVUTE9HSUNfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLW5ldGxvZ2ljL3dhci5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbmV0bG9naWMvd2FyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJkYTg5MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLW5ldGxvZ2ljL3dhci5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgTmV0bG9naWMgTWljcm9zeXN0ZW1zLgorICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0LCAyMDA3IGJ5IFJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KKyAqLworI2lmbmRlZiBfX0FTTV9NSVBTX01BQ0hfTkxNX1dBUl9ICisjZGVmaW5lIF9fQVNNX01JUFNfTUFDSF9OTE1fV0FSX0gKKworI2RlZmluZSBSNDYwMF9WMV9JTkRFWF9JQ0FDSEVPUF9XQVIJMAorI2RlZmluZSBSNDYwMF9WMV9ISVRfQ0FDSEVPUF9XQVIJMAorI2RlZmluZSBSNDYwMF9WMl9ISVRfQ0FDSEVPUF9XQVIJMAorI2RlZmluZSBSNTQzMl9DUDBfSU5URVJSVVBUX1dBUgkJMAorI2RlZmluZSBCQ00xMjUwX00zX1dBUgkJCTAKKyNkZWZpbmUgU0lCWVRFXzE5NTZfV0FSCQkJMAorI2RlZmluZSBNSVBTNEtfSUNBQ0hFX1JFRklMTF9XQVIJMAorI2RlZmluZSBNSVBTX0NBQ0hFX1NZTkNfV0FSCQkwCisjZGVmaW5lIFRYNDlYWF9JQ0FDSEVfSU5ERVhfSU5WX1dBUgkwCisjZGVmaW5lIFJNOTAwMF9DREVYX1NNUF9XQVIJCTAKKyNkZWZpbmUgSUNBQ0hFX1JFRklMTFNfV09SS0FST1VORF9XQVIJMAorI2RlZmluZSBSMTAwMDBfTExTQ19XQVIJCQkwCisjZGVmaW5lIE1JUFMzNEtfTUlTU0VEX0lUTEJfV0FSCQkwCisKKyNlbmRpZiAvKiBfX0FTTV9NSVBTX01BQ0hfTkxNX1dBUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggZDk0MDg1YS4uYmMwMWEwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21vZHVsZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tb2R1bGUuaApAQCAtMTE4LDYgKzExOCw4IEBACiAjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiTE9PTkdTT04yICIKICNlbGlmIGRlZmluZWQgQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OCiAjZGVmaW5lIE1PRFVMRV9QUk9DX0ZBTUlMWSAiT0NURU9OICIKKyNlbGlmIGRlZmluZWQgQ09ORklHX0NQVV9YTFIKKyNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJYTFIgIgogI2Vsc2UKICNlcnJvciBNT0RVTEVfUFJPQ19GQU1JTFkgdW5kZWZpbmVkIGZvciB5b3VyIHByb2Nlc3NvciBjb25maWd1cmF0aW9uCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy9pbnRlcnJ1cHQuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy9pbnRlcnJ1cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODVhYWRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL2ludGVycnVwdC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0FTTV9OTE1fSU5URVJSVVBUX0gKKyNkZWZpbmUgX0FTTV9OTE1fSU5URVJSVVBUX0gKKworLyogRGVmaW5lcyBmb3IgdGhlIElSUSBudW1iZXJzICovCisKKyNkZWZpbmUgSVJRX0lQSV9TTVBfRlVOQ1RJT04JMworI2RlZmluZSBJUlFfSVBJX1NNUF9SRVNDSEVEVUxFCTQKKyNkZWZpbmUgSVJRX01TR1JJTkcJCTYKKyNkZWZpbmUgSVJRX1RJTUVSCQk3CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL21pcHMtZXh0bnMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy9taXBzLWV4dG5zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM1M2QwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy9taXBzLWV4dG5zLmgKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfQVNNX05MTV9NSVBTX0VYVFNfSAorI2RlZmluZSBfQVNNX05MTV9NSVBTX0VYVFNfSAorCisvKgorICogWExSIGFuZCBYTFAgaW50ZXJydXB0IHJlcXVlc3QgYW5kIGludGVycnVwdCBtYXNrIHJlZ2lzdGVycworICovCisjZGVmaW5lIHJlYWRfYzBfZWlycigpCQlfX3JlYWRfNjRiaXRfYzBfcmVnaXN0ZXIoJDksIDYpCisjZGVmaW5lIHJlYWRfYzBfZWltcigpCQlfX3JlYWRfNjRiaXRfYzBfcmVnaXN0ZXIoJDksIDcpCisjZGVmaW5lIHdyaXRlX2MwX2VpcnIodmFsKQlfX3dyaXRlXzY0Yml0X2MwX3JlZ2lzdGVyKCQ5LCA2LCB2YWwpCisKKy8qCisgKiBXcml0aW5nIEVJTVIgaW4gMzIgYml0IGlzIGEgc3BlY2lhbCBjYXNlLCB0aGUgbG93ZXIgOCBiaXQgb2YgdGhlCisgKiBFSU1SIGlzIHNoYWRvd2VkIGluIHRoZSBzdGF0dXMgcmVnaXN0ZXIsIHNvIHdlIGNhbm5vdCBzYXZlIGFuZAorICogcmVzdG9yZSBzdGF0dXMgcmVnaXN0ZXIgZm9yIHNwbGl0IHJlYWQuCisgKi8KKyNkZWZpbmUgd3JpdGVfYzBfZWltcih2YWwpCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoc2l6ZW9mKHVuc2lnbmVkIGxvbmcpID09IDQpCXsJCQkJXAorCQl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7CQkJCQlcCisJCQkJCQkJCQlcCisJCWxvY2FsX2lycV9zYXZlKF9fZmxhZ3MpOwkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIi5zZXRcdG1pcHM2NFxuXHQiCQkJCVwKKwkJCSJkc2xsXHQlTDAsICVMMCwgMzJcblx0IgkJCVwKKwkJCSJkc3JsXHQlTDAsICVMMCwgMzJcblx0IgkJCVwKKwkJCSJkc2xsXHQlTTAsICVNMCwgMzJcblx0IgkJCVwKKwkJCSJvclx0JUwwLCAlTDAsICVNMFxuXHQiCQkJCVwKKwkJCSJkbXRjMFx0JUwwLCAkOSwgN1xuXHQiCQkJCVwKKwkJCSIuc2V0XHRtaXBzMCIJCQkJCVwKKwkJCTogOiAiciIgKHZhbCkpOwkJCQkJXAorCQlfX2ZsYWdzID0gKF9fZmxhZ3MgJiAweGZmZmYwMGZmKSB8ICgoKHZhbCkgJiAweGZmKSA8PCA4KTtcCisJCWxvY2FsX2lycV9yZXN0b3JlKF9fZmxhZ3MpOwkJCQlcCisJfSBlbHNlCQkJCQkJCQlcCisJCV9fd3JpdGVfNjRiaXRfYzBfcmVnaXN0ZXIoJDksIDcsICh2YWwpKTsJCVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworCXJldHVybiBfX3JlYWRfMzJiaXRfYzBfcmVnaXN0ZXIoJDE1LCAxKSAmIDB4M2ZmOworfQorCisjZW5kaWYgLypfQVNNX05MTV9NSVBTX0VYVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL3BzYi1ib290aW5mby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL3BzYi1ib290aW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4NzgzMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMvcHNiLWJvb3RpbmZvLmgKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0FTTV9ORVRMT0dJQ19CT09USU5GT19ICisjZGVmaW5lIF9BU01fTkVUTE9HSUNfQk9PVElORk9fSAorCitzdHJ1Y3QgcHNiX2luZm8geworCXVpbnQ2NF90IGJvb3RfbGV2ZWw7CisJdWludDY0X3QgaW9fYmFzZTsKKwl1aW50NjRfdCBvdXRwdXRfZGV2aWNlOworCXVpbnQ2NF90IHVhcnRfcHJpbnQ7CisJdWludDY0X3QgbGVkX291dHB1dDsKKwl1aW50NjRfdCBpbml0OworCXVpbnQ2NF90IGV4aXQ7CisJdWludDY0X3Qgd2FybV9yZXNldDsKKwl1aW50NjRfdCB3YWtldXA7CisJdWludDY0X3Qgb25saW5lX2NwdV9tYXA7CisJdWludDY0X3QgbWFzdGVyX3JlZW50cnlfc3A7CisJdWludDY0X3QgbWFzdGVyX3JlZW50cnlfZ3A7CisJdWludDY0X3QgbWFzdGVyX3JlZW50cnlfZm47CisJdWludDY0X3Qgc2xhdmVfcmVlbnRyeV9mbjsKKwl1aW50NjRfdCBtYWdpY19kd29yZDsKKwl1aW50NjRfdCB1YXJ0X3B1dGNoYXI7CisJdWludDY0X3Qgc2l6ZTsKKwl1aW50NjRfdCB1YXJ0X2dldGNoYXI7CisJdWludDY0X3Qgbm1pX2hhbmRsZXI7CisJdWludDY0X3QgcHNiX3ZlcnNpb247CisJdWludDY0X3QgbWFjX2FkZHI7CisJdWludDY0X3QgY3B1X2ZyZXF1ZW5jeTsKKwl1aW50NjRfdCBib2FyZF92ZXJzaW9uOworCXVpbnQ2NF90IG1hbGxvYzsKKwl1aW50NjRfdCBmcmVlOworCXVpbnQ2NF90IGdsb2JhbF9zaG1lbV9hZGRyOworCXVpbnQ2NF90IGdsb2JhbF9zaG1lbV9zaXplOworCXVpbnQ2NF90IHBzYl9vc19jcHVfbWFwOworCXVpbnQ2NF90IHVzZXJhcHBfY3B1X21hcDsKKwl1aW50NjRfdCB3YWtldXBfb3M7CisJdWludDY0X3QgcHNiX21lbV9tYXA7CisJdWludDY0X3QgYm9hcmRfbWFqb3JfdmVyc2lvbjsKKwl1aW50NjRfdCBib2FyZF9taW5vcl92ZXJzaW9uOworCXVpbnQ2NF90IGJvYXJkX21hbmZfcmV2aXNpb247CisJdWludDY0X3QgYm9hcmRfc2VyaWFsX251bWJlcjsKKwl1aW50NjRfdCBwc2JfcGh5c2FkZHJfbWFwOworCXVpbnQ2NF90IHhscl9sb2FkZXJpcF9jb25maWc7CisJdWludDY0X3QgYmxkcl9lbnZwOworCXVpbnQ2NF90IGF2YWlsX21lbV9tYXA7Cit9OworCitlbnVtIHsKKwlORVRMT0dJQ19JT19TUEFDRSA9IDB4MTAsCisJUENJWF9JT19TUEFDRSwKKwlQQ0lYX0NGR19TUEFDRSwKKwlQQ0lYX01FTU9SWV9TUEFDRSwKKwlIVF9JT19TUEFDRSwKKwlIVF9DRkdfU1BBQ0UsCisJSFRfTUVNT1JZX1NQQUNFLAorCVNSQU1fU1BBQ0UsCisJRkxBU0hfQ09OVFJPTExFUl9TUEFDRQorfTsKKworI2RlZmluZSBOTE1fTUFYX0FSR1MJNjQKKyNkZWZpbmUgTkxNX01BWF9FTlZTCTMyCisKKy8qIFRoaXMgaXMgd2hhdCBuZXRsYm9vdCBwYXNzZXMgYW5kIGxpbnV4IGJvb3RfbWVtX21hcCBpcyBzdWJ0bHkgZGlmZmVyZW50ICovCisjZGVmaW5lIE5MTV9CT09UX01FTV9NQVBfTUFYCTMyCitzdHJ1Y3QgbmxtX2Jvb3RfbWVtX21hcCB7CisJaW50IG5yX21hcDsKKwlzdHJ1Y3QgbmxtX2Jvb3RfbWVtX21hcF9lbnRyeSB7CisJCXVpbnQ2NF90IGFkZHI7CQkvKiBzdGFydCBvZiBtZW1vcnkgc2VnbWVudCAqLworCQl1aW50NjRfdCBzaXplOwkJLyogc2l6ZSBvZiBtZW1vcnkgc2VnbWVudCAqLworCQl1aW50MzJfdCB0eXBlOwkJLyogdHlwZSBvZiBtZW1vcnkgc2VnbWVudCAqLworCX0gbWFwW05MTV9CT09UX01FTV9NQVBfTUFYXTsKK307CisKKy8qIFBvaW50ZXIgdG8gc2F2ZWQgYm9vdCBsb2FkZXIgaW5mbyAqLworZXh0ZXJuIHN0cnVjdCBwc2JfaW5mbyBubG1fcHJvbV9pbmZvOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy94bHIvZ3Bpby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL3hsci9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFmNmFkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy94bHIvZ3Bpby5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0FTTV9OTE1fR1BJT19ICisjZGVmaW5lIF9BU01fTkxNX0dQSU9fSAorCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fSU5UX0VOX1JFRwkJMAorI2RlZmluZSBORVRMT0dJQ19HUElPX0lOUFVUX0lOVkVSU0lPTl9SRUcJMQorI2RlZmluZSBORVRMT0dJQ19HUElPX0lPX0RJUl9SRUcJCTIKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19JT19EQVRBX1dSX1JFRwkJMworI2RlZmluZSBORVRMT0dJQ19HUElPX0lPX0RBVEFfUkRfUkVHCQk0CisKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19TV1JFU0VUX1JFRwkJOAorI2RlZmluZSBORVRMT0dJQ19HUElPX0RSQU0xX0NOVFJMX1JFRwkJOQorI2RlZmluZSBORVRMT0dJQ19HUElPX0RSQU0xX1JBVElPX1JFRwkJMTAKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19EUkFNMV9SRVNFVF9SRUcJCTExCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fRFJBTTFfU1RBVFVTX1JFRwkJMTIKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19EUkFNMl9DTlRSTF9SRUcJCTEzCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fRFJBTTJfUkFUSU9fUkVHCQkxNAorI2RlZmluZSBORVRMT0dJQ19HUElPX0RSQU0yX1JFU0VUX1JFRwkJMTUKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19EUkFNMl9TVEFUVVNfUkVHCQkxNgorCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fUFdST05fUkVTRVRfQ0ZHX1JFRwkyMQorI2RlZmluZSBORVRMT0dJQ19HUElPX0JJU1RfQUxMX0dPX1NUQVRVU19SRUcJMjQKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19CSVNUX0NQVV9HT19TVEFUVVNfUkVHCTI1CisjZGVmaW5lIE5FVExPR0lDX0dQSU9fQklTVF9ERVZfR09fU1RBVFVTX1JFRwkyNgorCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fRlVTRV9CQU5LX1JFRwkJMzUKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19DUFVfUkVTRVRfUkVHCQk0MAorI2RlZmluZSBORVRMT0dJQ19HUElPX1JOR19SRUcJCQk0MworCisjZGVmaW5lIE5FVExPR0lDX1BXUk9OX1JFU0VUX1BDTUNJQV9CT09UCTE3CisjZGVmaW5lIE5FVExPR0lDX0dQSU9fTEVEX0JJVE1BUAkweDE3MDAwMDAKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19MRURfMF9TSElGVAkJMjAKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19MRURfMV9TSElGVAkJMjQKKworI2RlZmluZSBORVRMT0dJQ19HUElPX0xFRF9PVVRQVVRfQ09ERV9SRVNFVAkweDAxCisjZGVmaW5lIE5FVExPR0lDX0dQSU9fTEVEX09VVFBVVF9DT0RFX0hBUkRfUkVTRVQgMHgwMgorI2RlZmluZSBORVRMT0dJQ19HUElPX0xFRF9PVVRQVVRfQ09ERV9TT0ZUX1JFU0VUIDB4MDMKKyNkZWZpbmUgTkVUTE9HSUNfR1BJT19MRURfT1VUUFVUX0NPREVfTUFJTgkweDA0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL3hsci9pb21hcC5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL25ldGxvZ2ljL3hsci9pb21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlM2E0ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMveGxyL2lvbWFwLmgKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0FTTV9OTE1fSU9NQVBfSAorI2RlZmluZSBfQVNNX05MTV9JT01BUF9ICisKKyNkZWZpbmUgREVGQVVMVF9ORVRMT0dJQ19JT19CQVNFICAgICAgICAgICBDS1NFRzFBRERSKDB4MWVmMDAwMDApCisjZGVmaW5lIE5FVExPR0lDX0lPX0REUjJfQ0hOMF9PRkZTRVQgICAgICAgMHgwMTAwMAorI2RlZmluZSBORVRMT0dJQ19JT19ERFIyX0NITjFfT0ZGU0VUICAgICAgIDB4MDIwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fRERSMl9DSE4yX09GRlNFVCAgICAgICAweDAzMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX0REUjJfQ0hOM19PRkZTRVQgICAgICAgMHgwNDAwMAorI2RlZmluZSBORVRMT0dJQ19JT19QSUNfT0ZGU0VUICAgICAgICAgICAgIDB4MDgwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fVUFSVF8wX09GRlNFVCAgICAgICAgICAweDE0MDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX1VBUlRfMV9PRkZTRVQgICAgICAgICAgMHgxNTEwMAorCisjZGVmaW5lIE5FVExPR0lDX0lPX1NJWkUgICAgICAgICAgICAgICAgICAgMHgxMDAwCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fQlJJREdFX09GRlNFVCAgICAgICAgICAweDAwMDAwCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fUkxEMl9DSE4wX09GRlNFVCAgICAgICAweDA1MDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX1JMRDJfQ0hOMV9PRkZTRVQgICAgICAgMHgwNjAwMAorCisjZGVmaW5lIE5FVExPR0lDX0lPX1NSQU1fT0ZGU0VUICAgICAgICAgICAgMHgwNzAwMAorCisjZGVmaW5lIE5FVExPR0lDX0lPX1BDSVhfT0ZGU0VUICAgICAgICAgICAgMHgwOTAwMAorI2RlZmluZSBORVRMT0dJQ19JT19IVF9PRkZTRVQgICAgICAgICAgICAgIDB4MEEwMDAKKworI2RlZmluZSBORVRMT0dJQ19JT19TRUNVUklUWV9PRkZTRVQgICAgICAgIDB4MEIwMDAKKworI2RlZmluZSBORVRMT0dJQ19JT19HTUFDXzBfT0ZGU0VUICAgICAgICAgIDB4MEMwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fR01BQ18xX09GRlNFVCAgICAgICAgICAweDBEMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX0dNQUNfMl9PRkZTRVQgICAgICAgICAgMHgwRTAwMAorI2RlZmluZSBORVRMT0dJQ19JT19HTUFDXzNfT0ZGU0VUICAgICAgICAgIDB4MEYwMDAKKworLyogWExTIGRldmljZXMgKi8KKyNkZWZpbmUgTkVUTE9HSUNfSU9fR01BQ180X09GRlNFVCAgICAgICAgICAweDIwMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX0dNQUNfNV9PRkZTRVQgICAgICAgICAgMHgyMTAwMAorI2RlZmluZSBORVRMT0dJQ19JT19HTUFDXzZfT0ZGU0VUICAgICAgICAgIDB4MjIwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fR01BQ183X09GRlNFVCAgICAgICAgICAweDIzMDAwCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fUENJRV8wX09GRlNFVCAgICAgICAgICAweDFFMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX1BDSUVfMV9PRkZTRVQgICAgICAgICAgMHgxRjAwMAorI2RlZmluZSBORVRMT0dJQ19JT19TUklPXzBfT0ZGU0VUICAgICAgICAgIDB4MUUwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fU1JJT18xX09GRlNFVCAgICAgICAgICAweDFGMDAwCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fVVNCXzBfT0ZGU0VUICAgICAgICAgICAweDI0MDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX1VTQl8xX09GRlNFVCAgICAgICAgICAgMHgyNTAwMAorCisjZGVmaW5lIE5FVExPR0lDX0lPX0NPTVBfT0ZGU0VUICAgICAgICAgICAgMHgxRDAwMAorLyogZW5kIFhMUyBkZXZpY2VzICovCisKKy8qIFhMUiBkZXZpY2VzICovCisjZGVmaW5lIE5FVExPR0lDX0lPX1NQSTRfMF9PRkZTRVQgICAgICAgICAgMHgxMDAwMAorI2RlZmluZSBORVRMT0dJQ19JT19YR01BQ18wX09GRlNFVCAgICAgICAgIDB4MTEwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fU1BJNF8xX09GRlNFVCAgICAgICAgICAweDEyMDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX1hHTUFDXzFfT0ZGU0VUICAgICAgICAgMHgxMzAwMAorLyogZW5kIFhMUiBkZXZpY2VzICovCisKKyNkZWZpbmUgTkVUTE9HSUNfSU9fSTJDXzBfT0ZGU0VUICAgICAgICAgICAweDE2MDAwCisjZGVmaW5lIE5FVExPR0lDX0lPX0kyQ18xX09GRlNFVCAgICAgICAgICAgMHgxNzAwMAorCisjZGVmaW5lIE5FVExPR0lDX0lPX0dQSU9fT0ZGU0VUICAgICAgICAgICAgMHgxODAwMAorI2RlZmluZSBORVRMT0dJQ19JT19GTEFTSF9PRkZTRVQgICAgICAgICAgIDB4MTkwMDAKKyNkZWZpbmUgTkVUTE9HSUNfSU9fVEJfT0ZGU0VUICAgICAgICAgICAgICAweDFDMDAwCisKKyNkZWZpbmUgTkVUTE9HSUNfQ1BMRF9PRkZTRVQgICAgICAgICAgICAgICBLU0VHMUFERFIoMHgxZDg0MDAwMCkKKworLyoKKyAqIEJhc2UgQWRkcmVzcyAoVmlydHVhbCkgb2YgdGhlIFBDSSBDb25maWcgYWRkcmVzcyBzcGFjZQorICogRm9yIG5vdywgY2hvb3NlIDI1Nk0gcGh5cyBpbiBrc2VnMSA9IDB4QTAwMDAwMDAgKyAoMTw8MjgpCisgKiBDb25maWcgc3BhY2Ugc3BhbnMgMjU2IChudW0gb2YgYnVzZXMpICogMjU2IChudW0gZnVuY3Rpb25zKSAqIDI1NiBieXRlcworICogaWUgMTw8MjQgPSAxNk0KKyAqLworI2RlZmluZSBERUZBVUxUX1BDSV9DT05GSUdfQkFTRSAgICAgICAgIDB4MTgwMDAwMDAKKyNkZWZpbmUgREVGQVVMVF9IVF9UWVBFMF9DRkdfQkFTRSAgICAgICAweDE2MDAwMDAwCisjZGVmaW5lIERFRkFVTFRfSFRfVFlQRTFfQ0ZHX0JBU0UgICAgICAgMHgxNzAwMDAwMAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCit0eXBlZGVmIHZvbGF0aWxlIF9fdTMyIG5sbV9yZWdfdDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5ldGxvZ2ljX2lvX2Jhc2U7CisKKy8qIEZJWE1FIHJlYWQgb25jZSBpbiB3cml0ZV9yZWcgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgbmV0bG9naWNfcmVhZF9yZWcoYmFzZSwgb2Zmc2V0KQkJKChiYXNlKVsob2Zmc2V0KV0pCisjZGVmaW5lIG5ldGxvZ2ljX3dyaXRlX3JlZyhiYXNlLCBvZmZzZXQsIHZhbHVlKQkoKGJhc2UpWyhvZmZzZXQpXSA9ICh2YWx1ZSkpCisjZWxzZQorI2RlZmluZSBuZXRsb2dpY19yZWFkX3JlZyhiYXNlLCBvZmZzZXQpCQkoYmUzMl90b19jcHUoKGJhc2UpWyhvZmZzZXQpXSkpCisjZGVmaW5lIG5ldGxvZ2ljX3dyaXRlX3JlZyhiYXNlLCBvZmZzZXQsIHZhbHVlKSBcCisJCQkJKChiYXNlKVsob2Zmc2V0KV0gPSBjcHVfdG9fYmUzMigodmFsdWUpKSkKKyNlbmRpZgorCisjZGVmaW5lIG5ldGxvZ2ljX3JlYWRfcmVnX2xlMzIoYmFzZSwgb2Zmc2V0KSAobGUzMl90b19jcHUoKGJhc2UpWyhvZmZzZXQpXSkpCisjZGVmaW5lIG5ldGxvZ2ljX3dyaXRlX3JlZ19sZTMyKGJhc2UsIG9mZnNldCwgdmFsdWUpIFwKKwkJCQkoKGJhc2UpWyhvZmZzZXQpXSA9IGNwdV90b19sZTMyKCh2YWx1ZSkpKQorI2RlZmluZSBuZXRsb2dpY19pb19tbWlvKG9mZnNldCkgKChubG1fcmVnX3QgKikobmV0bG9naWNfaW9fYmFzZSsob2Zmc2V0KSkpCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy94bHIvcGljLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMveGxyL3BpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjY2ViNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMveGxyL3BpYy5oCkBAIC0wLDAgKzEsMjMxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDMtMjAxMSBOZXRMb2dpYyBNaWNyb3N5c3RlbXMsIEluYy4gKE5ldExvZ2ljKS4gQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlIE5ldExvZ2ljCisgKiBsaWNlbnNlIGJlbG93OgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRMT0dJQyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTkVUTE9HSUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9BU01fTkxNX1hMUl9QSUNfSAorI2RlZmluZSBfQVNNX05MTV9YTFJfUElDX0gKKworI2RlZmluZSBQSUNfQ0xLU19QRVJfU0VDCQk2NjY2NjY2NlVMTAorLyogUElDIGhhcmR3YXJlIGludGVycnVwdCBudW1iZXJzICovCisjZGVmaW5lIFBJQ19JUlRfV0RfSU5ERVgJCTAKKyNkZWZpbmUgUElDX0lSVF9USU1FUl8wX0lOREVYCQkxCisjZGVmaW5lIFBJQ19JUlRfVElNRVJfMV9JTkRFWAkJMgorI2RlZmluZSBQSUNfSVJUX1RJTUVSXzJfSU5ERVgJCTMKKyNkZWZpbmUgUElDX0lSVF9USU1FUl8zX0lOREVYCQk0CisjZGVmaW5lIFBJQ19JUlRfVElNRVJfNF9JTkRFWAkJNQorI2RlZmluZSBQSUNfSVJUX1RJTUVSXzVfSU5ERVgJCTYKKyNkZWZpbmUgUElDX0lSVF9USU1FUl82X0lOREVYCQk3CisjZGVmaW5lIFBJQ19JUlRfVElNRVJfN19JTkRFWAkJOAorI2RlZmluZSBQSUNfSVJUX0NMT0NLX0lOREVYCQlQSUNfSVJUX1RJTUVSXzdfSU5ERVgKKyNkZWZpbmUgUElDX0lSVF9VQVJUXzBfSU5ERVgJCTkKKyNkZWZpbmUgUElDX0lSVF9VQVJUXzFfSU5ERVgJCTEwCisjZGVmaW5lIFBJQ19JUlRfSTJDXzBfSU5ERVgJCTExCisjZGVmaW5lIFBJQ19JUlRfSTJDXzFfSU5ERVgJCTEyCisjZGVmaW5lIFBJQ19JUlRfUENNQ0lBX0lOREVYCQkxMworI2RlZmluZSBQSUNfSVJUX0dQSU9fSU5ERVgJCTE0CisjZGVmaW5lIFBJQ19JUlRfSFlQRVJfSU5ERVgJCTE1CisjZGVmaW5lIFBJQ19JUlRfUENJWF9JTkRFWAkJMTYKKy8qIFhMUyAqLworI2RlZmluZSBQSUNfSVJUX0NERV9JTkRFWAkJMTUKKyNkZWZpbmUgUElDX0lSVF9CUklER0VfVEJfWExTX0lOREVYCTE2CisvKiBYTFMgKi8KKyNkZWZpbmUgUElDX0lSVF9HTUFDMF9JTkRFWAkJMTcKKyNkZWZpbmUgUElDX0lSVF9HTUFDMV9JTkRFWAkJMTgKKyNkZWZpbmUgUElDX0lSVF9HTUFDMl9JTkRFWAkJMTkKKyNkZWZpbmUgUElDX0lSVF9HTUFDM19JTkRFWAkJMjAKKyNkZWZpbmUgUElDX0lSVF9YR1MwX0lOREVYCQkyMQorI2RlZmluZSBQSUNfSVJUX1hHUzFfSU5ERVgJCTIyCisjZGVmaW5lIFBJQ19JUlRfSFlQRVJfRkFUQUxfSU5ERVgJMjMKKyNkZWZpbmUgUElDX0lSVF9QQ0lYX0ZBVEFMX0lOREVYCTI0CisjZGVmaW5lIFBJQ19JUlRfQlJJREdFX0FFUlJfSU5ERVgJMjUKKyNkZWZpbmUgUElDX0lSVF9CUklER0VfQkVSUl9JTkRFWAkyNgorI2RlZmluZSBQSUNfSVJUX0JSSURHRV9UQl9YTFJfSU5ERVgJMjcKKyNkZWZpbmUgUElDX0lSVF9CUklER0VfQUVSUl9OTUlfSU5ERVgJMjgKKy8qIFhMUyAqLworI2RlZmluZSBQSUNfSVJUX0dNQUM0X0lOREVYCQkyMQorI2RlZmluZSBQSUNfSVJUX0dNQUM1X0lOREVYCQkyMgorI2RlZmluZSBQSUNfSVJUX0dNQUM2X0lOREVYCQkyMworI2RlZmluZSBQSUNfSVJUX0dNQUM3X0lOREVYCQkyNAorI2RlZmluZSBQSUNfSVJUX0JSSURHRV9FUlJfSU5ERVgJMjUKKyNkZWZpbmUgUElDX0lSVF9QQ0lFX0xJTkswX0lOREVYCTI2CisjZGVmaW5lIFBJQ19JUlRfUENJRV9MSU5LMV9JTkRFWAkyNworI2RlZmluZSBQSUNfSVJUX1BDSUVfTElOSzJfSU5ERVgJMjMKKyNkZWZpbmUgUElDX0lSVF9QQ0lFX0xJTkszX0lOREVYCTI0CisjZGVmaW5lIFBJQ19JUlRfUENJRV9YTFNCMF9MSU5LMl9JTkRFWAkyOAorI2RlZmluZSBQSUNfSVJUX1BDSUVfWExTQjBfTElOSzNfSU5ERVgJMjkKKyNkZWZpbmUgUElDX0lSVF9TUklPX0xJTkswX0lOREVYCTI2CisjZGVmaW5lIFBJQ19JUlRfU1JJT19MSU5LMV9JTkRFWAkyNworI2RlZmluZSBQSUNfSVJUX1NSSU9fTElOSzJfSU5ERVgJMjgKKyNkZWZpbmUgUElDX0lSVF9TUklPX0xJTkszX0lOREVYCTI5CisjZGVmaW5lIFBJQ19JUlRfUENJRV9JTlRfSU5ERVgJCTI4CisjZGVmaW5lIFBJQ19JUlRfUENJRV9GQVRBTF9JTkRFWAkyOQorI2RlZmluZSBQSUNfSVJUX0dQSU9fQl9JTkRFWAkJMzAKKyNkZWZpbmUgUElDX0lSVF9VU0JfSU5ERVgJCTMxCisvKiBYTFMgKi8KKyNkZWZpbmUgUElDX05VTV9JUlRTCQkJMzIKKworCisjZGVmaW5lIFBJQ19DTE9DS19USU1FUgkJCTcKKworLyogUElDIFJlZ2lzdGVycyAqLworI2RlZmluZSBQSUNfQ1RSTAkJCTB4MDAKKyNkZWZpbmUgUElDX0lQSQkJCQkweDA0CisjZGVmaW5lIFBJQ19JTlRfQUNLCQkJMHgwNgorCisjZGVmaW5lIFdEX01BWF9WQUxfMAkJCTB4MDgKKyNkZWZpbmUgV0RfTUFYX1ZBTF8xCQkJMHgwOQorI2RlZmluZSBXRF9NQVNLXzAJCQkweDBhCisjZGVmaW5lIFdEX01BU0tfMQkJCTB4MGIKKyNkZWZpbmUgV0RfSEVBUkJFQVRfMAkJCTB4MGMKKyNkZWZpbmUgV0RfSEVBUkJFQVRfMQkJCTB4MGQKKworI2RlZmluZSBQSUNfSVJUXzBfQkFTRQkJCTB4NDAKKyNkZWZpbmUgUElDX0lSVF8xX0JBU0UJCQkweDgwCisjZGVmaW5lIFBJQ19USU1FUl9NQVhWQUxfMF9CQVNFCQkweDEwMAorI2RlZmluZSBQSUNfVElNRVJfTUFYVkFMXzFfQkFTRQkJMHgxMTAKKyNkZWZpbmUgUElDX1RJTUVSX0NPVU5UXzBfQkFTRQkJMHgxMjAKKyNkZWZpbmUgUElDX1RJTUVSX0NPVU5UXzFfQkFTRQkJMHgxMzAKKworI2RlZmluZSBQSUNfSVJUXzAocGljaW50cikgICAgICAoUElDX0lSVF8wX0JBU0UgKyAocGljaW50cikpCisjZGVmaW5lIFBJQ19JUlRfMShwaWNpbnRyKQkoUElDX0lSVF8xX0JBU0UgKyAocGljaW50cikpCisKKyNkZWZpbmUgUElDX1RJTUVSX01BWFZBTF8wKGkpCShQSUNfVElNRVJfTUFYVkFMXzBfQkFTRSArIChpKSkKKyNkZWZpbmUgUElDX1RJTUVSX01BWFZBTF8xKGkpCShQSUNfVElNRVJfTUFYVkFMXzFfQkFTRSArIChpKSkKKyNkZWZpbmUgUElDX1RJTUVSX0NPVU5UXzAoaSkJKFBJQ19USU1FUl9DT1VOVF8wX0JBU0UgKyAoaSkpCisjZGVmaW5lIFBJQ19USU1FUl9DT1VOVF8xKGkpCShQSUNfVElNRVJfQ09VTlRfMF9CQVNFICsgKGkpKQorCisvKgorICogTWFwcGluZyBiZXR3ZWVuIGhhcmR3YXJlIGludGVycnVwdCBudW1iZXJzIGFuZCBJUlFzIG9uIENQVQorICogd2UgdXNlIGEgc2ltcGxlIHNjaGVtZSB0byBtYXAgUElDIGludGVycnVwdHMgMC0zMSB0byBJUlFzCisgKiA4LTM5LiBUaGlzIGxlYXZlcyB0aGUgSVJRIDAtNyBmb3IgY3B1IGludGVycnVwdHMgbGlrZQorICogY291bnQvY29tcGFyZSBhbmQgRk1OCisgKi8KKyNkZWZpbmUgUElDX0lSUV9CQVNFICAgICAgICAgICAgOAorI2RlZmluZSBQSUNfSU5UUl9UT19JUlEoaSkgICAgICAoUElDX0lSUV9CQVNFICsgKGkpKQorI2RlZmluZSBQSUNfSVJRX1RPX0lOVFIoaSkgICAgICAoKGkpIC0gUElDX0lSUV9CQVNFKQorCisjZGVmaW5lIFBJQ19JUlRfRklSU1RfSVJRCVBJQ19JUlFfQkFTRQorI2RlZmluZSBQSUNfV0RfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9XRF9JTkRFWCkKKyNkZWZpbmUgUElDX1RJTUVSXzBfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9USU1FUl8wX0lOREVYKQorI2RlZmluZSBQSUNfVElNRVJfMV9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1RJTUVSXzFfSU5ERVgpCisjZGVmaW5lIFBJQ19USU1FUl8yX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfVElNRVJfMl9JTkRFWCkKKyNkZWZpbmUgUElDX1RJTUVSXzNfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9USU1FUl8zX0lOREVYKQorI2RlZmluZSBQSUNfVElNRVJfNF9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1RJTUVSXzRfSU5ERVgpCisjZGVmaW5lIFBJQ19USU1FUl81X0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfVElNRVJfNV9JTkRFWCkKKyNkZWZpbmUgUElDX1RJTUVSXzZfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9USU1FUl82X0lOREVYKQorI2RlZmluZSBQSUNfVElNRVJfN19JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1RJTUVSXzdfSU5ERVgpCisjZGVmaW5lIFBJQ19DTE9DS19JUlEJCShQSUNfVElNRVJfN19JUlEpCisjZGVmaW5lIFBJQ19VQVJUXzBfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9VQVJUXzBfSU5ERVgpCisjZGVmaW5lIFBJQ19VQVJUXzFfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9VQVJUXzFfSU5ERVgpCisjZGVmaW5lIFBJQ19JMkNfMF9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0kyQ18wX0lOREVYKQorI2RlZmluZSBQSUNfSTJDXzFfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9JMkNfMV9JTkRFWCkKKyNkZWZpbmUgUElDX1BDTUNJQV9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1BDTUNJQV9JTkRFWCkKKyNkZWZpbmUgUElDX0dQSU9fSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9HUElPX0lOREVYKQorI2RlZmluZSBQSUNfSFlQRVJfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9IWVBFUl9JTkRFWCkKKyNkZWZpbmUgUElDX1BDSVhfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9QQ0lYX0lOREVYKQorLyogWExTICovCisjZGVmaW5lIFBJQ19DREVfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9DREVfSU5ERVgpCisjZGVmaW5lIFBJQ19CUklER0VfVEJfWExTX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9CUklER0VfVEJfWExTX0lOREVYKQorLyogZW5kIFhMUyAqLworI2RlZmluZSBQSUNfR01BQ18wX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfR01BQzBfSU5ERVgpCisjZGVmaW5lIFBJQ19HTUFDXzFfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9HTUFDMV9JTkRFWCkKKyNkZWZpbmUgUElDX0dNQUNfMl9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0dNQUMyX0lOREVYKQorI2RlZmluZSBQSUNfR01BQ18zX0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfR01BQzNfSU5ERVgpCisjZGVmaW5lIFBJQ19YR1NfMF9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1hHUzBfSU5ERVgpCisjZGVmaW5lIFBJQ19YR1NfMV9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1hHUzFfSU5ERVgpCisjZGVmaW5lIFBJQ19IWVBFUl9GQVRBTF9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfSFlQRVJfRkFUQUxfSU5ERVgpCisjZGVmaW5lIFBJQ19QQ0lYX0ZBVEFMX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9QQ0lYX0ZBVEFMX0lOREVYKQorI2RlZmluZSBQSUNfQlJJREdFX0FFUlJfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0JSSURHRV9BRVJSX0lOREVYKQorI2RlZmluZSBQSUNfQlJJREdFX0JFUlJfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0JSSURHRV9CRVJSX0lOREVYKQorI2RlZmluZSBQSUNfQlJJREdFX1RCX1hMUl9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfQlJJREdFX1RCX1hMUl9JTkRFWCkKKyNkZWZpbmUgUElDX0JSSURHRV9BRVJSX05NSV9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfQlJJREdFX0FFUlJfTk1JX0lOREVYKQorLyogWExTIGRlZmluZXMgKi8KKyNkZWZpbmUgUElDX0dNQUNfNF9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0dNQUM0X0lOREVYKQorI2RlZmluZSBQSUNfR01BQ181X0lSUQkJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfR01BQzVfSU5ERVgpCisjZGVmaW5lIFBJQ19HTUFDXzZfSVJRCQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9HTUFDNl9JTkRFWCkKKyNkZWZpbmUgUElDX0dNQUNfN19JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0dNQUM3X0lOREVYKQorI2RlZmluZSBQSUNfQlJJREdFX0VSUl9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfQlJJREdFX0VSUl9JTkRFWCkKKyNkZWZpbmUgUElDX1BDSUVfTElOSzBfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1BDSUVfTElOSzBfSU5ERVgpCisjZGVmaW5lIFBJQ19QQ0lFX0xJTksxX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9QQ0lFX0xJTksxX0lOREVYKQorI2RlZmluZSBQSUNfUENJRV9MSU5LMl9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfUENJRV9MSU5LMl9JTkRFWCkKKyNkZWZpbmUgUElDX1BDSUVfTElOSzNfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1BDSUVfTElOSzNfSU5ERVgpCisjZGVmaW5lIFBJQ19QQ0lFX1hMU0IwX0xJTksyX0lSUSBQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9QQ0lFX1hMU0IwX0xJTksyX0lOREVYKQorI2RlZmluZSBQSUNfUENJRV9YTFNCMF9MSU5LM19JUlEgUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfUENJRV9YTFNCMF9MSU5LM19JTkRFWCkKKyNkZWZpbmUgUElDX1NSSU9fTElOSzBfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1NSSU9fTElOSzBfSU5ERVgpCisjZGVmaW5lIFBJQ19TUklPX0xJTksxX0lSUQlQSUNfSU5UUl9UT19JUlEoUElDX0lSVF9TUklPX0xJTksxX0lOREVYKQorI2RlZmluZSBQSUNfU1JJT19MSU5LMl9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfU1JJT19MSU5LMl9JTkRFWCkKKyNkZWZpbmUgUElDX1NSSU9fTElOSzNfSVJRCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1NSSU9fTElOSzNfSU5ERVgpCisjZGVmaW5lIFBJQ19QQ0lFX0lOVF9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfUENJRV9JTlRfX0lOREVYKQorI2RlZmluZSBQSUNfUENJRV9GQVRBTF9JUlEJUElDX0lOVFJfVE9fSVJRKFBJQ19JUlRfUENJRV9GQVRBTF9JTkRFWCkKKyNkZWZpbmUgUElDX0dQSU9fQl9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX0dQSU9fQl9JTkRFWCkKKyNkZWZpbmUgUElDX1VTQl9JUlEJCVBJQ19JTlRSX1RPX0lSUShQSUNfSVJUX1VTQl9JTkRFWCkKKyNkZWZpbmUgUElDX0lSVF9MQVNUX0lSUQlQSUNfVVNCX0lSUQorLyogZW5kIFhMUyAqLworCisjaWZuZGVmIF9fQVNTRU1CTFlfXworc3RhdGljIGlubGluZSB2b2lkIHBpY19zZW5kX2lwaSh1MzIgaXBpKQoreworCW5sbV9yZWdfdCAqbW1pbyA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fUElDX09GRlNFVCk7CisKKwluZXRsb2dpY193cml0ZV9yZWcobW1pbywgUElDX0lQSSwgaXBpKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgcGljX3JlYWRfY29udHJvbCh2b2lkKQoreworCW5sbV9yZWdfdCAqbW1pbyA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fUElDX09GRlNFVCk7CisKKwlyZXR1cm4gbmV0bG9naWNfcmVhZF9yZWcobW1pbywgUElDX0NUUkwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGljX3dyaXRlX2NvbnRyb2wodTMyIGNvbnRyb2wpCit7CisJbmxtX3JlZ190ICptbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19QSUNfT0ZGU0VUKTsKKworCW5ldGxvZ2ljX3dyaXRlX3JlZyhtbWlvLCBQSUNfQ1RSTCwgY29udHJvbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwaWNfdXBkYXRlX2NvbnRyb2wodTMyIGNvbnRyb2wpCit7CisJbmxtX3JlZ190ICptbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19QSUNfT0ZGU0VUKTsKKworCW5ldGxvZ2ljX3dyaXRlX3JlZyhtbWlvLCBQSUNfQ1RSTCwKKwkJKGNvbnRyb2wgfCBuZXRsb2dpY19yZWFkX3JlZyhtbWlvLCBQSUNfQ1RSTCkpKTsKK30KKworI2RlZmluZSBQSUNfSVJRX0lTX0VER0VfVFJJR0dFUkVEKGlycSkJKCgoaXJxKSA+PSBQSUNfVElNRVJfMF9JUlEpICYmIFwKKwkJCQkJKChpcnEpIDw9IFBJQ19USU1FUl83X0lSUSkpCisjZGVmaW5lIFBJQ19JUlFfSVNfSVJUKGlycSkJCSgoKGlycSkgPj0gUElDX0lSVF9GSVJTVF9JUlEpICYmIFwKKwkJCQkJKChpcnEpIDw9IFBJQ19JUlRfTEFTVF9JUlEpKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQVNNX05MTV9YTFJfUElDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9uZXRsb2dpYy94bHIveGxyLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMveGxyL3hsci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjM3MjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbmV0bG9naWMveGxyL3hsci5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0FTTV9OTE1fWExSX0gKKyNkZWZpbmUgX0FTTV9OTE1fWExSX0gKKworLyogUGxhdGZvcm0gVUFSVCBmdW5jdGlvbnMgKi8KK3N0cnVjdCB1YXJ0X3BvcnQ7Cit1bnNpZ25lZCBpbnQgbmxtX3hscl91YXJ0X2luKHN0cnVjdCB1YXJ0X3BvcnQgKiwgaW50KTsKK3ZvaWQgbmxtX3hscl91YXJ0X291dChzdHJ1Y3QgdWFydF9wb3J0ICosIGludCwgaW50KTsKKworLyogU01QIHN1cHBvcnQgZnVuY3Rpb25zICovCitzdHJ1Y3QgaXJxX2Rlc2M7Cit2b2lkIG5sbV9zbXBfZnVuY3Rpb25faXBpX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKTsKK3ZvaWQgbmxtX3NtcF9yZXNjaGVkX2lwaV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYyk7CitpbnQgbmxtX3dha2V1cF9zZWNvbmRhcnlfY3B1cyh1MzIgd2FrZXVwX21hc2spOwordm9pZCBubG1fc21wX2lycV9pbml0KHZvaWQpOwordm9pZCBubG1fYm9vdF9zbXBfbm1pKHZvaWQpOwordm9pZCBwcm9tX3ByZV9ib290X3NlY29uZGFyeV9jcHVzKHZvaWQpOworCitleHRlcm4gc3RydWN0IHBsYXRfc21wX29wcyBubG1fc21wX29wczsKK2V4dGVybiB1bnNpZ25lZCBsb25nIG5sbV9jb21tb25fZWJhc2U7CisKKy8qIFhMUyBCIHNpbGljb24gIlJvb2siICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBubG1fY2hpcF9pc194bHNfYih2b2lkKQoreworCXVpbnQzMl90IHByaWQgPSByZWFkX2MwX3ByaWQoKTsKKworCXJldHVybiAoKHByaWQgJiAweGYwMDApID09IDB4NDAwMCk7Cit9CisKKy8qCisgKiAgWExSIGNoaXAgdHlwZXMKKyAqLworIC8qIFRoZSBYTFMgcHJvZHVjdCBsaW5lIGhhcyBjaGlwIHZlcnNpb25zIDB4WzQ4Y10/ICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBubG1fY2hpcF9pc194bHModm9pZCkKK3sKKwl1aW50MzJfdCBwcmlkID0gcmVhZF9jMF9wcmlkKCk7CisKKwlyZXR1cm4gKChwcmlkICYgMHhmMDAwKSA9PSAweDgwMDAgfHwgKHByaWQgJiAweGYwMDApID09IDB4NDAwMCB8fAorCQkocHJpZCAmIDB4ZjAwMCkgPT0gMHhjMDAwKTsKK30KKworI2VuZGlmIC8qIF9BU01fTkxNX1hMUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggOWYxYjhkYi4uZGUzOWIxZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTQxLDcgKzE0MSw4IEBACiAjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+Y3AwX2VwYykKICNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCiAKLWV4dGVybiBhc21saW5rYWdlIHZvaWQgZG9fc3lzY2FsbF90cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGVudHJ5ZXhpdCk7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIHN5c2NhbGxfdHJhY2VfZW50ZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzeXNjYWxsX3RyYWNlX2xlYXZlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogZXh0ZXJuIE5PUkVUX1RZUEUgdm9pZCBkaWUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHRfcmVncyAqKSBBVFRSSUJfTk9SRVQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKaW5kZXggZDcxMTYwZC4uOTdmOGJmNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKQEAgLTE0OSw2ICsxNDksOSBAQAogI2RlZmluZSBfVElGX0ZQVUJPVU5ECQkoMTw8VElGX0ZQVUJPVU5EKQogI2RlZmluZSBfVElGX0xPQURfV0FUQ0gJCSgxPDxUSUZfTE9BRF9XQVRDSCkKIAorLyogd29yayB0byBkbyBpbiBzeXNjYWxsX3RyYWNlX2xlYXZlKCkgKi8KKyNkZWZpbmUgX1RJRl9XT1JLX1NZU0NBTExfRVhJVAkoX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0FVRElUKQorCiAvKiB3b3JrIHRvIGRvIG9uIGludGVycnVwdC9leGNlcHRpb24gcmV0dXJuICovCiAjZGVmaW5lIF9USUZfV09SS19NQVNLCQkoMHgwMDAwZmZlZiAmCQkJCVwKIAkJCQkJfihfVElGX1NFQ0NPTVAgfCBfVElGX1NZU0NBTExfQVVESVQpKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RpbWUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90aW1lLmgKaW5kZXggYzdmMWJmZS4uYmMxNDQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3RpbWUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdGltZS5oCkBAIC04NCwxMiArODQsNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjbG9ja3NvdXJjZV9zZXRfY2xvY2soc3RydWN0IGNsb2Nrc291cmNlICpjcywKLQkJCQkJIHVuc2lnbmVkIGludCBjbG9jaykKLXsKLQljbG9ja3NvdXJjZV9jYWxjX211bHRfc2hpZnQoY3MsIGNsb2NrLCA0KTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGNsb2NrZXZlbnRfc2V0X2Nsb2NrKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmNkLAogCQkJCQl1bnNpZ25lZCBpbnQgY2xvY2spCiB7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMgYi9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMKaW5kZXggOWNlOWY2NC4uMmQ4ZTQ0NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovamF6emRtYS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAgKi8KIGludCB2ZG1hX3JlbWFwKHVuc2lnbmVkIGxvbmcgbGFkZHIsIHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKLQlpbnQgZmlyc3QsIHBhZ2VzLCBucGFnZXM7CisJaW50IGZpcnN0LCBwYWdlczsKIAogCWlmIChsYWRkciA+IDB4ZmZmZmZmKSB7CiAJCWlmICh2ZG1hX2RlYnVnKQpAQCAtMjI4LDggKzIyOCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwkvKiBpbnZhbGlkIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAl9CiAKLQlucGFnZXMgPSBwYWdlcyA9Ci0JICAgICgoKHBhZGRyICYgKFZETUFfUEFHRVNJWkUgLSAxKSkgKyBzaXplKSA+PiAxMikgKyAxOworCXBhZ2VzID0gKCgocGFkZHIgJiAoVkRNQV9QQUdFU0laRSAtIDEpKSArIHNpemUpID4+IDEyKSArIDE7CiAJZmlyc3QgPSBsYWRkciA+PiAxMjsKIAlpZiAodmRtYV9kZWJ1ZykKIAkJcHJpbnRrKCJ2ZG1hX3JlbWFwOiBmaXJzdD0leCwgcGFnZXM9JXhcbiIsIGZpcnN0LCBwYWdlcyk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvano0NzQwL2RtYS5jIGIvYXJjaC9taXBzL2p6NDc0MC9kbWEuYwppbmRleCA1ZWJlNzVhLi5kN2ZlYjg5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvano0NzQwL2RtYS5jCisrKyBiL2FyY2gvbWlwcy9qejQ3NDAvZG1hLmMKQEAgLTI0Miw5ICsyNDIsNyBAQAogCiBzdGF0aWMgdm9pZCBqejQ3NDBfZG1hX2NoYW5faXJxKHN0cnVjdCBqejQ3NDBfZG1hX2NoYW4gKmRtYSkKIHsKLQl1aW50MzJfdCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBqejQ3NDBfZG1hX3JlYWQoSlpfUkVHX0RNQV9TVEFUVVNfQ1RSTChkbWEtPmlkKSk7CisJKHZvaWQpIGp6NDc0MF9kbWFfcmVhZChKWl9SRUdfRE1BX1NUQVRVU19DVFJMKGRtYS0+aWQpKTsKIAogCWp6NDc0MF9kbWFfd3JpdGVfbWFzayhKWl9SRUdfRE1BX1NUQVRVU19DVFJMKGRtYS0+aWQpLCAwLAogCQlKWl9ETUFfU1RBVFVTX0NUUkxfRU5BQkxFIHwgSlpfRE1BX1NUQVRVU19DVFJMX1RSQU5TRkVSX0RPTkUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC9zZXR1cC5jIGIvYXJjaC9taXBzL2p6NDc0MC9zZXR1cC5jCmluZGV4IDZhOWUxNGQuLmQ5N2NmYmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qejQ3NDAvc2V0dXAuYworKysgYi9hcmNoL21pcHMvano0NzQwL3NldHVwLmMKQEAgLTEsNSArMSw2IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMjAwOS0yMDEwLCBMYXJzLVBldGVyIENsYXVzZW4gPGxhcnNAbWV0YWZvby5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEsIE1hYXJ0ZW4gdGVyIEh1dXJuZSA8bWFhcnRlbkB0cmVld2Fsa2VyLm9yZz4KICAqICBKWjQ3NDAgc2V0dXAgY29kZQogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMTQsMTMgKzE1LDQ0IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC1qejQ3NDAvYmFzZS5oPgorCiAjaW5jbHVkZSAicmVzZXQuaCIKIAorCisjZGVmaW5lIEpaNDc0MF9FTUNfU0RSQU1fQ1RSTCAweDgwCisKKworc3RhdGljIHZvaWQgX19pbml0IGp6NDc0MF9kZXRlY3RfbWVtKHZvaWQpCit7CisJdm9pZCBfX2lvbWVtICpqel9lbWNfYmFzZTsKKwl1MzIgY3RybCwgYnVzLCBiYW5rLCByb3dzLCBjb2xzOworCXBoeXNfdCBzaXplOworCisJanpfZW1jX2Jhc2UgPSBpb3JlbWFwKEpaNDc0MF9FTUNfQkFTRV9BRERSLCAweDEwMCk7CisJY3RybCA9IHJlYWRsKGp6X2VtY19iYXNlICsgSlo0NzQwX0VNQ19TRFJBTV9DVFJMKTsKKwlidXMgPSAyIC0gKChjdHJsID4+IDMxKSAmIDEpOworCWJhbmsgPSAxICsgKChjdHJsID4+IDE5KSAmIDEpOworCWNvbHMgPSA4ICsgKChjdHJsID4+IDI2KSAmIDcpOworCXJvd3MgPSAxMSArICgoY3RybCA+PiAyMCkgJiAzKTsKKwlwcmludGsoS0VSTl9ERUJVRworCQkiU0RSQU0gcHJlY29uZmlndXJlZDogYnVzOiV1IGJhbms6JXUgcm93czoldSBjb2xzOiV1XG4iLAorCQlidXMsIGJhbmssIHJvd3MsIGNvbHMpOworCWlvdW5tYXAoanpfZW1jX2Jhc2UpOworCisJc2l6ZSA9IDEgPDwgKGJ1cyArIGJhbmsgKyBjb2xzICsgcm93cyk7CisJYWRkX21lbW9yeV9yZWdpb24oMCwgc2l6ZSwgQk9PVF9NRU1fUkFNKTsKK30KKwogdm9pZCBfX2luaXQgcGxhdF9tZW1fc2V0dXAodm9pZCkKIHsKIAlqejQ3NDBfcmVzZXRfaW5pdCgpOworCWp6NDc0MF9kZXRlY3RfbWVtKCk7CiB9CiAKIGNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC90aW1lLmMgYi9hcmNoL21pcHMvano0NzQwL3RpbWUuYwppbmRleCBmZTAxNjc4Li5mODNjMmRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvano0NzQwL3RpbWUuYworKysgYi9hcmNoL21pcHMvano0NzQwL3RpbWUuYwpAQCAtODksNyArODksNyBAQAogCiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBqejQ3NDBfY2xvY2tldmVudCA9IHsKIAkubmFtZSA9ICJqejQ3NDAtdGltZXIiLAotCS5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDLAorCS5mZWF0dXJlcyA9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKIAkuc2V0X25leHRfZXZlbnQgPSBqejQ3NDBfY2xvY2tldmVudF9zZXRfbmV4dCwKIAkuc2V0X21vZGUgPSBqejQ3NDBfY2xvY2tldmVudF9zZXRfbW9kZSwKIAkucmF0aW5nID0gMjAwLApAQCAtMTIxLDggKzEyMSw3IEBACiAKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJmp6NDc0MF9jbG9ja2V2ZW50KTsKIAotCWNsb2Nrc291cmNlX3NldF9jbG9jaygmano0NzQwX2Nsb2Nrc291cmNlLCBjbGtfcmF0ZSk7Ci0JcmV0ID0gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmp6NDc0MF9jbG9ja3NvdXJjZSk7CisJcmV0ID0gY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmp6NDc0MF9jbG9ja3NvdXJjZSwgY2xrX3JhdGUpOwogCiAJaWYgKHJldCkKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2tzb3VyY2U6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2p6NDc0MC90aW1lci5jIGIvYXJjaC9taXBzL2p6NDc0MC90aW1lci5jCmluZGV4IGIyYzAxNTEuLjY1NGQ1YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9qejQ3NDAvdGltZXIuYworKysgYi9hcmNoL21pcHMvano0NzQwL3RpbWVyLmMKQEAgLTI3LDExICsyNywxMyBAQAogewogCXdyaXRlbChCSVQoMTYpLCBqejQ3NDBfdGltZXJfYmFzZSArIEpaX1JFR19USU1FUl9TVE9QX0NMRUFSKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGp6NDc0MF90aW1lcl9lbmFibGVfd2F0Y2hkb2cpOwogCiB2b2lkIGp6NDc0MF90aW1lcl9kaXNhYmxlX3dhdGNoZG9nKHZvaWQpCiB7CiAJd3JpdGVsKEJJVCgxNiksIGp6NDc0MF90aW1lcl9iYXNlICsgSlpfUkVHX1RJTUVSX1NUT1BfU0VUKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGp6NDc0MF90aW1lcl9kaXNhYmxlX3dhdGNoZG9nKTsKIAogdm9pZCBfX2luaXQgano0NzQwX3RpbWVyX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL21pcHMva2VybmVsL01ha2VmaWxlCmluZGV4IGNlZGVlMmIuLjgzYmJhMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9NYWtlZmlsZQpAQCAtNTIsNiArNTIsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9UWDQ5WFgpCSs9IHI0a19mcHUubyByNGtfc3dpdGNoLm8KIG9iai0kKENPTkZJR19DUFVfVlI0MVhYKQkrPSByNGtfZnB1Lm8gcjRrX3N3aXRjaC5vCiBvYmotJChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCSs9IG9jdGVvbl9zd2l0Y2gubworb2JqLSQoQ09ORklHX0NQVV9YTFIpCQkrPSByNGtfZnB1Lm8gcjRrX3N3aXRjaC5vCiAKIG9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubwogb2JqLSQoQ09ORklHX1NNUF9VUCkJCSs9IHNtcC11cC5vCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jZXZ0LXR4eDkuYwppbmRleCAwYjczNzczLi5mMGFiOTJhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NldnQtdHh4OS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY2V2dC10eHg5LmMKQEAgLTUxLDggKzUxLDcgQEAKIHsKIAlzdHJ1Y3QgdHh4OV90bXJfcmVnIF9faW9tZW0gKnRtcnB0cjsKIAotCWNsb2Nrc291cmNlX3NldF9jbG9jaygmdHh4OV9jbG9ja3NvdXJjZS5jcywgVElNRVJfQ0xLKGltYnVzY2xrKSk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJnR4eDlfY2xvY2tzb3VyY2UuY3MpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZ0eHg5X2Nsb2Nrc291cmNlLmNzLCBUSU1FUl9DTEsoaW1idXNjbGspKTsKIAogCXRtcnB0ciA9IGlvcmVtYXAoYmFzZWFkZHIsIHNpemVvZihzdHJ1Y3QgdHh4OV90bXJfcmVnKSk7CiAJX19yYXdfd3JpdGVsKFRDUl9CQVNFLCAmdG1ycHRyLT50Y3IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKaW5kZXggZjY1ZDRjOC4uYmIxMzNkMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCkBAIC0yOTEsNiArMjkxLDEyIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNldF9lbGZfcGxhdGZvcm0oaW50IGNwdSwgY29uc3QgY2hhciAqcGxhdCkKK3sKKwlpZiAoY3B1ID09IDApCisJCV9fZWxmX3BsYXRmb3JtID0gcGxhdDsKK30KKwogLyoKICAqIEdldCB0aGUgRlBVIEltcGxlbWVudGF0aW9uL1JldmlzaW9uLgogICovCkBAIC02MTQsNiArNjIwLDE2IEBACiAJY2FzZSBQUklEX0lNUF9MT09OR1NPTjI6CiAJCWMtPmNwdXR5cGUgPSBDUFVfTE9PTkdTT04yOwogCQlfX2NwdV9uYW1lW2NwdV0gPSAiSUNUIExvb25nc29uLTIiOworCisJCXN3aXRjaCAoYy0+cHJvY2Vzc29yX2lkICYgUFJJRF9SRVZfTUFTSykgeworCQljYXNlIFBSSURfUkVWX0xPT05HU09OMkU6CisJCQlzZXRfZWxmX3BsYXRmb3JtKGNwdSwgImxvb25nc29uMmUiKTsKKwkJCWJyZWFrOworCQljYXNlIFBSSURfUkVWX0xPT05HU09OMkY6CisJCQlzZXRfZWxmX3BsYXRmb3JtKGNwdSwgImxvb25nc29uMmYiKTsKKwkJCWJyZWFrOworCQl9CisKIAkJYy0+aXNhX2xldmVsID0gTUlQU19DUFVfSVNBX0lJSTsKIAkJYy0+b3B0aW9ucyA9IFI0S19PUFRTIHwKIAkJCSAgICAgTUlQU19DUFVfRlBVIHwgTUlQU19DUFVfTExTQyB8CkBAIC05MTEsMTIgKzkyNywxNCBAQAogCWNhc2UgUFJJRF9JTVBfQk1JUFMzMl9SRVY4OgogCQljLT5jcHV0eXBlID0gQ1BVX0JNSVBTMzI7CiAJCV9fY3B1X25hbWVbY3B1XSA9ICJCcm9hZGNvbSBCTUlQUzMyIjsKKwkJc2V0X2VsZl9wbGF0Zm9ybShjcHUsICJibWlwczMyIik7CiAJCWJyZWFrOwogCWNhc2UgUFJJRF9JTVBfQk1JUFMzMzAwOgogCWNhc2UgUFJJRF9JTVBfQk1JUFMzMzAwX0FMVDoKIAljYXNlIFBSSURfSU1QX0JNSVBTMzMwMF9CVUc6CiAJCWMtPmNwdXR5cGUgPSBDUFVfQk1JUFMzMzAwOwogCQlfX2NwdV9uYW1lW2NwdV0gPSAiQnJvYWRjb20gQk1JUFMzMzAwIjsKKwkJc2V0X2VsZl9wbGF0Zm9ybShjcHUsICJibWlwczMzMDAiKTsKIAkJYnJlYWs7CiAJY2FzZSBQUklEX0lNUF9CTUlQUzQzWFg6IHsKIAkJaW50IHJldiA9IGMtPnByb2Nlc3Nvcl9pZCAmIDB4ZmY7CkBAIC05MjUsMTUgKzk0MywxOCBAQAogCQkJCXJldiA8PSBQUklEX1JFVl9CTUlQUzQzODBfSEkpIHsKIAkJCWMtPmNwdXR5cGUgPSBDUFVfQk1JUFM0MzgwOwogCQkJX19jcHVfbmFtZVtjcHVdID0gIkJyb2FkY29tIEJNSVBTNDM4MCI7CisJCQlzZXRfZWxmX3BsYXRmb3JtKGNwdSwgImJtaXBzNDM4MCIpOwogCQl9IGVsc2UgewogCQkJYy0+Y3B1dHlwZSA9IENQVV9CTUlQUzQzNTA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQnJvYWRjb20gQk1JUFM0MzUwIjsKKwkJCXNldF9lbGZfcGxhdGZvcm0oY3B1LCAiYm1pcHM0MzUwIik7CiAJCX0KIAkJYnJlYWs7CiAJfQogCWNhc2UgUFJJRF9JTVBfQk1JUFM1MDAwOgogCQljLT5jcHV0eXBlID0gQ1BVX0JNSVBTNTAwMDsKIAkJX19jcHVfbmFtZVtjcHVdID0gIkJyb2FkY29tIEJNSVBTNTAwMCI7CisJCXNldF9lbGZfcGxhdGZvcm0oY3B1LCAiYm1pcHM1MDAwIik7CiAJCWMtPm9wdGlvbnMgfD0gTUlQU19DUFVfVUxSSTsKIAkJYnJlYWs7CiAJfQpAQCAtOTU2LDE0ICs5NzcsMTIgQEAKIAkJYy0+Y3B1dHlwZSA9IENQVV9DQVZJVU1fT0NURU9OX1BMVVM7CiAJCV9fY3B1X25hbWVbY3B1XSA9ICJDYXZpdW0gT2N0ZW9uKyI7CiBwbGF0Zm9ybToKLQkJaWYgKGNwdSA9PSAwKQotCQkJX19lbGZfcGxhdGZvcm0gPSAib2N0ZW9uIjsKKwkJc2V0X2VsZl9wbGF0Zm9ybShjcHUsICJvY3Rlb24iKTsKIAkJYnJlYWs7CiAJY2FzZSBQUklEX0lNUF9DQVZJVU1fQ042M1hYOgogCQljLT5jcHV0eXBlID0gQ1BVX0NBVklVTV9PQ1RFT04yOwogCQlfX2NwdV9uYW1lW2NwdV0gPSAiQ2F2aXVtIE9jdGVvbiBJSSI7Ci0JCWlmIChjcHUgPT0gMCkKLQkJCV9fZWxmX3BsYXRmb3JtID0gIm9jdGVvbjIiOworCQlzZXRfZWxmX3BsYXRmb3JtKGNwdSwgIm9jdGVvbjIiKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVW5rbm93biBPY3Rlb24gY2hpcCFcbiIpOwpAQCAtOTg4LDYgKzEwMDcsNTkgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcHVfcHJvYmVfbmV0bG9naWMoc3RydWN0IGNwdWluZm9fbWlwcyAqYywgaW50IGNwdSkKK3sKKwlkZWNvZGVfY29uZmlncyhjKTsKKworCWMtPm9wdGlvbnMgPSAoTUlQU19DUFVfVExCICAgICAgIHwKKwkJCU1JUFNfQ1BVXzRLRVggICAgfAorCQkJTUlQU19DUFVfQ09VTlRFUiB8CisJCQlNSVBTX0NQVV9ESVZFQyAgIHwKKwkJCU1JUFNfQ1BVX1dBVENIICAgfAorCQkJTUlQU19DUFVfRUpUQUcgICB8CisJCQlNSVBTX0NQVV9MTFNDKTsKKworCXN3aXRjaCAoYy0+cHJvY2Vzc29yX2lkICYgMHhmZjAwKSB7CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFI3MzI6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFI3MTY6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFI1MzI6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFIzMDg6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFI1MzJDOgorCWNhc2UgUFJJRF9JTVBfTkVUTE9HSUNfWExSNTE2QzoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUjUwOEM6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFIzMDhDOgorCQljLT5jcHV0eXBlID0gQ1BVX1hMUjsKKwkJX19jcHVfbmFtZVtjcHVdID0gIk5ldGxvZ2ljIFhMUiI7CisJCWJyZWFrOworCisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM2MDg6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MDg6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MDQ6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFMyMDg6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFMyMDQ6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFMxMDg6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFMxMDQ6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM2MTZCOgorCWNhc2UgUFJJRF9JTVBfTkVUTE9HSUNfWExTNjA4QjoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzQxNkI6CisJY2FzZSBQUklEX0lNUF9ORVRMT0dJQ19YTFM0MTJCOgorCWNhc2UgUFJJRF9JTVBfTkVUTE9HSUNfWExTNDA4QjoKKwljYXNlIFBSSURfSU1QX05FVExPR0lDX1hMUzQwNEI6CisJCWMtPmNwdXR5cGUgPSBDUFVfWExSOworCQlfX2NwdV9uYW1lW2NwdV0gPSAiTmV0bG9naWMgWExTIjsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9JTkZPICJVbmtub3duIE5ldGxvZ2ljIGNoaXAgaWQgWyUwMnhdIVxuIiwKKwkJICAgICAgIGMtPnByb2Nlc3Nvcl9pZCk7CisJCWMtPmNwdXR5cGUgPSBDUFVfWExSOworCQlicmVhazsKKwl9CisKKwljLT5pc2FfbGV2ZWwgPSBNSVBTX0NQVV9JU0FfTTY0UjE7CisJYy0+dGxic2l6ZSA9ICgocmVhZF9jMF9jb25maWcxKCkgPj4gMjUpICYgMHgzZikgKyAxOworfQorCiAjaWZkZWYgQ09ORklHXzY0QklUCiAvKiBGb3IgdXNlIGJ5IHVhY2Nlc3MuaCAqLwogdTY0IF9fdWFfbGltaXQ7CkBAIC0xMDM1LDYgKzExMDcsOSBAQAogCWNhc2UgUFJJRF9DT01QX0lOR0VOSUM6CiAJCWNwdV9wcm9iZV9pbmdlbmljKGMsIGNwdSk7CiAJCWJyZWFrOworCWNhc2UgUFJJRF9DT01QX05FVExPR0lDOgorCQljcHVfcHJvYmVfbmV0bG9naWMoYywgY3B1KTsKKwkJYnJlYWs7CiAJfQogCiAJQlVHX09OKCFfX2NwdV9uYW1lW2NwdV0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jc3JjLWJjbTE0ODAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1iY20xNDgwLmMKaW5kZXggNTE0ODlmOC4uZjk2Zjk5YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jc3JjLWJjbTE0ODAuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtYmNtMTQ4MC5jCkBAIC00OSw2ICs0OSw1IEBACiAKIAlwbGxkaXYgPSBHX0JDTTE0ODBfU1lTX1BMTF9ESVYoX19yYXdfcmVhZHEoSU9BRERSKEFfU0NEX1NZU1RFTV9DRkcpKSk7CiAJemJidXMgPSAoKHBsbGRpdiA+PiAxKSAqIDUwMDAwMDAwKSArICgocGxsZGl2ICYgMSkgKiAyNTAwMDAwMCk7Ci0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKGNzLCB6YmJ1cyk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoY3MpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KGNzLCB6YmJ1cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NzcmMtaW9hc2ljLmMgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtaW9hc2ljLmMKaW5kZXggMjNkYTEwOC4uNDZiZDdmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9jc3JjLWlvYXNpYy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1pb2FzaWMuYwpAQCAtNTksNyArNTksNSBAQAogCXByaW50ayhLRVJOX0lORk8gIkkvTyBBU0lDIGNsb2NrIGZyZXF1ZW5jeSAlZEh6XG4iLCBmcmVxKTsKIAogCWNsb2Nrc291cmNlX2RlYy5yYXRpbmcgPSAyMDAgKyBmcmVxIC8gMTAwMDAwMDA7Ci0JY2xvY2tzb3VyY2Vfc2V0X2Nsb2NrKCZjbG9ja3NvdXJjZV9kZWMsIGZyZXEpOwotCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2RlYyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2RlYywgZnJlcSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NzcmMtcG93ZXJ0di5jIGIvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXBvd2VydHYuYwppbmRleCBhMjdjMTZjLi4yZTdjNTIzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NzcmMtcG93ZXJ0di5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1wb3dlcnR2LmMKQEAgLTc4LDkgKzc4LDcgQEAKIAogCWNsb2Nrc291cmNlX21pcHMucmF0aW5nID0gMjAwICsgbWlwc19ocHRfZnJlcXVlbmN5IC8gMTAwMDAwMDA7CiAKLQljbG9ja3NvdXJjZV9zZXRfY2xvY2soJmNsb2Nrc291cmNlX21pcHMsIG1pcHNfaHB0X2ZyZXF1ZW5jeSk7Ci0KLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbWlwcyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX21pcHMsIG1pcHNfaHB0X2ZyZXF1ZW5jeSk7CiB9CiAKIC8qKgpAQCAtMTMwLDQzICsxMjgsMTYgQEAKIC8qKgogICogcG93ZXJ0dl90aW1fY19jbG9ja3NvdXJjZV9pbml0IC0gc2V0IHVwIGEgY2xvY2sgc291cmNlIGZvciB0aGUgVElNX0MgY2xvY2sKICAqCi0gKiBUaGUgaGFyZCBwYXJ0IGhlcmUgaXMgY29taW5nIHVwIHdpdGggYSBjb25zdGFudCBrIGFuZCBzaGlmdCBzIHN1Y2ggdGhhdAotICogdGhlIDQ4LWJpdCBUSU1fQyB2YWx1ZSBtdWx0aXBsaWVkIGJ5IGsgZG9lc24ndCBvdmVyZmxvdyBhbmQgdGhhdCB2YWx1ZSwKLSAqIHdoZW4gc2hpZnRlZCByaWdodCBieSBzLCB5aWVsZHMgdGhlIGNvcnJlc3BvbmRpbmcgbnVtYmVyIG9mIG5hbm9zZWNvbmRzLgogICogV2Uga25vdyB0aGF0IFRJTV9DIGNvdW50cyBhdCAyNyBNSHovOCwgc28gZWFjaCBjeWNsZSBjb3JyZXNwb25kcyB0bwotICogMSAvICgyNywwMDAsMDAwLzgpIHNlY29uZHMuIE11bHRpcGx5IHRoYXQgYnkgYSBiaWxsaW9uIGFuZCB5b3UgZ2V0IHRoZQotICogbnVtYmVyIG9mIG5hbm9zZWNvbmRzLiBTaW5jZSB0aGUgVElNX0MgdmFsdWUgaGFzIDQ4IGJpdHMgYW5kIHRoZSBtYXRoIGlzCi0gKiBkb25lIGluIDY0IGJpdHMsIGF2b2lkaW5nIGFuIG92ZXJmbG93IG1lYW5zIHRoYXQgayBtdXN0IGJlIGxlc3MgdGhhbgotICogNjQgLSA0OCA9IDE2IGJpdHMuCisgKiAxIC8gKDI3LDAwMCwwMDAvOCkgc2Vjb25kcy4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IHBvd2VydHZfdGltX2NfY2xvY2tzb3VyY2VfaW5pdCh2b2lkKQogewotCWludAkJCXByZXNjYWxlOwotCXVuc2lnbmVkIGxvbmcJCWRpdmlkZW5kOwotCXVuc2lnbmVkIGxvbmcJCWs7Ci0JaW50CQkJczsKLQljb25zdCBpbnQJCW1heF9rX2JpdHMgPSAoNjQgLSA0OCkgLSAxOwotCWNvbnN0IHVuc2lnbmVkIGxvbmcJYmlsbGlvbiA9IDEwMDAwMDAwMDA7CiAJY29uc3QgdW5zaWduZWQgbG9uZwljb3VudHNfcGVyX3NlY29uZCA9IDI3MDAwMDAwIC8gODsKIAotCXByZXNjYWxlID0gQklUU19QRVJfTE9ORyAtIGlsb2cyKGJpbGxpb24pIC0gMTsKLQlkaXZpZGVuZCA9IGJpbGxpb24gPDwgcHJlc2NhbGU7Ci0JayA9IGRpdmlkZW5kIC8gY291bnRzX3Blcl9zZWNvbmQ7Ci0JcyA9IGlsb2cyKGspIC0gbWF4X2tfYml0czsKLQotCWlmIChzIDwgMCkKLQkJcyA9IHByZXNjYWxlOwotCi0JZWxzZSB7Ci0JCWsgPj49IHM7Ci0JCXMgKz0gcHJlc2NhbGU7Ci0JfQotCi0JY2xvY2tzb3VyY2VfdGltX2MubXVsdCA9IGs7Ci0JY2xvY2tzb3VyY2VfdGltX2Muc2hpZnQgPSBzOwogCWNsb2Nrc291cmNlX3RpbV9jLnJhdGluZyA9IDIwMDsKIAotCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV90aW1fYyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX3RpbV9jLCBjb3VudHNfcGVyX3NlY29uZCk7CiAJdGltX2MgPSAoc3RydWN0IHRpbV9jICopIGFzaWNfcmVnX2FkZHIodGltX2NoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXI0ay5jIGIvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXI0ay5jCmluZGV4IGU5NWEzY2QuLmRlY2QxZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1yNGsuYworKysgYi9hcmNoL21pcHMva2VybmVsL2NzcmMtcjRrLmMKQEAgLTMwLDkgKzMwLDcgQEAKIAkvKiBDYWxjdWxhdGUgYSBzb21ld2hhdCByZWFzb25hYmxlIHJhdGluZyB2YWx1ZSAqLwogCWNsb2Nrc291cmNlX21pcHMucmF0aW5nID0gMjAwICsgbWlwc19ocHRfZnJlcXVlbmN5IC8gMTAwMDAwMDA7CiAKLQljbG9ja3NvdXJjZV9zZXRfY2xvY2soJmNsb2Nrc291cmNlX21pcHMsIG1pcHNfaHB0X2ZyZXF1ZW5jeSk7Ci0KLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfbWlwcyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX21pcHMsIG1pcHNfaHB0X2ZyZXF1ZW5jeSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1zYjEyNTAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvY3NyYy1zYjEyNTAuYwppbmRleCBkMTRkM2QxLi5lOTYwNmQ5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NzcmMtc2IxMjUwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jc3JjLXNiMTI1MC5jCkBAIC02NSw2ICs2NSw1IEBACiAJCSAgICAgSU9BRERSKEFfU0NEX1RJTUVSX1JFR0lTVEVSKFNCMTI1MF9IUFRfTlVNLAogCQkJCQkJIFJfU0NEX1RJTUVSX0NGRykpKTsKIAotCWNsb2Nrc291cmNlX3NldF9jbG9jayhjcywgVl9TQ0RfVElNRVJfRlJFUSk7Ci0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoY3MpOworCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KGNzLCBWX1NDRF9USU1FUl9GUkVRKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbWlwcy9rZXJuZWwvZW50cnkuUwppbmRleCBmZmEzMzEwLi4zN2FjZmEwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9lbnRyeS5TCkBAIC0xNjcsMTQgKzE2NywxMyBAQAogRkVYUE9SVChzeXNjYWxsX2V4aXRfd29ya19wYXJ0aWFsKQogCVNBVkVfU1RBVElDCiBzeXNjYWxsX2V4aXRfd29yazoKLQlsaQl0MCwgX1RJRl9TWVNDQUxMX1RSQUNFIHwgX1RJRl9TWVNDQUxMX0FVRElUCisJbGkJdDAsIF9USUZfV09SS19TWVNDQUxMX0VYSVQKIAlhbmQJdDAsIGEyCQkJIyBhMiBpcyBwcmVsb2FkZWQgd2l0aCBUSV9GTEFHUwogCWJlcXoJdDAsIHdvcmtfcGVuZGluZwkjIHRyYWNlIGJpdCBzZXQ/Ci0JbG9jYWxfaXJxX2VuYWJsZQkJIyBjb3VsZCBsZXQgZG9fc3lzY2FsbF90cmFjZSgpCisJbG9jYWxfaXJxX2VuYWJsZQkJIyBjb3VsZCBsZXQgc3lzY2FsbF90cmFjZV9sZWF2ZSgpCiAJCQkJCSMgY2FsbCBzY2hlZHVsZSgpIGluc3RlYWQKIAltb3ZlCWEwLCBzcAotCWxpCWExLCAxCi0JamFsCWRvX3N5c2NhbGxfdHJhY2UKKwlqYWwJc3lzY2FsbF90cmFjZV9sZWF2ZQogCWIJcmVzdW1lX3VzZXJzcGFjZQogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX01JUFNSMikgfHwgZGVmaW5lZChDT05GSUdfTUlQU19NVCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDk0Y2EyYjAuLmZlYjgwMjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYwpAQCAtMjMsNiArMjMsNyBAQAogCiAjZGVmaW5lIEpBTCAweDBjMDAwMDAwCQkvKiBqdW1wICYgbGluazogaXAgLS0+IHJhLCBqdW1wIHRvIHRhcmdldCAqLwogI2RlZmluZSBBRERSX01BU0sgMHgwM2ZmZmZmZgkvKiAgb3BfY29kZXxhZGRyIDogMzEuLi4yNnwyNSAuLi4uMCAqLworI2RlZmluZSBKVU1QX1JBTkdFX01BU0sgKCgxVUwgPDwgMjgpIC0gMSkKIAogI2RlZmluZSBJTlNOX05PUCAweDAwMDAwMDAwCS8qIG5vcCAqLwogI2RlZmluZSBJTlNOX0pBTChhZGRyKQlcCkBAIC00NCwxMiArNDUsMTIgQEAKIAogCS8qIGphbCAoZnRyYWNlX2NhbGxlciArIDgpLCBqdW1wIG92ZXIgdGhlIGZpcnN0IHR3byBpbnN0cnVjdGlvbiAqLwogCWJ1ZiA9ICh1MzIgKikmaW5zbl9qYWxfZnRyYWNlX2NhbGxlcjsKLQl1YXNtX2lfamFsKCZidWYsIChGVFJBQ0VfQUREUiArIDgpKTsKKwl1YXNtX2lfamFsKCZidWYsIChGVFJBQ0VfQUREUiArIDgpICYgSlVNUF9SQU5HRV9NQVNLKTsKIAogI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAkvKiBqIGZ0cmFjZV9ncmFwaF9jYWxsZXIgKi8KIAlidWYgPSAodTMyICopJmluc25fal9mdHJhY2VfZ3JhcGhfY2FsbGVyOwotCXVhc21faV9qKCZidWYsICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9ncmFwaF9jYWxsZXIpOworCXVhc21faV9qKCZidWYsICh1bnNpZ25lZCBsb25nKWZ0cmFjZV9ncmFwaF9jYWxsZXIgJiBKVU1QX1JBTkdFX01BU0spOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwppbmRleCAyMzkyYTdhMi4uMzkxMjIxYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pODI1My5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaTgyNTMuYwpAQCAtMTI1LDg3ICsxMjUsMTEgQEAKIAlzZXR1cF9pcnEoMCwgJmlycTApOwogfQogCi0vKgotICogU2luY2UgdGhlIFBJVCBvdmVyZmxvd3MgZXZlcnkgdGljaywgaXRzIG5vdCB2ZXJ5IHVzZWZ1bAotICogdG8ganVzdCByZWFkIGJ5IGl0c2VsZi4gU28gdXNlIGppZmZpZXMgdG8gZW11bGF0ZSBhIGZyZWUKLSAqIHJ1bm5pbmcgY291bnRlcjoKLSAqLwotc3RhdGljIGN5Y2xlX3QgcGl0X3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBjb3VudDsKLQl1MzIgamlmczsKLQlzdGF0aWMgaW50IG9sZF9jb3VudDsKLQlzdGF0aWMgdTMyIG9sZF9qaWZzOwotCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1M19sb2NrLCBmbGFncyk7Ci0JLyoKLQkgKiBBbHRob3VnaCBvdXIgY2FsbGVyIG1heSBoYXZlIHRoZSByZWFkIHNpZGUgb2YgeHRpbWVfbG9jaywKLQkgKiB0aGlzIGlzIG5vdyBhIHNlcWxvY2ssIGFuZCB3ZSBhcmUgY2hlYXRpbmcgaW4gdGhpcyByb3V0aW5lCi0JICogYnkgaGF2aW5nIHNpZGUgZWZmZWN0cyBvbiBzdGF0ZSB0aGF0IHdlIGNhbm5vdCB1bmRvIGlmCi0JICogdGhlcmUgaXMgYSBjb2xsaXNpb24gb24gdGhlIHNlcWxvY2sgYW5kIG91ciBjYWxsZXIgaGFzIHRvCi0JICogcmV0cnkuICAoTmFtZWx5LCBvbGRfamlmcyBhbmQgb2xkX2NvdW50LikgIFNvIHdlIG11c3QgdHJlYXQKLQkgKiBqaWZmaWVzIGFzIHZvbGF0aWxlIGRlc3BpdGUgdGhlIGxvY2suICBXZSByZWFkIGppZmZpZXMKLQkgKiBiZWZvcmUgbGF0Y2hpbmcgdGhlIHRpbWVyIGNvdW50IHRvIGd1YXJhbnRlZSB0aGF0IGFsdGhvdWdoCi0JICogdGhlIGppZmZpZXMgdmFsdWUgbWlnaHQgYmUgb2xkZXIgdGhhbiB0aGUgY291bnQgKHRoYXQgaXMsCi0JICogdGhlIGNvdW50ZXIgbWF5IHVuZGVyZmxvdyBiZXR3ZWVuIHRoZSBsYXN0IHBvaW50IHdoZXJlCi0JICogamlmZmllcyB3YXMgaW5jcmVtZW50ZWQgYW5kIHRoZSBwb2ludCB3aGVyZSB3ZSBsYXRjaCB0aGUKLQkgKiBjb3VudCksIGl0IGNhbm5vdCBiZSBuZXdlci4KLQkgKi8KLQlqaWZzID0gamlmZmllczsKLQlvdXRiX3AoMHgwMCwgUElUX01PREUpOwkvKiBsYXRjaCB0aGUgY291bnQgQVNBUCAqLwotCWNvdW50ID0gaW5iX3AoUElUX0NIMCk7CS8qIHJlYWQgdGhlIGxhdGNoZWQgY291bnQgKi8KLQljb3VudCB8PSBpbmJfcChQSVRfQ0gwKSA8PCA4OwotCi0JLyogVklBNjg2YSB0ZXN0IGNvZGUuLi4gcmVzZXQgdGhlIGxhdGNoIGlmIGNvdW50ID4gbWF4ICsgMSAqLwotCWlmIChjb3VudCA+IExBVENIKSB7Ci0JCW91dGJfcCgweDM0LCBQSVRfTU9ERSk7Ci0JCW91dGJfcChMQVRDSCAmIDB4ZmYsIFBJVF9DSDApOwotCQlvdXRiKExBVENIID4+IDgsIFBJVF9DSDApOwotCQljb3VudCA9IExBVENIIC0gMTsKLQl9Ci0KLQkvKgotCSAqIEl0J3MgcG9zc2libGUgZm9yIGNvdW50IHRvIGFwcGVhciB0byBnbyB0aGUgd3Jvbmcgd2F5IGZvciBhCi0JICogY291cGxlIG9mIHJlYXNvbnM6Ci0JICoKLQkgKiAgMS4gVGhlIHRpbWVyIGNvdW50ZXIgdW5kZXJmbG93cywgYnV0IHdlIGhhdmVuJ3QgaGFuZGxlZCB0aGUKLQkgKiAgICAgcmVzdWx0aW5nIGludGVycnVwdCBhbmQgaW5jcmVtZW50ZWQgamlmZmllcyB5ZXQuCi0JICogIDIuIEhhcmR3YXJlIHByb2JsZW0gd2l0aCB0aGUgdGltZXIsIG5vdCBnaXZpbmcgdXMgY29udGludW91cyB0aW1lLAotCSAqICAgICB0aGUgY291bnRlciBkb2VzIHNtYWxsICJqdW1wcyIgdXB3YXJkcyBvbiBzb21lIFBlbnRpdW0gc3lzdGVtcywKLQkgKiAgICAgKHNlZSBjJ3QgOTUvMTAgcGFnZSAzMzUgZm9yIE5lcHR1biBidWcuKQotCSAqCi0JICogUHJldmlvdXMgYXR0ZW1wdHMgdG8gaGFuZGxlIHRoZXNlIGNhc2VzIGludGVsbGlnZW50bHkgd2VyZQotCSAqIGJ1Z2d5LCBzbyB3ZSBqdXN0IGRvIHRoZSBzaW1wbGUgdGhpbmcgbm93LgotCSAqLwotCWlmIChjb3VudCA+IG9sZF9jb3VudCAmJiBqaWZzID09IG9sZF9qaWZzKSB7Ci0JCWNvdW50ID0gb2xkX2NvdW50OwotCX0KLQlvbGRfY291bnQgPSBjb3VudDsKLQlvbGRfamlmcyA9IGppZnM7Ci0KLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTNfbG9jaywgZmxhZ3MpOwotCi0JY291bnQgPSAoTEFUQ0ggLSAxKSAtIGNvdW50OwotCi0JcmV0dXJuIChjeWNsZV90KShqaWZzICogTEFUQ0gpICsgY291bnQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgY2xvY2tzb3VyY2VfcGl0ID0gewotCS5uYW1lCT0gInBpdCIsCi0JLnJhdGluZyA9IDExMCwKLQkucmVhZAk9IHBpdF9yZWFkLAotCS5tYXNrCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCi0JLm11bHQJPSAwLAotCS5zaGlmdAk9IDIwLAotfTsKLQogc3RhdGljIGludCBfX2luaXQgaW5pdF9waXRfY2xvY2tzb3VyY2Uodm9pZCkKIHsKIAlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpIC8qIFBJVCBkb2VzIG5vdCBzY2FsZSEgKi8KIAkJcmV0dXJuIDA7CiAKLQljbG9ja3NvdXJjZV9waXQubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoQ0xPQ0tfVElDS19SQVRFLCAyMCk7Ci0JcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9waXQpOworCXJldHVybiBjbG9ja3NvdXJjZV9pODI1M19pbml0KCk7CiB9CiBhcmNoX2luaXRjYWxsKGluaXRfcGl0X2Nsb2Nrc291cmNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCmluZGV4IGQyMWMzODguLjRlNmVhMWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYwpAQCAtNTMzLDE1ICs1MzMsMTAgQEAKICAqIE5vdGlmaWNhdGlvbiBvZiBzeXN0ZW0gY2FsbCBlbnRyeS9leGl0CiAgKiAtIHRyaWdnZXJlZCBieSBjdXJyZW50LT53b3JrLnN5c2NhbGxfdHJhY2UKICAqLwotYXNtbGlua2FnZSB2b2lkIGRvX3N5c2NhbGxfdHJhY2Uoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBlbnRyeWV4aXQpCithc21saW5rYWdlIHZvaWQgc3lzY2FsbF90cmFjZV9lbnRlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAkvKiBkbyB0aGUgc2VjdXJlIGNvbXB1dGluZyBjaGVjayBmaXJzdCAqLwotCWlmICghZW50cnlleGl0KQotCQlzZWN1cmVfY29tcHV0aW5nKHJlZ3MtPnJlZ3NbMl0pOwotCi0JaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpICYmIGVudHJ5ZXhpdCkKLQkJYXVkaXRfc3lzY2FsbF9leGl0KEFVRElUU0NfUkVTVUxUKHJlZ3MtPnJlZ3NbMl0pLAotCQkgICAgICAgICAgICAgICAgICAgcmVncy0+cmVnc1syXSk7CisJc2VjdXJlX2NvbXB1dGluZyhyZWdzLT5yZWdzWzJdKTsKIAogCWlmICghKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpKQogCQlnb3RvIG91dDsKQEAgLTU2NSw4ICs1NjAsNDAgQEAKIAl9CiAKIG91dDoKLQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkgJiYgIWVudHJ5ZXhpdCkKKwlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCiAJCWF1ZGl0X3N5c2NhbGxfZW50cnkoYXVkaXRfYXJjaCgpLCByZWdzLT5yZWdzWzJdLAogCQkJCSAgICByZWdzLT5yZWdzWzRdLCByZWdzLT5yZWdzWzVdLAogCQkJCSAgICByZWdzLT5yZWdzWzZdLCByZWdzLT5yZWdzWzddKTsKIH0KKworLyoKKyAqIE5vdGlmaWNhdGlvbiBvZiBzeXN0ZW0gY2FsbCBlbnRyeS9leGl0CisgKiAtIHRyaWdnZXJlZCBieSBjdXJyZW50LT53b3JrLnN5c2NhbGxfdHJhY2UKKyAqLworYXNtbGlua2FnZSB2b2lkIHN5c2NhbGxfdHJhY2VfbGVhdmUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCQlhdWRpdF9zeXNjYWxsX2V4aXQoQVVESVRTQ19SRVNVTFQocmVncy0+cmVnc1s3XSksCisJCSAgICAgICAgICAgICAgICAgICAtcmVncy0+cmVnc1syXSk7CisKKwlpZiAoIShjdXJyZW50LT5wdHJhY2UgJiBQVF9QVFJBQ0VEKSkKKwkJcmV0dXJuOworCisJaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl9TWVNDQUxMX1RSQUNFKSkKKwkJcmV0dXJuOworCisJLyogVGhlIDB4ODAgcHJvdmlkZXMgYSB3YXkgZm9yIHRoZSB0cmFjaW5nIHBhcmVudCB0byBkaXN0aW5ndWlzaAorCSAgIGJldHdlZW4gYSBzeXNjYWxsIHN0b3AgYW5kIFNJR1RSQVAgZGVsaXZlcnkgKi8KKwlwdHJhY2Vfbm90aWZ5KFNJR1RSQVAgfCAoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1RSQUNFU1lTR09PRCkgPworCSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwIDogMCkpOworCisJLyoKKwkgKiB0aGlzIGlzbid0IHRoZSBzYW1lIGFzIGNvbnRpbnVpbmcgd2l0aCBhIHNpZ25hbCwgYnV0IGl0IHdpbGwgZG8KKwkgKiBmb3Igbm9ybWFsIHVzZS4gIHN0cmFjZSBvbmx5IGNvbnRpbnVlcyB3aXRoIGEgc2lnbmFsIGlmIHRoZQorCSAqIHN0b3BwaW5nIHNpZ25hbCBpcyBub3QgU0lHVFJBUC4gIC1icmwKKwkgKi8KKwlpZiAoY3VycmVudC0+ZXhpdF9jb2RlKSB7CisJCXNlbmRfc2lnKGN1cnJlbnQtPmV4aXRfY29kZSwgY3VycmVudCwgMSk7CisJCWN1cnJlbnQtPmV4aXRfY29kZSA9IDA7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCmluZGV4IDdmNTQ2OGIuLjdhOGUxZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKQEAgLTg4LDggKzg4LDcgQEAKIAlTQVZFX1NUQVRJQwogCW1vdmUJczAsIHQyCiAJbW92ZQlhMCwgc3AKLQlsaQlhMSwgMAotCWphbAlkb19zeXNjYWxsX3RyYWNlCisJamFsCXN5c2NhbGxfdHJhY2VfZW50ZXIKIAogCW1vdmUJdDAsIHMwCiAJUkVTVE9SRV9TVEFUSUMKQEAgLTU2NSw3ICs1NjQsNyBAQAogCXN5cwlzeXNfaW9wcmlvX2dldAkJMgkvKiA0MzE1ICovCiAJc3lzCXN5c191dGltZW5zYXQJCTQKIAlzeXMJc3lzX3NpZ25hbGZkCQkzCi0Jc3lzCXN5c19uaV9zeXNjYWxsCQkwCisJc3lzCXN5c19uaV9zeXNjYWxsCQkwCS8qIHdhcyB0aW1lcmZkICovCiAJc3lzCXN5c19ldmVudGZkCQkxCiAJc3lzCXN5c19mYWxsb2NhdGUJCTYJLyogNDMyMCAqLwogCXN5cwlzeXNfdGltZXJmZF9jcmVhdGUJMgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUwppbmRleCBhMmUxZmNiLi4yZDMxYzgzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtNjQuUwpAQCAtOTEsOCArOTEsNyBAQAogCVNBVkVfU1RBVElDCiAJbW92ZQlzMCwgdDIKIAltb3ZlCWEwLCBzcAotCWxpCWExLCAwCi0JamFsCWRvX3N5c2NhbGxfdHJhY2UKKwlqYWwJc3lzY2FsbF90cmFjZV9lbnRlcgogCiAJbW92ZQl0MCwgczAKIAlSRVNUT1JFX1NUQVRJQwpAQCAtNDA0LDcgKzQwMyw3IEBACiAJUFRSCXN5c19pb3ByaW9fZ2V0CiAJUFRSCXN5c191dGltZW5zYXQJCQkvKiA1Mjc1ICovCiAJUFRSCXN5c19zaWduYWxmZAotCVBUUglzeXNfbmlfc3lzY2FsbAorCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHdhcyB0aW1lcmZkICovCiAJUFRSCXN5c19ldmVudGZkCiAJUFRSCXN5c19mYWxsb2NhdGUKIAlQVFIJc3lzX3RpbWVyZmRfY3JlYXRlCQkvKiA1MjgwICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKaW5kZXggYjJjNzYyNC4uMzhhMDUwMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwpAQCAtODksOCArODksNyBAQAogCVNBVkVfU1RBVElDCiAJbW92ZQlzMCwgdDIKIAltb3ZlCWEwLCBzcAotCWxpCWExLCAwCi0JamFsCWRvX3N5c2NhbGxfdHJhY2UKKwlqYWwJc3lzY2FsbF90cmFjZV9lbnRlcgogCiAJbW92ZQl0MCwgczAKIAlSRVNUT1JFX1NUQVRJQwpAQCAtNDAzLDcgKzQwMiw3IEBACiAJUFRSCXN5c19pb3ByaW9fZ2V0CiAJUFRSCWNvbXBhdF9zeXNfdXRpbWVuc2F0CiAJUFRSCWNvbXBhdF9zeXNfc2lnbmFsZmQJCS8qIDYyODAgKi8KLQlQVFIJc3lzX25pX3N5c2NhbGwKKwlQVFIJc3lzX25pX3N5c2NhbGwJCQkvKiB3YXMgdGltZXJmZCAqLwogCVBUUglzeXNfZXZlbnRmZAogCVBUUglzeXNfZmFsbG9jYXRlCiAJUFRSCXN5c190aW1lcmZkX2NyZWF0ZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCmluZGV4IDA0OWE5YzguLjkxZWE1ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKQEAgLTEyMyw4ICsxMjMsNyBAQAogCiAJbW92ZQlzMCwgdDIJCQkjIFNhdmUgc3lzY2FsbCBwb2ludGVyCiAJbW92ZQlhMCwgc3AKLQlsaQlhMSwgMAotCWphbAlkb19zeXNjYWxsX3RyYWNlCisJamFsCXN5c2NhbGxfdHJhY2VfZW50ZXIKIAogCW1vdmUJdDAsIHMwCiAJUkVTVE9SRV9TVEFUSUMKQEAgLTUyMiw3ICs1MjEsNyBAQAogCVBUUglzeXNfaW9wcmlvX2dldAkJCS8qIDQzMTUgKi8KIAlQVFIJY29tcGF0X3N5c191dGltZW5zYXQKIAlQVFIJY29tcGF0X3N5c19zaWduYWxmZAotCVBUUglzeXNfbmlfc3lzY2FsbAorCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHdhcyB0aW1lcmZkICovCiAJUFRSCXN5c19ldmVudGZkCiAJUFRSCXN5czMyX2ZhbGxvY2F0ZQkJCS8qIDQzMjAgKi8KIAlQVFIJc3lzX3RpbWVyZmRfY3JlYXRlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCmluZGV4IDVhODhjYzQuLmNlZGFjNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy5jCkBAIC05MjksNyArOTI5LDcgQEAKIAogc3RhdGljIHZvaWQgaXBpX3Jlc2NoZWRfaW50ZXJydXB0KHZvaWQpCiB7Ci0JLyogUmV0dXJuIGZyb20gaW50ZXJydXB0IHNob3VsZCBiZSBlbm91Z2ggdG8gY2F1c2Ugc2NoZWR1bGVyIGNoZWNrICovCisJc2NoZWR1bGVyX2lwaSgpOwogfQogCiBzdGF0aWMgdm9pZCBpcGlfY2FsbF9pbnRlcnJ1cHQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggNThiZWFiZi4uZDAyNzY1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTEwLDEyICsxMCw5IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KQEAgLTI1LDExICsyMiw5IEBACiAjaW5jbHVkZSA8bGludXgvbXNnLmg+CiAjaW5jbHVkZSA8bGludXgvc2htLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pcGMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogCiAjaW5jbHVkZSA8YXNtL2FzbS5oPgpAQCAtNjYsMTIxICs2MSw2IEBACiAJcmV0dXJuIHJlczsKIH0KIAotdW5zaWduZWQgbG9uZyBzaG1fYWxpZ25fbWFzayA9IFBBR0VfU0laRSAtIDE7CS8qIFNhbmUgY2FjaGVzICovCi0KLUVYUE9SVF9TWU1CT0woc2htX2FsaWduX21hc2spOwotCi0jZGVmaW5lIENPTE9VUl9BTElHTihhZGRyLHBnb2ZmKQkJCQlcCi0JKCgoKGFkZHIpICsgc2htX2FsaWduX21hc2spICYgfnNobV9hbGlnbl9tYXNrKSArCVwKLQkgKCgocGdvZmYpIDw8IFBBR0VfU0hJRlQpICYgc2htX2FsaWduX21hc2spKQotCi11bnNpZ25lZCBsb25nIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQl1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bW07Ci0JaW50IGRvX2NvbG9yX2FsaWduOwotCXVuc2lnbmVkIGxvbmcgdGFza19zaXplOwotCi0jaWZkZWYgQ09ORklHXzMyQklUCi0JdGFza19zaXplID0gVEFTS19TSVpFOwotI2Vsc2UgLyogTXVzdCBiZSBDT05GSUdfNjRCSVQqLwotCXRhc2tfc2l6ZSA9IHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUX0FERFIpID8gVEFTS19TSVpFMzIgOiBUQVNLX1NJWkU7Ci0jZW5kaWYKLQotCWlmIChsZW4gPiB0YXNrX3NpemUpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7Ci0JCS8qIEV2ZW4gTUFQX0ZJWEVEIG1hcHBpbmdzIG11c3QgcmVzaWRlIHdpdGhpbiB0YXNrX3NpemUuICAqLwotCQlpZiAodGFza19zaXplIC0gbGVuIDwgYWRkcikKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCS8qCi0JCSAqIFdlIGRvIG5vdCBhY2NlcHQgYSBzaGFyZWQgbWFwcGluZyBpZiBpdCB3b3VsZCB2aW9sYXRlCi0JCSAqIGNhY2hlIGFsaWFzaW5nIGNvbnN0cmFpbnRzLgotCQkgKi8KLQkJaWYgKChmbGFncyAmIE1BUF9TSEFSRUQpICYmCi0JCSAgICAoKGFkZHIgLSAocGdvZmYgPDwgUEFHRV9TSElGVCkpICYgc2htX2FsaWduX21hc2spKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJldHVybiBhZGRyOwotCX0KLQotCWRvX2NvbG9yX2FsaWduID0gMDsKLQlpZiAoZmlscCB8fCAoZmxhZ3MgJiBNQVBfU0hBUkVEKSkKLQkJZG9fY29sb3JfYWxpZ24gPSAxOwotCWlmIChhZGRyKSB7Ci0JCWlmIChkb19jb2xvcl9hbGlnbikKLQkJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkciwgcGdvZmYpOwotCQllbHNlCi0JCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKLQkJdm1tID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOwotCQlpZiAodGFza19zaXplIC0gbGVuID49IGFkZHIgJiYKLQkJICAgICghdm1tIHx8IGFkZHIgKyBsZW4gPD0gdm1tLT52bV9zdGFydCkpCi0JCQlyZXR1cm4gYWRkcjsKLQl9Ci0JYWRkciA9IGN1cnJlbnQtPm1tLT5tbWFwX2Jhc2U7Ci0JaWYgKGRvX2NvbG9yX2FsaWduKQotCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKLQllbHNlCi0JCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOwotCi0JZm9yICh2bW0gPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7IDsgdm1tID0gdm1tLT52bV9uZXh0KSB7Ci0JCS8qIEF0IHRoaXMgcG9pbnQ6ICAoIXZtbSB8fCBhZGRyIDwgdm1tLT52bV9lbmQpLiAqLwotCQlpZiAodGFza19zaXplIC0gbGVuIDwgYWRkcikKLQkJCXJldHVybiAtRU5PTUVNOwotCQlpZiAoIXZtbSB8fCBhZGRyICsgbGVuIDw9IHZtbS0+dm1fc3RhcnQpCi0JCQlyZXR1cm4gYWRkcjsKLQkJYWRkciA9IHZtbS0+dm1fZW5kOwotCQlpZiAoZG9fY29sb3JfYWxpZ24pCi0JCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKLQl9Ci19Ci0KLXZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXVuc2lnbmVkIGxvbmcgcmFuZG9tX2ZhY3RvciA9IDBVTDsKLQotCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkgewotCQlyYW5kb21fZmFjdG9yID0gZ2V0X3JhbmRvbV9pbnQoKTsKLQkJcmFuZG9tX2ZhY3RvciA9IHJhbmRvbV9mYWN0b3IgPDwgUEFHRV9TSElGVDsKLQkJaWYgKFRBU0tfSVNfMzJCSVRfQUREUikKLQkJCXJhbmRvbV9mYWN0b3IgJj0gMHhmZmZmZmZ1bDsKLQkJZWxzZQotCQkJcmFuZG9tX2ZhY3RvciAmPSAweGZmZmZmZmZ1bDsKLQl9Ci0KLQltbS0+bW1hcF9iYXNlID0gVEFTS19VTk1BUFBFRF9CQVNFICsgcmFuZG9tX2ZhY3RvcjsKLQltbS0+Z2V0X3VubWFwcGVkX2FyZWEgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhOwotCW1tLT51bm1hcF9hcmVhID0gYXJjaF91bm1hcF9hcmVhOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnJrX3JuZCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgcm5kID0gZ2V0X3JhbmRvbV9pbnQoKTsKLQotCXJuZCA9IHJuZCA8PCBQQUdFX1NISUZUOwotCS8qIDhNQiBmb3IgMzJiaXQsIDI1Nk1CIGZvciA2NGJpdCAqLwotCWlmIChUQVNLX0lTXzMyQklUX0FERFIpCi0JCXJuZCA9IHJuZCAmIDB4N2ZmZmZmdWw7Ci0JZWxzZQotCQlybmQgPSBybmQgJiAweGZmZmZmZmZ1bDsKLQotCXJldHVybiBybmQ7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5icms7Ci0JdW5zaWduZWQgbG9uZyByZXQ7Ci0KLQlyZXQgPSBQQUdFX0FMSUdOKGJhc2UgKyBicmtfcm5kKCkpOwotCi0JaWYgKHJldCA8IG1tLT5icmspCi0JCXJldHVybiBtbS0+YnJrOwotCi0JcmV0dXJuIHJldDsKLX0KLQogU1lTQ0FMTF9ERUZJTkU2KG1pcHNfbW1hcCwgdW5zaWduZWQgbG9uZywgYWRkciwgdW5zaWduZWQgbG9uZywgbGVuLAogCXVuc2lnbmVkIGxvbmcsIHByb3QsIHVuc2lnbmVkIGxvbmcsIGZsYWdzLCB1bnNpZ25lZCBsb25nLAogCWZkLCBvZmZfdCwgb2Zmc2V0KQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCmluZGV4IDcxMzUwZjcuLmU5YjNhZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKQEAgLTM3NCw3ICszNzQsOCBAQAogCXVuc2lnbmVkIGxvbmcgZHZwcmV0ID0gZHZwZSgpOwogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAotCW5vdGlmeV9kaWUoRElFX09PUFMsIHN0ciwgcmVncywgMCwgcmVnc190b190cmFwbnIocmVncyksIFNJR1NFR1YpOworCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIDAsIHJlZ3NfdG9fdHJhcG5yKHJlZ3MpLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKKwkJc2lnID0gMDsKIAogCWNvbnNvbGVfdmVyYm9zZSgpOwogCXNwaW5fbG9ja19pcnEoJmRpZV9sb2NrKTsKQEAgLTM4Myw5ICszODQsNiBAQAogCW1pcHNfbXRfcmVnZHVtcChkdnByZXQpOwogI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAotCWlmIChub3RpZnlfZGllKERJRV9PT1BTLCBzdHIsIHJlZ3MsIDAsIHJlZ3NfdG9fdHJhcG5yKHJlZ3MpLCBTSUdTRUdWKSA9PSBOT1RJRllfU1RPUCkKLQkJc2lnID0gMDsKLQogCXByaW50aygiJXNbIyVkXTpcbiIsIHN0ciwgKytkaWVfY291bnRlcik7CiAJc2hvd19yZWdpc3RlcnMocmVncyk7CiAJYWRkX3RhaW50KFRBSU5UX0RJRSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMgYi9hcmNoL21pcHMva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggODMyYWZiYi4uY2QyY2E1NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtNjgsMTIgKzY4LDE0IEBACiAJUk9EQVRBCiAKIAkvKiB3cml0ZWFibGUgKi8KKwlfc2RhdGEgPSAuOwkJCQkvKiBTdGFydCBvZiBkYXRhIHNlY3Rpb24gKi8KIAkuZGF0YSA6IHsJLyogRGF0YSAqLwogCQkuID0gLiArIERBVEFPRkZTRVQ7CQkvKiBmb3IgQ09ORklHX01BUFBFRF9LRVJORUwgKi8KIAogCQlJTklUX1RBU0tfREFUQShQQUdFX1NJWkUpCiAJCU5PU0FWRV9EQVRBCiAJCUNBQ0hFTElORV9BTElHTkVEX0RBVEEoMSA8PCBDT05GSUdfTUlQU19MMV9DQUNIRV9TSElGVCkKKwkJUkVBRF9NT1NUTFlfREFUQSgxIDw8IENPTkZJR19NSVBTX0wxX0NBQ0hFX1NISUZUKQogCQlEQVRBX0RBVEEKIAkJQ09OU1RSVUNUT1JTCiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9LY29uZmlnIGIvYXJjaC9taXBzL2xhbnRpcS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmY2NmMjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL0tjb25maWcKQEAgLTAsMCArMSwyMyBAQAoraWYgTEFOVElRCisKK2NvbmZpZyBTT0NfVFlQRV9YV0FZCisJYm9vbAorCWRlZmF1bHQgbgorCitjaG9pY2UKKwlwcm9tcHQgIlNvQyBUeXBlIgorCWRlZmF1bHQgU09DX1hXQVkKKworY29uZmlnIFNPQ19BTUFaT05fU0UKKwlib29sICJBbWF6b24gU0UiCisJc2VsZWN0IFNPQ19UWVBFX1hXQVkKKworY29uZmlnIFNPQ19YV0FZCisJYm9vbCAiWFdBWSIKKwlzZWxlY3QgU09DX1RZUEVfWFdBWQorCXNlbGVjdCBIV19IQVNfUENJCitlbmRjaG9pY2UKKworc291cmNlICJhcmNoL21pcHMvbGFudGlxL3h3YXkvS2NvbmZpZyIKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEvTWFrZWZpbGUgYi9hcmNoL21pcHMvbGFudGlxL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGFlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyMgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworb2JqLXkgOj0gaXJxLm8gc2V0dXAubyBjbGsubyBwcm9tLm8gZGV2aWNlcy5vCisKK29iai0kKENPTkZJR19FQVJMWV9QUklOVEspICs9IGVhcmx5X3ByaW50ay5vCisKK29iai0kKENPTkZJR19TT0NfVFlQRV9YV0FZKSArPSB4d2F5LwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9QbGF0Zm9ybSBiL2FyY2gvbWlwcy9sYW50aXEvUGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjNkZmYwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEvUGxhdGZvcm0KQEAgLTAsMCArMSw4IEBACisjCisjIExhbnRpcQorIworCitwbGF0Zm9ybS0kKENPTkZJR19MQU5USVEpCSs9IGxhbnRpcS8KK2NmbGFncy0kKENPTkZJR19MQU5USVEpCQkrPSAtSSQoc3JjdHJlZSkvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtbGFudGlxCitsb2FkLSQoQ09ORklHX0xBTlRJUSkJCT0gMHhmZmZmZmZmZjgwMDAyMDAwCitjZmxhZ3MtJChDT05GSUdfU09DX1RZUEVfWFdBWSkJKz0gLUkkKHNyY3RyZWUpL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWxhbnRpcS94d2F5CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL2Nsay5jIGIvYXJjaC9taXBzL2xhbnRpcS9jbGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDU2MDg5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS9jbGsuYwpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRob21hcyBMYW5nZXIgPHRob21hcy5sYW5nZXJAbGFudGlxLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKyNpbmNsdWRlICJjbGsuaCIKKworc3RydWN0IGNsayB7CisJY29uc3QgY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJdW5zaWduZWQgbG9uZyAoKmdldF9yYXRlKSAodm9pZCk7Cit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY3B1X2NsazsKK3N0YXRpYyBpbnQgY3B1X2Nsa19jbnQ7CisKKy8qIGxhbnRpcSBzb2NzIGhhdmUgMyBzdGF0aWMgY2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBjcHVfY2xrX2dlbmVyaWNbXSA9IHsKKwl7CisJCS5uYW1lID0gImNwdSIsCisJCS5nZXRfcmF0ZSA9IGx0cV9nZXRfY3B1X2h6LAorCX0sIHsKKwkJLm5hbWUgPSAiZnBpIiwKKwkJLmdldF9yYXRlID0gbHRxX2dldF9mcGlfaHosCisJfSwgeworCQkubmFtZSA9ICJpbyIsCisJCS5nZXRfcmF0ZSA9IGx0cV9nZXRfaW9fcmVnaW9uX2Nsb2NrLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGx0cV9jZ3VfcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAiY2d1IiwKKwkuc3RhcnQJPSBMVFFfQ0dVX0JBU0VfQUREUiwKKwkuZW5kCT0gTFRRX0NHVV9CQVNFX0FERFIgKyBMVFFfQ0dVX1NJWkUgLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworLyogcmVtYXBwZWQgY2xvY2sgcmVnaXN0ZXIgcmFuZ2UgKi8KK3ZvaWQgX19pb21lbSAqbHRxX2NndV9tZW1iYXNlOworCit2b2lkIGNsa19pbml0KHZvaWQpCit7CisJY3B1X2NsayA9IGNwdV9jbGtfZ2VuZXJpYzsKKwljcHVfY2xrX2NudCA9IEFSUkFZX1NJWkUoY3B1X2Nsa19nZW5lcmljKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2xrX2dvb2Qoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjbGsgJiYgIUlTX0VSUihjbGspOworfQorCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaWYgKHVubGlrZWx5KCFjbGtfZ29vZChjbGspKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2xrLT5yYXRlICE9IDApCisJCXJldHVybiBjbGstPnJhdGU7CisKKwlpZiAoY2xrLT5nZXRfcmF0ZSAhPSBOVUxMKQorCQlyZXR1cm4gY2xrLT5nZXRfcmF0ZSgpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKK3N0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjcHVfY2xrX2NudDsgaSsrKQorCQlpZiAoIXN0cmNtcChpZCwgY3B1X2Nsa1tpXS5uYW1lKSkKKwkJCXJldHVybiAmY3B1X2Nsa1tpXTsKKwlCVUcoKTsKKwlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKK30KK0VYUE9SVF9TWU1CT0woY2xrX2dldCk7CisKK3ZvaWQgY2xrX3B1dChzdHJ1Y3QgY2xrICpjbGspCit7CisJLyogbm90IHVzZWQgKi8KK30KK0VYUE9SVF9TWU1CT0woY2xrX3B1dCk7CisKK3N0YXRpYyBpbmxpbmUgdTMyIGx0cV9nZXRfY291bnRlcl9yZXNvbHV0aW9uKHZvaWQpCit7CisJdTMyIHJlczsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiLnNldCAgIHB1c2hcbiIKKwkJIi5zZXQgICBtaXBzMzJyMlxuIgorCQkicmRod3IgICUwLCAkM1xuIgorCQkiLnNldCBwb3BcbiIKKwkJOiAiPSZyIiAocmVzKQorCQk6IC8qIG5vIGlucHV0ICovCisJCTogIm1lbW9yeSIpOworCisJcmV0dXJuIHJlczsKK30KKwordm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisKKwlpZiAoaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmx0cV9jZ3VfcmVzb3VyY2UpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byBpbnNlcnQgY2d1IG1lbW9yeVxuIik7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGx0cV9jZ3VfcmVzb3VyY2Uuc3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKCZsdHFfY2d1X3Jlc291cmNlKSwgImNndSIpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byByZXF1ZXN0IGNndSBtZW1vcnlcbiIpOworCisJbHRxX2NndV9tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGx0cV9jZ3VfcmVzb3VyY2Uuc3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX2NndV9yZXNvdXJjZSkpOworCWlmICghbHRxX2NndV9tZW1iYXNlKSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlbWFwIGNndSBtZW1vcnlcbiIpOworCQl1bnJlYWNoYWJsZSgpOworCX0KKwljbGsgPSBjbGtfZ2V0KDAsICJjcHUiKTsKKwltaXBzX2hwdF9mcmVxdWVuY3kgPSBjbGtfZ2V0X3JhdGUoY2xrKSAvIGx0cV9nZXRfY291bnRlcl9yZXNvbHV0aW9uKCk7CisJd3JpdGVfYzBfY29tcGFyZShyZWFkX2MwX2NvdW50KCkpOworCWNsa19wdXQoY2xrKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEvY2xrLmggYi9hcmNoL21pcHMvbGFudGlxL2Nsay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjg5MjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL2Nsay5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaWZuZGVmIF9MVFFfQ0xLX0hfXworI2RlZmluZSBfTFRRX0NMS19IX18KKworZXh0ZXJuIHZvaWQgY2xrX2luaXQodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIGx0cV9nZXRfY3B1X2h6KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbHRxX2dldF9mcGlfaHoodm9pZCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBsdHFfZ2V0X2lvX3JlZ2lvbl9jbG9jayh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL2RldmljZXMuYyBiL2FyY2gvbWlwcy9sYW50aXEvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiODJjMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL2RldmljZXMuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKworI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworLyogbm9yIGZsYXNoICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGx0cV9ub3JfcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAibm9yIiwKKwkuc3RhcnQJPSBMVFFfRkxBU0hfU1RBUlQsCisJLmVuZAk9IExUUV9GTEFTSF9TVEFSVCArIExUUV9GTEFTSF9NQVggLSAxLAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGx0cV9ub3IgPSB7CisJLm5hbWUJCT0gImx0cV9ub3IiLAorCS5yZXNvdXJjZQk9ICZsdHFfbm9yX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKK307CisKK3ZvaWQgX19pbml0IGx0cV9yZWdpc3Rlcl9ub3Ioc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSAqZGF0YSkKK3sKKwlsdHFfbm9yLmRldi5wbGF0Zm9ybV9kYXRhID0gZGF0YTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmx0cV9ub3IpOworfQorCisvKiB3YXRjaGRvZyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfd2R0X3Jlc291cmNlID0geworCS5uYW1lCT0gIndhdGNoZG9nIiwKKwkuc3RhcnQgID0gTFRRX1dEVF9CQVNFX0FERFIsCisJLmVuZCAgICA9IExUUV9XRFRfQkFTRV9BRERSICsgTFRRX1dEVF9TSVpFIC0gMSwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCit9OworCit2b2lkIF9faW5pdCBsdHFfcmVnaXN0ZXJfd2R0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibHRxX3dkdCIsIDAsICZsdHFfd2R0X3Jlc291cmNlLCAxKTsKK30KKworLyogYXNjIHBvcnRzICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGx0cV9hc2MwX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiYXNjMCIsCisJCS5zdGFydCAgPSBMVFFfQVNDMF9CQVNFX0FERFIsCisJCS5lbmQgICAgPSBMVFFfQVNDMF9CQVNFX0FERFIgKyBMVFFfQVNDX1NJWkUgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlJUlFfUkVTKHR4LCBMVFFfQVNDX1RJUigwKSksCisJSVJRX1JFUyhyeCwgTFRRX0FTQ19SSVIoMCkpLAorCUlSUV9SRVMoZXJyLCBMVFFfQVNDX0VJUigwKSksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGx0cV9hc2MxX3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiYXNjMSIsCisJCS5zdGFydCAgPSBMVFFfQVNDMV9CQVNFX0FERFIsCisJCS5lbmQgICAgPSBMVFFfQVNDMV9CQVNFX0FERFIgKyBMVFFfQVNDX1NJWkUgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlJUlFfUkVTKHR4LCBMVFFfQVNDX1RJUigxKSksCisJSVJRX1JFUyhyeCwgTFRRX0FTQ19SSVIoMSkpLAorCUlSUV9SRVMoZXJyLCBMVFFfQVNDX0VJUigxKSksCit9OworCit2b2lkIF9faW5pdCBsdHFfcmVnaXN0ZXJfYXNjKGludCBwb3J0KQoreworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgMDoKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibHRxX2FzYyIsIDAsCisJCQlsdHFfYXNjMF9yZXNvdXJjZXMsIEFSUkFZX1NJWkUobHRxX2FzYzBfcmVzb3VyY2VzKSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibHRxX2FzYyIsIDEsCisJCQlsdHFfYXNjMV9yZXNvdXJjZXMsIEFSUkFZX1NJWkUobHRxX2FzYzFfcmVzb3VyY2VzKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworI2lmZGVmIENPTkZJR19QQ0kKKy8qIHBjaSAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbHRxX3BjaSA9IHsKKwkubmFtZQkJPSAibHRxX3BjaSIsCisJLm51bV9yZXNvdXJjZXMJPSAwLAorfTsKKwordm9pZCBfX2luaXQgbHRxX3JlZ2lzdGVyX3BjaShzdHJ1Y3QgbHRxX3BjaV9kYXRhICpkYXRhKQoreworCWx0cV9wY2kuZGV2LnBsYXRmb3JtX2RhdGEgPSBkYXRhOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbHRxX3BjaSk7Cit9CisjZWxzZQordm9pZCBfX2luaXQgbHRxX3JlZ2lzdGVyX3BjaShzdHJ1Y3QgbHRxX3BjaV9kYXRhICpkYXRhKQoreworCXByX2Vycigia2VybmVsIGlzIGNvbXBpbGVkIHdpdGhvdXQgUENJIHN1cHBvcnRcbiIpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL2RldmljZXMuaCBiL2FyY2gvbWlwcy9sYW50aXEvZGV2aWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5NDdiYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL2RldmljZXMuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX0xUUV9ERVZJQ0VTX0hfXworI2RlZmluZSBfTFRRX0RFVklDRVNfSF9fCisKKyNpbmNsdWRlIDxsYW50aXFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjZGVmaW5lIElSUV9SRVMocmVzbmFtZSwgaXJxKSBcCisJey5uYW1lID0gI3Jlc25hbWUsIC5zdGFydCA9IChpcnEpLCAuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUX0KKworZXh0ZXJuIHZvaWQgbHRxX3JlZ2lzdGVyX25vcihzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhICpkYXRhKTsKK2V4dGVybiB2b2lkIGx0cV9yZWdpc3Rlcl93ZHQodm9pZCk7CitleHRlcm4gdm9pZCBsdHFfcmVnaXN0ZXJfYXNjKGludCBwb3J0KTsKK2V4dGVybiB2b2lkIGx0cV9yZWdpc3Rlcl9wY2koc3RydWN0IGx0cV9wY2lfZGF0YSAqZGF0YSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9lYXJseV9wcmludGsuYyBiL2FyY2gvbWlwcy9sYW50aXEvZWFybHlfcHJpbnRrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcyZTA1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEvZWFybHlfcHJpbnRrLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorCisjaW5jbHVkZSA8bGFudGlxLmg+CisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisvKiBubyBpb3JlbWFwIHBvc3NpYmxlIGF0IHRoaXMgZWFybHkgc3RhZ2UsIGxldHMgdXNlIEtTRUcxIGluc3RlYWQgICovCisjZGVmaW5lIExUUV9BU0NfQkFTRQlLU0VHMUFERFIoTFRRX0FTQzFfQkFTRV9BRERSKQorI2RlZmluZSBBU0NfQlVGCQkxMDI0CisjZGVmaW5lIExUUV9BU0NfRlNUQVQJKCh1MzIgKikoTFRRX0FTQ19CQVNFICsgMHgwMDQ4KSkKKyNkZWZpbmUgTFRRX0FTQ19UQlVGCSgodTMyICopKExUUV9BU0NfQkFTRSArIDB4MDAyMCkpCisjZGVmaW5lIFRYTUFTSwkJMHgzRjAwCisjZGVmaW5lIFRYT0ZGU0VUCTgKKwordm9pZCBwcm9tX3B1dGNoYXIoY2hhciBjKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJZG8geyB9IHdoaWxlICgobHRxX3IzMihMVFFfQVNDX0ZTVEFUKSAmIFRYTUFTSykgPj4gVFhPRkZTRVQpOworCWlmIChjID09ICdcbicpCisJCWx0cV93MzIoJ1xyJywgTFRRX0FTQ19UQlVGKTsKKwlsdHFfdzMyKGMsIExUUV9BU0NfVEJVRik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9pcnEuYyBiL2FyY2gvbWlwcy9sYW50aXEvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4OTc5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEvaXJxLmMKQEAgLTAsMCArMSwzMjYgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaG9tYXMgTGFuZ2VyIDx0aG9tYXMubGFuZ2VyQGxhbnRpcS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKyNpbmNsdWRlIDxpcnEuaD4KKworLyogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTFRRX0lDVV9JTTBfSVNSCQkweDAwMDAKKyNkZWZpbmUgTFRRX0lDVV9JTTBfSUVSCQkweDAwMDgKKyNkZWZpbmUgTFRRX0lDVV9JTTBfSU9TUgkweDAwMTAKKyNkZWZpbmUgTFRRX0lDVV9JTTBfSVJTUgkweDAwMTgKKyNkZWZpbmUgTFRRX0lDVV9JTTBfSU1SCQkweDAwMjAKKyNkZWZpbmUgTFRRX0lDVV9JTTFfSVNSCQkweDAwMjgKKyNkZWZpbmUgTFRRX0lDVV9PRkZTRVQJCShMVFFfSUNVX0lNMV9JU1IgLSBMVFFfSUNVX0lNMF9JU1IpCisKKyNkZWZpbmUgTFRRX0VJVV9FWElOX0MJCTB4MDAwMAorI2RlZmluZSBMVFFfRUlVX0VYSU5fSU5JQwkweDAwMDQKKyNkZWZpbmUgTFRRX0VJVV9FWElOX0lORU4JMHgwMDBDCisKKy8qIGlycSBudW1iZXJzIHVzZWQgYnkgdGhlIGV4dGVybmFsIGludGVycnVwdCB1bml0IChFSVUpICovCisjZGVmaW5lIExUUV9FSVVfSVIwCQkoSU5UX05VTV9JTTRfSVJMMCArIDMwKQorI2RlZmluZSBMVFFfRUlVX0lSMQkJKElOVF9OVU1fSU0zX0lSTDAgKyAzMSkKKyNkZWZpbmUgTFRRX0VJVV9JUjIJCShJTlRfTlVNX0lNMV9JUkwwICsgMjYpCisjZGVmaW5lIExUUV9FSVVfSVIzCQlJTlRfTlVNX0lNMV9JUkwwCisjZGVmaW5lIExUUV9FSVVfSVI0CQkoSU5UX05VTV9JTTFfSVJMMCArIDEpCisjZGVmaW5lIExUUV9FSVVfSVI1CQkoSU5UX05VTV9JTTFfSVJMMCArIDIpCisjZGVmaW5lIExUUV9FSVVfSVI2CQkoSU5UX05VTV9JTTJfSVJMMCArIDMwKQorCisjZGVmaW5lIE1BWF9FSVUJCQk2CisKKy8qIGlycXMgZ2VuZXJhdGVkIGJ5IGRldmljZSBhdHRhY2hlZCB0byB0aGUgRUJVIG5lZWQgdG8gYmUgYWNrZWQgaW4KKyAqIGEgc3BlY2lhbCBtYW5uZXIKKyAqLworI2RlZmluZSBMVFFfSUNVX0VCVV9JUlEJCTIyCisKKyNkZWZpbmUgbHRxX2ljdV93MzIoeCwgeSkJbHRxX3czMigoeCksIGx0cV9pY3VfbWVtYmFzZSArICh5KSkKKyNkZWZpbmUgbHRxX2ljdV9yMzIoeCkJCWx0cV9yMzIobHRxX2ljdV9tZW1iYXNlICsgKHgpKQorCisjZGVmaW5lIGx0cV9laXVfdzMyKHgsIHkpCWx0cV93MzIoKHgpLCBsdHFfZWl1X21lbWJhc2UgKyAoeSkpCisjZGVmaW5lIGx0cV9laXVfcjMyKHgpCQlsdHFfcjMyKGx0cV9laXVfbWVtYmFzZSArICh4KSkKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGx0cV9laXVfaXJxW01BWF9FSVVdID0geworCUxUUV9FSVVfSVIwLAorCUxUUV9FSVVfSVIxLAorCUxUUV9FSVVfSVIyLAorCUxUUV9FSVVfSVIzLAorCUxUUV9FSVVfSVI0LAorCUxUUV9FSVVfSVI1LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfaWN1X3Jlc291cmNlID0geworCS5uYW1lCT0gImljdSIsCisJLnN0YXJ0CT0gTFRRX0lDVV9CQVNFX0FERFIsCisJLmVuZAk9IExUUV9JQ1VfQkFTRV9BRERSICsgTFRRX0lDVV9TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbHRxX2VpdV9yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJlaXUiLAorCS5zdGFydAk9IExUUV9FSVVfQkFTRV9BRERSLAorCS5lbmQJPSBMVFFfRUlVX0JBU0VfQUREUiArIExUUV9JQ1VfU0laRSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpsdHFfaWN1X21lbWJhc2U7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpsdHFfZWl1X21lbWJhc2U7CisKK3ZvaWQgbHRxX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwl1MzIgaWVyID0gTFRRX0lDVV9JTTBfSUVSOworCWludCBpcnFfbnIgPSBkLT5pcnEgLSBJTlRfTlVNX0lSUTA7CisKKwlpZXIgKz0gTFRRX0lDVV9PRkZTRVQgKiAoaXJxX25yIC8gSU5UX05VTV9JTV9PRkZTRVQpOworCWlycV9uciAlPSBJTlRfTlVNX0lNX09GRlNFVDsKKwlsdHFfaWN1X3czMihsdHFfaWN1X3IzMihpZXIpICYgfigxIDw8IGlycV9uciksIGllcik7Cit9CisKK3ZvaWQgbHRxX21hc2tfYW5kX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXUzMiBpZXIgPSBMVFFfSUNVX0lNMF9JRVI7CisJdTMyIGlzciA9IExUUV9JQ1VfSU0wX0lTUjsKKwlpbnQgaXJxX25yID0gZC0+aXJxIC0gSU5UX05VTV9JUlEwOworCisJaWVyICs9IExUUV9JQ1VfT0ZGU0VUICogKGlycV9uciAvIElOVF9OVU1fSU1fT0ZGU0VUKTsKKwlpc3IgKz0gTFRRX0lDVV9PRkZTRVQgKiAoaXJxX25yIC8gSU5UX05VTV9JTV9PRkZTRVQpOworCWlycV9uciAlPSBJTlRfTlVNX0lNX09GRlNFVDsKKwlsdHFfaWN1X3czMihsdHFfaWN1X3IzMihpZXIpICYgfigxIDw8IGlycV9uciksIGllcik7CisJbHRxX2ljdV93MzIoKDEgPDwgaXJxX25yKSwgaXNyKTsKK30KKworc3RhdGljIHZvaWQgbHRxX2Fja19pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXUzMiBpc3IgPSBMVFFfSUNVX0lNMF9JU1I7CisJaW50IGlycV9uciA9IGQtPmlycSAtIElOVF9OVU1fSVJRMDsKKworCWlzciArPSBMVFFfSUNVX09GRlNFVCAqIChpcnFfbnIgLyBJTlRfTlVNX0lNX09GRlNFVCk7CisJaXJxX25yICU9IElOVF9OVU1fSU1fT0ZGU0VUOworCWx0cV9pY3VfdzMyKCgxIDw8IGlycV9uciksIGlzcik7Cit9CisKK3ZvaWQgbHRxX2VuYWJsZV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCXUzMiBpZXIgPSBMVFFfSUNVX0lNMF9JRVI7CisJaW50IGlycV9uciA9IGQtPmlycSAtIElOVF9OVU1fSVJRMDsKKworCWllciArPSBMVFFfSUNVX09GRlNFVCAgKiAoaXJxX25yIC8gSU5UX05VTV9JTV9PRkZTRVQpOworCWlycV9uciAlPSBJTlRfTlVNX0lNX09GRlNFVDsKKwlsdHFfaWN1X3czMihsdHFfaWN1X3IzMihpZXIpIHwgKDEgPDwgaXJxX25yKSwgaWVyKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBsdHFfc3RhcnR1cF9laXVfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlpbnQgaTsKKwlpbnQgaXJxX25yID0gZC0+aXJxIC0gSU5UX05VTV9JUlEwOworCisJbHRxX2VuYWJsZV9pcnEoZCk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9FSVU7IGkrKykgeworCQlpZiAoaXJxX25yID09IGx0cV9laXVfaXJxW2ldKSB7CisJCQkvKiBsb3cgbGV2ZWwgLSB3ZSBzaG91bGQgcmVhbGx5IGhhbmRsZSBzZXRfdHlwZSAqLworCQkJbHRxX2VpdV93MzIobHRxX2VpdV9yMzIoTFRRX0VJVV9FWElOX0MpIHwKKwkJCQkoMHg2IDw8IChpICogNCkpLCBMVFFfRUlVX0VYSU5fQyk7CisJCQkvKiBjbGVhciBhbGwgcGVuZGluZyAqLworCQkJbHRxX2VpdV93MzIobHRxX2VpdV9yMzIoTFRRX0VJVV9FWElOX0lOSUMpICYgfigxIDw8IGkpLAorCQkJCUxUUV9FSVVfRVhJTl9JTklDKTsKKwkJCS8qIGVuYWJsZSAqLworCQkJbHRxX2VpdV93MzIobHRxX2VpdV9yMzIoTFRRX0VJVV9FWElOX0lORU4pIHwgKDEgPDwgaSksCisJCQkJTFRRX0VJVV9FWElOX0lORU4pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbHRxX3NodXRkb3duX2VpdV9pcnEoc3RydWN0IGlycV9kYXRhICpkKQoreworCWludCBpOworCWludCBpcnFfbnIgPSBkLT5pcnEgLSBJTlRfTlVNX0lSUTA7CisKKwlsdHFfZGlzYWJsZV9pcnEoZCk7CisJZm9yIChpID0gMDsgaSA8IE1BWF9FSVU7IGkrKykgeworCQlpZiAoaXJxX25yID09IGx0cV9laXVfaXJxW2ldKSB7CisJCQkvKiBkaXNhYmxlICovCisJCQlsdHFfZWl1X3czMihsdHFfZWl1X3IzMihMVFFfRUlVX0VYSU5fSU5FTikgJiB+KDEgPDwgaSksCisJCQkJTFRRX0VJVV9FWElOX0lORU4pOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbHRxX2lycV90eXBlID0geworCSJpY3UiLAorCS5pcnFfZW5hYmxlID0gbHRxX2VuYWJsZV9pcnEsCisJLmlycV9kaXNhYmxlID0gbHRxX2Rpc2FibGVfaXJxLAorCS5pcnFfdW5tYXNrID0gbHRxX2VuYWJsZV9pcnEsCisJLmlycV9hY2sgPSBsdHFfYWNrX2lycSwKKwkuaXJxX21hc2sgPSBsdHFfZGlzYWJsZV9pcnEsCisJLmlycV9tYXNrX2FjayA9IGx0cV9tYXNrX2FuZF9hY2tfaXJxLAorfTsKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsdHFfZWl1X3R5cGUgPSB7CisJImVpdSIsCisJLmlycV9zdGFydHVwID0gbHRxX3N0YXJ0dXBfZWl1X2lycSwKKwkuaXJxX3NodXRkb3duID0gbHRxX3NodXRkb3duX2VpdV9pcnEsCisJLmlycV9lbmFibGUgPSBsdHFfZW5hYmxlX2lycSwKKwkuaXJxX2Rpc2FibGUgPSBsdHFfZGlzYWJsZV9pcnEsCisJLmlycV91bm1hc2sgPSBsdHFfZW5hYmxlX2lycSwKKwkuaXJxX2FjayA9IGx0cV9hY2tfaXJxLAorCS5pcnFfbWFzayA9IGx0cV9kaXNhYmxlX2lycSwKKwkuaXJxX21hc2tfYWNrID0gbHRxX21hc2tfYW5kX2Fja19pcnEsCit9OworCitzdGF0aWMgdm9pZCBsdHFfaHdfaXJxZGlzcGF0Y2goaW50IG1vZHVsZSkKK3sKKwl1MzIgaXJxOworCisJaXJxID0gbHRxX2ljdV9yMzIoTFRRX0lDVV9JTTBfSU9TUiArIChtb2R1bGUgKiBMVFFfSUNVX09GRlNFVCkpOworCWlmIChpcnEgPT0gMCkKKwkJcmV0dXJuOworCisJLyogc2lsaWNvbiBidWcgY2F1c2VzIG9ubHkgdGhlIG1zYiBzZXQgdG8gMSB0byBiZSB2YWxpZC4gYWxsCisJICogb3RoZXIgYml0cyBtaWdodCBiZSBib2d1cworCSAqLworCWlycSA9IF9fZmxzKGlycSk7CisJZG9fSVJRKChpbnQpaXJxICsgSU5UX05VTV9JTTBfSVJMMCArIChJTlRfTlVNX0lNX09GRlNFVCAqIG1vZHVsZSkpOworCisJLyogaWYgdGhpcyBpcyBhIEVCVSBpcnEsIHdlIG5lZWQgdG8gYWNrIGl0IG9yIGdldCBhIGRlYWRsb2NrICovCisJaWYgKChpcnEgPT0gTFRRX0lDVV9FQlVfSVJRKSAmJiAobW9kdWxlID09IDApKQorCQlsdHFfZWJ1X3czMihsdHFfZWJ1X3IzMihMVFFfRUJVX1BDQ19JU1RBVCkgfCAweDEwLAorCQkJTFRRX0VCVV9QQ0NfSVNUQVQpOworfQorCisjZGVmaW5lIERFRklORV9IV3hfSVJRRElTUEFUQ0goeCkJCQkJCVwKKwlzdGF0aWMgdm9pZCBsdHFfaHcgIyMgeCAjIyBfaXJxZGlzcGF0Y2godm9pZCkJCQlcCisJewkJCQkJCQkJXAorCQlsdHFfaHdfaXJxZGlzcGF0Y2goeCk7CQkJCQlcCisJfQorREVGSU5FX0hXeF9JUlFESVNQQVRDSCgwKQorREVGSU5FX0hXeF9JUlFESVNQQVRDSCgxKQorREVGSU5FX0hXeF9JUlFESVNQQVRDSCgyKQorREVGSU5FX0hXeF9JUlFESVNQQVRDSCgzKQorREVGSU5FX0hXeF9JUlFESVNQQVRDSCg0KQorCitzdGF0aWMgdm9pZCBsdHFfaHc1X2lycWRpc3BhdGNoKHZvaWQpCit7CisJZG9fSVJRKE1JUFNfQ1BVX1RJTUVSX0lSUSk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQoreworCXVuc2lnbmVkIGludCBwZW5kaW5nID0gcmVhZF9jMF9zdGF0dXMoKSAmIHJlYWRfYzBfY2F1c2UoKSAmIFNUMF9JTTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmIChwZW5kaW5nICYgQ0FVU0VGX0lQNykgeworCQlkb19JUlEoTUlQU19DUFVfVElNRVJfSVJRKTsKKwkJZ290byBvdXQ7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJaWYgKHBlbmRpbmcgJiAoQ0FVU0VGX0lQMiA8PCBpKSkgeworCQkJCWx0cV9od19pcnFkaXNwYXRjaChpKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJfQorCX0KKwlwcl9hbGVydCgiU3B1cmlvdXMgSVJROiBDQVVTRT0weCUwOHhcbiIsIHJlYWRfYzBfc3RhdHVzKCkpOworCitvdXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlID0geworCS5oYW5kbGVyID0gbm9fYWN0aW9uLAorCS5mbGFncyA9IElSUUZfRElTQUJMRUQsCisJLm5hbWUgPSAiY2FzY2FkZSIsCit9OworCit2b2lkIF9faW5pdCBhcmNoX2luaXRfaXJxKHZvaWQpCit7CisJaW50IGk7CisKKwlpZiAoaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmx0cV9pY3VfcmVzb3VyY2UpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byBpbnNlcnQgaWN1IG1lbW9yeVxuIik7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGx0cV9pY3VfcmVzb3VyY2Uuc3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKCZsdHFfaWN1X3Jlc291cmNlKSwgImljdSIpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byByZXF1ZXN0IGljdSBtZW1vcnlcbiIpOworCisJbHRxX2ljdV9tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGx0cV9pY3VfcmVzb3VyY2Uuc3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX2ljdV9yZXNvdXJjZSkpOworCWlmICghbHRxX2ljdV9tZW1iYXNlKQorCQlwYW5pYygiRmFpbGVkIHRvIHJlbWFwIGljdSBtZW1vcnlcbiIpOworCisJaWYgKGluc2VydF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZsdHFfZWl1X3Jlc291cmNlKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gaW5zZXJ0IGVpdSBtZW1vcnlcbiIpOworCisJaWYgKHJlcXVlc3RfbWVtX3JlZ2lvbihsdHFfZWl1X3Jlc291cmNlLnN0YXJ0LAorCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX2VpdV9yZXNvdXJjZSksICJlaXUiKSA8IDApCisJCXBhbmljKCJGYWlsZWQgdG8gcmVxdWVzdCBlaXUgbWVtb3J5XG4iKTsKKworCWx0cV9laXVfbWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShsdHFfZWl1X3Jlc291cmNlLnN0YXJ0LAorCQkJCXJlc291cmNlX3NpemUoJmx0cV9laXVfcmVzb3VyY2UpKTsKKwlpZiAoIWx0cV9laXVfbWVtYmFzZSkKKwkJcGFuaWMoIkZhaWxlZCB0byByZW1hcCBlaXUgbWVtb3J5XG4iKTsKKworCS8qIG1ha2Ugc3VyZSBhbGwgaXJxcyBhcmUgdHVybmVkIG9mZiBieSBkZWZhdWx0ICovCisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJbHRxX2ljdV93MzIoMCwgTFRRX0lDVV9JTTBfSUVSICsgKGkgKiBMVFFfSUNVX09GRlNFVCkpOworCisJLyogY2xlYXIgYWxsIHBvc3NpYmx5IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCWx0cV9pY3VfdzMyKH4wLCBMVFFfSUNVX0lNMF9JU1IgKyAoaSAqIExUUV9JQ1VfT0ZGU0VUKSk7CisKKwltaXBzX2NwdV9pcnFfaW5pdCgpOworCisJZm9yIChpID0gMjsgaSA8PSA2OyBpKyspCisJCXNldHVwX2lycShpLCAmY2FzY2FkZSk7CisKKwlpZiAoY3B1X2hhc192aW50KSB7CisJCXByX2luZm8oIlNldHRpbmcgdXAgdmVjdG9yZWQgaW50ZXJydXB0c1xuIik7CisJCXNldF92aV9oYW5kbGVyKDIsIGx0cV9odzBfaXJxZGlzcGF0Y2gpOworCQlzZXRfdmlfaGFuZGxlcigzLCBsdHFfaHcxX2lycWRpc3BhdGNoKTsKKwkJc2V0X3ZpX2hhbmRsZXIoNCwgbHRxX2h3Ml9pcnFkaXNwYXRjaCk7CisJCXNldF92aV9oYW5kbGVyKDUsIGx0cV9odzNfaXJxZGlzcGF0Y2gpOworCQlzZXRfdmlfaGFuZGxlcig2LCBsdHFfaHc0X2lycWRpc3BhdGNoKTsKKwkJc2V0X3ZpX2hhbmRsZXIoNywgbHRxX2h3NV9pcnFkaXNwYXRjaCk7CisJfQorCisJZm9yIChpID0gSU5UX05VTV9JUlEwOworCQlpIDw9IChJTlRfTlVNX0lSUTAgKyAoNSAqIElOVF9OVU1fSU1fT0ZGU0VUKSk7IGkrKykKKwkJaWYgKChpID09IExUUV9FSVVfSVIwKSB8fCAoaSA9PSBMVFFfRUlVX0lSMSkgfHwKKwkJCShpID09IExUUV9FSVVfSVIyKSkKKwkJCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpLCAmbHRxX2VpdV90eXBlLAorCQkJCWhhbmRsZV9sZXZlbF9pcnEpOworCQkvKiBFSVUzLTUgb25seSBleGlzdCBvbiBhcjkgYW5kIHZyOSAqLworCQllbHNlIGlmICgoKGkgPT0gTFRRX0VJVV9JUjMpIHx8IChpID09IExUUV9FSVVfSVI0KSB8fAorCQkJKGkgPT0gTFRRX0VJVV9JUjUpKSAmJiAobHRxX2lzX2FyOSgpIHx8IGx0cV9pc192cjkoKSkpCisJCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaSwgJmx0cV9laXVfdHlwZSwKKwkJCQloYW5kbGVfbGV2ZWxfaXJxKTsKKwkJZWxzZQorCQkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGksICZsdHFfaXJxX3R5cGUsCisJCQkJaGFuZGxlX2xldmVsX2lycSk7CisKKyNpZiAhZGVmaW5lZChDT05GSUdfTUlQU19NVF9TTVApICYmICFkZWZpbmVkKENPTkZJR19NSVBTX01UX1NNVEMpCisJc2V0X2MwX3N0YXR1cyhJRV9JUlEwIHwgSUVfSVJRMSB8IElFX0lSUTIgfAorCQlJRV9JUlEzIHwgSUVfSVJRNCB8IElFX0lSUTUpOworI2Vsc2UKKwlzZXRfYzBfc3RhdHVzKElFX1NXMCB8IElFX1NXMSB8IElFX0lSUTAgfCBJRV9JUlExIHwKKwkJSUVfSVJRMiB8IElFX0lSUTMgfCBJRV9JUlE0IHwgSUVfSVJRNSk7CisjZW5kaWYKK30KKwordW5zaWduZWQgaW50IF9fY3B1aW5pdCBnZXRfYzBfY29tcGFyZV9pbnQodm9pZCkKK3sKKwlyZXR1cm4gQ1AwX0xFR0FDWV9DT01QQVJFX0lSUTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEvbWFjaHR5cGVzLmggYi9hcmNoL21pcHMvbGFudGlxL21hY2h0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlMDFiOGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL21hY2h0eXBlcy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2lmbmRlZiBfTEFOVElRX01BQ0hfSF9fCisjZGVmaW5lIF9MQU5USVFfTUFDSF9IX18KKworI2luY2x1ZGUgPGFzbS9taXBzX21hY2hpbmUuaD4KKworZW51bSBsYW50aXFfbWFjaF90eXBlIHsKKwlMVFFfTUFDSF9HRU5FUklDID0gMCwKKwlMVFFfTUFDSF9FQVNZNTA3MTIsCS8qIERhbnViZSBldmFsdWF0aW9uIGJvYXJkICovCisJTFRRX01BQ0hfRUFTWTUwNjAxLAkvKiBBbWF6b24gU0UgZXZhbHVhdGlvbiBib2FyZCAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3Byb20uYyBiL2FyY2gvbWlwcy9sYW50aXEvcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YmEwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3Byb20uYwpAQCAtMCwwICsxLDcxIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKKyNpbmNsdWRlIDxsYW50aXEuaD4KKworI2luY2x1ZGUgInByb20uaCIKKyNpbmNsdWRlICJjbGsuaCIKKworc3RhdGljIHN0cnVjdCBsdHFfc29jX2luZm8gc29jX2luZm87CisKK3Vuc2lnbmVkIGludCBsdHFfZ2V0X2NwdV92ZXIodm9pZCkKK3sKKwlyZXR1cm4gc29jX2luZm8ucmV2OworfQorRVhQT1JUX1NZTUJPTChsdHFfZ2V0X2NwdV92ZXIpOworCit1bnNpZ25lZCBpbnQgbHRxX2dldF9zb2NfdHlwZSh2b2lkKQoreworCXJldHVybiBzb2NfaW5mby50eXBlOworfQorRVhQT1JUX1NZTUJPTChsdHFfZ2V0X3NvY190eXBlKTsKKworY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCit7CisJcmV0dXJuIHNvY19pbmZvLnN5c190eXBlOworfQorCit2b2lkIHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQoreworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcHJvbV9pbml0X2NtZGxpbmUodm9pZCkKK3sKKwlpbnQgYXJnYyA9IGZ3X2FyZzA7CisJY2hhciAqKmFyZ3YgPSAoY2hhciAqKikgS1NFRzFBRERSKGZ3X2FyZzEpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgeworCQljaGFyICpwID0gKGNoYXIgKikgIEtTRUcxQUREUihhcmd2W2ldKTsKKworCQlpZiAocCAmJiAqcCkgeworCQkJc3RybGNhdChhcmNzX2NtZGxpbmUsIHAsIHNpemVvZihhcmNzX2NtZGxpbmUpKTsKKwkJCXN0cmxjYXQoYXJjc19jbWRsaW5lLCAiICIsIHNpemVvZihhcmNzX2NtZGxpbmUpKTsKKwkJfQorCX0KK30KKwordm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrOworCisJbHRxX3NvY19kZXRlY3QoJnNvY19pbmZvKTsKKwljbGtfaW5pdCgpOworCWNsayA9IGNsa19nZXQoMCwgImNwdSIpOworCXNucHJpbnRmKHNvY19pbmZvLnN5c190eXBlLCBMVFFfU1lTX1RZUEVfTEVOIC0gMSwgIiVzIHJldjEuJWQiLAorCQlzb2NfaW5mby5uYW1lLCBzb2NfaW5mby5yZXYpOworCWNsa19wdXQoY2xrKTsKKwlzb2NfaW5mby5zeXNfdHlwZVtMVFFfU1lTX1RZUEVfTEVOIC0gMV0gPSAnXDAnOworCXByX2luZm8oIlNvQzogJXNcbiIsIHNvY19pbmZvLnN5c190eXBlKTsKKwlwcm9tX2luaXRfY21kbGluZSgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS9wcm9tLmggYi9hcmNoL21pcHMvbGFudGlxL3Byb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDIyOWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS9wcm9tLmgKQEAgLTAsMCArMSwyNSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpZm5kZWYgX0xUUV9QUk9NX0hfXworI2RlZmluZSBfTFRRX1BST01fSF9fCisKKyNkZWZpbmUgTFRRX1NZU19UWVBFX0xFTgkweDEwMAorCitzdHJ1Y3QgbHRxX3NvY19pbmZvIHsKKwl1bnNpZ25lZCBjaGFyICpuYW1lOworCXVuc2lnbmVkIGludCByZXY7CisJdW5zaWduZWQgaW50IHBhcnRudW07CisJdW5zaWduZWQgaW50IHR5cGU7CisJdW5zaWduZWQgY2hhciBzeXNfdHlwZVtMVFFfU1lTX1RZUEVfTEVOXTsKK307CisKK2V4dGVybiB2b2lkIGx0cV9zb2NfZGV0ZWN0KHN0cnVjdCBsdHFfc29jX2luZm8gKmkpOworZXh0ZXJuIHZvaWQgbHRxX3NvY19zZXR1cCh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3NldHVwLmMgYi9hcmNoL21pcHMvbGFudGlxL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4YWY3NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEvc2V0dXAuYwpAQCAtMCwwICsxLDY2IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKyNpbmNsdWRlICJtYWNodHlwZXMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisjaW5jbHVkZSAicHJvbS5oIgorCit2b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQoreworCS8qIGFzc3VtZSAxNk0gYXMgZGVmYXVsdCBpbmNhc2UgdWJvb3QgZmFpbHMgdG8gcGFzcyBwcm9wZXIgcmFtc2l6ZSAqLworCXVuc2lnbmVkIGxvbmcgbWVtc2l6ZSA9IDE2OworCWNoYXIgKiplbnZwID0gKGNoYXIgKiopIEtTRUcxQUREUihmd19hcmcyKTsKKworCWlvcG9ydF9yZXNvdXJjZS5zdGFydCA9IElPUE9SVF9SRVNPVVJDRV9TVEFSVDsKKwlpb3BvcnRfcmVzb3VyY2UuZW5kID0gSU9QT1JUX1JFU09VUkNFX0VORDsKKwlpb21lbV9yZXNvdXJjZS5zdGFydCA9IElPTUVNX1JFU09VUkNFX1NUQVJUOworCWlvbWVtX3Jlc291cmNlLmVuZCA9IElPTUVNX1JFU09VUkNFX0VORDsKKworCXNldF9pb19wb3J0X2Jhc2UoKHVuc2lnbmVkIGxvbmcpIEtTRUcxKTsKKworCXdoaWxlICgqZW52cCkgeworCQljaGFyICplID0gKGNoYXIgKilLU0VHMUFERFIoKmVudnApOworCQlpZiAoIXN0cm5jbXAoZSwgIm1lbXNpemU9IiwgOCkpIHsKKwkJCWUgKz0gODsKKwkJCWlmIChzdHJpY3Rfc3RydG91bChlLCAwLCAmbWVtc2l6ZSkpCisJCQkJcHJfd2FybigiYmFkIG1lbXNpemUgc3BlY2lmaWVkXG4iKTsKKwkJfQorCQllbnZwKys7CisJfQorCW1lbXNpemUgKj0gMTAyNCAqIDEwMjQ7CisJYWRkX21lbW9yeV9yZWdpb24oMHgwMDAwMDAwMCwgbWVtc2l6ZSwgQk9PVF9NRU1fUkFNKTsKK30KKworc3RhdGljIGludCBfX2luaXQKK2xhbnRpcV9zZXR1cCh2b2lkKQoreworCWx0cV9zb2Nfc2V0dXAoKTsKKwltaXBzX21hY2hpbmVfc2V0dXAoKTsKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChsYW50aXFfc2V0dXApOworCitzdGF0aWMgdm9pZCBfX2luaXQKK2xhbnRpcV9nZW5lcmljX2luaXQodm9pZCkKK3sKKwkvKiBOb3RoaW5nIHRvIGRvICovCit9CisKK01JUFNfTUFDSElORShMVFFfTUFDSF9HRU5FUklDLAorCSAgICAgIkdlbmVyaWMiLAorCSAgICAgIkdlbmVyaWMgTGFudGlxIGJhc2VkIGJvYXJkIiwKKwkgICAgIGxhbnRpcV9nZW5lcmljX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L0tjb25maWcgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjg1N2RlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L0tjb25maWcKQEAgLTAsMCArMSwyMyBAQAoraWYgU09DX1hXQVkKKworbWVudSAiTUlQUyBNYWNoaW5lIgorCitjb25maWcgTEFOVElRX01BQ0hfRUFTWTUwNzEyCisJYm9vbCAiRWFzeTUwNzEyIC0gRGFudWJlIgorCWRlZmF1bHQgeQorCitlbmRtZW51CisKK2VuZGlmCisKK2lmIFNPQ19BTUFaT05fU0UKKworbWVudSAiTUlQUyBNYWNoaW5lIgorCitjb25maWcgTEFOVElRX01BQ0hfRUFTWTUwNjAxCisJYm9vbCAiRWFzeTUwNjAxIC0gQW1hem9uIFNFIgorCWRlZmF1bHQgeQorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvTWFrZWZpbGUgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxN2YyZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9NYWtlZmlsZQpAQCAtMCwwICsxLDcgQEAKK29iai15IDo9IHBtdS5vIGVidS5vIHJlc2V0Lm8gZ3Bpby5vIGdwaW9fc3RwLm8gZ3Bpb19lYnUubyBkZXZpY2VzLm8gZG1hLm8KKworb2JqLSQoQ09ORklHX1NPQ19YV0FZKSArPSBjbGsteHdheS5vIHByb20teHdheS5vIHNldHVwLXh3YXkubworb2JqLSQoQ09ORklHX1NPQ19BTUFaT05fU0UpICs9IGNsay1hc2UubyBwcm9tLWFzZS5vIHNldHVwLWFzZS5vCisKK29iai0kKENPTkZJR19MQU5USVFfTUFDSF9FQVNZNTA3MTIpICs9IG1hY2gtZWFzeTUwNzEyLm8KK29iai0kKENPTkZJR19MQU5USVFfTUFDSF9FQVNZNTA2MDEpICs9IG1hY2gtZWFzeTUwNjAxLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9jbGstYXNlLmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvY2xrLWFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyZDgyM2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvY2xrLWFzZS5jCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTEgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorCisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKy8qIGNndSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTFRRX0NHVV9TWVMJMHgwMDEwCisKK3Vuc2lnbmVkIGludCBsdHFfZ2V0X2lvX3JlZ2lvbl9jbG9jayh2b2lkKQoreworCXJldHVybiBDTE9DS18xMzNNOworfQorRVhQT1JUX1NZTUJPTChsdHFfZ2V0X2lvX3JlZ2lvbl9jbG9jayk7CisKK3Vuc2lnbmVkIGludCBsdHFfZ2V0X2ZwaV9idXNfY2xvY2soaW50IGZwaSkKK3sKKwlyZXR1cm4gQ0xPQ0tfMTMzTTsKK30KK0VYUE9SVF9TWU1CT0wobHRxX2dldF9mcGlfYnVzX2Nsb2NrKTsKKwordW5zaWduZWQgaW50IGx0cV9nZXRfY3B1X2h6KHZvaWQpCit7CisJaWYgKGx0cV9jZ3VfcjMyKExUUV9DR1VfU1lTKSAmICgxIDw8IDUpKQorCQlyZXR1cm4gQ0xPQ0tfMjY2TTsKKwllbHNlCisJCXJldHVybiBDTE9DS18xMzNNOworfQorRVhQT1JUX1NZTUJPTChsdHFfZ2V0X2NwdV9oeik7CisKK3Vuc2lnbmVkIGludCBsdHFfZ2V0X2ZwaV9oeih2b2lkKQoreworCXJldHVybiBDTE9DS18xMzNNOworfQorRVhQT1JUX1NZTUJPTChsdHFfZ2V0X2ZwaV9oeik7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvY2xrLXh3YXkuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9jbGsteHdheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZDM5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvY2xrLXh3YXkuYwpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworc3RhdGljIHVuc2lnbmVkIGludCBsdHFfcmFtX2Nsb2Nrc1tdID0geworCUNMT0NLXzE2N00sIENMT0NLXzEzM00sIENMT0NLXzExMU0sIENMT0NLXzgzTSB9OworI2RlZmluZSBERFJfSFogbHRxX3JhbV9jbG9ja3NbbHRxX2NndV9yMzIoTFRRX0NHVV9TWVMpICYgMHgzXQorCisjZGVmaW5lIEJBU0lDX0ZSRVFVRU5DWV8xCTM1MzI4MDAwCisjZGVmaW5lIEJBU0lDX0ZSRVFVRU5DWV8yCTM2MDAwMDAwCisjZGVmaW5lIEJBU0lTX1JFUVVFTkNZX1VTQgkxMjAwMDAwMAorCisjZGVmaW5lIEdFVF9CSVRTKHgsIG1zYiwgbHNiKSBcCisJKCgoeCkgJiAoKDEgPDwgKChtc2IpICsgMSkpIC0gMSkpID4+IChsc2IpKQorCisjZGVmaW5lIExUUV9DR1VfUExMMF9DRkcJMHgwMDA0CisjZGVmaW5lIExUUV9DR1VfUExMMV9DRkcJMHgwMDA4CisjZGVmaW5lIExUUV9DR1VfUExMMl9DRkcJMHgwMDBDCisjZGVmaW5lIExUUV9DR1VfU1lTCQkweDAwMTAKKyNkZWZpbmUgTFRRX0NHVV9VUERBVEUJCTB4MDAxNAorI2RlZmluZSBMVFFfQ0dVX0lGX0NMSwkJMHgwMDE4CisjZGVmaW5lIExUUV9DR1VfT1NDX0NPTgkJMHgwMDFDCisjZGVmaW5lIExUUV9DR1VfU01ECQkweDAwMjAKKyNkZWZpbmUgTFRRX0NHVV9DVDFTUgkJMHgwMDI4CisjZGVmaW5lIExUUV9DR1VfQ1QyU1IJCTB4MDAyQworI2RlZmluZSBMVFFfQ0dVX1BDTUNSCQkweDAwMzAKKyNkZWZpbmUgTFRRX0NHVV9QQ0lfQ1IJCTB4MDAzNAorI2RlZmluZSBMVFFfQ0dVX1BEX1BDCQkweDAwMzgKKyNkZWZpbmUgTFRRX0NHVV9GTVIJCTB4MDAzQworCisjZGVmaW5lIENHVV9QTEwwX1BIQVNFX0RJVklERVJfRU5BQkxFCVwKKwkobHRxX2NndV9yMzIoTFRRX0NHVV9QTEwwX0NGRykgJiAoMSA8PCAzMSkpCisjZGVmaW5lIENHVV9QTEwwX0JZUEFTUwkJCVwKKwkobHRxX2NndV9yMzIoTFRRX0NHVV9QTEwwX0NGRykgJiAoMSA8PCAzMCkpCisjZGVmaW5lIENHVV9QTEwwX0NGR19EU01TRUwJCVwKKwkobHRxX2NndV9yMzIoTFRRX0NHVV9QTEwwX0NGRykgJiAoMSA8PCAyOCkpCisjZGVmaW5lIENHVV9QTEwwX0NGR19GUkFDX0VOCQlcCisJKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMF9DRkcpICYgKDEgPDwgMjcpKQorI2RlZmluZSBDR1VfUExMMV9TUkMJCQlcCisJKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMV9DRkcpICYgKDEgPDwgMzEpKQorI2RlZmluZSBDR1VfUExMMl9QSEFTRV9ESVZJREVSX0VOQUJMRQlcCisJKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMl9DRkcpICYgKDEgPDwgMjApKQorI2RlZmluZSBDR1VfU1lTX0ZQSV9TRUwJCQkoMSA8PCA2KQorI2RlZmluZSBDR1VfU1lTX0REUl9TRUwJCQkweDMKKyNkZWZpbmUgQ0dVX1BMTDBfU1JDCQkJKDEgPDwgMjkpCisKKyNkZWZpbmUgQ0dVX1BMTDBfQ0ZHX1BMTEsJR0VUX0JJVFMobHRxX2NndV9yMzIoTFRRX0NHVV9QTEwwX0NGRyksIDI2LCAxNykKKyNkZWZpbmUgQ0dVX1BMTDBfQ0ZHX1BMTE4JR0VUX0JJVFMobHRxX2NndV9yMzIoTFRRX0NHVV9QTEwwX0NGRyksIDEyLCA2KQorI2RlZmluZSBDR1VfUExMMF9DRkdfUExMTQlHRVRfQklUUyhsdHFfY2d1X3IzMihMVFFfQ0dVX1BMTDBfQ0ZHKSwgNSwgMikKKyNkZWZpbmUgQ0dVX1BMTDJfU1JDCQlHRVRfQklUUyhsdHFfY2d1X3IzMihMVFFfQ0dVX1BMTDJfQ0ZHKSwgMTgsIDE3KQorI2RlZmluZSBDR1VfUExMMl9DRkdfSU5QVVRfRElWCUdFVF9CSVRTKGx0cV9jZ3VfcjMyKExUUV9DR1VfUExMMl9DRkcpLCAxNiwgMTMpCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbHRxX2dldF9wbGwwX2ZkaXYodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9pbnB1dF9jbG9jayhpbnQgcGxsKQoreworCXN3aXRjaCAocGxsKSB7CisJY2FzZSAwOgorCQlpZiAobHRxX2NndV9yMzIoTFRRX0NHVV9QTEwwX0NGRykgJiBDR1VfUExMMF9TUkMpCisJCQlyZXR1cm4gQkFTSVNfUkVRVUVOQ1lfVVNCOworCQllbHNlIGlmIChDR1VfUExMMF9QSEFTRV9ESVZJREVSX0VOQUJMRSkKKwkJCXJldHVybiBCQVNJQ19GUkVRVUVOQ1lfMTsKKwkJZWxzZQorCQkJcmV0dXJuIEJBU0lDX0ZSRVFVRU5DWV8yOworCWNhc2UgMToKKwkJaWYgKENHVV9QTEwxX1NSQykKKwkJCXJldHVybiBCQVNJU19SRVFVRU5DWV9VU0I7CisJCWVsc2UgaWYgKENHVV9QTEwwX1BIQVNFX0RJVklERVJfRU5BQkxFKQorCQkJcmV0dXJuIEJBU0lDX0ZSRVFVRU5DWV8xOworCQllbHNlCisJCQlyZXR1cm4gQkFTSUNfRlJFUVVFTkNZXzI7CisJY2FzZSAyOgorCQlzd2l0Y2ggKENHVV9QTEwyX1NSQykgeworCQljYXNlIDA6CisJCQlyZXR1cm4gbHRxX2dldF9wbGwwX2ZkaXYoKTsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIENHVV9QTEwyX1BIQVNFX0RJVklERVJfRU5BQkxFID8KKwkJCQlCQVNJQ19GUkVRVUVOQ1lfMSA6CisJCQkJQkFTSUNfRlJFUVVFTkNZXzI7CisJCWNhc2UgMjoKKwkJCXJldHVybiBCQVNJU19SRVFVRU5DWV9VU0I7CisJCX0KKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhbF9kc20oaW50IHBsbCwgdW5zaWduZWQgaW50IG51bSwgdW5zaWduZWQgaW50IGRlbikKK3sKKwl1NjQgcmVzLCBjbG9jayA9IGdldF9pbnB1dF9jbG9jayhwbGwpOworCisJcmVzID0gbnVtICogY2xvY2s7CisJZG9fZGl2KHJlcywgZGVuKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBtYXNoX2RzbShpbnQgcGxsLCB1bnNpZ25lZCBpbnQgTSwgdW5zaWduZWQgaW50IE4sCisJdW5zaWduZWQgaW50IEspCit7CisJdW5zaWduZWQgaW50IG51bSA9ICgoTiArIDEpIDw8IDEwKSArIEs7CisJdW5zaWduZWQgaW50IGRlbiA9IChNICsgMSkgPDwgMTA7CisKKwlyZXR1cm4gY2FsX2RzbShwbGwsIG51bSwgZGVuKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc3NmZl9kc21fMShpbnQgcGxsLCB1bnNpZ25lZCBpbnQgTSwgdW5zaWduZWQgaW50IE4sCisJdW5zaWduZWQgaW50IEspCit7CisJdW5zaWduZWQgaW50IG51bSA9ICgoTiArIDEpIDw8IDExKSArIEsgKyA1MTI7CisJdW5zaWduZWQgaW50IGRlbiA9IChNICsgMSkgPDwgMTE7CisKKwlyZXR1cm4gY2FsX2RzbShwbGwsIG51bSwgZGVuKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc3NmZl9kc21fMihpbnQgcGxsLCB1bnNpZ25lZCBpbnQgTSwgdW5zaWduZWQgaW50IE4sCisJdW5zaWduZWQgaW50IEspCit7CisJdW5zaWduZWQgaW50IG51bSA9IEsgPj0gNTEyID8KKwkJKChOICsgMSkgPDwgMTIpICsgSyAtIDUxMiA6ICgoTiArIDEpIDw8IDEyKSArIEsgKyAzNTg0OworCXVuc2lnbmVkIGludCBkZW4gPSAoTSArIDEpIDw8IDEyOworCisJcmV0dXJuIGNhbF9kc20ocGxsLCBudW0sIGRlbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGRzbShpbnQgcGxsLCB1bnNpZ25lZCBpbnQgTSwgdW5zaWduZWQgaW50IE4sCisJdW5zaWduZWQgaW50IEssIHVuc2lnbmVkIGludCBkc21zZWwsIHVuc2lnbmVkIGludCBwaGFzZV9kaXZfZW4pCit7CisJaWYgKCFkc21zZWwpCisJCXJldHVybiBtYXNoX2RzbShwbGwsIE0sIE4sIEspOworCWVsc2UgaWYgKCFwaGFzZV9kaXZfZW4pCisJCXJldHVybiBtYXNoX2RzbShwbGwsIE0sIE4sIEspOworCWVsc2UKKwkJcmV0dXJuIHNzZmZfZHNtXzIocGxsLCBNLCBOLCBLKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbHRxX2dldF9wbGwwX2Zvc2Modm9pZCkKK3sKKwlpZiAoQ0dVX1BMTDBfQllQQVNTKQorCQlyZXR1cm4gZ2V0X2lucHV0X2Nsb2NrKDApOworCWVsc2UKKwkJcmV0dXJuICFDR1VfUExMMF9DRkdfRlJBQ19FTgorCQkJPyBkc20oMCwgQ0dVX1BMTDBfQ0ZHX1BMTE0sIENHVV9QTEwwX0NGR19QTExOLCAwLAorCQkJCUNHVV9QTEwwX0NGR19EU01TRUwsCisJCQkJQ0dVX1BMTDBfUEhBU0VfRElWSURFUl9FTkFCTEUpCisJCQk6IGRzbSgwLCBDR1VfUExMMF9DRkdfUExMTSwgQ0dVX1BMTDBfQ0ZHX1BMTE4sCisJCQkJQ0dVX1BMTDBfQ0ZHX1BMTEssIENHVV9QTEwwX0NGR19EU01TRUwsCisJCQkJQ0dVX1BMTDBfUEhBU0VfRElWSURFUl9FTkFCTEUpOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGx0cV9nZXRfcGxsMF9mZGl2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IGRpdiA9IENHVV9QTEwyX0NGR19JTlBVVF9ESVYgKyAxOworCisJcmV0dXJuIChsdHFfZ2V0X3BsbDBfZm9zYygpICsgKGRpdiA+PiAxKSkgLyBkaXY7Cit9CisKK3Vuc2lnbmVkIGludCBsdHFfZ2V0X2lvX3JlZ2lvbl9jbG9jayh2b2lkKQoreworCXVuc2lnbmVkIGludCByZXQgPSBsdHFfZ2V0X3BsbDBfZm9zYygpOworCisJc3dpdGNoIChsdHFfY2d1X3IzMihMVFFfQ0dVX1BMTDJfQ0ZHKSAmIENHVV9TWVNfRERSX1NFTCkgeworCWRlZmF1bHQ6CisJY2FzZSAwOgorCQlyZXR1cm4gKHJldCArIDEpIC8gMjsKKwljYXNlIDE6CisJCXJldHVybiAocmV0ICogMiArIDIpIC8gNTsKKwljYXNlIDI6CisJCXJldHVybiAocmV0ICsgMSkgLyAzOworCWNhc2UgMzoKKwkJcmV0dXJuIChyZXQgKyAyKSAvIDQ7CisJfQorfQorRVhQT1JUX1NZTUJPTChsdHFfZ2V0X2lvX3JlZ2lvbl9jbG9jayk7CisKK3Vuc2lnbmVkIGludCBsdHFfZ2V0X2ZwaV9idXNfY2xvY2soaW50IGZwaSkKK3sKKwl1bnNpZ25lZCBpbnQgcmV0ID0gbHRxX2dldF9pb19yZWdpb25fY2xvY2soKTsKKworCWlmICgoZnBpID09IDIpICYmIChsdHFfY2d1X3IzMihMVFFfQ0dVX1NZUykgJiBDR1VfU1lTX0ZQSV9TRUwpKQorCQlyZXQgPj49IDE7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobHRxX2dldF9mcGlfYnVzX2Nsb2NrKTsKKwordW5zaWduZWQgaW50IGx0cV9nZXRfY3B1X2h6KHZvaWQpCit7CisJc3dpdGNoIChsdHFfY2d1X3IzMihMVFFfQ0dVX1NZUykgJiAweGMpIHsKKwljYXNlIDA6CisJCXJldHVybiBDTE9DS18zMzNNOworCWNhc2UgNDoKKwkJcmV0dXJuIEREUl9IWjsKKwljYXNlIDg6CisJCXJldHVybiBERFJfSFogPDwgMTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRERSX0haID4+IDE7CisJfQorfQorRVhQT1JUX1NZTUJPTChsdHFfZ2V0X2NwdV9oeik7CisKK3Vuc2lnbmVkIGludCBsdHFfZ2V0X2ZwaV9oeih2b2lkKQoreworCXVuc2lnbmVkIGludCBkZHJfY2xvY2sgPSBERFJfSFo7CisKKwlpZiAobHRxX2NndV9yMzIoTFRRX0NHVV9TWVMpICYgMHg0MCkKKwkJcmV0dXJuIGRkcl9jbG9jayA+PiAxOworCXJldHVybiBkZHJfY2xvY2s7Cit9CitFWFBPUlRfU1lNQk9MKGx0cV9nZXRfZnBpX2h6KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9kZXZpY2VzLmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwOWU3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvZGV2aWNlcy5jCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisKKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisjaW5jbHVkZSA8bGFudGlxX2lycS5oPgorI2luY2x1ZGUgPGxhbnRpcV9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKiBncGlvICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGx0cV9ncGlvX3Jlc291cmNlW10gPSB7CisJeworCQkubmFtZQk9ICJncGlvMCIsCisJCS5zdGFydCAgPSBMVFFfR1BJTzBfQkFTRV9BRERSLAorCQkuZW5kICAgID0gTFRRX0dQSU8wX0JBU0VfQUREUiArIExUUV9HUElPX1NJWkUgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkubmFtZQk9ICJncGlvMSIsCisJCS5zdGFydCAgPSBMVFFfR1BJTzFfQkFTRV9BRERSLAorCQkuZW5kICAgID0gTFRRX0dQSU8xX0JBU0VfQUREUiArIExUUV9HUElPX1NJWkUgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkubmFtZQk9ICJncGlvMiIsCisJCS5zdGFydCAgPSBMVFFfR1BJTzJfQkFTRV9BRERSLAorCQkuZW5kICAgID0gTFRRX0dQSU8yX0JBU0VfQUREUiArIExUUV9HUElPX1NJWkUgLSAxLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKwordm9pZCBfX2luaXQgbHRxX3JlZ2lzdGVyX2dwaW8odm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJsdHFfZ3BpbyIsIDAsCisJCSZsdHFfZ3Bpb19yZXNvdXJjZVswXSwgMSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibHRxX2dwaW8iLCAxLAorCQkmbHRxX2dwaW9fcmVzb3VyY2VbMV0sIDEpOworCisJLyogQVI5IGFuZCBWUjkgaGF2ZSBhbiBleHRyYSBncGlvIGJsb2NrICovCisJaWYgKGx0cV9pc19hcjkoKSB8fCBsdHFfaXNfdnI5KCkpIHsKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibHRxX2dwaW8iLCAyLAorCQkJJmx0cV9ncGlvX3Jlc291cmNlWzJdLCAxKTsKKwl9Cit9CisKKy8qIHNlcmlhbCB0byBwYXJhbGxlbCBjb252ZXJzaW9uICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGx0cV9zdHBfcmVzb3VyY2UgPSB7CisJLm5hbWUgICA9ICJzdHAiLAorCS5zdGFydCAgPSBMVFFfU1RQX0JBU0VfQUREUiwKKwkuZW5kICAgID0gTFRRX1NUUF9CQVNFX0FERFIgKyBMVFFfU1RQX1NJWkUgLSAxLAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3ZvaWQgX19pbml0IGx0cV9yZWdpc3Rlcl9ncGlvX3N0cCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImx0cV9zdHAiLCAwLCAmbHRxX3N0cF9yZXNvdXJjZSwgMSk7Cit9CisKKy8qIGFzYyBwb3J0cyAtIGFtYXpvbiBzZSBoYXMgaXRzIG93biBzZXJpYWwgbWFwcGluZyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfYXNlX2FzY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gImFzYzAiLAorCQkuc3RhcnQgID0gTFRRX0FTQzFfQkFTRV9BRERSLAorCQkuZW5kICAgID0gTFRRX0FTQzFfQkFTRV9BRERSICsgTFRRX0FTQ19TSVpFIC0gMSwKKwkJLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJSVJRX1JFUyh0eCwgTFRRX0FTQ19BU0VfVElSKSwKKwlJUlFfUkVTKHJ4LCBMVFFfQVNDX0FTRV9SSVIpLAorCUlSUV9SRVMoZXJyLCBMVFFfQVNDX0FTRV9FSVIpLAorfTsKKwordm9pZCBfX2luaXQgbHRxX3JlZ2lzdGVyX2FzZV9hc2Modm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJsdHFfYXNjIiwgMCwKKwkJbHRxX2FzZV9hc2NfcmVzb3VyY2VzLCBBUlJBWV9TSVpFKGx0cV9hc2VfYXNjX3Jlc291cmNlcykpOworfQorCisvKiBldGhlcm5ldCAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfZXRvcF9yZXNvdXJjZXMgPSB7CisJLm5hbWUJPSAiZXRvcCIsCisJLnN0YXJ0CT0gTFRRX0VUT1BfQkFTRV9BRERSLAorCS5lbmQJPSBMVFFfRVRPUF9CQVNFX0FERFIgKyBMVFFfRVRPUF9TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGx0cV9ldG9wID0geworCS5uYW1lCQk9ICJsdHFfZXRvcCIsCisJLnJlc291cmNlCT0gJmx0cV9ldG9wX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IDEsCit9OworCit2b2lkIF9faW5pdAorbHRxX3JlZ2lzdGVyX2V0b3Aoc3RydWN0IGx0cV9ldGhfZGF0YSAqZXRoKQoreworCWlmIChldGgpIHsKKwkJbHRxX2V0b3AuZGV2LnBsYXRmb3JtX2RhdGEgPSBldGg7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbHRxX2V0b3ApOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9kZXZpY2VzLmggYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvZGV2aWNlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDQ5MzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvZGV2aWNlcy5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2lmbmRlZiBfTFRRX0RFVklDRVNfWFdBWV9IX18KKyNkZWZpbmUgX0xUUV9ERVZJQ0VTX1hXQVlfSF9fCisKKyNpbmNsdWRlICIuLi9kZXZpY2VzLmgiCisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKK2V4dGVybiB2b2lkIGx0cV9yZWdpc3Rlcl9ncGlvKHZvaWQpOworZXh0ZXJuIHZvaWQgbHRxX3JlZ2lzdGVyX2dwaW9fc3RwKHZvaWQpOworZXh0ZXJuIHZvaWQgbHRxX3JlZ2lzdGVyX2FzZV9hc2Modm9pZCk7CitleHRlcm4gdm9pZCBsdHFfcmVnaXN0ZXJfZXRvcChzdHJ1Y3QgbHRxX2V0aF9kYXRhICpldGgpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9kbWEuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mjc4YTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2RtYS5jCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogICBDb3B5cmlnaHQgKEMpIDIwMTEgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisjaW5jbHVkZSA8eHdheV9kbWEuaD4KKworI2RlZmluZSBMVFFfRE1BX0NUUkwJCTB4MTAKKyNkZWZpbmUgTFRRX0RNQV9DUE9MTAkJMHgxNAorI2RlZmluZSBMVFFfRE1BX0NTCQkweDE4CisjZGVmaW5lIExUUV9ETUFfQ0NUUkwJCTB4MUMKKyNkZWZpbmUgTFRRX0RNQV9DREJBCQkweDIwCisjZGVmaW5lIExUUV9ETUFfQ0RMRU4JCTB4MjQKKyNkZWZpbmUgTFRRX0RNQV9DSVMJCTB4MjgKKyNkZWZpbmUgTFRRX0RNQV9DSUUJCTB4MkMKKyNkZWZpbmUgTFRRX0RNQV9QUwkJMHg0MAorI2RlZmluZSBMVFFfRE1BX1BDVFJMCQkweDQ0CisjZGVmaW5lIExUUV9ETUFfSVJORU4JCTB4ZjQKKworI2RlZmluZSBETUFfREVTQ1BUCQlCSVQoMykJCS8qIGRlc2NyaXB0b3IgY29tcGxldGUgaXJxICovCisjZGVmaW5lIERNQV9UWAkJCUJJVCg4KQkJLyogVFggY2hhbm5lbCBkaXJlY3Rpb24gKi8KKyNkZWZpbmUgRE1BX0NIQU5fT04JCUJJVCgwKQkJLyogY2hhbm5lbCBvbiAvIG9mZiBiaXQgKi8KKyNkZWZpbmUgRE1BX1BERU4JCUJJVCg2KQkJLyogZW5hYmxlIHBhY2tldCBkcm9wICovCisjZGVmaW5lIERNQV9DSEFOX1JTVAkJQklUKDEpCQkvKiBjaGFubmVsIG9uIC8gb2ZmIGJpdCAqLworI2RlZmluZSBETUFfUkVTRVQJCUJJVCgwKQkJLyogY2hhbm5lbCBvbiAvIG9mZiBiaXQgKi8KKyNkZWZpbmUgRE1BX0lSUV9BQ0sJCTB4N2UJCS8qIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRE1BX1BPTEwJCUJJVCgzMSkJCS8qIHR1cm4gb24gY2hhbm5lbCBwb2xsaW5nICovCisjZGVmaW5lIERNQV9DTEtfRElWNAkJQklUKDYpCQkvKiBwb2xsaW5nIGNsb2NrIGRpdmlkZXIgKi8KKyNkZWZpbmUgRE1BXzJXX0JVUlNUCQlCSVQoMSkJCS8qIDIgd29yZCBidXJzdCBsZW5ndGggKi8KKyNkZWZpbmUgRE1BX01BWF9DSEFOTkVMCQkyMAkJLyogdGhlIHNvYyBoYXMgMjAgY2hhbm5lbHMgKi8KKyNkZWZpbmUgRE1BX0VUT1BfRU5ESUFORVNTCSgweGYgPDwgOCkgLyogZW5kaWFuZXNzIHN3YXAgZXRvcCBjaGFubmVscyAqLworI2RlZmluZSBETUFfV0VJR0hUCShCSVQoMTcpIHwgQklUKDE2KSkJLyogZGVmYXVsdCBjaGFubmVsIHdoZWlnaHQgKi8KKworI2RlZmluZSBsdHFfZG1hX3IzMih4KQkJCWx0cV9yMzIobHRxX2RtYV9tZW1iYXNlICsgKHgpKQorI2RlZmluZSBsdHFfZG1hX3czMih4LCB5KQkJbHRxX3czMih4LCBsdHFfZG1hX21lbWJhc2UgKyAoeSkpCisjZGVmaW5lIGx0cV9kbWFfdzMyX21hc2soeCwgeSwgeikJbHRxX3czMl9tYXNrKHgsIHksIFwKKwkJCQkJCWx0cV9kbWFfbWVtYmFzZSArICh6KSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfZG1hX3Jlc291cmNlID0geworCS5uYW1lCT0gImRtYSIsCisJLnN0YXJ0CT0gTFRRX0RNQV9CQVNFX0FERFIsCisJLmVuZAk9IExUUV9ETUFfQkFTRV9BRERSICsgTFRRX0RNQV9TSVpFIC0gMSwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgdm9pZCBfX2lvbWVtICpsdHFfZG1hX21lbWJhc2U7CisKK3ZvaWQKK2x0cV9kbWFfZW5hYmxlX2lycShzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWx0cV9kbWFfdzMyKGNoLT5uciwgTFRRX0RNQV9DUyk7CisJbHRxX2RtYV93MzJfbWFzaygwLCAxIDw8IGNoLT5uciwgTFRRX0RNQV9JUk5FTik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobHRxX2RtYV9lbmFibGVfaXJxKTsKKwordm9pZAorbHRxX2RtYV9kaXNhYmxlX2lycShzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWx0cV9kbWFfdzMyKGNoLT5uciwgTFRRX0RNQV9DUyk7CisJbHRxX2RtYV93MzJfbWFzaygxIDw8IGNoLT5uciwgMCwgTFRRX0RNQV9JUk5FTik7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobHRxX2RtYV9kaXNhYmxlX2lycSk7CisKK3ZvaWQKK2x0cV9kbWFfYWNrX2lycShzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWx0cV9kbWFfdzMyKGNoLT5uciwgTFRRX0RNQV9DUyk7CisJbHRxX2RtYV93MzIoRE1BX0lSUV9BQ0ssIExUUV9ETUFfQ0lTKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsdHFfZG1hX2Fja19pcnEpOworCit2b2lkCitsdHFfZG1hX29wZW4oc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZyk7CisJbHRxX2RtYV93MzIoY2gtPm5yLCBMVFFfRE1BX0NTKTsKKwlsdHFfZG1hX3czMl9tYXNrKDAsIERNQV9DSEFOX09OLCBMVFFfRE1BX0NDVFJMKTsKKwlsdHFfZG1hX2VuYWJsZV9pcnEoY2gpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWcpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobHRxX2RtYV9vcGVuKTsKKwordm9pZAorbHRxX2RtYV9jbG9zZShzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFnKTsKKwlsdHFfZG1hX3czMihjaC0+bnIsIExUUV9ETUFfQ1MpOworCWx0cV9kbWFfdzMyX21hc2soRE1BX0NIQU5fT04sIDAsIExUUV9ETUFfQ0NUUkwpOworCWx0cV9kbWFfZGlzYWJsZV9pcnEoY2gpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWcpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobHRxX2RtYV9jbG9zZSk7CisKK3N0YXRpYyB2b2lkCitsdHFfZG1hX2FsbG9jKHN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgKmNoKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljaC0+ZGVzYyA9IDA7CisJY2gtPmRlc2NfYmFzZSA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLAorCQkJCUxUUV9ERVNDX05VTSAqIExUUV9ERVNDX1NJWkUsCisJCQkJJmNoLT5waHlzLCBHRlBfQVRPTUlDKTsKKwltZW1zZXQoY2gtPmRlc2NfYmFzZSwgMCwgTFRRX0RFU0NfTlVNICogTFRRX0RFU0NfU0laRSk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbHRxX2RtYV93MzIoY2gtPm5yLCBMVFFfRE1BX0NTKTsKKwlsdHFfZG1hX3czMihjaC0+cGh5cywgTFRRX0RNQV9DREJBKTsKKwlsdHFfZG1hX3czMihMVFFfREVTQ19OVU0sIExUUV9ETUFfQ0RMRU4pOworCWx0cV9kbWFfdzMyX21hc2soRE1BX0NIQU5fT04sIDAsIExUUV9ETUFfQ0NUUkwpOworCXdtYigpOworCWx0cV9kbWFfdzMyX21hc2soMCwgRE1BX0NIQU5fUlNULCBMVFFfRE1BX0NDVFJMKTsKKwl3aGlsZSAobHRxX2RtYV9yMzIoTFRRX0RNQV9DQ1RSTCkgJiBETUFfQ0hBTl9SU1QpCisJCTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQKK2x0cV9kbWFfYWxsb2NfdHgoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWx0cV9kbWFfYWxsb2MoY2gpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWx0cV9kbWFfdzMyKERNQV9ERVNDUFQsIExUUV9ETUFfQ0lFKTsKKwlsdHFfZG1hX3czMl9tYXNrKDAsIDEgPDwgY2gtPm5yLCBMVFFfRE1BX0lSTkVOKTsKKwlsdHFfZG1hX3czMihETUFfV0VJR0hUIHwgRE1BX1RYLCBMVFFfRE1BX0NDVFJMKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChsdHFfZG1hX2FsbG9jX3R4KTsKKwordm9pZAorbHRxX2RtYV9hbGxvY19yeChzdHJ1Y3QgbHRxX2RtYV9jaGFubmVsICpjaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbHRxX2RtYV9hbGxvYyhjaCk7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJbHRxX2RtYV93MzIoRE1BX0RFU0NQVCwgTFRRX0RNQV9DSUUpOworCWx0cV9kbWFfdzMyX21hc2soMCwgMSA8PCBjaC0+bnIsIExUUV9ETUFfSVJORU4pOworCWx0cV9kbWFfdzMyKERNQV9XRUlHSFQsIExUUV9ETUFfQ0NUUkwpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGx0cV9kbWFfYWxsb2NfcngpOworCit2b2lkCitsdHFfZG1hX2ZyZWUoc3RydWN0IGx0cV9kbWFfY2hhbm5lbCAqY2gpCit7CisJaWYgKCFjaC0+ZGVzY19iYXNlKQorCQlyZXR1cm47CisJbHRxX2RtYV9jbG9zZShjaCk7CisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgTFRRX0RFU0NfTlVNICogTFRRX0RFU0NfU0laRSwKKwkJY2gtPmRlc2NfYmFzZSwgY2gtPnBoeXMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwobHRxX2RtYV9mcmVlKTsKKwordm9pZAorbHRxX2RtYV9pbml0X3BvcnQoaW50IHApCit7CisJbHRxX2RtYV93MzIocCwgTFRRX0RNQV9QUyk7CisJc3dpdGNoIChwKSB7CisJY2FzZSBETUFfUE9SVF9FVE9QOgorCQkvKgorCQkgKiBUZWxsIHRoZSBETUEgZW5naW5lIHRvIHN3YXAgdGhlIGVuZGlhbmVzcyBvZiBkYXRhIGZyYW1lcyBhbmQKKwkJICogZHJvcCBwYWNrZXRzIGlmIHRoZSBjaGFubmVsIGFyYml0cmF0aW9uIGZhaWxzLgorCQkgKi8KKwkJbHRxX2RtYV93MzJfbWFzaygwLCBETUFfRVRPUF9FTkRJQU5FU1MgfCBETUFfUERFTiwKKwkJCUxUUV9ETUFfUENUUkwpOworCQlicmVhazsKKworCWNhc2UgRE1BX1BPUlRfREVVOgorCQlsdHFfZG1hX3czMigoRE1BXzJXX0JVUlNUIDw8IDQpIHwgKERNQV8yV19CVVJTVCA8PCAyKSwKKwkJCUxUUV9ETUFfUENUUkwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKGx0cV9kbWFfaW5pdF9wb3J0KTsKKworaW50IF9faW5pdAorbHRxX2RtYV9pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBpbnNlcnQgYW5kIHJlcXVlc3QgdGhlIG1lbW9yeSByZWdpb24gKi8KKwlpZiAoaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmx0cV9kbWFfcmVzb3VyY2UpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byBpbnNlcnQgZG1hIG1lbW9yeVxuIik7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGx0cV9kbWFfcmVzb3VyY2Uuc3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKCZsdHFfZG1hX3Jlc291cmNlKSwgImRtYSIpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byByZXF1ZXN0IGRtYSBtZW1vcnlcbiIpOworCisJLyogcmVtYXAgZG1hIHJlZ2lzdGVyIHJhbmdlICovCisJbHRxX2RtYV9tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGx0cV9kbWFfcmVzb3VyY2Uuc3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX2RtYV9yZXNvdXJjZSkpOworCWlmICghbHRxX2RtYV9tZW1iYXNlKQorCQlwYW5pYygiRmFpbGVkIHRvIHJlbWFwIGRtYSBtZW1vcnlcbiIpOworCisJLyogcG93ZXIgdXAgYW5kIHJlc2V0IHRoZSBkbWEgZW5naW5lICovCisJbHRxX3BtdV9lbmFibGUoUE1VX0RNQSk7CisJbHRxX2RtYV93MzJfbWFzaygwLCBETUFfUkVTRVQsIExUUV9ETUFfQ1RSTCk7CisKKwkvKiBkaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCisJbHRxX2RtYV93MzIoMCwgTFRRX0RNQV9JUk5FTik7CisKKwkvKiByZXNldC9jb25maWd1cmUgZWFjaCBjaGFubmVsICovCisJZm9yIChpID0gMDsgaSA8IERNQV9NQVhfQ0hBTk5FTDsgaSsrKSB7CisJCWx0cV9kbWFfdzMyKGksIExUUV9ETUFfQ1MpOworCQlsdHFfZG1hX3czMihETUFfQ0hBTl9SU1QsIExUUV9ETUFfQ0NUUkwpOworCQlsdHFfZG1hX3czMihETUFfUE9MTCB8IERNQV9DTEtfRElWNCwgTFRRX0RNQV9DUE9MTCk7CisJCWx0cV9kbWFfdzMyX21hc2soRE1BX0NIQU5fT04sIDAsIExUUV9ETUFfQ0NUUkwpOworCX0KKwlyZXR1cm4gMDsKK30KKworcG9zdGNvcmVfaW5pdGNhbGwobHRxX2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9lYnUuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9lYnUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmViNTJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2VidS5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBFQlUgLSB0aGUgZXh0ZXJuYWwgYnVzIHVuaXQgYXR0YWNoZXMgUENJLCBOT1IgYW5kIE5BTkQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKy8qIGFsbCBhY2Nlc3MgdG8gdGhlIGVidSBtdXN0IGJlIGxvY2tlZCAqLworREVGSU5FX1NQSU5MT0NLKGVidV9sb2NrKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVidV9sb2NrKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfZWJ1X3Jlc291cmNlID0geworCS5uYW1lCT0gImVidSIsCisJLnN0YXJ0CT0gTFRRX0VCVV9CQVNFX0FERFIsCisJLmVuZAk9IExUUV9FQlVfQkFTRV9BRERSICsgTFRRX0VCVV9TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKKy8qIHJlbWFwcGVkIGJhc2UgYWRkciBvZiB0aGUgY2xvY2sgdW5pdCBhbmQgZXh0ZXJuYWwgYnVzIHVuaXQgKi8KK3ZvaWQgX19pb21lbSAqbHRxX2VidV9tZW1iYXNlOworCitzdGF0aWMgaW50IF9faW5pdCBsYW50aXFfZWJ1X2luaXQodm9pZCkKK3sKKwkvKiBpbnNlcnQgYW5kIHJlcXVlc3QgdGhlIG1lbW9yeSByZWdpb24gKi8KKwlpZiAoaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmx0cV9lYnVfcmVzb3VyY2UpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byBpbnNlcnQgZWJ1IG1lbW9yeVxuIik7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGx0cV9lYnVfcmVzb3VyY2Uuc3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKCZsdHFfZWJ1X3Jlc291cmNlKSwgImVidSIpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byByZXF1ZXN0IGVidSBtZW1vcnlcbiIpOworCisJLyogcmVtYXAgZWJ1IHJlZ2lzdGVyIHJhbmdlICovCisJbHRxX2VidV9tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGx0cV9lYnVfcmVzb3VyY2Uuc3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX2VidV9yZXNvdXJjZSkpOworCWlmICghbHRxX2VidV9tZW1iYXNlKQorCQlwYW5pYygiRmFpbGVkIHRvIHJlbWFwIGVidSBtZW1vcnlcbiIpOworCisJLyogbWFrZSBzdXJlIHRvIHVucHJvdGVjdCB0aGUgbWVtb3J5IHJlZ2lvbiB3aGVyZSBmbGFzaCBpcyBsb2NhdGVkICovCisJbHRxX2VidV93MzIobHRxX2VidV9yMzIoTFRRX0VCVV9CVVNDT04wKSAmIH5FQlVfV1JESVMsIExUUV9FQlVfQlVTQ09OMCk7CisJcmV0dXJuIDA7Cit9CisKK3Bvc3Rjb3JlX2luaXRjYWxsKGxhbnRpcV9lYnVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvZ3Bpby5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2dwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzIxNDUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2dwaW8uYwpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisjZGVmaW5lIExUUV9HUElPX09VVAkJMHgwMAorI2RlZmluZSBMVFFfR1BJT19JTgkJMHgwNAorI2RlZmluZSBMVFFfR1BJT19ESVIJCTB4MDgKKyNkZWZpbmUgTFRRX0dQSU9fQUxUU0VMMAkweDBDCisjZGVmaW5lIExUUV9HUElPX0FMVFNFTDEJMHgxMAorI2RlZmluZSBMVFFfR1BJT19PRAkJMHgxNAorCisjZGVmaW5lIFBJTlNfUEVSX1BPUlQJCTE2CisjZGVmaW5lIE1BWF9QT1JUUwkJMworCisjZGVmaW5lIGx0cV9ncGlvX2dldGJpdChtLCByLCBwKQkoISEobHRxX3IzMihtICsgcikgJiAoMSA8PCBwKSkpCisjZGVmaW5lIGx0cV9ncGlvX3NldGJpdChtLCByLCBwKQlsdHFfdzMyX21hc2soMCwgKDEgPDwgcCksIG0gKyByKQorI2RlZmluZSBsdHFfZ3Bpb19jbGVhcmJpdChtLCByLCBwKQlsdHFfdzMyX21hc2soKDEgPDwgcCksIDAsIG0gKyByKQorCitzdHJ1Y3QgbHRxX2dwaW8geworCXZvaWQgX19pb21lbSAqbWVtYmFzZTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGNoaXA7Cit9OworCitzdGF0aWMgc3RydWN0IGx0cV9ncGlvIGx0cV9ncGlvX3BvcnRbTUFYX1BPUlRTXTsKKworaW50IGdwaW9fdG9faXJxKHVuc2lnbmVkIGludCBncGlvKQoreworCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChncGlvX3RvX2lycSk7CisKK2ludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0woaXJxX3RvX2dwaW8pOworCitpbnQgbHRxX2dwaW9fcmVxdWVzdCh1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgYWx0MCwKKwl1bnNpZ25lZCBpbnQgYWx0MSwgdW5zaWduZWQgaW50IGRpciwgY29uc3QgY2hhciAqbmFtZSkKK3sKKwlpbnQgaWQgPSAwOworCisJaWYgKHBpbiA+PSAoTUFYX1BPUlRTICogUElOU19QRVJfUE9SVCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChncGlvX3JlcXVlc3QocGluLCBuYW1lKSkgeworCQlwcl9lcnIoImZhaWxlZCB0byBzZXR1cCBsYW50aXEgZ3BpbzogJXNcbiIsIG5hbWUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlpZiAoZGlyKQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQocGluLCAxKTsKKwllbHNlCisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KHBpbik7CisJd2hpbGUgKHBpbiA+PSBQSU5TX1BFUl9QT1JUKSB7CisJCXBpbiAtPSBQSU5TX1BFUl9QT1JUOworCQlpZCsrOworCX0KKwlpZiAoYWx0MCkKKwkJbHRxX2dwaW9fc2V0Yml0KGx0cV9ncGlvX3BvcnRbaWRdLm1lbWJhc2UsCisJCQlMVFFfR1BJT19BTFRTRUwwLCBwaW4pOworCWVsc2UKKwkJbHRxX2dwaW9fY2xlYXJiaXQobHRxX2dwaW9fcG9ydFtpZF0ubWVtYmFzZSwKKwkJCUxUUV9HUElPX0FMVFNFTDAsIHBpbik7CisJaWYgKGFsdDEpCisJCWx0cV9ncGlvX3NldGJpdChsdHFfZ3Bpb19wb3J0W2lkXS5tZW1iYXNlLAorCQkJTFRRX0dQSU9fQUxUU0VMMSwgcGluKTsKKwllbHNlCisJCWx0cV9ncGlvX2NsZWFyYml0KGx0cV9ncGlvX3BvcnRbaWRdLm1lbWJhc2UsCisJCQlMVFFfR1BJT19BTFRTRUwxLCBwaW4pOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChsdHFfZ3Bpb19yZXF1ZXN0KTsKKworc3RhdGljIHZvaWQgbHRxX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIGludCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbHRxX2dwaW8gKmx0cV9ncGlvID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBsdHFfZ3BpbywgY2hpcCk7CisKKwlpZiAodmFsdWUpCisJCWx0cV9ncGlvX3NldGJpdChsdHFfZ3Bpby0+bWVtYmFzZSwgTFRRX0dQSU9fT1VULCBvZmZzZXQpOworCWVsc2UKKwkJbHRxX2dwaW9fY2xlYXJiaXQobHRxX2dwaW8tPm1lbWJhc2UsIExUUV9HUElPX09VVCwgb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBsdHFfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3QgbHRxX2dwaW8gKmx0cV9ncGlvID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBsdHFfZ3BpbywgY2hpcCk7CisKKwlyZXR1cm4gbHRxX2dwaW9fZ2V0Yml0KGx0cV9ncGlvLT5tZW1iYXNlLCBMVFFfR1BJT19JTiwgb2Zmc2V0KTsKK30KKworc3RhdGljIGludCBsdHFfZ3Bpb19kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3QgbHRxX2dwaW8gKmx0cV9ncGlvID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBsdHFfZ3BpbywgY2hpcCk7CisKKwlsdHFfZ3Bpb19jbGVhcmJpdChsdHFfZ3Bpby0+bWVtYmFzZSwgTFRRX0dQSU9fT0QsIG9mZnNldCk7CisJbHRxX2dwaW9fY2xlYXJiaXQobHRxX2dwaW8tPm1lbWJhc2UsIExUUV9HUElPX0RJUiwgb2Zmc2V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGx0cV9ncGlvX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IGx0cV9ncGlvICpsdHFfZ3BpbyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbHRxX2dwaW8sIGNoaXApOworCisJbHRxX2dwaW9fc2V0Yml0KGx0cV9ncGlvLT5tZW1iYXNlLCBMVFFfR1BJT19PRCwgb2Zmc2V0KTsKKwlsdHFfZ3Bpb19zZXRiaXQobHRxX2dwaW8tPm1lbWJhc2UsIExUUV9HUElPX0RJUiwgb2Zmc2V0KTsKKwlsdHFfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsdHFfZ3Bpb19yZXEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCBsdHFfZ3BpbyAqbHRxX2dwaW8gPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGx0cV9ncGlvLCBjaGlwKTsKKworCWx0cV9ncGlvX2NsZWFyYml0KGx0cV9ncGlvLT5tZW1iYXNlLCBMVFFfR1BJT19BTFRTRUwwLCBvZmZzZXQpOworCWx0cV9ncGlvX2NsZWFyYml0KGx0cV9ncGlvLT5tZW1iYXNlLCBMVFFfR1BJT19BTFRTRUwxLCBvZmZzZXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGx0cV9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwlpZiAocGRldi0+aWQgPj0gTUFYX1BPUlRTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgZ3BpbyBwb3J0ICVkXG4iLAorCQkJcGRldi0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSBmb3IgZ3BpbyBwb3J0ICVkXG4iLAorCQkJcGRldi0+aWQpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJcmVzb3VyY2Vfc2l6ZShyZXMpLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJImZhaWxlZCB0byByZXF1ZXN0IG1lbW9yeSBmb3IgZ3BpbyBwb3J0ICVkXG4iLAorCQkJcGRldi0+aWQpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlsdHFfZ3Bpb19wb3J0W3BkZXYtPmlkXS5tZW1iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwKKwkJcmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWx0cV9ncGlvX3BvcnRbcGRldi0+aWRdLm1lbWJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIG1lbW9yeSBmb3IgZ3BpbyBwb3J0ICVkXG4iLAorCQkJcGRldi0+aWQpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0uY2hpcC5sYWJlbCA9ICJsdHFfZ3BpbyI7CisJbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0uY2hpcC5kaXJlY3Rpb25faW5wdXQgPSBsdHFfZ3Bpb19kaXJlY3Rpb25faW5wdXQ7CisJbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0uY2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0KKwkJbHRxX2dwaW9fZGlyZWN0aW9uX291dHB1dDsKKwlsdHFfZ3Bpb19wb3J0W3BkZXYtPmlkXS5jaGlwLmdldCA9IGx0cV9ncGlvX2dldDsKKwlsdHFfZ3Bpb19wb3J0W3BkZXYtPmlkXS5jaGlwLnNldCA9IGx0cV9ncGlvX3NldDsKKwlsdHFfZ3Bpb19wb3J0W3BkZXYtPmlkXS5jaGlwLnJlcXVlc3QgPSBsdHFfZ3Bpb19yZXE7CisJbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0uY2hpcC5iYXNlID0gUElOU19QRVJfUE9SVCAqIHBkZXYtPmlkOworCWx0cV9ncGlvX3BvcnRbcGRldi0+aWRdLmNoaXAubmdwaW8gPSBQSU5TX1BFUl9QT1JUOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsICZsdHFfZ3Bpb19wb3J0W3BkZXYtPmlkXSk7CisJcmV0dXJuIGdwaW9jaGlwX2FkZCgmbHRxX2dwaW9fcG9ydFtwZGV2LT5pZF0uY2hpcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyCitsdHFfZ3Bpb19kcml2ZXIgPSB7CisJLnByb2JlID0gbHRxX2dwaW9fcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibHRxX2dwaW8iLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworaW50IF9faW5pdCBsdHFfZ3Bpb19pbml0KHZvaWQpCit7CisJaW50IHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbHRxX2dwaW9fZHJpdmVyKTsKKworCWlmIChyZXQpCisJCXByX2luZm8oImx0cV9ncGlvIDogRXJyb3IgcmVnaXN0ZXJpbmcgcGxhdGZvbSBkcml2ZXIhIik7CisJcmV0dXJuIHJldDsKK30KKworcG9zdGNvcmVfaW5pdGNhbGwobHRxX2dwaW9faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvZ3Bpb19lYnUuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9ncGlvX2VidS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NzkzNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvZ3Bpb19lYnUuYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworLyoKKyAqIEJ5IGF0dGFjaGluZyBoYXJkd2FyZSBsYXRjaGVzIHRvIHRoZSBFQlUgaXQgaXMgcG9zc2libGUgdG8gY3JlYXRlIG91dHB1dAorICogb25seSBncGlvcy4gVGhpcyBkcml2ZXIgY29uZmlndXJlcyBhIHNwZWNpYWwgbWVtb3J5IGFkZHJlc3MsIHdoaWNoIHdoZW4KKyAqIHdyaXR0ZW4gdG8gb3V0cHV0cyAxNiBiaXQgdG8gdGhlIGxhdGNoZXMuCisgKi8KKworI2RlZmluZSBMVFFfRUJVX0JVU0NPTgkweDFlN2ZmCQkvKiAxNiBiaXQgYWNjZXNzLCBzbG93ZXN0IHRpbWluZyAqLworI2RlZmluZSBMVFFfRUJVX1dQCTB4ODAwMDAwMDAJLyogd3JpdGUgcHJvdGVjdCBiaXQgKi8KKworLyogd2Uga2VlcCBhIHNoYWRvdyB2YWx1ZSBvZiB0aGUgbGFzdCB2YWx1ZSB3cml0dGVuIHRvIHRoZSBlYnUgKi8KK3N0YXRpYyBpbnQgbHRxX2VidV9ncGlvX3NoYWRvdyA9IDB4MDsKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmx0cV9lYnVfZ3Bpb19tZW1iYXNlOworCitzdGF0aWMgdm9pZCBsdHFfZWJ1X2FwcGx5KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlYnVfbG9jaywgZmxhZ3MpOworCWx0cV9lYnVfdzMyKExUUV9FQlVfQlVTQ09OLCBMVFFfRUJVX0JVU0NPTjEpOworCSooKF9fdTE2ICopbHRxX2VidV9ncGlvX21lbWJhc2UpID0gbHRxX2VidV9ncGlvX3NoYWRvdzsKKwlsdHFfZWJ1X3czMihMVFFfRUJVX0JVU0NPTiB8IExUUV9FQlVfV1AsIExUUV9FQlVfQlVTQ09OMSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWJ1X2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgbHRxX2VidV9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJaWYgKHZhbHVlKQorCQlsdHFfZWJ1X2dwaW9fc2hhZG93IHw9ICgxIDw8IG9mZnNldCk7CisJZWxzZQorCQlsdHFfZWJ1X2dwaW9fc2hhZG93ICY9IH4oMSA8PCBvZmZzZXQpOworCWx0cV9lYnVfYXBwbHkoKTsKK30KKworc3RhdGljIGludCBsdHFfZWJ1X2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LAorCWludCB2YWx1ZSkKK3sKKwlsdHFfZWJ1X3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBsdHFfZWJ1X2NoaXAgPSB7CisJLmxhYmVsID0gImx0cV9lYnUiLAorCS5kaXJlY3Rpb25fb3V0cHV0ID0gbHRxX2VidV9kaXJlY3Rpb25fb3V0cHV0LAorCS5zZXQgPSBsdHFfZWJ1X3NldCwKKwkuYmFzZSA9IDcyLAorCS5uZ3BpbyA9IDE2LAorCS5jYW5fc2xlZXAgPSAxLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBsdHFfZWJ1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwlyZXMgPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQlyZXNvdXJjZV9zaXplKHJlcyksIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWx0cV9lYnVfZ3Bpb19tZW1iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWx0cV9lYnVfZ3Bpb19tZW1iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBpb3JlbWFwIG1lbSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBncmFiIHRoZSBkZWZhdWx0IHNoYWRvdyB2YWx1ZSBwYXNzZWQgZm9ybSB0aGUgcGxhdGZvcm0gY29kZSAqLworCWx0cV9lYnVfZ3Bpb19zaGFkb3cgPSAodW5zaWduZWQgaW50KSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCS8qIHRlbGwgdGhlIGVidSBjb250cm9sbGVyIHdoaWNoIG1lbW9yeSBhZGRyZXNzIHdlIHdpbGwgYmUgdXNpbmcgKi8KKwlsdHFfZWJ1X3czMihwZGV2LT5yZXNvdXJjZS0+c3RhcnQgfCAweDEsIExUUV9FQlVfQUREUlNFTDEpOworCisJLyogd3JpdGUgcHJvdGVjdCB0aGUgcmVnaW9uICovCisJbHRxX2VidV93MzIoTFRRX0VCVV9CVVNDT04gfCBMVFFfRUJVX1dQLCBMVFFfRUJVX0JVU0NPTjEpOworCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZsdHFfZWJ1X2NoaXApOworCWlmICghcmV0KQorCQlsdHFfZWJ1X2FwcGx5KCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbHRxX2VidV9kcml2ZXIgPSB7CisJLnByb2JlID0gbHRxX2VidV9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJsdHFfZWJ1IiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGx0cV9lYnVfaW5pdCh2b2lkKQoreworCWludCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmx0cV9lYnVfZHJpdmVyKTsKKworCWlmIChyZXQpCisJCXByX2luZm8oImx0cV9lYnUgOiBFcnJvciByZWdpc3RlcmluZyBwbGF0Zm9tIGRyaXZlciEiKTsKKwlyZXR1cm4gcmV0OworfQorCitwb3N0Y29yZV9pbml0Y2FsbChsdHFfZWJ1X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L2dwaW9fc3RwLmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvZ3Bpb19zdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2Q1OWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L2dwaW9fc3RwLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDcgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworI2RlZmluZSBMVFFfU1RQX0NPTjAJCTB4MDAKKyNkZWZpbmUgTFRRX1NUUF9DT04xCQkweDA0CisjZGVmaW5lIExUUV9TVFBfQ1BVMAkJMHgwOAorI2RlZmluZSBMVFFfU1RQX0NQVTEJCTB4MEMKKyNkZWZpbmUgTFRRX1NUUF9BUgkJMHgxMAorCisjZGVmaW5lIExUUV9TVFBfQ09OX1NXVQkJKDEgPDwgMzEpCisjZGVmaW5lIExUUV9TVFBfMkhaCQkwCisjZGVmaW5lIExUUV9TVFBfNEhaCQkoMSA8PCAyMykKKyNkZWZpbmUgTFRRX1NUUF84SFoJCSgyIDw8IDIzKQorI2RlZmluZSBMVFFfU1RQXzEwSFoJCSgzIDw8IDIzKQorI2RlZmluZSBMVFFfU1RQX1NQRUVEX01BU0sJKDB4ZiA8PCAyMykKKyNkZWZpbmUgTFRRX1NUUF9VUERfRlBJCQkoMSA8PCAzMSkKKyNkZWZpbmUgTFRRX1NUUF9VUERfTUFTSwkoMyA8PCAzMCkKKyNkZWZpbmUgTFRRX1NUUF9BRFNMX1NSQwkoMyA8PCAyNCkKKworI2RlZmluZSBMVFFfU1RQX0dST1VQMAkJKDEgPDwgMCkKKworI2RlZmluZSBMVFFfU1RQX1JJU0lORwkJMAorI2RlZmluZSBMVFFfU1RQX0ZBTExJTkcJCSgxIDw8IDI2KQorI2RlZmluZSBMVFFfU1RQX0VER0VfTUFTSwkoMSA8PCAyNikKKworI2RlZmluZSBsdHFfc3RwX3IzMihyZWcpCV9fcmF3X3JlYWRsKGx0cV9zdHBfbWVtYmFzZSArIHJlZykKKyNkZWZpbmUgbHRxX3N0cF93MzIodmFsLCByZWcpCV9fcmF3X3dyaXRlbCh2YWwsIGx0cV9zdHBfbWVtYmFzZSArIHJlZykKKyNkZWZpbmUgbHRxX3N0cF93MzJfbWFzayhjbGVhciwgc2V0LCByZWcpIFwKKwkJbHRxX3czMigobHRxX3IzMihsdHFfc3RwX21lbWJhc2UgKyByZWcpICYgfihjbGVhcikpIHwgKHNldCksIFwKKwkJbHRxX3N0cF9tZW1iYXNlICsgKHJlZykpCisKK3N0YXRpYyBpbnQgbHRxX3N0cF9zaGFkb3cgPSAweGZmZmY7CitzdGF0aWMgdm9pZCBfX2lvbWVtICpsdHFfc3RwX21lbWJhc2U7CisKK3N0YXRpYyB2b2lkIGx0cV9zdHBfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCWlmICh2YWx1ZSkKKwkJbHRxX3N0cF9zaGFkb3cgfD0gKDEgPDwgb2Zmc2V0KTsKKwllbHNlCisJCWx0cV9zdHBfc2hhZG93ICY9IH4oMSA8PCBvZmZzZXQpOworCWx0cV9zdHBfdzMyKGx0cV9zdHBfc2hhZG93LCBMVFFfU1RQX0NQVTApOworfQorCitzdGF0aWMgaW50IGx0cV9zdHBfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJaW50IHZhbHVlKQoreworCWx0cV9zdHBfc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIGx0cV9zdHBfY2hpcCA9IHsKKwkubGFiZWwgPSAibHRxX3N0cCIsCisJLmRpcmVjdGlvbl9vdXRwdXQgPSBsdHFfc3RwX2RpcmVjdGlvbl9vdXRwdXQsCisJLnNldCA9IGx0cV9zdHBfc2V0LAorCS5iYXNlID0gNDgsCisJLm5ncGlvID0gMjQsCisJLmNhbl9zbGVlcCA9IDEsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IGx0cV9zdHBfaHdfaW5pdCh2b2lkKQoreworCS8qIHRoZSAzIHBpbnMgdXNlZCB0byBjb250cm9sIHRoZSBleHRlcm5hbCBzdHAgKi8KKwlsdHFfZ3Bpb19yZXF1ZXN0KDQsIDEsIDAsIDEsICJzdHAtc3QiKTsKKwlsdHFfZ3Bpb19yZXF1ZXN0KDUsIDEsIDAsIDEsICJzdHAtZCIpOworCWx0cV9ncGlvX3JlcXVlc3QoNiwgMSwgMCwgMSwgInN0cC1zaCIpOworCisJLyogc2FuZSBkZWZhdWx0cyAqLworCWx0cV9zdHBfdzMyKDAsIExUUV9TVFBfQVIpOworCWx0cV9zdHBfdzMyKDAsIExUUV9TVFBfQ1BVMCk7CisJbHRxX3N0cF93MzIoMCwgTFRRX1NUUF9DUFUxKTsKKwlsdHFfc3RwX3czMihMVFFfU1RQX0NPTl9TV1UsIExUUV9TVFBfQ09OMCk7CisJbHRxX3N0cF93MzIoMCwgTFRRX1NUUF9DT04xKTsKKworCS8qIHJpc2luZyBvciBmYWxsaW5nIGVkZ2UgKi8KKwlsdHFfc3RwX3czMl9tYXNrKExUUV9TVFBfRURHRV9NQVNLLCBMVFFfU1RQX0ZBTExJTkcsIExUUV9TVFBfQ09OMCk7CisKKwkvKiBwZXIgZGVmYXVsdCBzdHAgMTUtMCBhcmUgc2V0ICovCisJbHRxX3N0cF93MzJfbWFzaygwLCBMVFFfU1RQX0dST1VQMCwgTFRRX1NUUF9DT04xKTsKKworCS8qIHN0cCBhcmUgdXBkYXRlIHBlcmlvZGljYWxseSBieSB0aGUgRlBJIGJ1cyAqLworCWx0cV9zdHBfdzMyX21hc2soTFRRX1NUUF9VUERfTUFTSywgTFRRX1NUUF9VUERfRlBJLCBMVFFfU1RQX0NPTjEpOworCisJLyogc2V0IHN0cCB1cGRhdGUgc3BlZWQgKi8KKwlsdHFfc3RwX3czMl9tYXNrKExUUV9TVFBfU1BFRURfTUFTSywgTFRRX1NUUF84SFosIExUUV9TVFBfQ09OMSk7CisKKwkvKiB0ZWxsIHRoZSBoYXJkd2FyZSB0aGF0IHBpbiAobGVkKSAwIGFuZCAxIGFyZSBjb250cm9sbGVkCisJICogIGJ5IHRoZSBkc2wgYXJjCisJICovCisJbHRxX3N0cF93MzJfbWFzaygwLCBMVFFfU1RQX0FEU0xfU1JDLCBMVFFfU1RQX0NPTjApOworCisJbHRxX3BtdV9lbmFibGUoUE1VX0xFRCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGx0cV9zdHBfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9FTlQ7CisJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJcmVzb3VyY2Vfc2l6ZShyZXMpLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgU1RQIG1lbW9yeVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWx0cV9zdHBfbWVtYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCisJCXJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFsdHFfc3RwX21lbWJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlbWFwIFNUUCBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCZsdHFfc3RwX2NoaXApOworCWlmICghcmV0KQorCQlyZXQgPSBsdHFfc3RwX2h3X2luaXQoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGx0cV9zdHBfZHJpdmVyID0geworCS5wcm9iZSA9IGx0cV9zdHBfcHJvYmUsCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibHRxX3N0cCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgX19pbml0IGx0cV9zdHBfaW5pdCh2b2lkKQoreworCWludCByZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmx0cV9zdHBfZHJpdmVyKTsKKworCWlmIChyZXQpCisJCXByX2luZm8oImx0cV9zdHA6IGVycm9yIHJlZ2lzdGVyaW5nIHBsYXRmb20gZHJpdmVyIik7CisJcmV0dXJuIHJldDsKK30KKworcG9zdGNvcmVfaW5pdGNhbGwobHRxX3N0cF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9tYWNoLWVhc3k1MDYwMS5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L21hY2gtZWFzeTUwNjAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhYWY2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9tYWNoLWVhc3k1MDYwMS5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisKKyNpbmNsdWRlIDxsYW50aXEuaD4KKworI2luY2x1ZGUgIi4uL21hY2h0eXBlcy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGVhc3k1MDYwMV9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQk9ICJ1Ym9vdCIsCisJCS5vZmZzZXQJPSAweDAsCisJCS5zaXplCT0gMHgxMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAidWJvb3RfZW52IiwKKwkJLm9mZnNldAk9IDB4MTAwMDAsCisJCS5zaXplCT0gMHgxMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAibGludXgiLAorCQkub2Zmc2V0CT0gMHgyMDAwMCwKKwkJLnNpemUJPSAweEUwMDAwLAorCX0sCisJeworCQkubmFtZQk9ICJyb290ZnMiLAorCQkub2Zmc2V0CT0gMHgxMDAwMDAsCisJCS5zaXplCT0gMHgzMDAwMDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGVhc3k1MDYwMV9mbGFzaF9kYXRhID0geworCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoZWFzeTUwNjAxX3BhcnRpdGlvbnMpLAorCS5wYXJ0cwkJPSBlYXN5NTA2MDFfcGFydGl0aW9ucywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlYXN5NTA2MDFfaW5pdCh2b2lkKQoreworCWx0cV9yZWdpc3Rlcl9ub3IoJmVhc3k1MDYwMV9mbGFzaF9kYXRhKTsKK30KKworTUlQU19NQUNISU5FKExUUV9NQUNIX0VBU1k1MDYwMSwKKwkJCSJFQVNZNTA2MDEiLAorCQkJIkVBU1k1MDYwMSBFdmFsIEJvYXJkIiwKKwkJCWVhc3k1MDYwMV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sYW50aXEveHdheS9tYWNoLWVhc3k1MDcxMi5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L21hY2gtZWFzeTUwNzEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1MDI3YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9tYWNoLWVhc3k1MDcxMi5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisjaW5jbHVkZSA8aXJxLmg+CisKKyNpbmNsdWRlICIuLi9tYWNodHlwZXMuaCIKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBlYXN5NTA3MTJfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJPSAidWJvb3QiLAorCQkub2Zmc2V0CT0gMHgwLAorCQkuc2l6ZQk9IDB4MTAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gInVib290X2VudiIsCisJCS5vZmZzZXQJPSAweDEwMDAwLAorCQkuc2l6ZQk9IDB4MTAwMDAsCisJfSwKKwl7CisJCS5uYW1lCT0gImxpbnV4IiwKKwkJLm9mZnNldAk9IDB4MjAwMDAsCisJCS5zaXplCT0gMHhlMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJPSAicm9vdGZzIiwKKwkJLm9mZnNldAk9IDB4MTAwMDAwLAorCQkuc2l6ZQk9IDB4MzAwMDAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlYXN5NTA3MTJfZmxhc2hfZGF0YSA9IHsKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGVhc3k1MDcxMl9wYXJ0aXRpb25zKSwKKwkucGFydHMJCT0gZWFzeTUwNzEyX3BhcnRpdGlvbnMsCit9OworCitzdGF0aWMgc3RydWN0IGx0cV9wY2lfZGF0YSBsdHFfcGNpX2RhdGEgPSB7CisJLmNsb2NrCT0gUENJX0NMT0NLX0lOVCwKKwkuZ3Bpbwk9IFBDSV9HTlQxIHwgUENJX1JFUTEsCisJLmlycQk9IHsKKwkJWzE0XSA9IElOVF9OVU1fSU0wX0lSTDAgKyAyMiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBsdHFfZXRoX2RhdGEgbHRxX2V0aF9kYXRhID0geworCS5taWlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZWFzeTUwNzEyX2luaXQodm9pZCkKK3sKKwlsdHFfcmVnaXN0ZXJfZ3Bpb19zdHAoKTsKKwlsdHFfcmVnaXN0ZXJfbm9yKCZlYXN5NTA3MTJfZmxhc2hfZGF0YSk7CisJbHRxX3JlZ2lzdGVyX3BjaSgmbHRxX3BjaV9kYXRhKTsKKwlsdHFfcmVnaXN0ZXJfZXRvcCgmbHRxX2V0aF9kYXRhKTsKK30KKworTUlQU19NQUNISU5FKExUUV9NQUNIX0VBU1k1MDcxMiwKKwkgICAgICJFQVNZNTA3MTIiLAorCSAgICAgIkVBU1k1MDcxMiBFdmFsIEJvYXJkIiwKKwkgICAgICBlYXN5NTA3MTJfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvcG11LmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvcG11LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2OWYwMWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvcG11LmMKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisvKiBQTVUgLSB0aGUgcG93ZXIgbWFuYWdlbWVudCB1bml0IGFsbG93cyB1cyB0byB0dXJuIHBhcnQgb2YgdGhlIGNvcmUKKyAqIG9uIGFuZCBvZmYKKyAqLworCisvKiB0aGUgZW5hYmxlIC8gZGlzYWJsZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTFRRX1BNVV9QV0RDUgkweDFDCisjZGVmaW5lIExUUV9QTVVfUFdEU1IJMHgyMAorCisjZGVmaW5lIGx0cV9wbXVfdzMyKHgsIHkpCWx0cV93MzIoKHgpLCBsdHFfcG11X21lbWJhc2UgKyAoeSkpCisjZGVmaW5lIGx0cV9wbXVfcjMyKHgpCQlsdHFfcjMyKGx0cV9wbXVfbWVtYmFzZSArICh4KSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsdHFfcG11X3Jlc291cmNlID0geworCS5uYW1lCT0gInBtdSIsCisJLnN0YXJ0CT0gTFRRX1BNVV9CQVNFX0FERFIsCisJLmVuZAk9IExUUV9QTVVfQkFTRV9BRERSICsgTFRRX1BNVV9TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmx0cV9wbXVfbWVtYmFzZTsKKwordm9pZCBsdHFfcG11X2VuYWJsZSh1bnNpZ25lZCBpbnQgbW9kdWxlKQoreworCWludCBlcnIgPSAxMDAwMDAwOworCisJbHRxX3BtdV93MzIobHRxX3BtdV9yMzIoTFRRX1BNVV9QV0RDUikgJiB+bW9kdWxlLCBMVFFfUE1VX1BXRENSKTsKKwlkbyB7fSB3aGlsZSAoLS1lcnIgJiYgKGx0cV9wbXVfcjMyKExUUV9QTVVfUFdEU1IpICYgbW9kdWxlKSk7CisKKwlpZiAoIWVycikKKwkJcGFuaWMoImFjdGl2YXRpbmcgUE1VIG1vZHVsZSBmYWlsZWQhXG4iKTsKK30KK0VYUE9SVF9TWU1CT0wobHRxX3BtdV9lbmFibGUpOworCit2b2lkIGx0cV9wbXVfZGlzYWJsZSh1bnNpZ25lZCBpbnQgbW9kdWxlKQoreworCWx0cV9wbXVfdzMyKGx0cV9wbXVfcjMyKExUUV9QTVVfUFdEQ1IpIHwgbW9kdWxlLCBMVFFfUE1VX1BXRENSKTsKK30KK0VYUE9SVF9TWU1CT0wobHRxX3BtdV9kaXNhYmxlKTsKKworaW50IF9faW5pdCBsdHFfcG11X2luaXQodm9pZCkKK3sKKwlpZiAoaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmx0cV9wbXVfcmVzb3VyY2UpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byBpbnNlcnQgcG11IG1lbW9yeVxuIik7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGx0cV9wbXVfcmVzb3VyY2Uuc3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKCZsdHFfcG11X3Jlc291cmNlKSwgInBtdSIpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byByZXF1ZXN0IHBtdSBtZW1vcnlcbiIpOworCisJbHRxX3BtdV9tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGx0cV9wbXVfcmVzb3VyY2Uuc3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX3BtdV9yZXNvdXJjZSkpOworCWlmICghbHRxX3BtdV9tZW1iYXNlKQorCQlwYW5pYygiRmFpbGVkIHRvIHJlbWFwIHBtdSBtZW1vcnlcbiIpOworCXJldHVybiAwOworfQorCitjb3JlX2luaXRjYWxsKGx0cV9wbXVfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvcHJvbS1hc2UuYyBiL2FyY2gvbWlwcy9sYW50aXEveHdheS9wcm9tLWFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiZTQ5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvcHJvbS1hc2UuYwpAQCAtMCwwICsxLDM5IEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisjaW5jbHVkZSAiLi4vcHJvbS5oIgorCisjZGVmaW5lIFNPQ19BTUFaT05fU0UJIkFtYXpvbl9TRSIKKworI2RlZmluZSBQQVJUX1NISUZUCTEyCisjZGVmaW5lIFBBUlRfTUFTSwkweDBGRkZGRkZGCisjZGVmaW5lIFJFVl9TSElGVAkyOAorI2RlZmluZSBSRVZfTUFTSwkweEYwMDAwMDAwCisKK3ZvaWQgX19pbml0IGx0cV9zb2NfZGV0ZWN0KHN0cnVjdCBsdHFfc29jX2luZm8gKmkpCit7CisJaS0+cGFydG51bSA9IChsdHFfcjMyKExUUV9NUFNfQ0hJUElEKSAmIFBBUlRfTUFTSykgPj4gUEFSVF9TSElGVDsKKwlpLT5yZXYgPSAobHRxX3IzMihMVFFfTVBTX0NISVBJRCkgJiBSRVZfTUFTSykgPj4gUkVWX1NISUZUOworCXN3aXRjaCAoaS0+cGFydG51bSkgeworCWNhc2UgU09DX0lEX0FNQVpPTl9TRToKKwkJaS0+bmFtZSA9IFNPQ19BTUFaT05fU0U7CisJCWktPnR5cGUgPSBTT0NfVFlQRV9BTUFaT05fU0U7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdW5yZWFjaGFibGUoKTsKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L3Byb20teHdheS5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3Byb20teHdheS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODY2OTJhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3Byb20teHdheS5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKyNpbmNsdWRlICIuLi9wcm9tLmgiCisKKyNkZWZpbmUgU09DX0RBTlVCRQkiRGFudWJlIgorI2RlZmluZSBTT0NfVFdJTlBBU1MJIlR3aW5wYXNzIgorI2RlZmluZSBTT0NfQVI5CQkiQVI5IgorCisjZGVmaW5lIFBBUlRfU0hJRlQJMTIKKyNkZWZpbmUgUEFSVF9NQVNLCTB4MEZGRkZGRkYKKyNkZWZpbmUgUkVWX1NISUZUCTI4CisjZGVmaW5lIFJFVl9NQVNLCTB4RjAwMDAwMDAKKwordm9pZCBfX2luaXQgbHRxX3NvY19kZXRlY3Qoc3RydWN0IGx0cV9zb2NfaW5mbyAqaSkKK3sKKwlpLT5wYXJ0bnVtID0gKGx0cV9yMzIoTFRRX01QU19DSElQSUQpICYgUEFSVF9NQVNLKSA+PiBQQVJUX1NISUZUOworCWktPnJldiA9IChsdHFfcjMyKExUUV9NUFNfQ0hJUElEKSAmIFJFVl9NQVNLKSA+PiBSRVZfU0hJRlQ7CisJc3dpdGNoIChpLT5wYXJ0bnVtKSB7CisJY2FzZSBTT0NfSURfREFOVUJFMToKKwljYXNlIFNPQ19JRF9EQU5VQkUyOgorCQlpLT5uYW1lID0gU09DX0RBTlVCRTsKKwkJaS0+dHlwZSA9IFNPQ19UWVBFX0RBTlVCRTsKKwkJYnJlYWs7CisKKwljYXNlIFNPQ19JRF9UV0lOUEFTUzoKKwkJaS0+bmFtZSA9IFNPQ19UV0lOUEFTUzsKKwkJaS0+dHlwZSA9IFNPQ19UWVBFX0RBTlVCRTsKKwkJYnJlYWs7CisKKwljYXNlIFNPQ19JRF9BUlgxODg6CisJY2FzZSBTT0NfSURfQVJYMTY4OgorCWNhc2UgU09DX0lEX0FSWDE4MjoKKwkJaS0+bmFtZSA9IFNPQ19BUjk7CisJCWktPnR5cGUgPSBTT0NfVFlQRV9BUjk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJdW5yZWFjaGFibGUoKTsKKwkJYnJlYWs7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L3Jlc2V0LmMgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvcmVzZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWJlMzZkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3Jlc2V0LmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxhc20vcmVib290Lmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKyNkZWZpbmUgbHRxX3JjdV93MzIoeCwgeSkJbHRxX3czMigoeCksIGx0cV9yY3VfbWVtYmFzZSArICh5KSkKKyNkZWZpbmUgbHRxX3JjdV9yMzIoeCkJCWx0cV9yMzIobHRxX3JjdV9tZW1iYXNlICsgKHgpKQorCisvKiByZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBMVFFfUkNVX1JTVAkJMHgwMDEwCisjZGVmaW5lIExUUV9SQ1VfUlNUX0FMTAkJMHg0MDAwMDAwMAorCisjZGVmaW5lIExUUV9SQ1VfUlNUX1NUQVQJMHgwMDE0CisjZGVmaW5lIExUUV9SQ1VfU1RBVF9TSElGVAkyNgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGx0cV9yY3VfcmVzb3VyY2UgPSB7CisJLm5hbWUgICA9ICJyY3UiLAorCS5zdGFydCAgPSBMVFFfUkNVX0JBU0VfQUREUiwKKwkuZW5kICAgID0gTFRRX1JDVV9CQVNFX0FERFIgKyBMVFFfUkNVX1NJWkUgLSAxLAorCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKK307CisKKy8qIHJlbWFwcGVkIGJhc2UgYWRkciBvZiB0aGUgcmVzZXQgY29udHJvbCB1bml0ICovCitzdGF0aWMgdm9pZCBfX2lvbWVtICpsdHFfcmN1X21lbWJhc2U7CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBieSB0aGUgd2F0Y2hkb2cgZHJpdmVyICovCitpbnQgbHRxX3Jlc2V0X2NhdXNlKHZvaWQpCit7CisJdTMyIHZhbCA9IGx0cV9yY3VfcjMyKExUUV9SQ1VfUlNUX1NUQVQpOworCXJldHVybiB2YWwgPj4gTFRRX1JDVV9TVEFUX1NISUZUOworfQorRVhQT1JUX1NZTUJPTF9HUEwobHRxX3Jlc2V0X2NhdXNlKTsKKworc3RhdGljIHZvaWQgbHRxX21hY2hpbmVfcmVzdGFydChjaGFyICpjb21tYW5kKQoreworCXByX25vdGljZSgiU3lzdGVtIHJlc3RhcnRcbiIpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbHRxX3JjdV93MzIobHRxX3JjdV9yMzIoTFRRX1JDVV9SU1QpIHwgTFRRX1JDVV9SU1RfQUxMLCBMVFFfUkNVX1JTVCk7CisJdW5yZWFjaGFibGUoKTsKK30KKworc3RhdGljIHZvaWQgbHRxX21hY2hpbmVfaGFsdCh2b2lkKQoreworCXByX25vdGljZSgiU3lzdGVtIGhhbHRlZC5cbiIpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJdW5yZWFjaGFibGUoKTsKK30KKworc3RhdGljIHZvaWQgbHRxX21hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisJcHJfbm90aWNlKCJQbGVhc2UgdHVybiBvZmYgdGhlIHBvd2VyIG5vdy5cbiIpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJdW5yZWFjaGFibGUoKTsKK30KKworc3RhdGljIGludCBfX2luaXQgbWlwc19yZWJvb3Rfc2V0dXAodm9pZCkKK3sKKwkvKiBpbnNlcnQgYW5kIHJlcXVlc3QgdGhlIG1lbW9yeSByZWdpb24gKi8KKwlpZiAoaW5zZXJ0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJmx0cV9yY3VfcmVzb3VyY2UpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byBpbnNlcnQgcmN1IG1lbW9yeVxuIik7CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKGx0cV9yY3VfcmVzb3VyY2Uuc3RhcnQsCisJCQlyZXNvdXJjZV9zaXplKCZsdHFfcmN1X3Jlc291cmNlKSwgInJjdSIpIDwgMCkKKwkJcGFuaWMoIkZhaWxlZCB0byByZXF1ZXN0IHJjdSBtZW1vcnlcbiIpOworCisJLyogcmVtYXAgcmN1IHJlZ2lzdGVyIHJhbmdlICovCisJbHRxX3JjdV9tZW1iYXNlID0gaW9yZW1hcF9ub2NhY2hlKGx0cV9yY3VfcmVzb3VyY2Uuc3RhcnQsCisJCQkJcmVzb3VyY2Vfc2l6ZSgmbHRxX3JjdV9yZXNvdXJjZSkpOworCWlmICghbHRxX3JjdV9tZW1iYXNlKQorCQlwYW5pYygiRmFpbGVkIHRvIHJlbWFwIHJjdSBtZW1vcnlcbiIpOworCisJX21hY2hpbmVfcmVzdGFydCA9IGx0cV9tYWNoaW5lX3Jlc3RhcnQ7CisJX21hY2hpbmVfaGFsdCA9IGx0cV9tYWNoaW5lX2hhbHQ7CisJcG1fcG93ZXJfb2ZmID0gbHRxX21hY2hpbmVfcG93ZXJfb2ZmOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwobWlwc19yZWJvb3Rfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xhbnRpcS94d2F5L3NldHVwLWFzZS5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3NldHVwLWFzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ZjMyNjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbGFudGlxL3h3YXkvc2V0dXAtYXNlLmMKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMSBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisjaW5jbHVkZSAiLi4vcHJvbS5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKwordm9pZCBfX2luaXQgbHRxX3NvY19zZXR1cCh2b2lkKQoreworCWx0cV9yZWdpc3Rlcl9hc2VfYXNjKCk7CisJbHRxX3JlZ2lzdGVyX2dwaW8oKTsKKwlsdHFfcmVnaXN0ZXJfd2R0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbGFudGlxL3h3YXkvc2V0dXAteHdheS5jIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3NldHVwLXh3YXkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjkyZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL2xhbnRpcS94d2F5L3NldHVwLXh3YXkuYwpAQCAtMCwwICsxLDIwIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDExIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisKKyNpbmNsdWRlICIuLi9wcm9tLmgiCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCit2b2lkIF9faW5pdCBsdHFfc29jX3NldHVwKHZvaWQpCit7CisJbHRxX3JlZ2lzdGVyX2FzYygwKTsKKwlsdHFfcmVnaXN0ZXJfYXNjKDEpOworCWx0cV9yZWdpc3Rlcl9ncGlvKCk7CisJbHRxX3JlZ2lzdGVyX3dkdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2xpYi9NYWtlZmlsZSBiL2FyY2gvbWlwcy9saWIvTWFrZWZpbGUKaW5kZXggMmFkZWFkNS4uYjJjYWQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvbGliL01ha2VmaWxlCkBAIC0yOCw2ICsyOCw3IEBACiBvYmotJChDT05GSUdfQ1BVX1RYNDlYWCkJKz0gZHVtcF90bGIubwogb2JqLSQoQ09ORklHX0NQVV9WUjQxWFgpCSs9IGR1bXBfdGxiLm8KIG9iai0kKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikJKz0gZHVtcF90bGIubworb2JqLSQoQ09ORklHX0NQVV9YTFIpCQkrPSBkdW1wX3RsYi5vCiAKICMgbGliZ2NjLXN0eWxlIHN0dWZmIG5lZWRlZCBpbiB0aGUga2VybmVsCiBvYmoteSArPSBhc2hsZGkzLm8gYXNocmRpMy5vIGNtcGRpMi5vIGxzaHJkaTMubyB1Y21wZGkyLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vY3M1NTM2L2NzNTUzNl9tZmdwdC5jIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKaW5kZXggOGM4MDdjOS4uMGNiMWI5NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9jczU1MzYvY3M1NTM2X21mZ3B0LmMKQEAgLTIwMSw4ICsyMDEsNiBAQAogCS5yYXRpbmcgPSAxMjAsIC8qIEZ1bmN0aW9uYWwgZm9yIHJlYWwgdXNlLCBidXQgbm90IGRlc2lyZWQgKi8KIAkucmVhZCA9IG1mZ3B0X3JlYWQsCiAJLm1hc2sgPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkubXVsdCA9IDAsCi0JLnNoaWZ0ID0gMjIsCiB9OwogCiBpbnQgX19pbml0IGluaXRfbWZncHRfY2xvY2tzb3VyY2Uodm9pZCkKQEAgLTIxMCw4ICsyMDgsNyBAQAogCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSkJLyogTUZHUFQgZG9lcyBub3Qgc2NhbGUhICovCiAJCXJldHVybiAwOwogCi0JY2xvY2tzb3VyY2VfbWZncHQubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoTUZHUFRfVElDS19SQVRFLCAyMik7Ci0JcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9tZmdwdCk7CisJcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9tZmdwdCwgTUZHUFRfVElDS19SQVRFKTsKIH0KIAogYXJjaF9pbml0Y2FsbChpbml0X21mZ3B0X2Nsb2Nrc291cmNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMgYi9hcmNoL21pcHMvbG9vbmdzb24vY29tbW9uL2Vudi5jCmluZGV4IDExYjE5M2YuLmQ5MzgzMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9sb29uZ3Nvbi9jb21tb24vZW52LmMKKysrIGIvYXJjaC9taXBzL2xvb25nc29uL2NvbW1vbi9lbnYuYwpAQCAtMjksOSArMjksMTAgQEAKIAogI2RlZmluZSBwYXJzZV9ldmVuX2VhcmxpZXIocmVzLCBvcHRpb24sIHApCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JaW50IHJldDsJCQkJCQkJXAorCXVuc2lnbmVkIGludCB0bXAgX19tYXliZV91bnVzZWQ7CQkJCVwKKwkJCQkJCQkJCVwKIAlpZiAoc3RybmNtcChvcHRpb24sIChjaGFyICopcCwgc3RybGVuKG9wdGlvbikpID09IDApCQlcCi0JCXJldCA9IHN0cmljdF9zdHJ0b2woKGNoYXIgKilwICsgc3RybGVuKG9wdGlvbiI9IiksIDEwLCAmcmVzKTsgXAorCQl0bXAgPSBzdHJpY3Rfc3RydG9sKChjaGFyICopcCArIHN0cmxlbihvcHRpb24iPSIpLCAxMCwgJnJlcyk7IFwKIH0gd2hpbGUgKDApCiAKIHZvaWQgX19pbml0IHByb21faW5pdF9lbnYodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9tbS9NYWtlZmlsZQppbmRleCBkNjc5Yzc3Li40ZDhjMTYyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL21tL01ha2VmaWxlCkBAIC0zLDcgKzMsOCBAQAogIwogCiBvYmoteQkJCQkrPSBjYWNoZS5vIGRtYS1kZWZhdWx0Lm8gZXh0YWJsZS5vIGZhdWx0Lm8gXAotCQkJCSAgIGluaXQubyB0bGJleC5vIHRsYmV4LWZhdWx0Lm8gdWFzbS5vIHBhZ2UubworCQkJCSAgIGluaXQubyBtbWFwLm8gdGxiZXgubyB0bGJleC1mYXVsdC5vIHVhc20ubyBcCisJCQkJICAgcGFnZS5vCiAKIG9iai0kKENPTkZJR18zMkJJVCkJCSs9IGlvcmVtYXAubyBwZ3RhYmxlLTMyLm8KIG9iai0kKENPTkZJR182NEJJVCkJCSs9IHBndGFibGUtNjQubwpAQCAtMjksNiArMzAsNyBAQAogb2JqLSQoQ09ORklHX0NQVV9UWDQ5WFgpCSs9IGMtcjRrLm8gY2V4LWdlbi5vIHRsYi1yNGsubwogb2JqLSQoQ09ORklHX0NQVV9WUjQxWFgpCSs9IGMtcjRrLm8gY2V4LWdlbi5vIHRsYi1yNGsubwogb2JqLSQoQ09ORklHX0NQVV9DQVZJVU1fT0NURU9OKQkrPSBjLW9jdGVvbi5vIGNleC1vY3QubyB0bGItcjRrLm8KK29iai0kKENPTkZJR19DUFVfWExSKQkJKz0gYy1yNGsubyB0bGItcjRrLm8gY2V4LWdlbi5vCiAKIG9iai0kKENPTkZJR19JUDIyX0NQVV9TQ0FDSEUpCSs9IHNjLWlwMjIubwogb2JqLSQoQ09ORklHX1I1MDAwX0NQVV9TQ0FDSEUpICArPSBzYy1yNWsubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtcjRrLmMgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwppbmRleCBiNDkyM2E3Li5kOWJjNWQzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vYy1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vYy1yNGsuYwpAQCAtMTAwNiw2ICsxMDA2LDcgQEAKIAljYXNlIENQVV8yNUtGOgogCWNhc2UgQ1BVX1NCMToKIAljYXNlIENQVV9TQjFBOgorCWNhc2UgQ1BVX1hMUjoKIAkJYy0+ZGNhY2hlLmZsYWdzIHw9IE1JUFNfQ0FDSEVfUElOREVYOwogCQlicmVhazsKIApAQCAtMTA3NSw3ICsxMDc2LDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBhZGRyLCBiZWdpbiwgZW5kLCBwb3cyOwogCXVuc2lnbmVkIGludCBjb25maWcgPSByZWFkX2MwX2NvbmZpZygpOwogCXN0cnVjdCBjcHVpbmZvX21pcHMgKmMgPSAmY3VycmVudF9jcHVfZGF0YTsKLQlpbnQgdG1wOwogCiAJaWYgKGNvbmZpZyAmIENPTkZfU0MpCiAJCXJldHVybiAwOwpAQCAtMTEwOCw3ICsxMTA4LDYgQEAKIAogCS8qIE5vdyBzZWFyY2ggZm9yIHRoZSB3cmFwIGFyb3VuZCBwb2ludC4gKi8KIAlwb3cyID0gKDEyOCAqIDEwMjQpOwotCXRtcCA9IDA7CiAJZm9yIChhZGRyID0gYmVnaW4gKyAoMTI4ICogMTAyNCk7IGFkZHIgPCBlbmQ7IGFkZHIgPSBiZWdpbiArIHBvdzIpIHsKIAkJY2FjaGVfb3AoSW5kZXhfTG9hZF9UYWdfU0QsIGFkZHIpOwogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibm9wOyBub3A7IG5vcDsgbm9wOyIpOyAvKiBoYXphcmQuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9tbWFwLmMgYi9hcmNoL21pcHMvbW0vbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlM2MyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbW0vbW1hcC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDExIFdpbmQgUml2ZXIgU3lzdGVtcywKKyAqICAgd3JpdHRlbiBieSBSYWxmIEJhZWNobGUgPHJhbGZAbGludXgtbWlwcy5vcmc+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK3Vuc2lnbmVkIGxvbmcgc2htX2FsaWduX21hc2sgPSBQQUdFX1NJWkUgLSAxOwkvKiBTYW5lIGNhY2hlcyAqLworCitFWFBPUlRfU1lNQk9MKHNobV9hbGlnbl9tYXNrKTsKKworI2RlZmluZSBDT0xPVVJfQUxJR04oYWRkcixwZ29mZikJCQkJXAorCSgoKChhZGRyKSArIHNobV9hbGlnbl9tYXNrKSAmIH5zaG1fYWxpZ25fbWFzaykgKwlcCisJICgoKHBnb2ZmKSA8PCBQQUdFX1NISUZUKSAmIHNobV9hbGlnbl9tYXNrKSkKKwordW5zaWduZWQgbG9uZyBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCisJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1tOworCWludCBkb19jb2xvcl9hbGlnbjsKKworCWlmIChsZW4gPiBUQVNLX1NJWkUpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7CisJCS8qIEV2ZW4gTUFQX0ZJWEVEIG1hcHBpbmdzIG11c3QgcmVzaWRlIHdpdGhpbiBUQVNLX1NJWkUuICAqLworCQlpZiAoVEFTS19TSVpFIC0gbGVuIDwgYWRkcikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qCisJCSAqIFdlIGRvIG5vdCBhY2NlcHQgYSBzaGFyZWQgbWFwcGluZyBpZiBpdCB3b3VsZCB2aW9sYXRlCisJCSAqIGNhY2hlIGFsaWFzaW5nIGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJaWYgKChmbGFncyAmIE1BUF9TSEFSRUQpICYmCisJCSAgICAoKGFkZHIgLSAocGdvZmYgPDwgUEFHRV9TSElGVCkpICYgc2htX2FsaWduX21hc2spKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBhZGRyOworCX0KKworCWRvX2NvbG9yX2FsaWduID0gMDsKKwlpZiAoZmlscCB8fCAoZmxhZ3MgJiBNQVBfU0hBUkVEKSkKKwkJZG9fY29sb3JfYWxpZ24gPSAxOworCWlmIChhZGRyKSB7CisJCWlmIChkb19jb2xvcl9hbGlnbikKKwkJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkciwgcGdvZmYpOworCQllbHNlCisJCQlhZGRyID0gUEFHRV9BTElHTihhZGRyKTsKKwkJdm1tID0gZmluZF92bWEoY3VycmVudC0+bW0sIGFkZHIpOworCQlpZiAoVEFTS19TSVpFIC0gbGVuID49IGFkZHIgJiYKKwkJICAgICghdm1tIHx8IGFkZHIgKyBsZW4gPD0gdm1tLT52bV9zdGFydCkpCisJCQlyZXR1cm4gYWRkcjsKKwl9CisJYWRkciA9IGN1cnJlbnQtPm1tLT5tbWFwX2Jhc2U7CisJaWYgKGRvX2NvbG9yX2FsaWduKQorCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKKwllbHNlCisJCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOworCisJZm9yICh2bW0gPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7IDsgdm1tID0gdm1tLT52bV9uZXh0KSB7CisJCS8qIEF0IHRoaXMgcG9pbnQ6ICAoIXZtbSB8fCBhZGRyIDwgdm1tLT52bV9lbmQpLiAqLworCQlpZiAoVEFTS19TSVpFIC0gbGVuIDwgYWRkcikKKwkJCXJldHVybiAtRU5PTUVNOworCQlpZiAoIXZtbSB8fCBhZGRyICsgbGVuIDw9IHZtbS0+dm1fc3RhcnQpCisJCQlyZXR1cm4gYWRkcjsKKwkJYWRkciA9IHZtbS0+dm1fZW5kOworCQlpZiAoZG9fY29sb3JfYWxpZ24pCisJCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKKwl9Cit9CisKK3ZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGxvbmcgcmFuZG9tX2ZhY3RvciA9IDBVTDsKKworCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX1JBTkRPTUlaRSkgeworCQlyYW5kb21fZmFjdG9yID0gZ2V0X3JhbmRvbV9pbnQoKTsKKwkJcmFuZG9tX2ZhY3RvciA9IHJhbmRvbV9mYWN0b3IgPDwgUEFHRV9TSElGVDsKKwkJaWYgKFRBU0tfSVNfMzJCSVRfQUREUikKKwkJCXJhbmRvbV9mYWN0b3IgJj0gMHhmZmZmZmZ1bDsKKwkJZWxzZQorCQkJcmFuZG9tX2ZhY3RvciAmPSAweGZmZmZmZmZ1bDsKKwl9CisKKwltbS0+bW1hcF9iYXNlID0gVEFTS19VTk1BUFBFRF9CQVNFICsgcmFuZG9tX2ZhY3RvcjsKKwltbS0+Z2V0X3VubWFwcGVkX2FyZWEgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhOworCW1tLT51bm1hcF9hcmVhID0gYXJjaF91bm1hcF9hcmVhOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnJrX3JuZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm5kID0gZ2V0X3JhbmRvbV9pbnQoKTsKKworCXJuZCA9IHJuZCA8PCBQQUdFX1NISUZUOworCS8qIDhNQiBmb3IgMzJiaXQsIDI1Nk1CIGZvciA2NGJpdCAqLworCWlmIChUQVNLX0lTXzMyQklUX0FERFIpCisJCXJuZCA9IHJuZCAmIDB4N2ZmZmZmdWw7CisJZWxzZQorCQlybmQgPSBybmQgJiAweGZmZmZmZmZ1bDsKKworCXJldHVybiBybmQ7Cit9CisKK3Vuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZSA9IG1tLT5icms7CisJdW5zaWduZWQgbG9uZyByZXQ7CisKKwlyZXQgPSBQQUdFX0FMSUdOKGJhc2UgKyBicmtfcm5kKCkpOworCisJaWYgKHJldCA8IG1tLT5icmspCisJCXJldHVybiBtbS0+YnJrOworCisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggNWVmMjk0Zi4uNDI0ZWQ0YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTQwNCw2ICs0MDQsNyBAQAogCWNhc2UgQ1BVXzVLQzoKIAljYXNlIENQVV9UWDQ5WFg6CiAJY2FzZSBDUFVfUFI0NDUwOgorCWNhc2UgQ1BVX1hMUjoKIAkJdWFzbV9pX25vcChwKTsKIAkJdGxidyhwKTsKIAkJYnJlYWs7CkBAIC0xMTUxLDggKzExNTIsOCBAQAogCXN0cnVjdCB1YXNtX3JlbG9jICpyID0gcmVsb2NzOwogCXUzMiAqZjsKIAl1bnNpZ25lZCBpbnQgZmluYWxfbGVuOwotCXN0cnVjdCBtaXBzX2h1Z2VfdGxiX2luZm8gaHRsYl9pbmZvOwotCWVudW0gdm1hbGxvYzY0X21vZGUgdm1hbGxvY19tb2RlOworCXN0cnVjdCBtaXBzX2h1Z2VfdGxiX2luZm8gaHRsYl9pbmZvIF9fbWF5YmVfdW51c2VkOworCWVudW0gdm1hbGxvYzY0X21vZGUgdm1hbGxvY19tb2RlIF9fbWF5YmVfdW51c2VkOwogCiAJbWVtc2V0KHRsYl9oYW5kbGVyLCAwLCBzaXplb2YodGxiX2hhbmRsZXIpKTsKIAltZW1zZXQobGFiZWxzLCAwLCBzaXplb2YobGFiZWxzKSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbXRpLW1hbHRhL21hbHRhLWluaXQuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCmluZGV4IDQxNGYwYzkuLjMxMTgwYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jCkBAIC0xOTMsOCArMTkzLDYgQEAKIAogdm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCiB7Ci0JaW50IHJlc3VsdDsKLQogCXByb21fYXJnYyA9IGZ3X2FyZzA7CiAJX3Byb21fYXJndiA9IChpbnQgKikgZndfYXJnMTsKIAlfcHJvbV9lbnZwID0gKGludCAqKSBmd19hcmcyOwpAQCAtMzYwLDIwICszNTgsMTQgQEAKICNpZmRlZiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRQogCWNvbnNvbGVfY29uZmlnKCk7CiAjZW5kaWYKLQkvKiBFYXJseSBkZXRlY3Rpb24gb2YgQ01QIHN1cHBvcnQgKi8KLQlyZXN1bHQgPSBnY21wX3Byb2JlKEdDTVBfQkFTRV9BRERSLCBHQ01QX0FERFJTUEFDRV9TWik7Ci0KICNpZmRlZiBDT05GSUdfTUlQU19DTVAKLQlpZiAocmVzdWx0KQorCS8qIEVhcmx5IGRldGVjdGlvbiBvZiBDTVAgc3VwcG9ydCAqLworCWlmIChnY21wX3Byb2JlKEdDTVBfQkFTRV9BRERSLCBHQ01QX0FERFJTUEFDRV9TWikpCiAJCXJlZ2lzdGVyX3NtcF9vcHMoJmNtcF9zbXBfb3BzKTsKKwllbHNlCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVAKLSNpZmRlZiBDT05GSUdfTUlQU19DTVAKLQlpZiAoIXJlc3VsdCkKIAkJcmVnaXN0ZXJfc21wX29wcygmdnNtcF9zbXBfb3BzKTsKLSNlbHNlCi0JcmVnaXN0ZXJfc21wX29wcygmdnNtcF9zbXBfb3BzKTsKLSNlbmRpZgogI2VuZGlmCiAjaWZkZWYgQ09ORklHX01JUFNfTVRfU01UQwogCXJlZ2lzdGVyX3NtcF9vcHMoJm1zbXRjX3NtcF9vcHMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYyBiL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKaW5kZXggOTAyNzA2MS4uMWQzNmM1MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW50LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbnQuYwpAQCAtNTYsNyArNTYsNiBAQAogc3RhdGljIGlubGluZSBpbnQgbWlwc19wY2liaW9zX2lhY2sodm9pZCkKIHsKIAlpbnQgaXJxOwotCXUzMiBkdW1teTsKIAogCS8qCiAJICogRGV0ZXJtaW5lIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZyBpbnRlcnJ1cHQgYnkgcGVyZm9ybWluZwpAQCAtODMsNyArODIsNyBAQAogCQlCT05JVE9fUENJTUFQX0NGRyA9IDB4MjAwMDA7CiAKIAkJLyogRmx1c2ggQm9uaXRvIHJlZ2lzdGVyIGJsb2NrICovCi0JCWR1bW15ID0gQk9OSVRPX1BDSU1BUF9DRkc7CisJCSh2b2lkKSBCT05JVE9fUENJTUFQX0NGRzsKIAkJaW9iKCk7ICAgIC8qIHN5bmMgKi8KIAogCQlpcnEgPSBfX3Jhd19yZWFkbCgodTMyICopX3BjaWN0cmxfYm9uaXRvX3BjaWNmZyk7CkBAIC0zMDksNiArMzA4LDggQEAKIAogc3RhdGljIGlycXJldHVybl90IGlwaV9yZXNjaGVkX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CisJc2NoZWR1bGVyX2lwaSgpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbmV0bG9naWMvS2NvbmZpZyBiL2FyY2gvbWlwcy9uZXRsb2dpYy9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1Y2E3NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbmV0bG9naWMvS2NvbmZpZwpAQCAtMCwwICsxLDUgQEAKK2NvbmZpZyBOTE1fQ09NTU9OCisJYm9vbAorCitjb25maWcgTkxNX1hMUgorCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvTWFrZWZpbGUgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZDNmNzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorb2JqLXkJCQkJKz0gc2V0dXAubyBwbGF0Zm9ybS5vIGlycS5vIHNldHVwLm8gdGltZS5vCitvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8gc21wYm9vdC5vCitvYmotJChDT05GSUdfRUFSTFlfUFJJTlRLKQkrPSB4bHJfY29uc29sZS5vCisKK0VYVFJBX0NGTEFHUwkJCSs9IC1XZXJyb3IKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvaXJxLmMgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0NDZkNTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL2lycS5jCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0IDIwMDMtMjAxMSBOZXRMb2dpYyBNaWNyb3N5c3RlbXMsIEluYy4gKE5ldExvZ2ljKS4gQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlIE5ldExvZ2ljCisgKiBsaWNlbnNlIGJlbG93OgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRMT0dJQyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTkVUTE9HSUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KKworI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIvaW9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL3BpYy5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIveGxyLmg+CisKKyNpbmNsdWRlIDxhc20vbmV0bG9naWMvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL21pcHMtZXh0bnMuaD4KKworc3RhdGljIHU2NCBubG1faXJxX21hc2s7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG5sbV9waWNfbG9jayk7CisKK3N0YXRpYyB2b2lkIHhscl9waWNfZW5hYmxlKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlubG1fcmVnX3QgKm1taW8gPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX1BJQ19PRkZTRVQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbmxtX3JlZ190IHJlZzsKKwlpbnQgaXJxID0gZC0+aXJxOworCisJV0FSTighUElDX0lSUV9JU19JUlQoaXJxKSwgIkJhZCBpcnEgJWQiLCBpcnEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5sbV9waWNfbG9jaywgZmxhZ3MpOworCXJlZyA9IG5ldGxvZ2ljX3JlYWRfcmVnKG1taW8sIFBJQ19JUlRfMV9CQVNFICsgaXJxIC0gUElDX0lSUV9CQVNFKTsKKwluZXRsb2dpY193cml0ZV9yZWcobW1pbywgUElDX0lSVF8xX0JBU0UgKyBpcnEgLSBQSUNfSVJRX0JBU0UsCisJCQkgIHJlZyB8ICgxIDw8IDYpIHwgKDEgPDwgMzApIHwgKDEgPDwgMzEpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubG1fcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgeGxyX3BpY19tYXNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlubG1fcmVnX3QgKm1taW8gPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX1BJQ19PRkZTRVQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbmxtX3JlZ190IHJlZzsKKwlpbnQgaXJxID0gZC0+aXJxOworCisJV0FSTighUElDX0lSUV9JU19JUlQoaXJxKSwgIkJhZCBpcnEgJWQiLCBpcnEpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5sbV9waWNfbG9jaywgZmxhZ3MpOworCXJlZyA9IG5ldGxvZ2ljX3JlYWRfcmVnKG1taW8sIFBJQ19JUlRfMV9CQVNFICsgaXJxIC0gUElDX0lSUV9CQVNFKTsKKwluZXRsb2dpY193cml0ZV9yZWcobW1pbywgUElDX0lSVF8xX0JBU0UgKyBpcnEgLSBQSUNfSVJRX0JBU0UsCisJCQkgIHJlZyB8ICgxIDw8IDYpIHwgKDEgPDwgMzApIHwgKDAgPDwgMzEpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZubG1fcGljX2xvY2ssIGZsYWdzKTsKK30KKworI2lmZGVmIENPTkZJR19QQ0kKKy8qIEV4dHJhIEFDSyBuZWVkZWQgZm9yIFhMUiBvbiBjaGlwIFBDSSBjb250cm9sbGVyICovCitzdGF0aWMgdm9pZCB4bHJfcGNpX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJbmxtX3JlZ190ICpwY2lfbW1pbyA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fUENJWF9PRkZTRVQpOworCisJbmV0bG9naWNfcmVhZF9yZWcocGNpX21taW8sICgweDE0MCA+PiAyKSk7Cit9CisKKy8qIEV4dHJhIEFDSyBuZWVkZWQgZm9yIFhMUyBvbiBjaGlwIFBDSWUgY29udHJvbGxlciAqLworc3RhdGljIHZvaWQgeGxzX3BjaWVfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlubG1fcmVnX3QgKnBjaWVfbW1pb19sZSA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fUENJRV8xX09GRlNFVCk7CisKKwlzd2l0Y2ggKGQtPmlycSkgeworCWNhc2UgUElDX1BDSUVfTElOSzBfSVJROgorCQluZXRsb2dpY193cml0ZV9yZWcocGNpZV9tbWlvX2xlLCAoMHg5MCA+PiAyKSwgMHhmZmZmZmZmZik7CisJCWJyZWFrOworCWNhc2UgUElDX1BDSUVfTElOSzFfSVJROgorCQluZXRsb2dpY193cml0ZV9yZWcocGNpZV9tbWlvX2xlLCAoMHg5NCA+PiAyKSwgMHhmZmZmZmZmZik7CisJCWJyZWFrOworCWNhc2UgUElDX1BDSUVfTElOSzJfSVJROgorCQluZXRsb2dpY193cml0ZV9yZWcocGNpZV9tbWlvX2xlLCAoMHgxOTAgPj4gMiksIDB4ZmZmZmZmZmYpOworCQlicmVhazsKKwljYXNlIFBJQ19QQ0lFX0xJTkszX0lSUToKKwkJbmV0bG9naWNfd3JpdGVfcmVnKHBjaWVfbW1pb19sZSwgKDB4MTk0ID4+IDIpLCAweGZmZmZmZmZmKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBGb3IgWExTIEIgc2lsaWNvbiwgdGhlIDMsNCBQQ0kgaW50ZXJydXB0cyBhcmUgZGlmZmVyZW50ICovCitzdGF0aWMgdm9pZCB4bHNfcGNpZV9hY2tfYihzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJbmxtX3JlZ190ICpwY2llX21taW9fbGUgPSBuZXRsb2dpY19pb19tbWlvKE5FVExPR0lDX0lPX1BDSUVfMV9PRkZTRVQpOworCisJc3dpdGNoIChkLT5pcnEpIHsKKwljYXNlIFBJQ19QQ0lFX0xJTkswX0lSUToKKwkJbmV0bG9naWNfd3JpdGVfcmVnKHBjaWVfbW1pb19sZSwgKDB4OTAgPj4gMiksIDB4ZmZmZmZmZmYpOworCQlicmVhazsKKwljYXNlIFBJQ19QQ0lFX0xJTksxX0lSUToKKwkJbmV0bG9naWNfd3JpdGVfcmVnKHBjaWVfbW1pb19sZSwgKDB4OTQgPj4gMiksIDB4ZmZmZmZmZmYpOworCQlicmVhazsKKwljYXNlIFBJQ19QQ0lFX1hMU0IwX0xJTksyX0lSUToKKwkJbmV0bG9naWNfd3JpdGVfcmVnKHBjaWVfbW1pb19sZSwgKDB4MTkwID4+IDIpLCAweGZmZmZmZmZmKTsKKwkJYnJlYWs7CisJY2FzZSBQSUNfUENJRV9YTFNCMF9MSU5LM19JUlE6CisJCW5ldGxvZ2ljX3dyaXRlX3JlZyhwY2llX21taW9fbGUsICgweDE5NCA+PiAyKSwgMHhmZmZmZmZmZik7CisJCWJyZWFrOworCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCB4bHJfcGljX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlubG1fcmVnX3QgKm1taW87CisJaW50IGlycSA9IGQtPmlycTsKKwl2b2lkICpoZCA9IGlycV9kYXRhX2dldF9pcnFfaGFuZGxlcl9kYXRhKGQpOworCisJV0FSTighUElDX0lSUV9JU19JUlQoaXJxKSwgIkJhZCBpcnEgJWQiLCBpcnEpOworCisJaWYgKGhkKSB7CisJCXZvaWQgKCpleHRyYV9hY2spKHZvaWQgKikgPSBoZDsKKwkJZXh0cmFfYWNrKGQpOworCX0KKwltbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19QSUNfT0ZGU0VUKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbmxtX3BpY19sb2NrLCBmbGFncyk7CisJbmV0bG9naWNfd3JpdGVfcmVnKG1taW8sIFBJQ19JTlRfQUNLLCAoMSA8PCAoaXJxIC0gUElDX0lSUV9CQVNFKSkpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5sbV9waWNfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogVGhpcyBjaGlwIGRlZmluaXRpb24gaGFuZGxlcyBpbnRlcnJ1cHRzIHJvdXRlZCB0aHJ1IHRoZSBYTFIKKyAqIGhhcmR3YXJlIFBJQywgY3VycmVudGx5IElSUXMgOC0zOSBhcmUgbWFwcGVkIHRvIGhhcmR3YXJlIGludHIKKyAqIDAtMzEgd2lyZWQgdGhlIFhMUiBQSUMKKyAqLworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4bHJfcGljID0geworCS5uYW1lCQk9ICJYTFItUElDIiwKKwkuaXJxX2VuYWJsZQk9IHhscl9waWNfZW5hYmxlLAorCS5pcnFfbWFzawk9IHhscl9waWNfbWFzaywKKwkuaXJxX2Fjawk9IHhscl9waWNfYWNrLAorfTsKKworc3RhdGljIHZvaWQgcnN2ZF9pcnFfaGFuZGxlcihzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJV0FSTihkLT5pcnEgPj0gUElDX0lSUV9CQVNFLCAiQmFkIGlycSAlZCIsIGQtPmlycSk7Cit9CisKKy8qCisgKiBDaGlwIGRlZmluaXRpb24gZm9yIENQVSBvcmlnaW5hdGVkIGludGVycnVwdHModGltZXIsIG1zZykgYW5kCisgKiBJUElzCisgKi8KK3N0cnVjdCBpcnFfY2hpcCBubG1fY3B1X2ludHIgPSB7CisJLm5hbWUJCT0gIlhMUi1DUFUtSU5UUiIsCisJLmlycV9lbmFibGUJPSByc3ZkX2lycV9oYW5kbGVyLAorCS5pcnFfbWFzawk9IHJzdmRfaXJxX2hhbmRsZXIsCisJLmlycV9hY2sJPSByc3ZkX2lycV9oYW5kbGVyLAorfTsKKwordm9pZCBfX2luaXQgaW5pdF94bHJfaXJxcyh2b2lkKQoreworCW5sbV9yZWdfdCAqbW1pbyA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fUElDX09GRlNFVCk7CisJdWludDMyX3QgdGhyZWFkX21hc2sgPSAxOworCWludCBsZXZlbCwgaTsKKworCXByX2luZm8oIkludGVycnVwdCB0aHJlYWQgbWFzayBbJXhdXG4iLCB0aHJlYWRfbWFzayk7CisJZm9yIChpID0gMDsgaSA8IFBJQ19OVU1fSVJUUzsgaSsrKSB7CisJCWxldmVsID0gUElDX0lSUV9JU19FREdFX1RSSUdHRVJFRChpKTsKKworCQkvKiBCaW5kIGFsbCBQSUMgaXJxcyB0byBib290IGNwdSAqLworCQluZXRsb2dpY193cml0ZV9yZWcobW1pbywgUElDX0lSVF8wX0JBU0UgKyBpLCB0aHJlYWRfbWFzayk7CisKKwkJLyoKKwkJICogVXNlIGxvY2FsIHNjaGVkdWxpbmcgYW5kIGhpZ2ggcG9sYXJpdHkgZm9yIGFsbCBJUlRzCisJCSAqIEludmFsaWRhdGUgYWxsIElSVHMsIGJ5IGRlZmF1bHQKKwkJICovCisJCW5ldGxvZ2ljX3dyaXRlX3JlZyhtbWlvLCBQSUNfSVJUXzFfQkFTRSArIGksCisJCQkJKGxldmVsIDw8IDMwKSB8ICgxIDw8IDYpIHwgKFBJQ19JUlFfQkFTRSArIGkpKTsKKwl9CisKKwkvKiBNYWtlIGFsbCBJUlFzIGFzIGxldmVsIHRyaWdnZXJlZCBieSBkZWZhdWx0ICovCisJZm9yIChpID0gMDsgaSA8IE5SX0lSUVM7IGkrKykgeworCQlpZiAoUElDX0lSUV9JU19JUlQoaSkpCisJCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaSwgJnhscl9waWMsIGhhbmRsZV9sZXZlbF9pcnEpOworCQllbHNlCisJCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXIoaSwgJm5sbV9jcHVfaW50ciwKKwkJCQkJCWhhbmRsZV9sZXZlbF9pcnEpOworCX0KKyNpZmRlZiBDT05GSUdfU01QCisJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKElSUV9JUElfU01QX0ZVTkNUSU9OLCAmbmxtX2NwdV9pbnRyLAorCQkJIG5sbV9zbXBfZnVuY3Rpb25faXBpX2hhbmRsZXIpOworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihJUlFfSVBJX1NNUF9SRVNDSEVEVUxFLCAmbmxtX2NwdV9pbnRyLAorCQkJIG5sbV9zbXBfcmVzY2hlZF9pcGlfaGFuZGxlcik7CisJbmxtX2lycV9tYXNrIHw9CisJICAgICgoMVVMTCA8PCBJUlFfSVBJX1NNUF9GVU5DVElPTikgfCAoMVVMTCA8PCBJUlFfSVBJX1NNUF9SRVNDSEVEVUxFKSk7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QQ0kKKwkvKgorCSAqIEZvciBQQ0kgaW50ZXJydXB0cywgd2UgbmVlZCB0byBhY2sgdGhlIFBJQyBjb250cm9sbGVyIHRvbywgb3ZlcmxvYWQKKwkgKiBpcnEgaGFuZGxlciBkYXRhIHRvIGRvIHRoaXMKKwkgKi8KKwlpZiAobmxtX2NoaXBfaXNfeGxzKCkpIHsKKwkJaWYgKG5sbV9jaGlwX2lzX3hsc19iKCkpIHsKKwkJCWlycV9zZXRfaGFuZGxlcl9kYXRhKFBJQ19QQ0lFX0xJTkswX0lSUSwKKwkJCQkJCQl4bHNfcGNpZV9hY2tfYik7CisJCQlpcnFfc2V0X2hhbmRsZXJfZGF0YShQSUNfUENJRV9MSU5LMV9JUlEsCisJCQkJCQkJeGxzX3BjaWVfYWNrX2IpOworCQkJaXJxX3NldF9oYW5kbGVyX2RhdGEoUElDX1BDSUVfWExTQjBfTElOSzJfSVJRLAorCQkJCQkJCXhsc19wY2llX2Fja19iKTsKKwkJCWlycV9zZXRfaGFuZGxlcl9kYXRhKFBJQ19QQ0lFX1hMU0IwX0xJTkszX0lSUSwKKwkJCQkJCQl4bHNfcGNpZV9hY2tfYik7CisJCX0gZWxzZSB7CisJCQlpcnFfc2V0X2hhbmRsZXJfZGF0YShQSUNfUENJRV9MSU5LMF9JUlEsIHhsc19wY2llX2Fjayk7CisJCQlpcnFfc2V0X2hhbmRsZXJfZGF0YShQSUNfUENJRV9MSU5LMV9JUlEsIHhsc19wY2llX2Fjayk7CisJCQlpcnFfc2V0X2hhbmRsZXJfZGF0YShQSUNfUENJRV9MSU5LMl9JUlEsIHhsc19wY2llX2Fjayk7CisJCQlpcnFfc2V0X2hhbmRsZXJfZGF0YShQSUNfUENJRV9MSU5LM19JUlEsIHhsc19wY2llX2Fjayk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBYTFIgUENJIGNvbnRyb2xsZXIgQUNLICovCisJCWlycV9zZXRfaGFuZGxlcl9kYXRhKFBJQ19QQ0lFX1hMU0IwX0xJTkszX0lSUSwgeGxyX3BjaV9hY2spOworCX0KKyNlbmRpZgorCS8qIHVubWFzayBhbGwgUElDIHJlbGF0ZWQgaW50ZXJydXB0cy4gSWYgbm8gaGFuZGxlciBpcyBpbnN0YWxsZWQgYnkgdGhlCisJICogZHJpdmVycywgaXQnbGwganVzdCBhY2sgdGhlIGludGVycnVwdCBhbmQgcmV0dXJuCisJICovCisJZm9yIChpID0gUElDX0lSVF9GSVJTVF9JUlE7IGkgPD0gUElDX0lSVF9MQVNUX0lSUTsgaSsrKQorCQlubG1faXJxX21hc2sgfD0gKDFVTEwgPDwgaSk7CisKKwlubG1faXJxX21hc2sgfD0gKDFVTEwgPDwgSVJRX1RJTUVSKTsKK30KKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQoreworCS8qIEluaXRpYWxpemUgdGhlIGlycSBkZXNjcmlwdG9ycyAqLworCWluaXRfeGxyX2lycXMoKTsKKwl3cml0ZV9jMF9laW1yKG5sbV9pcnFfbWFzayk7Cit9CisKK3ZvaWQgX19jcHVpbml0IG5sbV9zbXBfaXJxX2luaXQodm9pZCkKK3sKKwkvKiBzZXQgaW50ZXJydXB0IG1hc2sgZm9yIG5vbi16ZXJvIGNwdXMgKi8KKwl3cml0ZV9jMF9laW1yKG5sbV9pcnFfbWFzayk7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBwbGF0X2lycV9kaXNwYXRjaCh2b2lkKQoreworCXVpbnQ2NF90IGVpcnI7CisJaW50IGk7CisKKwllaXJyID0gcmVhZF9jMF9laXJyKCkgJiByZWFkX2MwX2VpbXIoKTsKKwlpZiAoIWVpcnIpCisJCXJldHVybjsKKworCS8qIG5vIG5lZWQgb2YgRUlSUiBoZXJlLCB3cml0aW5nIGNvbXBhcmUgY2xlYXJzIGludGVycnVwdCAqLworCWlmIChlaXJyICYgKDEgPDwgSVJRX1RJTUVSKSkgeworCQlkb19JUlEoSVJRX1RJTUVSKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHVzZSBkY2x0ejogb3B0aW1pemUgYmVsb3cgY29kZSAqLworCWZvciAoaSA9IDYzOyBpICE9IC0xOyBpLS0pIHsKKwkJaWYgKGVpcnIgJiAoMVVMTCA8PCBpKSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSAtMSkgeworCQlwcl9lcnIoIm5vIGludGVycnVwdCAhIVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBBY2sgZWlyciAqLworCXdyaXRlX2MwX2VpcnIoMVVMTCA8PCBpKTsKKworCWRvX0lSUShpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvcGxhdGZvcm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDllYzI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hsci9wbGF0Zm9ybS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSwgTmV0bG9naWMgTWljcm9zeXN0ZW1zLgorICogQ29weXJpZ2h0IDIwMDQsIE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci9pb21hcC5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIvcGljLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci94bHIuaD4KKwordW5zaWduZWQgaW50IG5sbV94bHJfdWFydF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwLCBpbnQgb2Zmc2V0KQoreworCW5sbV9yZWdfdCAqbW1pbzsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisKKwkvKiBYTFIgdWFydCBkb2VzIG5vdCBuZWVkIGFueSBtYXBwaW5nIG9mIHJlZ3MgKi8KKwltbWlvID0gKG5sbV9yZWdfdCAqKShwLT5tZW1iYXNlICsgKG9mZnNldCA8PCBwLT5yZWdzaGlmdCkpOworCXZhbHVlID0gbmV0bG9naWNfcmVhZF9yZWcobW1pbywgMCk7CisKKwkvKiBTZWUgWExSL1hMUyBlcnJhdGEgKi8KKwlpZiAob2Zmc2V0ID09IFVBUlRfTVNSKQorCQl2YWx1ZSBePSAweEYwOworCWVsc2UgaWYgKG9mZnNldCA9PSBVQVJUX01DUikKKwkJdmFsdWUgXj0gMHgzOworCisJcmV0dXJuIHZhbHVlOworfQorCit2b2lkIG5sbV94bHJfdWFydF9vdXQoc3RydWN0IHVhcnRfcG9ydCAqcCwgaW50IG9mZnNldCwgaW50IHZhbHVlKQoreworCW5sbV9yZWdfdCAqbW1pbzsKKworCS8qIFhMUiB1YXJ0IGRvZXMgbm90IG5lZWQgYW55IG1hcHBpbmcgb2YgcmVncyAqLworCW1taW8gPSAobmxtX3JlZ190ICopKHAtPm1lbWJhc2UgKyAob2Zmc2V0IDw8IHAtPnJlZ3NoaWZ0KSk7CisKKwkvKiBTZWUgWExSL1hMUyBlcnJhdGEgKi8KKwlpZiAob2Zmc2V0ID09IFVBUlRfTVNSKQorCQl2YWx1ZSBePSAweEYwOworCWVsc2UgaWYgKG9mZnNldCA9PSBVQVJUX01DUikKKwkJdmFsdWUgXj0gMHgzOworCisJbmV0bG9naWNfd3JpdGVfcmVnKG1taW8sIDAsIHZhbHVlKTsKK30KKworI2RlZmluZSBQT1JUKF9pcnEpCQkJCQlcCisJewkJCQkJCVwKKwkJLmlycQkJPSBfaXJxLAkJCVwKKwkJLnJlZ3NoaWZ0CT0gMiwJCQlcCisJCS5pb3R5cGUJCT0gVVBJT19NRU0zMiwJCVwKKwkJLmZsYWdzCQk9IChVUEZfU0tJUF9URVNUIHwJXAorCQkJIFVQRl9GSVhFRF9UWVBFIHwgVVBGX0JPT1RfQVVUT0NPTkYpLFwKKwkJLnVhcnRjbGsJPSBQSUNfQ0xLU19QRVJfU0VDLAlcCisJCS50eXBlCQk9IFBPUlRfMTY1NTBBLAkJXAorCQkuc2VyaWFsX2luCT0gbmxtX3hscl91YXJ0X2luLAlcCisJCS5zZXJpYWxfb3V0CT0gbmxtX3hscl91YXJ0X291dCwJXAorCX0KKworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCB4bHJfdWFydF9kYXRhW10gPSB7CisJUE9SVChQSUNfVUFSVF8wX0lSUSksCisJUE9SVChQSUNfVUFSVF8xX0lSUSksCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1YXJ0X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9IHhscl91YXJ0X2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5sbV91YXJ0X2luaXQodm9pZCkKK3sKKwlubG1fcmVnX3QgKm1taW87CisKKwltbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19VQVJUXzBfT0ZGU0VUKTsKKwl4bHJfdWFydF9kYXRhWzBdLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopbW1pbzsKKwl4bHJfdWFydF9kYXRhWzBdLm1hcGJhc2UgPSBDUEhZU0FERFIoKHVuc2lnbmVkIGxvbmcpbW1pbyk7CisKKwltbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19VQVJUXzFfT0ZGU0VUKTsKKwl4bHJfdWFydF9kYXRhWzFdLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopbW1pbzsKKwl4bHJfdWFydF9kYXRhWzFdLm1hcGJhc2UgPSBDUEhZU0FERFIoKHVuc2lnbmVkIGxvbmcpbW1pbyk7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ1YXJ0X2RldmljZSk7Cit9CisKK2FyY2hfaW5pdGNhbGwobmxtX3VhcnRfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbmV0bG9naWMveGxyL3NldHVwLmMgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDgyODAyNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvc2V0dXAuYwpAQCAtMCwwICsxLDE4OCBAQAorLyoKKyAqIENvcHlyaWdodCAyMDAzLTIwMTEgTmV0TG9naWMgTWljcm9zeXN0ZW1zLCBJbmMuIChOZXRMb2dpYykuIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZSBOZXRMb2dpYworICogbGljZW5zZSBiZWxvdzoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgTkVUTE9HSUMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIE5FVExPR0lDIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorICogT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKworI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgorI2luY2x1ZGUgPGFzbS9zbXAtb3BzLmg+CisKKyNpbmNsdWRlIDxhc20vbmV0bG9naWMvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3BzYi1ib290aW5mby5oPgorCisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci94bHIuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL2lvbWFwLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci9waWMuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL2dwaW8uaD4KKwordW5zaWduZWQgbG9uZyBuZXRsb2dpY19pb19iYXNlID0gKHVuc2lnbmVkIGxvbmcpKERFRkFVTFRfTkVUTE9HSUNfSU9fQkFTRSk7Cit1bnNpZ25lZCBsb25nIG5sbV9jb21tb25fZWJhc2UgPSAweDA7CitzdHJ1Y3QgcHNiX2luZm8gbmxtX3Byb21faW5mbzsKKworc3RhdGljIHZvaWQgbmxtX2Vhcmx5X3NlcmlhbF9zZXR1cCh2b2lkKQoreworCXN0cnVjdCB1YXJ0X3BvcnQgczsKKwlubG1fcmVnX3QgKnVhcnRfYmFzZTsKKworCXVhcnRfYmFzZSA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fVUFSVF8wX09GRlNFVCk7CisJbWVtc2V0KCZzLCAwLCBzaXplb2YocykpOworCXMuZmxhZ3MJCT0gQVNZTkNfQk9PVF9BVVRPQ09ORiB8IEFTWU5DX1NLSVBfVEVTVDsKKwlzLmlvdHlwZQk9IFVQSU9fTUVNMzI7CisJcy5yZWdzaGlmdAk9IDI7CisJcy5pcnEJCT0gUElDX1VBUlRfMF9JUlE7CisJcy51YXJ0Y2xrCT0gUElDX0NMS1NfUEVSX1NFQzsKKwlzLnNlcmlhbF9pbgk9IG5sbV94bHJfdWFydF9pbjsKKwlzLnNlcmlhbF9vdXQJPSBubG1feGxyX3VhcnRfb3V0OworCXMubWFwYmFzZQk9ICh1bnNpZ25lZCBsb25nKXVhcnRfYmFzZTsKKwlzLm1lbWJhc2UJPSAodW5zaWduZWQgY2hhciBfX2lvbWVtICopdWFydF9iYXNlOworCWVhcmx5X3NlcmlhbF9zZXR1cCgmcyk7Cit9CisKK3N0YXRpYyB2b2lkIG5sbV9saW51eF9leGl0KHZvaWQpCit7CisJbmxtX3JlZ190ICptbWlvOworCisJbW1pbyA9IG5ldGxvZ2ljX2lvX21taW8oTkVUTE9HSUNfSU9fR1BJT19PRkZTRVQpOworCS8qIHRyaWdnZXIgYSBjaGlwIHJlc2V0IGJ5IHdyaXRpbmcgMSB0byBHUElPX1NXUkVTRVRfUkVHICovCisJbmV0bG9naWNfd3JpdGVfcmVnKG1taW8sIE5FVExPR0lDX0dQSU9fU1dSRVNFVF9SRUcsIDEpOworCWZvciAoIDsgOyApCisJCWNwdV93YWl0KCk7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfbWVtX3NldHVwKHZvaWQpCit7CisJcGFuaWNfdGltZW91dAk9IDU7CisJX21hY2hpbmVfcmVzdGFydCA9ICh2b2lkICgqKShjaGFyICopKW5sbV9saW51eF9leGl0OworCV9tYWNoaW5lX2hhbHQJPSBubG1fbGludXhfZXhpdDsKKwlwbV9wb3dlcl9vZmYJPSBubG1fbGludXhfZXhpdDsKK30KKworY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCit7CisJcmV0dXJuICJOZXRsb2dpYyBYTFIvWExTIFNlcmllcyI7Cit9CisKK3ZvaWQgX19pbml0IHByb21fZnJlZV9wcm9tX21lbW9yeSh2b2lkKQoreworCS8qIE5vdGhpbmcgeWV0ICovCit9CisKK3N0YXRpYyB2b2lkIGJ1aWxkX2FyY3NfY21kbGluZShpbnQgKmFyZ3YpCit7CisJaW50IGksIHJlbWFpbiwgbGVuOworCWNoYXIgKmFyZzsKKworCXJlbWFpbiA9IHNpemVvZihhcmNzX2NtZGxpbmUpIC0gMTsKKwlhcmNzX2NtZGxpbmVbMF0gPSAnXDAnOworCWZvciAoaSA9IDA7IGFyZ3ZbaV0gIT0gMDsgaSsrKSB7CisJCWFyZyA9IChjaGFyICopKGxvbmcpYXJndltpXTsKKwkJbGVuID0gc3RybGVuKGFyZyk7CisJCWlmIChsZW4gKyAxID4gcmVtYWluKQorCQkJYnJlYWs7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsIGFyZyk7CisJCXN0cmNhdChhcmNzX2NtZGxpbmUsICIgIik7CisJCXJlbWFpbiAtPSAgbGVuICsgMTsKKwl9CisKKwkvKiBBZGQgdGhlIGRlZmF1bHQgb3B0aW9ucyBoZXJlICovCisJaWYgKChzdHJzdHIoYXJjc19jbWRsaW5lLCAiY29uc29sZT0iKSkgPT0gTlVMTCkgeworCQlhcmcgPSAiY29uc29sZT10dHlTMCwzODQwMCAiOworCQlsZW4gPSBzdHJsZW4oYXJnKTsKKwkJaWYgKGxlbiA+IHJlbWFpbikKKwkJCWdvdG8gZmFpbDsKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgYXJnKTsKKwkJcmVtYWluIC09IGxlbjsKKwl9CisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECisJaWYgKChzdHJzdHIoYXJjc19jbWRsaW5lLCAicmRpbml0PSIpKSA9PSBOVUxMKSB7CisJCWFyZyA9ICJyZGluaXQ9L3NiaW4vaW5pdCAiOworCQlsZW4gPSBzdHJsZW4oYXJnKTsKKwkJaWYgKGxlbiA+IHJlbWFpbikKKwkJCWdvdG8gZmFpbDsKKwkJc3RyY2F0KGFyY3NfY21kbGluZSwgYXJnKTsKKwkJcmVtYWluIC09IGxlbjsKKwl9CisjZW5kaWYKKwlyZXR1cm47CitmYWlsOgorCXBhbmljKCJDYW5ub3QgYWRkICVzLCBjb21tYW5kIGxpbmUgdG9vIGJpZyEiLCBhcmcpOworfQorCitzdGF0aWMgdm9pZCBwcm9tX2FkZF9tZW1vcnkodm9pZCkKK3sKKwlzdHJ1Y3QgbmxtX2Jvb3RfbWVtX21hcCAqYm9vdG07CisJdTY0IHN0YXJ0LCBzaXplOworCXU2NCBwcmVmX2JhY2t1cCA9IDUxMjsgIC8qIGF2b2lkIHByZWYgd2Fsa2luZyBiZXlvbmQgZW5kICovCisJaW50IGk7CisKKwlib290bSA9ICh2b2lkICopKGxvbmcpbmxtX3Byb21faW5mby5wc2JfbWVtX21hcDsKKwlmb3IgKGkgPSAwOyBpIDwgYm9vdG0tPm5yX21hcDsgaSsrKSB7CisJCWlmIChib290bS0+bWFwW2ldLnR5cGUgIT0gQk9PVF9NRU1fUkFNKQorCQkJY29udGludWU7CisJCXN0YXJ0ID0gYm9vdG0tPm1hcFtpXS5hZGRyOworCQlzaXplICAgPSBib290bS0+bWFwW2ldLnNpemU7CisKKwkJLyogV29yayBhcm91bmQgZm9yIHVzaW5nIGJvb3Rsb2FkZXIgbWVtICovCisJCWlmIChpID09IDAgJiYgc3RhcnQgPT0gMCAmJiBzaXplID09IDB4MGMwMDAwMDApCisJCQlzaXplID0gMHgwZmYwMDAwMDsKKworCQlhZGRfbWVtb3J5X3JlZ2lvbihzdGFydCwgc2l6ZSAtIHByZWZfYmFja3VwLCBCT09UX01FTV9SQU0pOworCX0KK30KKwordm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCit7CisJaW50ICphcmd2LCAqZW52cDsJCS8qIHBhc3NlZCBhcyAzMiBiaXQgcHRycyAqLworCXN0cnVjdCBwc2JfaW5mbyAqcHJvbV9pbmZvcDsKKworCS8qIHRydW5jYXRlIHRvIDMyIGJpdCBhbmQgc2lnbiBleHRlbmQgYWxsIGFyZ3MgKi8KKwlhcmd2ID0gKGludCAqKShsb25nKShpbnQpZndfYXJnMTsKKwllbnZwID0gKGludCAqKShsb25nKShpbnQpZndfYXJnMjsKKwlwcm9tX2luZm9wID0gKHN0cnVjdCBwc2JfaW5mbyAqKShsb25nKShpbnQpZndfYXJnMzsKKworCW5sbV9wcm9tX2luZm8gPSAqcHJvbV9pbmZvcDsKKworCW5sbV9lYXJseV9zZXJpYWxfc2V0dXAoKTsKKwlidWlsZF9hcmNzX2NtZGxpbmUoYXJndik7CisJbmxtX2NvbW1vbl9lYmFzZSA9IHJlYWRfYzBfZWJhc2UoKSAmICh+KCgxIDw8IDEyKSAtIDEpKTsKKwlwcm9tX2FkZF9tZW1vcnkoKTsKKworI2lmZGVmIENPTkZJR19TTVAKKwlubG1fd2FrZXVwX3NlY29uZGFyeV9jcHVzKG5sbV9wcm9tX2luZm8ub25saW5lX2NwdV9tYXApOworCXJlZ2lzdGVyX3NtcF9vcHMoJm5sbV9zbXBfb3BzKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL25ldGxvZ2ljL3hsci9zbXAuYyBiL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvc21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ5NWE3ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvc21wLmMKQEAgLTAsMCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgorCisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy9taXBzLWV4dG5zLmg+CisKKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL2lvbWFwLmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3hsci9waWMuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL3hsci5oPgorCit2b2lkIGNvcmVfc2VuZF9pcGkoaW50IGxvZ2ljYWxfY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKQoreworCWludCBjcHUgPSBjcHVfbG9naWNhbF9tYXAobG9naWNhbF9jcHUpOworCXUzMiB0aWQgPSBjcHUgJiAweDM7CisJdTMyIHBpZCA9IChjcHUgPj4gMikgJiAweDA3OworCXUzMiBpcGkgPSAodGlkIDw8IDE2KSB8IChwaWQgPDwgMjApOworCisJaWYgKGFjdGlvbiAmIFNNUF9DQUxMX0ZVTkNUSU9OKQorCQlpcGkgfD0gSVJRX0lQSV9TTVBfRlVOQ1RJT047CisJZWxzZSBpZiAoYWN0aW9uICYgU01QX1JFU0NIRURVTEVfWU9VUlNFTEYpCisJCWlwaSB8PSBJUlFfSVBJX1NNUF9SRVNDSEVEVUxFOworCWVsc2UKKwkJcmV0dXJuOworCisJcGljX3NlbmRfaXBpKGlwaSk7Cit9CisKK3ZvaWQgbmxtX3NlbmRfaXBpX3NpbmdsZShpbnQgY3B1LCB1bnNpZ25lZCBpbnQgYWN0aW9uKQoreworCWNvcmVfc2VuZF9pcGkoY3B1LCBhY3Rpb24pOworfQorCit2b2lkIG5sbV9zZW5kX2lwaV9tYXNrKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCB1bnNpZ25lZCBpbnQgYWN0aW9uKQoreworCWludCBjcHU7CisKKwlmb3JfZWFjaF9jcHUoY3B1LCBtYXNrKSB7CisJCWNvcmVfc2VuZF9pcGkoY3B1LCBhY3Rpb24pOworCX0KK30KKworLyogSVJRX0lQSV9TTVBfRlVOQ1RJT04gSGFuZGxlciAqLwordm9pZCBubG1fc21wX2Z1bmN0aW9uX2lwaV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKK30KKworLyogSVJRX0lQSV9TTVBfUkVTQ0hFRFVMRSAgaGFuZGxlciAqLwordm9pZCBubG1fc21wX3Jlc2NoZWRfaXBpX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXNldF9uZWVkX3Jlc2NoZWQoKTsKK30KKwordm9pZCBubG1fY29tbW9uX2lwaV9oYW5kbGVyKGludCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmIChpcnEgPT0gSVJRX0lQSV9TTVBfRlVOQ1RJT04pIHsKKwkJc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CisJfSBlbHNlIHsKKwkJLyogQW5ub3VuY2UgdGhhdCB3ZSBhcmUgZm9yIHJlc2NoZHVsaW5nICovCisJCXNldF9uZWVkX3Jlc2NoZWQoKTsKKwl9Cit9CisKKy8qCisgKiBDYWxsZWQgYmVmb3JlIGdvaW5nIGludG8gbWlwcyBjb2RlLCBlYXJseSBjcHUgaW5pdAorICovCit2b2lkIG5sbV9lYXJseV9pbml0X3NlY29uZGFyeSh2b2lkKQoreworCXdyaXRlX2MwX2ViYXNlKCh1aW50MzJfdClubG1fY29tbW9uX2ViYXNlKTsKKwkvKiBUTEIgcGFydGl0aW9uIGhlcmUgbGF0ZXIgKi8KK30KKworLyoKKyAqIENvZGUgdG8gcnVuIG9uIHNlY29uZGFyeSBqdXN0IGFmdGVyIHByb2JpbmcgdGhlIENQVQorICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgbmxtX2luaXRfc2Vjb25kYXJ5KHZvaWQpCit7CisJbmxtX3NtcF9pcnFfaW5pdCgpOworfQorCit2b2lkIG5sbV9zbXBfZmluaXNoKHZvaWQpCit7CisjaWZkZWYgbm90eWV0CisJbmxtX2NvbW1vbl9tc2dyaW5nX2NwdV9pbml0KCk7CisjZW5kaWYKK30KKwordm9pZCBubG1fY3B1c19kb25lKHZvaWQpCit7Cit9CisKKy8qCisgKiBCb290IGFsbCBvdGhlciBjcHVzIGluIHRoZSBzeXN0ZW0sIGluaXRpYWxpemUgdGhlbSwgYW5kIGJyaW5nIHRoZW0gaW50bworICogdGhlIGJvb3QgZnVuY3Rpb24KKyAqLworaW50IG5sbV9jcHVfdW5ibG9ja1tOUl9DUFVTXTsKK2ludCBubG1fY3B1X3JlYWR5W05SX0NQVVNdOwordW5zaWduZWQgbG9uZyBubG1fbmV4dF9ncDsKK3Vuc2lnbmVkIGxvbmcgbmxtX25leHRfc3A7CitjcHVtYXNrX3QgcGh5c19jcHVfcHJlc2VudF9tYXA7CisKK3ZvaWQgbmxtX2Jvb3Rfc2Vjb25kYXJ5KGludCBsb2dpY2FsX2NwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQoreworCXVuc2lnbmVkIGxvbmcgZ3AgPSAodW5zaWduZWQgbG9uZyl0YXNrX3RocmVhZF9pbmZvKGlkbGUpOworCXVuc2lnbmVkIGxvbmcgc3AgPSAodW5zaWduZWQgbG9uZylfX0tTVEtfVE9TKGlkbGUpOworCWludCBjcHUgPSBjcHVfbG9naWNhbF9tYXAobG9naWNhbF9jcHUpOworCisJbmxtX25leHRfc3AgPSBzcDsKKwlubG1fbmV4dF9ncCA9IGdwOworCisJLyogYmFycmllciAqLworCV9fc3luYygpOworCW5sbV9jcHVfdW5ibG9ja1tjcHVdID0gMTsKK30KKwordm9pZCBfX2luaXQgbmxtX3NtcF9zZXR1cCh2b2lkKQoreworCXVuc2lnbmVkIGludCBib290X2NwdTsKKwlpbnQgbnVtX2NwdXMsIGk7CisKKwlib290X2NwdSA9IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworCWNwdXNfY2xlYXIocGh5c19jcHVfcHJlc2VudF9tYXApOworCisJY3B1X3NldChib290X2NwdSwgcGh5c19jcHVfcHJlc2VudF9tYXApOworCV9fY3B1X251bWJlcl9tYXBbYm9vdF9jcHVdID0gMDsKKwlfX2NwdV9sb2dpY2FsX21hcFswXSA9IGJvb3RfY3B1OworCWNwdV9zZXQoMCwgY3B1X3Bvc3NpYmxlX21hcCk7CisKKwludW1fY3B1cyA9IDE7CisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQlpZiAobmxtX2NwdV9yZWFkeVtpXSkgeworCQkJY3B1X3NldChpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CisJCQlfX2NwdV9udW1iZXJfbWFwW2ldID0gbnVtX2NwdXM7CisJCQlfX2NwdV9sb2dpY2FsX21hcFtudW1fY3B1c10gPSBpOworCQkJY3B1X3NldChudW1fY3B1cywgY3B1X3Bvc3NpYmxlX21hcCk7CisJCQkrK251bV9jcHVzOworCQl9CisJfQorCisJcHJfaW5mbygiUGh5cyBDUFUgcHJlc2VudCBtYXA6ICVseCwgcG9zc2libGUgbWFwICVseFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcpcGh5c19jcHVfcHJlc2VudF9tYXAuYml0c1swXSwKKwkJKHVuc2lnbmVkIGxvbmcpY3B1X3Bvc3NpYmxlX21hcC5iaXRzWzBdKTsKKworCXByX2luZm8oIkRldGVjdGVkICVpIFNsYXZlIENQVShzKVxuIiwgbnVtX2NwdXMpOworfQorCit2b2lkIG5sbV9wcmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQoreworfQorCitzdHJ1Y3QgcGxhdF9zbXBfb3BzIG5sbV9zbXBfb3BzID0geworCS5zZW5kX2lwaV9zaW5nbGUJPSBubG1fc2VuZF9pcGlfc2luZ2xlLAorCS5zZW5kX2lwaV9tYXNrCQk9IG5sbV9zZW5kX2lwaV9tYXNrLAorCS5pbml0X3NlY29uZGFyeQkJPSBubG1faW5pdF9zZWNvbmRhcnksCisJLnNtcF9maW5pc2gJCT0gbmxtX3NtcF9maW5pc2gsCisJLmNwdXNfZG9uZQkJPSBubG1fY3B1c19kb25lLAorCS5ib290X3NlY29uZGFyeQkJPSBubG1fYm9vdF9zZWNvbmRhcnksCisJLnNtcF9zZXR1cAkJPSBubG1fc21wX3NldHVwLAorCS5wcmVwYXJlX2NwdXMJCT0gbmxtX3ByZXBhcmVfY3B1cywKK307CisKK3Vuc2lnbmVkIGxvbmcgc2Vjb25kYXJ5X2VudHJ5X3BvaW50OworCitpbnQgbmxtX3dha2V1cF9zZWNvbmRhcnlfY3B1cyh1MzIgd2FrZXVwX21hc2spCit7CisJdW5zaWduZWQgaW50IHRpZCwgcGlkLCBpcGksIGksIGJvb3RfY3B1OworCXZvaWQgKnJlc2V0X3ZlYzsKKworCXNlY29uZGFyeV9lbnRyeV9wb2ludCA9ICh1bnNpZ25lZCBsb25nKXByb21fcHJlX2Jvb3Rfc2Vjb25kYXJ5X2NwdXM7CisJcmVzZXRfdmVjID0gKHZvaWQgKilDS1NFRzFBRERSKDB4MWZjMDAwMDApOworCW1lbWNweShyZXNldF92ZWMsIG5sbV9ib290X3NtcF9ubWksIDB4ODApOworCWJvb3RfY3B1ID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCWlmIChpID09IGJvb3RfY3B1KQorCQkJY29udGludWU7CisJCWlmICh3YWtldXBfbWFzayAmICgxdSA8PCBpKSkgeworCQkJdGlkID0gaSAmIDB4MzsKKwkJCXBpZCA9IChpID4+IDIpICYgMHg3OworCQkJaXBpID0gKHRpZCA8PCAxNikgfCAocGlkIDw8IDIwKSB8ICgxIDw8IDgpOworCQkJcGljX3NlbmRfaXBpKGlwaSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvc21wYm9vdC5TIGIvYXJjaC9taXBzL25ldGxvZ2ljL3hsci9zbXBib290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhlMDc0NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvc21wYm9vdC5TCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3JlZ2RlZi5oPgorI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgorCisKKy8qIERvbid0IGp1bXAgdG8gbGludXggZnVuY3Rpb24gZnJvbSBCb290bG9hZGVyIHN0YWNrLiBDaGFuZ2UgaXQKKyAqIGhlcmUuIEtlcm5lbCBtaWdodCBhbGxvY2F0ZSBib290bG9hZGVyIG1lbW9yeSBiZWZvcmUgYWxsIHRoZSBDUFVzIGFyZQorICogYnJvdWdodCB1cCAoZWc6IElub2RlIGNhY2hlIHJlZ2lvbikgYW5kIHdlIGJldHRlciBkb24ndCBvdmVyd3JpdGUgdGhpcworICogbWVtb3J5CisgKi8KK05FU1RFRChwcm9tX3ByZV9ib290X3NlY29uZGFyeV9jcHVzLCAxNiwgc3ApCisJLnNldAltaXBzNjQKKwltZmMwCXQwLCAkMTUsIDEJIyByZWFkIGViYXNlCisJYW5kaQl0MCwgMHgxZgkjIHQwIGhhcyB0aGUgcHJvY2Vzc29yX2lkKCkKKwlzbGwJdDAsIDIJCSMgb2Zmc2V0IGluIGNwdSBhcnJheQorCisJUFRSX0xBCXQxLCBubG1fY3B1X3JlYWR5ICMgbWFyayBDUFUgcmVhZHkKKwlQVFJfQUREVSB0MSwgdDAKKwlsaQl0MiwgMQorCXN3CXQyLCAwKHQxKQorCisJUFRSX0xBCXQxLCBubG1fY3B1X3VuYmxvY2sKKwlQVFJfQUREVSB0MSwgdDAKKzE6CWx3CXQyLCAwKHQxKQkjIHdhaXQgdGlsbCB1bmJsb2NrZWQKKwliZXF6CXQyLCAxYgorCW5vcAorCisJUFRSX0xBCXQxLCBubG1fbmV4dF9zcAorCVBUUl9MCXNwLCAwKHQxKQorCVBUUl9MQQl0MSwgbmxtX25leHRfZ3AKKwlQVFJfTAlncCwgMCh0MSkKKworCVBUUl9MQQl0MCwgbmxtX2Vhcmx5X2luaXRfc2Vjb25kYXJ5CisJamFscgl0MAorCW5vcAorCisJUFRSX0xBCXQwLCBzbXBfYm9vdHN0cmFwCisJanIJdDAKKwlub3AKK0VORChwcm9tX3ByZV9ib290X3NlY29uZGFyeV9jcHVzKQorCitORVNURUQobmxtX2Jvb3Rfc21wX25taSwgMCwgc3ApCisJLnNldCBwdXNoCisJLnNldCBub2F0CisJLnNldCBtaXBzNjQKKwkuc2V0IG5vcmVvcmRlcgorCisJLyogQ2xlYXIgdGhlICBOTUkgYW5kIEJFViBiaXRzICovCisJTUZDMAlrMCwgQ1AwX1NUQVRVUworCWxpIAlrMSwgMHhmZmI3ZmZmZgorCWFuZAlrMCwgazAsIGsxCisJTVRDMAlrMCwgQ1AwX1NUQVRVUworCisJUFRSX0xBICBrMSwgc2Vjb25kYXJ5X2VudHJ5X3BvaW50CisJUFRSX0wJazAsIDAoazEpCisJanIJazAKKwlub3AKKwkuc2V0IHBvcAorRU5EKG5sbV9ib290X3NtcF9ubWkpCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbmV0bG9naWMveGxyL3RpbWUuYyBiL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkODFiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3RpbWUuYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDMtMjAxMSBOZXRMb2dpYyBNaWNyb3N5c3RlbXMsIEluYy4gKE5ldExvZ2ljKS4gQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlIE5ldExvZ2ljCisgKiBsaWNlbnNlIGJlbG93OgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRMT0dJQyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTkVUTE9HSUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorCisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL3BzYi1ib290aW5mby5oPgorCit1bnNpZ25lZCBpbnQgX19jcHVpbml0IGdldF9jMF9jb21wYXJlX2ludCh2b2lkKQoreworCXJldHVybiBJUlFfVElNRVI7Cit9CisKK3ZvaWQgX19pbml0IHBsYXRfdGltZV9pbml0KHZvaWQpCit7CisJbWlwc19ocHRfZnJlcXVlbmN5ID0gbmxtX3Byb21faW5mby5jcHVfZnJlcXVlbmN5OworCXByX2luZm8oIk1JUFMgY291bnRlciBmcmVxdWVuY3kgWyVsZF1cbiIsCisJCSh1bnNpZ25lZCBsb25nKW1pcHNfaHB0X2ZyZXF1ZW5jeSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbmV0bG9naWMveGxyL3hscl9jb25zb2xlLmMgYi9hcmNoL21pcHMvbmV0bG9naWMveGxyL3hscl9jb25zb2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU5ZGYwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9uZXRsb2dpYy94bHIveGxyX2NvbnNvbGUuYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDMtMjAxMSBOZXRMb2dpYyBNaWNyb3N5c3RlbXMsIEluYy4gKE5ldExvZ2ljKS4gQWxsIHJpZ2h0cworICogcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlIE5ldExvZ2ljCisgKiBsaWNlbnNlIGJlbG93OgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBORVRMT0dJQyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgTkVUTE9HSUMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKKyAqIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCisgKiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCisgKiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL2lvbWFwLmg+CisKK3ZvaWQgcHJvbV9wdXRjaGFyKGNoYXIgYykKK3sKKwlubG1fcmVnX3QgKm1taW87CisKKwltbWlvID0gbmV0bG9naWNfaW9fbW1pbyhORVRMT0dJQ19JT19VQVJUXzBfT0ZGU0VUKTsKKwl3aGlsZSAobmV0bG9naWNfcmVhZF9yZWcobW1pbywgMHg1KSA9PSAwKQorCQk7CisJbmV0bG9naWNfd3JpdGVfcmVnKG1taW8sIDB4MCwgYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL01ha2VmaWxlIGIvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQppbmRleCBjOTIwOWNhLi40ZGY4Nzk5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKQEAgLTQxLDYgKzQxLDcgQEAKIG9iai0kKENPTkZJR19TSUJZVEVfQkNNMTEyWCkJKz0gZml4dXAtc2IxMjUwLm8gcGNpLXNiMTI1MC5vCiBvYmotJChDT05GSUdfU0lCWVRFX0JDTTF4ODApCSs9IHBjaS1iY20xNDgwLm8gcGNpLWJjbTE0ODBodC5vCiBvYmotJChDT05GSUdfU05JX1JNKQkJKz0gZml4dXAtc25pLm8gb3BzLXNuaS5vCitvYmotJChDT05GSUdfU09DX1hXQVkpCQkrPSBwY2ktbGFudGlxLm8gb3BzLWxhbnRpcS5vCiBvYmotJChDT05GSUdfVEFOQkFDX1RCMDIxOSkJKz0gZml4dXAtdGIwMjE5Lm8KIG9iai0kKENPTkZJR19UQU5CQUNfVEIwMjI2KQkrPSBmaXh1cC10YjAyMjYubwogb2JqLSQoQ09ORklHX1RBTkJBQ19UQjAyODcpCSs9IGZpeHVwLXRiMDI4Ny5vCkBAIC01NSw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfV1JfUFBNQykJCSs9IGZpeHVwLXdycHBtYy5vCiBvYmotJChDT05GSUdfTUlLUk9USUtfUkI1MzIpCSs9IHBjaS1yYzMyNDM0Lm8gb3BzLXJjMzI0MzQubyBmaXh1cC1yYzMyNDM0Lm8KIG9iai0kKENPTkZJR19DUFVfQ0FWSVVNX09DVEVPTikJKz0gcGNpLW9jdGVvbi5vIHBjaWUtb2N0ZW9uLm8KK29iai0kKENPTkZJR19OTE1fWExSKQkJKz0gcGNpLXhsci5vCiAKIGlmZGVmIENPTkZJR19QQ0lfTVNJCiBvYmotJChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pCSs9IG1zaS1vY3Rlb24ubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9vcHMtbGFudGlxLmMgYi9hcmNoL21pcHMvcGNpL29wcy1sYW50aXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjJhZmI1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9vcHMtbGFudGlxLmMKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSA8bGFudGlxX3NvYy5oPgorCisjaW5jbHVkZSAicGNpLWxhbnRpcS5oIgorCisjZGVmaW5lIExUUV9QQ0lfQ0ZHX0JVU05VTV9TSEYgMTYKKyNkZWZpbmUgTFRRX1BDSV9DRkdfREVWTlVNX1NIRiAxMQorI2RlZmluZSBMVFFfUENJX0NGR19GVU5OVU1fU0hGIDgKKworI2RlZmluZSBQQ0lfQUNDRVNTX1JFQUQgIDAKKyNkZWZpbmUgUENJX0FDQ0VTU19XUklURSAxCisKK3N0YXRpYyBpbnQgbHRxX3BjaV9jb25maWdfYWNjZXNzKHVuc2lnbmVkIGNoYXIgYWNjZXNzX3R5cGUsIHN0cnVjdCBwY2lfYnVzICpidXMsCisJdW5zaWduZWQgaW50IGRldmZuLCB1bnNpZ25lZCBpbnQgd2hlcmUsIHUzMiAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGNmZ19iYXNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRlbXA7CisKKwkvKiB3ZSBzdXBwb3J0IHNsb3QgZnJvbSAwIHRvIDE1IGRldl9mbiAmIDB4NjggKEFEMjkpIGlzIHRoZQorCSAgIFNvQyBpdHNlbGYgKi8KKwlpZiAoKGJ1cy0+bnVtYmVyICE9IDApIHx8ICgoZGV2Zm4gJiAweGY4KSA+IDB4NzgpCisJCXx8ICgoZGV2Zm4gJiAweGY4KSA9PSAwKSB8fCAoKGRldmZuICYgMHhmOCkgPT0gMHg2OCkpCisJCXJldHVybiAxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVidV9sb2NrLCBmbGFncyk7CisKKwljZmdfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBsdHFfcGNpX21hcHBlZF9jZmc7CisJY2ZnX2Jhc2UgfD0gKGJ1cy0+bnVtYmVyIDw8IExUUV9QQ0lfQ0ZHX0JVU05VTV9TSEYpIHwgKGRldmZuIDw8CisJCQlMVFFfUENJX0NGR19GVU5OVU1fU0hGKSB8ICh3aGVyZSAmIH4weDMpOworCisJLyogUGVyZm9ybSBhY2Nlc3MgKi8KKwlpZiAoYWNjZXNzX3R5cGUgPT0gUENJX0FDQ0VTU19XUklURSkgeworCQlsdHFfdzMyKHN3YWIzMigqZGF0YSksICgodTMyICopY2ZnX2Jhc2UpKTsKKwl9IGVsc2UgeworCQkqZGF0YSA9IGx0cV9yMzIoKCh1MzIgKikoY2ZnX2Jhc2UpKSk7CisJCSpkYXRhID0gc3dhYjMyKCpkYXRhKTsKKwl9CisJd21iKCk7CisKKwkvKiBjbGVhbiBwb3NzaWJsZSBNYXN0ZXIgYWJvcnQgKi8KKwljZmdfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBsdHFfcGNpX21hcHBlZF9jZmc7CisJY2ZnX2Jhc2UgfD0gKDB4MCA8PCBMVFFfUENJX0NGR19GVU5OVU1fU0hGKSArIDQ7CisJdGVtcCA9IGx0cV9yMzIoKCh1MzIgKikoY2ZnX2Jhc2UpKSk7CisJdGVtcCA9IHN3YWIzMih0ZW1wKTsKKwljZmdfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBsdHFfcGNpX21hcHBlZF9jZmc7CisJY2ZnX2Jhc2UgfD0gKDB4NjggPDwgTFRRX1BDSV9DRkdfRlVOTlVNX1NIRikgKyA0OworCWx0cV93MzIodGVtcCwgKCh1MzIgKiljZmdfYmFzZSkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKworCWlmICgoKCpkYXRhKSA9PSAweGZmZmZmZmZmKSAmJiAoYWNjZXNzX3R5cGUgPT0gUENJX0FDQ0VTU19SRUFEKSkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGx0cV9wY2lfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiAqdmFsKQoreworCXUzMiBkYXRhID0gMDsKKworCWlmIChsdHFfcGNpX2NvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19SRUFELCBidXMsIGRldmZuLCB3aGVyZSwgJmRhdGEpKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJaWYgKHNpemUgPT0gMSkKKwkJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAzKSA8PCAzKSkgJiAweGZmOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAzKSA8PCAzKSkgJiAweGZmZmY7CisJZWxzZQorCQkqdmFsID0gZGF0YTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK2ludCBsdHFfcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKK3sKKwl1MzIgZGF0YSA9IDA7CisKKwlpZiAoc2l6ZSA9PSA0KSB7CisJCWRhdGEgPSB2YWw7CisJfSBlbHNlIHsKKwkJaWYgKGx0cV9wY2lfY29uZmlnX2FjY2VzcyhQQ0lfQUNDRVNTX1JFQUQsIGJ1cywKKwkJCQlkZXZmbiwgd2hlcmUsICZkYXRhKSkKKwkJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwkJaWYgKHNpemUgPT0gMSkKKwkJCWRhdGEgPSAoZGF0YSAmIH4oMHhmZiA8PCAoKHdoZXJlICYgMykgPDwgMykpKSB8CisJCQkJKHZhbCA8PCAoKHdoZXJlICYgMykgPDwgMykpOworCQllbHNlIGlmIChzaXplID09IDIpCisJCQlkYXRhID0gKGRhdGEgJiB+KDB4ZmZmZiA8PCAoKHdoZXJlICYgMykgPDwgMykpKSB8CisJCQkJKHZhbCA8PCAoKHdoZXJlICYgMykgPDwgMykpOworCX0KKworCWlmIChsdHFfcGNpX2NvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19XUklURSwgYnVzLCBkZXZmbiwgd2hlcmUsICZkYXRhKSkKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL3BjaS1sYW50aXEuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWxhbnRpcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwM2Q3NDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvcGNpL3BjaS1sYW50aXEuYwpAQCAtMCwwICsxLDI5NyBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAxMCBKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9wY2kuaD4KKyNpbmNsdWRlIDxhc20vZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKyNpbmNsdWRlIDxsYW50aXFfaXJxLmg+CisjaW5jbHVkZSA8bGFudGlxX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlICJwY2ktbGFudGlxLmgiCisKKyNkZWZpbmUgTFRRX1BDSV9DRkdfQkFTRQkJMHgxNzAwMDAwMAorI2RlZmluZSBMVFFfUENJX0NGR19TSVpFCQkweDAwMDA4MDAwCisjZGVmaW5lIExUUV9QQ0lfTUVNX0JBU0UJCTB4MTgwMDAwMDAKKyNkZWZpbmUgTFRRX1BDSV9NRU1fU0laRQkJMHgwMjAwMDAwMAorI2RlZmluZSBMVFFfUENJX0lPX0JBU0UJCQkweDFBRTAwMDAwCisjZGVmaW5lIExUUV9QQ0lfSU9fU0laRQkJCTB4MDAyMDAwMDAKKworI2RlZmluZSBQQ0lfQ1JfRkNJX0FERFJfTUFQMAkJMHgwMEMwCisjZGVmaW5lIFBDSV9DUl9GQ0lfQUREUl9NQVAxCQkweDAwQzQKKyNkZWZpbmUgUENJX0NSX0ZDSV9BRERSX01BUDIJCTB4MDBDOAorI2RlZmluZSBQQ0lfQ1JfRkNJX0FERFJfTUFQMwkJMHgwMENDCisjZGVmaW5lIFBDSV9DUl9GQ0lfQUREUl9NQVA0CQkweDAwRDAKKyNkZWZpbmUgUENJX0NSX0ZDSV9BRERSX01BUDUJCTB4MDBENAorI2RlZmluZSBQQ0lfQ1JfRkNJX0FERFJfTUFQNgkJMHgwMEQ4CisjZGVmaW5lIFBDSV9DUl9GQ0lfQUREUl9NQVA3CQkweDAwREMKKyNkZWZpbmUgUENJX0NSX0NMS19DVFJMCQkJMHgwMDAwCisjZGVmaW5lIFBDSV9DUl9QQ0lfTU9ECQkJMHgwMDMwCisjZGVmaW5lIFBDSV9DUl9QQ19BUkIJCQkweDAwODAKKyNkZWZpbmUgUENJX0NSX0ZDSV9BRERSX01BUDExaGcJCTB4MDBFNAorI2RlZmluZSBQQ0lfQ1JfQkFSMTFNQVNLCQkweDAwNDQKKyNkZWZpbmUgUENJX0NSX0JBUjEyTUFTSwkJMHgwMDQ4CisjZGVmaW5lIFBDSV9DUl9CQVIxM01BU0sJCTB4MDA0QworI2RlZmluZSBQQ0lfQ1NfQkFTRV9BRERSMQkJMHgwMDEwCisjZGVmaW5lIFBDSV9DUl9QQ0lfQUREUl9NQVAxMQkJMHgwMDY0CisjZGVmaW5lIFBDSV9DUl9GQ0lfQlVSU1RfTEVOR1RICQkweDAwRTgKKyNkZWZpbmUgUENJX0NSX1BDSV9FT0kJCQkweDAwMkMKKyNkZWZpbmUgUENJX0NTX1NUU19DTUQJCQkweDAwMDQKKworI2RlZmluZSBQQ0lfTUFTVEVSMF9SRVFfTUFTS18yQklUUwk4CisjZGVmaW5lIFBDSV9NQVNURVIxX1JFUV9NQVNLXzJCSVRTCTEwCisjZGVmaW5lIFBDSV9NQVNURVIyX1JFUV9NQVNLXzJCSVRTCTEyCisjZGVmaW5lIElOVEVSTkFMX0FSQl9FTkFCTEVfQklUCQkwCisKKyNkZWZpbmUgTFRRX0NHVV9JRkNDUgkJMHgwMDE4CisjZGVmaW5lIExUUV9DR1VfUENJQ1IJCTB4MDAzNAorCisjZGVmaW5lIGx0cV9wY2lfdzMyKHgsIHkpCWx0cV93MzIoKHgpLCBsdHFfcGNpX21lbWJhc2UgKyAoeSkpCisjZGVmaW5lIGx0cV9wY2lfcjMyKHgpCQlsdHFfcjMyKGx0cV9wY2lfbWVtYmFzZSArICh4KSkKKworI2RlZmluZSBsdHFfcGNpX2NmZ193MzIoeCwgeSkJbHRxX3czMigoeCksIGx0cV9wY2lfbWFwcGVkX2NmZyArICh5KSkKKyNkZWZpbmUgbHRxX3BjaV9jZmdfcjMyKHgpCWx0cV9yMzIobHRxX3BjaV9tYXBwZWRfY2ZnICsgKHgpKQorCitzdHJ1Y3QgbHRxX3BjaV9ncGlvX21hcCB7CisJaW50IHBpbjsKKwlpbnQgYWx0MDsKKwlpbnQgYWx0MTsKKwlpbnQgZGlyOworCWNoYXIgKm5hbWU7Cit9OworCisvKiB0aGUgcGNpIGNvcmUgY2FuIG1ha2UgdXNlIG9mIHRoZSBmb2xsb3dpbmcgZ3Bpb3MgKi8KK3N0YXRpYyBzdHJ1Y3QgbHRxX3BjaV9ncGlvX21hcCBsdHFfcGNpX2dwaW9fbWFwW10gPSB7CisJeyAwLCAxLCAwLCAwLCAicGNpLWV4aW4wIiB9LAorCXsgMSwgMSwgMCwgMCwgInBjaS1leGluMSIgfSwKKwl7IDIsIDEsIDAsIDAsICJwY2ktZXhpbjIiIH0sCisJeyAzOSwgMSwgMCwgMCwgInBjaS1leGluMyIgfSwKKwl7IDEwLCAxLCAwLCAwLCAicGNpLWV4aW40IiB9LAorCXsgOSwgMSwgMCwgMCwgInBjaS1leGluNSIgfSwKKwl7IDMwLCAxLCAwLCAxLCAicGNpLWdudDEiIH0sCisJeyAyMywgMSwgMCwgMSwgInBjaS1nbnQyIiB9LAorCXsgMTksIDEsIDAsIDEsICJwY2ktZ250MyIgfSwKKwl7IDM4LCAxLCAwLCAxLCAicGNpLWdudDQiIH0sCisJeyAyOSwgMSwgMCwgMCwgInBjaS1yZXExIiB9LAorCXsgMzEsIDEsIDAsIDAsICJwY2ktcmVxMiIgfSwKKwl7IDMsIDEsIDAsIDAsICJwY2ktcmVxMyIgfSwKKwl7IDM3LCAxLCAwLCAwLCAicGNpLXJlcTQiIH0sCit9OworCitfX2lvbWVtIHZvaWQgKmx0cV9wY2lfbWFwcGVkX2NmZzsKK3N0YXRpYyBfX2lvbWVtIHZvaWQgKmx0cV9wY2lfbWVtYmFzZTsKKworaW50ICgqbHRxcGNpX3BsYXRfZGV2X2luaXQpKHN0cnVjdCBwY2lfZGV2ICpkZXYpID0gTlVMTDsKKworLyogU2luY2UgdGhlIFBDSSBSRVEgcGlucyBjYW4gYmUgcmV1c2VkIGZvciBvdGhlciBmdW5jdGlvbmFsaXR5LCBtYWtlIGl0CisgICBwb3NzaWJsZSB0byBleGNsdWRlIHRob3NlIGZyb20gaW50ZXJwcmV0YXRpb24gYnkgdGhlIFBDSSBjb250cm9sbGVyICovCitzdGF0aWMgaW50IGx0cV9wY2lfcmVxX21hc2sgPSAweGY7CisKK3N0YXRpYyBpbnQgKmx0cV9wY2lfaXJxX21hcDsKKworc3RydWN0IHBjaV9vcHMgbHRxX3BjaV9vcHMgPSB7CisJLnJlYWQJPSBsdHFfcGNpX3JlYWRfY29uZmlnX2R3b3JkLAorCS53cml0ZQk9IGx0cV9wY2lfd3JpdGVfY29uZmlnX2R3b3JkCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9pb19yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJwY2kgaW8gc3BhY2UiLAorCS5zdGFydAk9IExUUV9QQ0lfSU9fQkFTRSwKKwkuZW5kCT0gTFRRX1BDSV9JT19CQVNFICsgTFRRX1BDSV9JT19TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9tZW1fcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAicGNpIG1lbW9yeSBzcGFjZSIsCisJLnN0YXJ0CT0gTFRRX1BDSV9NRU1fQkFTRSwKKwkuZW5kCT0gTFRRX1BDSV9NRU1fQkFTRSArIExUUV9QQ0lfTUVNX1NJWkUgLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCit9OworCitzdGF0aWMgc3RydWN0IHBjaV9jb250cm9sbGVyIGx0cV9wY2lfY29udHJvbGxlciA9IHsKKwkucGNpX29wcwk9ICZsdHFfcGNpX29wcywKKwkubWVtX3Jlc291cmNlCT0gJnBjaV9tZW1fcmVzb3VyY2UsCisJLm1lbV9vZmZzZXQJPSAweDAwMDAwMDAwVUwsCisJLmlvX3Jlc291cmNlCT0gJnBjaV9pb19yZXNvdXJjZSwKKwkuaW9fb2Zmc2V0CT0gMHgwMDAwMDAwMFVMLAorfTsKKworaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWlmIChsdHFwY2lfcGxhdF9kZXZfaW5pdCkKKwkJcmV0dXJuIGx0cXBjaV9wbGF0X2Rldl9pbml0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBsdHFfY2FsY19iYXIxMW1hc2sodm9pZCkKK3sKKwl1MzIgbWVtLCBiYXIxMW1hc2s7CisKKwkvKiBCQVIxMU1BU0sgdmFsdWUgZGVwZW5kcyBvbiBhdmFpbGFibGUgbWVtb3J5IG9uIHN5c3RlbS4gKi8KKwltZW0gPSBudW1fcGh5c3BhZ2VzICogUEFHRV9TSVpFOworCWJhcjExbWFzayA9ICgweDBmZmZmZmYwICYgfigoMSA8PCAoZmxzKG1lbSkgLSAxKSkgLSAxKSkgfCA4OworCisJcmV0dXJuIGJhcjExbWFzazsKK30KKworc3RhdGljIHZvaWQgbHRxX3BjaV9zZXR1cF9ncGlvKGludCBncGlvKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGx0cV9wY2lfZ3Bpb19tYXApOyBpKyspIHsKKwkJaWYgKGdwaW8gJiAoMSA8PCBpKSkgeworCQkJbHRxX2dwaW9fcmVxdWVzdChsdHFfcGNpX2dwaW9fbWFwW2ldLnBpbiwKKwkJCQlsdHFfcGNpX2dwaW9fbWFwW2ldLmFsdDAsCisJCQkJbHRxX3BjaV9ncGlvX21hcFtpXS5hbHQxLAorCQkJCWx0cV9wY2lfZ3Bpb19tYXBbaV0uZGlyLAorCQkJCWx0cV9wY2lfZ3Bpb19tYXBbaV0ubmFtZSk7CisJCX0KKwl9CisJbHRxX2dwaW9fcmVxdWVzdCgyMSwgMCwgMCwgMSwgInBjaS1yZXNldCIpOworCWx0cV9wY2lfcmVxX21hc2sgPSAoZ3BpbyA+PiBQQ0lfUkVRX1NISUZUKSAmIFBDSV9SRVFfTUFTSzsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbHRxX3BjaV9zdGFydHVwKHN0cnVjdCBsdHFfcGNpX2RhdGEgKmNvbmYpCit7CisJdTMyIHRlbXBfYnVmZmVyOworCisJLyogc2V0IGNsb2NrIHRvIDMzTWh6ICovCisJbHRxX2NndV93MzIobHRxX2NndV9yMzIoTFRRX0NHVV9JRkNDUikgJiB+MHhmMDAwMDAsIExUUV9DR1VfSUZDQ1IpOworCWx0cV9jZ3VfdzMyKGx0cV9jZ3VfcjMyKExUUV9DR1VfSUZDQ1IpIHwgMHg4MDAwMDAsIExUUV9DR1VfSUZDQ1IpOworCisJLyogZXh0ZXJuYWwgb3IgaW50ZXJuYWwgY2xvY2sgPyAqLworCWlmIChjb25mLT5jbG9jaykgeworCQlsdHFfY2d1X3czMihsdHFfY2d1X3IzMihMVFFfQ0dVX0lGQ0NSKSAmIH4oMSA8PCAxNiksCisJCQlMVFFfQ0dVX0lGQ0NSKTsKKwkJbHRxX2NndV93MzIoKDEgPDwgMzApLCBMVFFfQ0dVX1BDSUNSKTsKKwl9IGVsc2UgeworCQlsdHFfY2d1X3czMihsdHFfY2d1X3IzMihMVFFfQ0dVX0lGQ0NSKSB8ICgxIDw8IDE2KSwKKwkJCUxUUV9DR1VfSUZDQ1IpOworCQlsdHFfY2d1X3czMigoMSA8PCAzMSkgfCAoMSA8PCAzMCksIExUUV9DR1VfUENJQ1IpOworCX0KKworCS8qIHNldHVwIHBjaSBjbG9jayBhbmQgZ3BpcyB1c2VkIGJ5IHBjaSAqLworCWx0cV9wY2lfc2V0dXBfZ3Bpbyhjb25mLT5ncGlvKTsKKworCS8qIGVuYWJsZSBhdXRvLXN3aXRjaGluZyBiZXR3ZWVuIFBDSSBhbmQgRUJVICovCisJbHRxX3BjaV93MzIoMHhhLCBQQ0lfQ1JfQ0xLX0NUUkwpOworCisJLyogYnVzeSwgaS5lLiBjb25maWd1cmF0aW9uIGlzIG5vdCBkb25lLCBQQ0kgYWNjZXNzIGhhcyB0byBiZSByZXRyaWVkICovCisJbHRxX3BjaV93MzIobHRxX3BjaV9yMzIoUENJX0NSX1BDSV9NT0QpICYgfigxIDw8IDI0KSwgUENJX0NSX1BDSV9NT0QpOworCXdtYigpOworCS8qIEJVUyBNYXN0ZXIvSU8vTUVNIGFjY2VzcyAqLworCWx0cV9wY2lfY2ZnX3czMihsdHFfcGNpX2NmZ19yMzIoUENJX0NTX1NUU19DTUQpIHwgNywgUENJX0NTX1NUU19DTUQpOworCisJLyogZW5hYmxlIGV4dGVybmFsIDIgUENJIG1hc3RlcnMgKi8KKwl0ZW1wX2J1ZmZlciA9IGx0cV9wY2lfcjMyKFBDSV9DUl9QQ19BUkIpOworCXRlbXBfYnVmZmVyICY9ICh+KGx0cV9wY2lfcmVxX21hc2sgPDwgMTYpKTsKKwkvKiBlbmFibGUgaW50ZXJuYWwgYXJiaXRlciAqLworCXRlbXBfYnVmZmVyIHw9ICgxIDw8IElOVEVSTkFMX0FSQl9FTkFCTEVfQklUKTsKKwkvKiBlbmFibGUgaW50ZXJuYWwgUENJIG1hc3RlciByZXFlc3QgKi8KKwl0ZW1wX2J1ZmZlciAmPSAofigzIDw8IFBDSV9NQVNURVIwX1JFUV9NQVNLXzJCSVRTKSk7CisKKwkvKiBlbmFibGUgRUJVIHJlcXVlc3QgKi8KKwl0ZW1wX2J1ZmZlciAmPSAofigzIDw8IFBDSV9NQVNURVIxX1JFUV9NQVNLXzJCSVRTKSk7CisKKwkvKiBlbmFibGUgYWxsIGV4dGVybmFsIG1hc3RlcnMgcmVxdWVzdCAqLworCXRlbXBfYnVmZmVyICY9ICh+KDMgPDwgUENJX01BU1RFUjJfUkVRX01BU0tfMkJJVFMpKTsKKwlsdHFfcGNpX3czMih0ZW1wX2J1ZmZlciwgUENJX0NSX1BDX0FSQik7CisJd21iKCk7CisKKwkvKiBzZXR1cCBCQVIgbWVtb3J5IHJlZ2lvbnMgKi8KKwlsdHFfcGNpX3czMigweDE4MDAwMDAwLCBQQ0lfQ1JfRkNJX0FERFJfTUFQMCk7CisJbHRxX3BjaV93MzIoMHgxODQwMDAwMCwgUENJX0NSX0ZDSV9BRERSX01BUDEpOworCWx0cV9wY2lfdzMyKDB4MTg4MDAwMDAsIFBDSV9DUl9GQ0lfQUREUl9NQVAyKTsKKwlsdHFfcGNpX3czMigweDE4YzAwMDAwLCBQQ0lfQ1JfRkNJX0FERFJfTUFQMyk7CisJbHRxX3BjaV93MzIoMHgxOTAwMDAwMCwgUENJX0NSX0ZDSV9BRERSX01BUDQpOworCWx0cV9wY2lfdzMyKDB4MTk0MDAwMDAsIFBDSV9DUl9GQ0lfQUREUl9NQVA1KTsKKwlsdHFfcGNpX3czMigweDE5ODAwMDAwLCBQQ0lfQ1JfRkNJX0FERFJfTUFQNik7CisJbHRxX3BjaV93MzIoMHgxOWMwMDAwMCwgUENJX0NSX0ZDSV9BRERSX01BUDcpOworCWx0cV9wY2lfdzMyKDB4MWFlMDAwMDAsIFBDSV9DUl9GQ0lfQUREUl9NQVAxMWhnKTsKKwlsdHFfcGNpX3czMihsdHFfY2FsY19iYXIxMW1hc2soKSwgUENJX0NSX0JBUjExTUFTSyk7CisJbHRxX3BjaV93MzIoMCwgUENJX0NSX1BDSV9BRERSX01BUDExKTsKKwlsdHFfcGNpX3czMigwLCBQQ0lfQ1NfQkFTRV9BRERSMSk7CisJLyogYm90aCBUWCBhbmQgUlggZW5kaWFuIHN3YXAgYXJlIGVuYWJsZWQgKi8KKwlsdHFfcGNpX3czMihsdHFfcGNpX3IzMihQQ0lfQ1JfUENJX0VPSSkgfCAzLCBQQ0lfQ1JfUENJX0VPSSk7CisJd21iKCk7CisJbHRxX3BjaV93MzIobHRxX3BjaV9yMzIoUENJX0NSX0JBUjEyTUFTSykgfCAweDgwMDAwMDAwLAorCQlQQ0lfQ1JfQkFSMTJNQVNLKTsKKwlsdHFfcGNpX3czMihsdHFfcGNpX3IzMihQQ0lfQ1JfQkFSMTNNQVNLKSB8IDB4ODAwMDAwMDAsCisJCVBDSV9DUl9CQVIxM01BU0spOworCS8qdXNlIDggZHcgYnVyc3QgbGVuZ3RoICovCisJbHRxX3BjaV93MzIoMHgzMDMsIFBDSV9DUl9GQ0lfQlVSU1RfTEVOR1RIKTsKKwlsdHFfcGNpX3czMihsdHFfcGNpX3IzMihQQ0lfQ1JfUENJX01PRCkgfCAoMSA8PCAyNCksIFBDSV9DUl9QQ0lfTU9EKTsKKwl3bWIoKTsKKworCS8qIHNldHVwIGlycSBsaW5lICovCisJbHRxX2VidV93MzIobHRxX2VidV9yMzIoTFRRX0VCVV9QQ0NfQ09OKSB8IDB4YywgTFRRX0VCVV9QQ0NfQ09OKTsKKwlsdHFfZWJ1X3czMihsdHFfZWJ1X3IzMihMVFFfRUJVX1BDQ19JRU4pIHwgMHgxMCwgTFRRX0VCVV9QQ0NfSUVOKTsKKworCS8qIHRvZ2dsZSByZXNldCBwaW4gKi8KKwlfX2dwaW9fc2V0X3ZhbHVlKDIxLCAwKTsKKwl3bWIoKTsKKwltZGVsYXkoMSk7CisJX19ncGlvX3NldF92YWx1ZSgyMSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpZiAobHRxX3BjaV9pcnFfbWFwW3Nsb3RdKQorCQlyZXR1cm4gbHRxX3BjaV9pcnFfbWFwW3Nsb3RdOworCXByaW50ayhLRVJOX0VSUiAibHFfcGNpOiB0cnlpbmcgdG8gbWFwIGlycSBmb3IgdW5rbm93biBzbG90ICVkXG4iLAorCQlzbG90KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBsdHFfcGNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGx0cV9wY2lfZGF0YSAqbHRxX3BjaV9kYXRhID0KKwkJKHN0cnVjdCBsdHFfcGNpX2RhdGEgKikgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJcGNpX3Byb2JlX29ubHkgPSAwOworCWx0cV9wY2lfaXJxX21hcCA9IGx0cV9wY2lfZGF0YS0+aXJxOworCWx0cV9wY2lfbWVtYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShQQ0lfQ1JfQkFTRV9BRERSLCBQQ0lfQ1JfU0laRSk7CisJbHRxX3BjaV9tYXBwZWRfY2ZnID0KKwkJaW9yZW1hcF9ub2NhY2hlKExUUV9QQ0lfQ0ZHX0JBU0UsIExUUV9QQ0lfQ0ZHX0JBU0UpOworCWx0cV9wY2lfY29udHJvbGxlci5pb19tYXBfYmFzZSA9CisJCSh1bnNpZ25lZCBsb25nKWlvcmVtYXAoTFRRX1BDSV9JT19CQVNFLCBMVFFfUENJX0lPX1NJWkUgLSAxKTsKKwlsdHFfcGNpX3N0YXJ0dXAobHRxX3BjaV9kYXRhKTsKKwlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmbHRxX3BjaV9jb250cm9sbGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlcgorbHRxX3BjaV9kcml2ZXIgPSB7CisJLnByb2JlID0gbHRxX3BjaV9wcm9iZSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJsdHFfcGNpIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK2ludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCit7CisJaW50IHJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbHRxX3BjaV9kcml2ZXIpOworCWlmIChyZXQpCisJCXByaW50ayhLRVJOX0lORk8gImx0cV9wY2k6IEVycm9yIHJlZ2lzdGVyaW5nIHBsYXRmb20gZHJpdmVyISIpOworCXJldHVybiByZXQ7Cit9CisKK2FyY2hfaW5pdGNhbGwocGNpYmlvc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWxhbnRpcS5oIGIvYXJjaC9taXBzL3BjaS9wY2ktbGFudGlxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjZiZjZjZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvbWlwcy9wY2kvcGNpLWxhbnRpcS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqICBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2lmbmRlZiBfTFRRX1BDSV9IX18KKyNkZWZpbmUgX0xUUV9QQ0lfSF9fCisKK2V4dGVybiBfX2lvbWVtIHZvaWQgKmx0cV9wY2lfbWFwcGVkX2NmZzsKK2V4dGVybiBpbnQgbHRxX3BjaV9yZWFkX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyICp2YWwpOworZXh0ZXJuIGludCBsdHFfcGNpX3dyaXRlX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCXVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9wY2kteGxyLmMgYi9hcmNoL21pcHMvcGNpL3BjaS14bHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGZlY2UxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9taXBzL3BjaS9wY2kteGxyLmMKQEAgLTAsMCArMSwyMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwMy0yMDExIE5ldExvZ2ljIE1pY3Jvc3lzdGVtcywgSW5jLiAoTmV0TG9naWMpLiBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUgTmV0TG9naWMKKyAqIGxpY2Vuc2UgYmVsb3c6CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FVExPR0lDIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBORVRMT0dJQyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KKyAqIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL25ldGxvZ2ljL2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIvaW9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbmV0bG9naWMveGxyL3BpYy5oPgorI2luY2x1ZGUgPGFzbS9uZXRsb2dpYy94bHIveGxyLmg+CisKK3N0YXRpYyB2b2lkICpwY2lfY29uZmlnX2Jhc2U7CisKKyNkZWZpbmUJcGNpX2NmZ19hZGRyKGJ1cywgZGV2Zm4sIG9mZikgKCgoYnVzKSA8PCAxNikgfCAoKGRldmZuKSA8PCA4KSB8IChvZmYpKQorCisvKiBQQ0kgb3BzICovCitzdGF0aWMgaW5saW5lIHUzMiBwY2lfY2ZnX3JlYWRfMzJiaXQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCWludCB3aGVyZSkKK3sKKwl1MzIgZGF0YTsKKwl1MzIgKmNmZ2FkZHI7CisKKwljZmdhZGRyID0gKHUzMiAqKShwY2lfY29uZmlnX2Jhc2UgKworCQkJcGNpX2NmZ19hZGRyKGJ1cy0+bnVtYmVyLCBkZXZmbiwgd2hlcmUgJiB+MykpOworCWRhdGEgPSAqY2ZnYWRkcjsKKwlyZXR1cm4gY3B1X3RvX2xlMzIoZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2lfY2ZnX3dyaXRlXzMyYml0KHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwlpbnQgd2hlcmUsIHUzMiBkYXRhKQoreworCXUzMiAqY2ZnYWRkcjsKKworCWNmZ2FkZHIgPSAodTMyICopKHBjaV9jb25maWdfYmFzZSArCisJCQlwY2lfY2ZnX2FkZHIoYnVzLT5udW1iZXIsIGRldmZuLCB3aGVyZSAmIH4zKSk7CisJKmNmZ2FkZHIgPSBjcHVfdG9fbGUzMihkYXRhKTsKK30KKworc3RhdGljIGludCBubG1fcGNpYmlvc19yZWFkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwl1MzIgZGF0YTsKKworCWlmICgoc2l6ZSA9PSAyKSAmJiAod2hlcmUgJiAxKSkKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKwllbHNlIGlmICgoc2l6ZSA9PSA0KSAmJiAod2hlcmUgJiAzKSkKKwkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKKworCWRhdGEgPSBwY2lfY2ZnX3JlYWRfMzJiaXQoYnVzLCBkZXZmbiwgd2hlcmUpOworCisJaWYgKHNpemUgPT0gMSkKKwkJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAzKSA8PCAzKSkgJiAweGZmOworCWVsc2UgaWYgKHNpemUgPT0gMikKKwkJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAzKSA8PCAzKSkgJiAweGZmZmY7CisJZWxzZQorCQkqdmFsID0gZGF0YTsKKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKKworc3RhdGljIGludCBubG1fcGNpYmlvc193cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCWludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCit7CisJdTMyIGRhdGE7CisKKwlpZiAoKHNpemUgPT0gMikgJiYgKHdoZXJlICYgMSkpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisJZWxzZSBpZiAoKHNpemUgPT0gNCkgJiYgKHdoZXJlICYgMykpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisKKwlkYXRhID0gcGNpX2NmZ19yZWFkXzMyYml0KGJ1cywgZGV2Zm4sIHdoZXJlKTsKKworCWlmIChzaXplID09IDEpCisJCWRhdGEgPSAoZGF0YSAmIH4oMHhmZiA8PCAoKHdoZXJlICYgMykgPDwgMykpKSB8CisJCQkodmFsIDw8ICgod2hlcmUgJiAzKSA8PCAzKSk7CisJZWxzZSBpZiAoc2l6ZSA9PSAyKQorCQlkYXRhID0gKGRhdGEgJiB+KDB4ZmZmZiA8PCAoKHdoZXJlICYgMykgPDwgMykpKSB8CisJCQkodmFsIDw8ICgod2hlcmUgJiAzKSA8PCAzKSk7CisJZWxzZQorCQlkYXRhID0gdmFsOworCisJcGNpX2NmZ193cml0ZV8zMmJpdChidXMsIGRldmZuLCB3aGVyZSwgZGF0YSk7CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdHJ1Y3QgcGNpX29wcyBubG1fcGNpX29wcyA9IHsKKwkucmVhZCAgPSBubG1fcGNpYmlvc19yZWFkLAorCS53cml0ZSA9IG5sbV9wY2liaW9zX3dyaXRlCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5sbV9wY2lfbWVtX3Jlc291cmNlID0geworCS5uYW1lICAgICAgICAgICA9ICJYTFIgUENJIE1FTSIsCisJLnN0YXJ0ICAgICAgICAgID0gMHhkMDAwMDAwMFVMLAkvKiAyNTZNQiBQQ0kgbWVtIEAgMHhkMDAwXzAwMDAgKi8KKwkuZW5kICAgICAgICAgICAgPSAweGRmZmZmZmZmVUwsCisJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5sbV9wY2lfaW9fcmVzb3VyY2UgPSB7CisJLm5hbWUgICAgICAgICAgID0gIlhMUiBJTyBNRU0iLAorCS5zdGFydCAgICAgICAgICA9IDB4MTAwMDAwMDBVTCwJLyogMTZNQiBQQ0kgSU8gQCAweDEwMDBfMDAwMCAqLworCS5lbmQgICAgICAgICAgICA9IDB4MTAwZmZmZmZVTCwKKwkuZmxhZ3MgICAgICAgICAgPSBJT1JFU09VUkNFX0lPLAorfTsKKworc3RydWN0IHBjaV9jb250cm9sbGVyIG5sbV9wY2lfY29udHJvbGxlciA9IHsKKwkuaW5kZXggICAgICAgICAgPSAwLAorCS5wY2lfb3BzICAgICAgICA9ICZubG1fcGNpX29wcywKKwkubWVtX3Jlc291cmNlICAgPSAmbmxtX3BjaV9tZW1fcmVzb3VyY2UsCisJLm1lbV9vZmZzZXQgICAgID0gMHgwMDAwMDAwMFVMLAorCS5pb19yZXNvdXJjZSAgICA9ICZubG1fcGNpX2lvX3Jlc291cmNlLAorCS5pb19vZmZzZXQgICAgICA9IDB4MDAwMDAwMDBVTCwKK307CisKK2ludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpZiAoIW5sbV9jaGlwX2lzX3hscygpKQorCQlyZXR1cm4JUElDX1BDSVhfSVJROwkvKiBmb3IgWExSIGp1c3Qgb25lIElSUSovCisKKwkvKgorCSAqIEZvciBYTFMgUENJZSwgdGhlcmUgaXMgYW4gSVJRIHBlciBMaW5rLCBmaW5kIG91dCB3aGljaAorCSAqIGxpbmsgdGhlIGRldmljZSBpcyBvbiB0byBhc3NpZ24gaW50ZXJydXB0cworCSovCisJaWYgKGRldi0+YnVzLT5zZWxmID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoCShkZXYtPmJ1cy0+c2VsZi0+ZGV2Zm4pIHsKKwljYXNlIDB4MDoKKwkJcmV0dXJuIFBJQ19QQ0lFX0xJTkswX0lSUTsKKwljYXNlIDB4ODoKKwkJcmV0dXJuIFBJQ19QQ0lFX0xJTksxX0lSUTsKKwljYXNlIDB4MTA6CisJCWlmIChubG1fY2hpcF9pc194bHNfYigpKQorCQkJcmV0dXJuIFBJQ19QQ0lFX1hMU0IwX0xJTksyX0lSUTsKKwkJZWxzZQorCQkJcmV0dXJuIFBJQ19QQ0lFX0xJTksyX0lSUTsKKwljYXNlIDB4MTg6CisJCWlmIChubG1fY2hpcF9pc194bHNfYigpKQorCQkJcmV0dXJuIFBJQ19QQ0lFX1hMU0IwX0xJTkszX0lSUTsKKwkJZWxzZQorCQkJcmV0dXJuIFBJQ19QQ0lFX0xJTkszX0lSUTsKKwl9CisJV0FSTigxLCAiVW5leHBlY3RlZCBkZXZmbiAlZFxuIiwgZGV2LT5idXMtPnNlbGYtPmRldmZuKTsKKwlyZXR1cm4gMDsKK30KKworLyogRG8gcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIGluaXRpYWxpemF0aW9uIGF0IHBjaV9lbmFibGVfZGV2aWNlKCkgdGltZSAqLworaW50IHBjaWJpb3NfcGxhdF9kZXZfaW5pdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKK3sKKwkvKiBQU0IgYXNzaWducyBQQ0kgcmVzb3VyY2VzICovCisJcGNpX3Byb2JlX29ubHkgPSAxOworCXBjaV9jb25maWdfYmFzZSA9IGlvcmVtYXAoREVGQVVMVF9QQ0lfQ09ORklHX0JBU0UsIDE2IDw8IDIwKTsKKworCS8qIEV4dGVuZCBJTyBwb3J0IGZvciBtZW1vcnkgbWFwcGVkIGlvICovCisJaW9wb3J0X3Jlc291cmNlLnN0YXJ0ID0gIDA7CisJaW9wb3J0X3Jlc291cmNlLmVuZCAgID0gfjA7CisKKwlzZXRfaW9fcG9ydF9iYXNlKENLU0VHMSk7CisJbmxtX3BjaV9jb250cm9sbGVyLmlvX21hcF9iYXNlID0gQ0tTRUcxOworCisJcHJfaW5mbygiUmVnaXN0ZXJpbmcgWExSL1hMUyBQQ0lYL1BDSUUgQ29udHJvbGxlci5cbiIpOworCXJlZ2lzdGVyX3BjaV9jb250cm9sbGVyKCZubG1fcGNpX2NvbnRyb2xsZXIpOworCisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwocGNpYmlvc19pbml0KTsKKworc3RydWN0IHBjaV9maXh1cCBwY2liaW9zX2ZpeHVwc1tdID0geworCXswfQorfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9wZXIuYyBiL2FyY2gvbWlwcy9wbWMtc2llcnJhL21zcDcxeHgvbXNwX2lycV9wZXIuYwppbmRleCBmOWI5ZGNkLi45OGZkMDA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcG1jLXNpZXJyYS9tc3A3MXh4L21zcF9pcnFfcGVyLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEvbXNwNzF4eC9tc3BfaXJxX3Blci5jCkBAIC05Nyw3ICs5Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNwX3Blcl9pcnFfY29udHJvbGxlciA9IHsKIAkubmFtZSA9ICJNU1BfUEVSIiwKLQkuaXJxX2VuYWJsZSA9IHVubWFza19wZXJfaXJxLgorCS5pcnFfZW5hYmxlID0gdW5tYXNrX3Blcl9pcnEsCiAJLmlycV9kaXNhYmxlID0gbWFza19wZXJfaXJxLAogCS5pcnFfYWNrID0gbXNwX3Blcl9pcnFfYWNrLAogI2lmZGVmIENPTkZJR19TTVAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wbWMtc2llcnJhL3lvc2VtaXRlL3NtcC5jIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKaW5kZXggZWZjOWU4OC4uMjYwODc1MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKKysrIGIvYXJjaC9taXBzL3BtYy1zaWVycmEveW9zZW1pdGUvc21wLmMKQEAgLTU1LDYgKzU1LDggQEAKIAogCQlpZiAoc3RhdHVzICYgMHgyKQogCQkJc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CisJCWlmIChzdGF0dXMgJiAweDQpCisJCQlzY2hlZHVsZXJfaXBpKCk7CiAJCWJyZWFrOwogCiAJY2FzZSAxOgpAQCAtNjMsNiArNjUsOCBAQAogCiAJCWlmIChzdGF0dXMgJiAweDIpCiAJCQlzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKKwkJaWYgKHN0YXR1cyAmIDB4NCkKKwkJCXNjaGVkdWxlcl9pcGkoKTsKIAkJYnJlYWs7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TIGIvYXJjaC9taXBzL3Bvd2VyL2hpYmVybmF0ZS5TCmluZGV4IGRiYjVjN2IuLmY4YTc1MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wb3dlci9oaWJlcm5hdGUuUworKysgYi9hcmNoL21pcHMvcG93ZXIvaGliZXJuYXRlLlMKQEAgLTM1LDcgKzM1LDcgQEAKIDA6CiAJUFRSX0wgdDEsIFBCRV9BRERSRVNTKHQwKSAgIC8qIHNvdXJjZSAqLwogCVBUUl9MIHQyLCBQQkVfT1JJR19BRERSRVNTKHQwKSAvKiBkZXN0aW5hdGlvbiAqLwotCVBUUl9BRERJVSB0MywgdDEsIFBBR0VfU0laRQorCVBUUl9BRERVIHQzLCB0MSwgUEFHRV9TSVpFCiAxOgogCVJFR19MIHQ4LCAodDEpCiAJUkVHX1MgdDgsICh0MikKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9yYjUzMi9ncGlvLmMgYi9hcmNoL21pcHMvcmI1MzIvZ3Bpby5jCmluZGV4IDM3ZGUwNWQuLjZjNDdkZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9yYjUzMi9ncGlvLmMKKysrIGIvYXJjaC9taXBzL3JiNTMyL2dwaW8uYwpAQCAtMTg1LDcgKzE4NSw3IEBACiAJc3RydWN0IHJlc291cmNlICpyOwogCiAJciA9IHJiNTMyX2dwaW9fcmVnMF9yZXM7Ci0JcmI1MzJfZ3Bpb19jaGlwLT5yZWdiYXNlID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCk7CisJcmI1MzJfZ3Bpb19jaGlwLT5yZWdiYXNlID0gaW9yZW1hcF9ub2NhY2hlKHItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIpKTsKIAogCWlmICghcmI1MzJfZ3Bpb19jaGlwLT5yZWdiYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicmI1MzI6IGNhbm5vdCByZW1hcCBHUElPIHJlZ2lzdGVyIDBcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYyBiL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXBsYXRmb3JtLmMKaW5kZXggZGVkZGJmMC4uNjk4OTA0ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItcGxhdGZvcm0uYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi1wbGF0Zm9ybS5jCkBAIC0xMzIsNyArMTMyLDcgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgc2dpc2VlcV9kZXZpbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHRtcDsKKwl1bnNpZ25lZCBpbnQgcGJkbWEgX19tYXliZV91bnVzZWQ7CiAJaW50IHJlcywgaTsKIAogCWV0aDBfcGQuaHBjID0gaHBjM2MwOwpAQCAtMTUxLDcgKzE1MSw3IEBACiAKIAkvKiBTZWNvbmQgSFBDIGlzIG1pc3Npbmc/ICovCiAJaWYgKGlwMjJfaXNfZnVsbGhvdXNlKCkgfHwKLQkgICAgZ2V0X2RiZSh0bXAsICh1bnNpZ25lZCBpbnQgKikmaHBjM2MxLT5wYmRtYVsxXSkpCisJICAgIGdldF9kYmUocGJkbWEsICh1bnNpZ25lZCBpbnQgKikmaHBjM2MxLT5wYmRtYVsxXSkpCiAJCXJldHVybiAwOwogCiAJc2dpbWMtPmdpb3BhciB8PSBTR0lNQ19HSU9QQVJfTUFTVEVSRVhQMSB8IFNHSU1DX0dJT1BBUl9FWFAxNjQgfApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jIGIvYXJjaC9taXBzL3NnaS1pcDIyL2lwMjItdGltZS5jCmluZGV4IDYwM2ZjOTEuLjFhOTRjOTggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyMi9pcDIyLXRpbWUuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjIvaXAyMi10aW1lLmMKQEAgLTMyLDcgKzMyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRvc2FtcGxlKHZvaWQpCiB7CiAJdTMyIGN0MCwgY3QxOwotCXU4IG1zYiwgbHNiOworCXU4IG1zYjsKIAogCS8qIFN0YXJ0IHRoZSBjb3VudGVyLiAqLwogCXNnaW50LT50Y3dvcmQgPSAoU0dJTlRfVENXT1JEX0NOVDIgfCBTR0lOVF9UQ1dPUkRfQ0FMTCB8CkBAIC00Niw3ICs0Niw3IEBACiAJLyogTGF0Y2ggYW5kIHNwaW4gdW50aWwgdG9wIGJ5dGUgb2YgY291bnRlcjIgaXMgemVybyAqLwogCWRvIHsKIAkJd3JpdGViKFNHSU5UX1RDV09SRF9DTlQyIHwgU0dJTlRfVENXT1JEX0NMQVQsICZzZ2ludC0+dGN3b3JkKTsKLQkJbHNiID0gcmVhZGIoJnNnaW50LT50Y250Mik7CisJCSh2b2lkKSByZWFkYigmc2dpbnQtPnRjbnQyKTsKIAkJbXNiID0gcmVhZGIoJnNnaW50LT50Y250Mik7CiAJCWN0MSA9IHJlYWRfYzBfY291bnQoKTsKIAl9IHdoaWxlIChtc2IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaHViaW8uYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWh1YmlvLmMKaW5kZXggYTFmYTRhYi4uY2QwZDViMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaHViaW8uYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1odWJpby5jCkBAIC0yOSw3ICsyOSw2IEBACiAJCQkgIHVuc2lnbmVkIGxvbmcgeHRhbGtfYWRkciwgc2l6ZV90IHNpemUpCiB7CiAJbmFzaWRfdCBuYXNpZCA9IENPTVBBQ1RfVE9fTkFTSURfTk9ERUlEKGNub2RlKTsKLQl2b2xhdGlsZSBodWJyZWdfdCBqdW5rOwogCXVuc2lnbmVkIGk7CiAKIAkvKiB1c2Ugc21hbGwtd2luZG93IG1hcHBpbmcgaWYgcG9zc2libGUgKi8KQEAgLTY0LDcgKzYzLDcgQEAKIAkJICogYWZ0ZXIgd2Ugd3JpdGUgaXQuCiAJCSAqLwogCQlJSU9fSVRURV9QVVQobmFzaWQsIGksIEhVQl9QSU9fTUFQX1RPX01FTSwgd2lkZ2V0LCB4dGFsa19hZGRyKTsKLQkJanVuayA9IEhVQl9MKElJT19JVFRFX0dFVChuYXNpZCwgaSkpOworCQkodm9pZCkgSFVCX0woSUlPX0lUVEVfR0VUKG5hc2lkLCBpKSk7CiAKIAkJcmV0dXJuIE5PREVfQldJTl9CQVNFKG5hc2lkLCB3aWRnZXQpICsgKHh0YWxrX2FkZHIgJSBCV0lOX1NJWkUpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWlycS5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKaW5kZXggMGEwNDYwMy4uYjE4YjA0ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctaXJxLmMKQEAgLTE0Nyw4ICsxNDcsMTAgQEAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKHBlbmQwICYgKDFVTCA8PCBDUFVfUkVTQ0hFRF9BX0lSUSkpIHsKIAkJTE9DQUxfSFVCX0NMUl9JTlRSKENQVV9SRVNDSEVEX0FfSVJRKTsKKwkJc2NoZWR1bGVyX2lwaSgpOwogCX0gZWxzZSBpZiAocGVuZDAgJiAoMVVMIDw8IENQVV9SRVNDSEVEX0JfSVJRKSkgewogCQlMT0NBTF9IVUJfQ0xSX0lOVFIoQ1BVX1JFU0NIRURfQl9JUlEpOworCQlzY2hlZHVsZXJfaXBpKCk7CiAJfSBlbHNlIGlmIChwZW5kMCAmICgxVUwgPDwgQ1BVX0NBTExfQV9JUlEpKSB7CiAJCUxPQ0FMX0hVQl9DTFJfSU5UUihDUFVfQ0FMTF9BX0lSUSk7CiAJCXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjcta2xudW1hLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwppbmRleCBjM2QzMGE4Li4xZDE5MTlhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1rbG51bWEuYwpAQCAtNTQsMTEgKzU0LDggQEAKIAogc3RhdGljIF9faW5pdCB2b2lkIHNldF9rdGV4dF9zb3VyY2UobmFzaWRfdCBjbGllbnRfbmFzaWQsIG5hc2lkX3Qgc2VydmVyX25hc2lkKQogewotCWNub2RlaWRfdCBjbGllbnRfY25vZGU7CiAJa2Vybl92YXJzX3QgKmt2cDsKIAotCWNsaWVudF9jbm9kZSA9IE5BU0lEX1RPX0NPTVBBQ1RfTk9ERUlEKGNsaWVudF9uYXNpZCk7Ci0KIAlrdnAgPSAmaHViX2RhdGEoY2xpZW50X25hc2lkKS0+a2Vybl92YXJzOwogCiAJS0VSTl9WQVJTX0FERFIoY2xpZW50X25hc2lkKSA9ICh1bnNpZ25lZCBsb25nKWt2cDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMgYi9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCmluZGV4IGExNTI1MzguLmVmNzRmMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwpAQCAtNjYsMTggKzY2LDcgQEAKIHN0YXRpYyB2b2lkIHJ0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAogCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0Jc3dpdGNoIChtb2RlKSB7Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgotCQkvKiBUaGUgb25seSBtb2RlIHN1cHBvcnRlZCAqLwotCQlicmVhazsKLQotCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6Ci0JY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKLQljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKLQkJLyogTm90aGluZyB0byBkbyAgKi8KLQkJYnJlYWs7Ci0JfQorCS8qIE5vdGhpbmcgdG8gZG8gLi4uICAqLwogfQogCiBpbnQgcnRfdGltZXJfaXJxOwpAQCAtMTc0LDggKzE2Myw3IEBACiB7CiAJc3RydWN0IGNsb2Nrc291cmNlICpjcyA9ICZodWJfcnRfY2xvY2tzb3VyY2U7CiAKLQljbG9ja3NvdXJjZV9zZXRfY2xvY2soY3MsIENZQ0xFU19QRVJfU0VDKTsKLQljbG9ja3NvdXJjZV9yZWdpc3Rlcihjcyk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooY3MsIENZQ0xFU19QRVJfU0VDKTsKIH0KIAogdm9pZCBfX2luaXQgcGxhdF90aW1lX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9zbXAuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9zbXAuYwppbmRleCA0N2IzNDdjLi5kNjY3ODc1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvc21wLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL3NtcC5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTE4OSwxMCArMTkwLDggQEAKIAkvKiBDbGVhciB0aGUgbWFpbGJveCB0byBjbGVhciB0aGUgaW50ZXJydXB0ICovCiAJX19yYXdfd3JpdGVxKCgodTY0KWFjdGlvbik8PDQ4LCBtYWlsYm94XzBfY2xlYXJfcmVnc1tjcHVdKTsKIAotCS8qCi0JICogTm90aGluZyB0byBkbyBmb3IgU01QX1JFU0NIRURVTEVfWU9VUlNFTEY7IHJldHVybmluZyBmcm9tIHRoZQotCSAqIGludGVycnVwdCB3aWxsIGRvIHRoZSByZXNjaGVkdWxlIGZvciB1cwotCSAqLworCWlmIChhY3Rpb24gJiBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRikKKwkJc2NoZWR1bGVyX2lwaSgpOwogCiAJaWYgKGFjdGlvbiAmIFNNUF9DQUxMX0ZVTkNUSU9OKQogCQlzbXBfY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL3NtcC5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvc21wLmMKaW5kZXggYzAwYTVjYi4uMzhlN2Y2YiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvc21wLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvc21wLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTE3NywxMCArMTc4LDggQEAKIAkvKiBDbGVhciB0aGUgbWFpbGJveCB0byBjbGVhciB0aGUgaW50ZXJydXB0ICovCiAJX19fX3Jhd193cml0ZXEoKCh1NjQpYWN0aW9uKSA8PCA0OCwgbWFpbGJveF9jbGVhcl9yZWdzW2NwdV0pOwogCi0JLyoKLQkgKiBOb3RoaW5nIHRvIGRvIGZvciBTTVBfUkVTQ0hFRFVMRV9ZT1VSU0VMRjsgcmV0dXJuaW5nIGZyb20gdGhlCi0JICogaW50ZXJydXB0IHdpbGwgZG8gdGhlIHJlc2NoZWR1bGUgZm9yIHVzCi0JICovCisJaWYgKGFjdGlvbiAmIFNNUF9SRVNDSEVEVUxFX1lPVVJTRUxGKQorCQlzY2hlZHVsZXJfaXBpKCk7CiAKIAlpZiAoYWN0aW9uICYgU01QX0NBTExfRlVOQ1RJT04pCiAJCXNtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NuaS90aW1lLmMgYi9hcmNoL21pcHMvc25pL3RpbWUuYwppbmRleCBjNzYxNTFiLi4wOTA0ZDRkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc25pL3RpbWUuYworKysgYi9hcmNoL21pcHMvc25pL3RpbWUuYwpAQCAtOTUsNyArOTUsNyBAQAogc3RhdGljIF9faW5pdCB1bnNpZ25lZCBsb25nIGRvc2FtcGxlKHZvaWQpCiB7CiAJdTMyIGN0MCwgY3QxOwotCXZvbGF0aWxlIHU4IG1zYiwgbHNiOworCXZvbGF0aWxlIHU4IG1zYjsKIAogCS8qIFN0YXJ0IHRoZSBjb3VudGVyLiAqLwogCW91dGJfcCgweDM0LCAweDQzKTsKQEAgLTEwOCw3ICsxMDgsNyBAQAogCS8qIExhdGNoIGFuZCBzcGluIHVudGlsIHRvcCBieXRlIG9mIGNvdW50ZXIwIGlzIHplcm8gKi8KIAlkbyB7CiAJCW91dGIoMHgwMCwgMHg0Myk7Ci0JCWxzYiA9IGluYigweDQwKTsKKwkJKHZvaWQpIGluYigweDQwKTsKIAkJbXNiID0gaW5iKDB4NDApOwogCQljdDEgPSByZWFkX2MwX2NvdW50KCk7CiAJfSB3aGlsZSAobXNiKTsKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvc21wLmMgYi9hcmNoL21uMTAzMDAva2VybmVsL3NtcC5jCmluZGV4IDIyNmM4MjYuLjgzZmIyNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9zbXAuYwpAQCAtNDk0LDE0ICs0OTQsMTEgQEAKICAqIEBpcnE6IFRoZSBpbnRlcnJ1cHQgbnVtYmVyLgogICogQGRldl9pZDogVGhlIGRldmljZSBJRC4KICAqCi0gKiBXZSBuZWVkIGRvIG5vdGhpbmcgaGVyZSwgc2luY2UgdGhlIHNjaGVkdWxpbmcgd2lsbCBiZSBlZmZlY3RlZCBvbiBvdXIgd2F5Ci0gKiBiYWNrIHRocm91Z2ggZW50cnkuUy4KLSAqCiAgKiBSZXR1cm5zIElSUV9IQU5ETEVEIHRvIGluZGljYXRlIHdlIGhhbmRsZWQgdGhlIGludGVycnVwdCBzdWNjZXNzZnVsbHkuCiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBzbXBfcmVzY2hlZHVsZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewotCS8qIGRvIG5vdGhpbmcgKi8KKwlzY2hlZHVsZXJfaXBpKCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc21wLmMKaW5kZXggNjlkNjNkMy4uODI4MzA1ZiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zbXAuYwpAQCAtMTU1LDEwICsxNTUsNyBAQAogCQkJCQogCQkJY2FzZSBJUElfUkVTQ0hFRFVMRToKIAkJCQlzbXBfZGVidWcoMTAwLCBLRVJOX0RFQlVHICJDUFUlZCBJUElfUkVTQ0hFRFVMRVxuIiwgdGhpc19jcHUpOwotCQkJCS8qCi0JCQkJICogUmVzY2hlZHVsZSBjYWxsYmFjay4gIEV2ZXJ5dGhpbmcgdG8gYmUKLQkJCQkgKiBkb25lIGlzIGRvbmUgYnkgdGhlIGludGVycnVwdCByZXR1cm4gcGF0aC4KLQkJCQkgKi8KKwkJCQlzY2hlZHVsZXJfaXBpKCk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgSVBJX0NBTExfRlVOQzoKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL21tL2luaXQuYyBiL2FyY2gvcGFyaXNjL21tL2luaXQuYwppbmRleCBiN2VkOGQ3Li5iMWQxMjYyIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9tbS9pbml0LmMKKysrIGIvYXJjaC9wYXJpc2MvbW0vaW5pdC5jCkBAIC0yNjYsOCArMjY2LDEwIEBACiAJfQogCW1lbXNldChwZm5uaWRfbWFwLCAweGZmLCBzaXplb2YocGZubmlkX21hcCkpOwogCi0JZm9yIChpID0gMDsgaSA8IG5wbWVtX3JhbmdlczsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBucG1lbV9yYW5nZXM7IGkrKykgeworCQlub2RlX3NldF9zdGF0ZShpLCBOX05PUk1BTF9NRU1PUlkpOwogCQlub2RlX3NldF9vbmxpbmUoaSk7CisJfQogI2VuZGlmCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCBiNmZmODgyLi44ZjRkNTBiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtMjA5LDcgKzIwOSw3IEBACiBjb25maWcgQVJDSF9TVVNQRU5EX1BPU1NJQkxFCiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gQURCX1BNVSB8fCBQUENfRUZJS0EgfHwgUFBDX0xJVEU1MjAwIHx8IFBQQ184M3h4IHx8IFwKLQkJICAgUFBDXzg1eHggfHwgUFBDXzg2eHggfHwgUFBDX1BTRVJJRVMgfHwgNDR4IHx8IDQweAorCQkgICAoUFBDXzg1eHggJiYgIVNNUCkgfHwgUFBDXzg2eHggfHwgUFBDX1BTRVJJRVMgfHwgNDR4IHx8IDQweAogCiBjb25maWcgUFBDX0RDUl9OQVRJVkUKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vOHh4X2ltbWFwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vOHh4X2ltbWFwLmgKaW5kZXggNmI2ZGMyMC4uYmRmMDU2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtLzh4eF9pbW1hcC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS84eHhfaW1tYXAuaApAQCAtMzkzLDggKzM5Myw4IEBACiAJdWludAlmZWNfYWRkcl9sb3c7CQkvKiBsb3dlciAzMiBiaXRzIG9mIHN0YXRpb24gYWRkcmVzcwkqLwogCXVzaG9ydAlmZWNfYWRkcl9oaWdoOwkJLyogdXBwZXIgMTYgYml0cyBvZiBzdGF0aW9uIGFkZHJlc3MJKi8KIAl1c2hvcnQJcmVzMTsJCQkvKiByZXNlcnZlZAkJCQkqLwotCXVpbnQJZmVjX2hhc2hfdGFibGVfaGlnaDsJLyogdXBwZXIgMzItYml0cyBvZiBoYXNoIHRhYmxlCQkqLwotCXVpbnQJZmVjX2hhc2hfdGFibGVfbG93OwkvKiBsb3dlciAzMi1iaXRzIG9mIGhhc2ggdGFibGUJCSovCisJdWludAlmZWNfZ3JwX2hhc2hfdGFibGVfaGlnaDsJLyogdXBwZXIgMzItYml0cyBvZiBoYXNoIHRhYmxlCQkqLworCXVpbnQJZmVjX2dycF9oYXNoX3RhYmxlX2xvdzsJLyogbG93ZXIgMzItYml0cyBvZiBoYXNoIHRhYmxlCQkqLwogCXVpbnQJZmVjX3JfZGVzX3N0YXJ0OwkvKiBiZWdpbm5pbmcgb2YgUnggZGVzY3JpcHRvciByaW5nCSovCiAJdWludAlmZWNfeF9kZXNfc3RhcnQ7CS8qIGJlZ2lubmluZyBvZiBUeCBkZXNjcmlwdG9yIHJpbmcJKi8KIAl1aW50CWZlY19yX2J1ZmZfc2l6ZTsJLyogUnggYnVmZmVyIHNpemUJCQkqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwdXRhYmxlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAppbmRleCBiZTNjZGY5Li4xODMzZDFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaApAQCAtMzgyLDEwICszODIsMTIgQEAKICNkZWZpbmUgQ1BVX0ZUUlNfRTUwMF8yCShDUFVfRlRSX01BWUJFX0NBTl9ET1pFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfU1BFX0NPTVAgfCBDUFVfRlRSX01BWUJFX0NBTl9OQVAgfCBcCiAJICAgIENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgQ1BVX0ZUUl9OT0VYRUNVVEUpCi0jZGVmaW5lIENQVV9GVFJTX0U1MDBNQwkoQ1BVX0ZUUl9NQVlCRV9DQU5fRE9aRSB8IENQVV9GVFJfVVNFX1RCIHwgXAotCSAgICBDUFVfRlRSX01BWUJFX0NBTl9OQVAgfCBDUFVfRlRSX05PRFNJU1JBTElHTiB8IFwKKyNkZWZpbmUgQ1BVX0ZUUlNfRTUwME1DCShDUFVfRlRSX1VTRV9UQiB8IENQVV9GVFJfTk9EU0lTUkFMSUdOIHwgXAogCSAgICBDUFVfRlRSX0wyQ1NSIHwgQ1BVX0ZUUl9MV1NZTkMgfCBDUFVfRlRSX05PRVhFQ1VURSB8IFwKIAkgICAgQ1BVX0ZUUl9EQkVMTCkKKyNkZWZpbmUgQ1BVX0ZUUlNfRTU1MDAJKENQVV9GVFJfVVNFX1RCIHwgQ1BVX0ZUUl9OT0RTSVNSQUxJR04gfCBcCisJICAgIENQVV9GVFJfTDJDU1IgfCBDUFVfRlRSX0xXU1lOQyB8IENQVV9GVFJfTk9FWEVDVVRFIHwgXAorCSAgICBDUFVfRlRSX0RCRUxMIHwgQ1BVX0ZUUl9QT1BDTlRCIHwgQ1BVX0ZUUl9QT1BDTlREKQogI2RlZmluZSBDUFVfRlRSU19HRU5FUklDXzMyCShDUFVfRlRSX0NPTU1PTiB8IENQVV9GVFJfTk9EU0lTUkFMSUdOKQogCiAvKiA2NC1iaXQgQ1BVcyAqLwpAQCAtNDM1LDExICs0MzcsMTUgQEAKICNkZWZpbmUgQ1BVX0ZUUlNfQ09NUEFUSUJMRQkoQ1BVX0ZUUl9VU0VfVEIgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIpCiAKICNpZmRlZiBfX3Bvd2VycGM2NF9fCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKKyNkZWZpbmUgQ1BVX0ZUUlNfUE9TU0lCTEUJKENQVV9GVFJTX0U1NTAwKQorI2Vsc2UKICNkZWZpbmUgQ1BVX0ZUUlNfUE9TU0lCTEUJXAogCSAgICAoQ1BVX0ZUUlNfUE9XRVIzIHwgQ1BVX0ZUUlNfUlM2NCB8IENQVV9GVFJTX1BPV0VSNCB8CVwKIAkgICAgQ1BVX0ZUUlNfUFBDOTcwIHwgQ1BVX0ZUUlNfUE9XRVI1IHwgQ1BVX0ZUUlNfUE9XRVI2IHwJXAogCSAgICBDUFVfRlRSU19QT1dFUjcgfCBDUFVfRlRSU19DRUxMIHwgQ1BVX0ZUUlNfUEE2VCB8CQlcCiAJICAgIENQVV9GVFJfMVRfU0VHTUVOVCB8IENQVV9GVFJfVlNYKQorI2VuZGlmCiAjZWxzZQogZW51bSB7CiAJQ1BVX0ZUUlNfUE9TU0lCTEUgPQpAQCAtNDczLDE2ICs0NzksMjEgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19FNTAwCiAJICAgIENQVV9GVFJTX0U1MDAgfCBDUFVfRlRSU19FNTAwXzIgfCBDUFVfRlRSU19FNTAwTUMgfAorCSAgICBDUFVfRlRSU19FNTUwMCB8CiAjZW5kaWYKIAkgICAgMCwKIH07CiAjZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCiAjaWZkZWYgX19wb3dlcnBjNjRfXworI2lmZGVmIENPTkZJR19QUENfQk9PSzNFCisjZGVmaW5lIENQVV9GVFJTX0FMV0FZUwkJKENQVV9GVFJTX0U1NTAwKQorI2Vsc2UKICNkZWZpbmUgQ1BVX0ZUUlNfQUxXQVlTCQlcCiAJICAgIChDUFVfRlRSU19QT1dFUjMgJiBDUFVfRlRSU19SUzY0ICYgQ1BVX0ZUUlNfUE9XRVI0ICYJXAogCSAgICBDUFVfRlRSU19QUEM5NzAgJiBDUFVfRlRSU19QT1dFUjUgJiBDUFVfRlRSU19QT1dFUjYgJglcCiAJICAgIENQVV9GVFJTX1BPV0VSNyAmIENQVV9GVFJTX0NFTEwgJiBDUFVfRlRSU19QQTZUICYgQ1BVX0ZUUlNfUE9TU0lCTEUpCisjZW5kaWYKICNlbHNlCiBlbnVtIHsKIAlDUFVfRlRSU19BTFdBWVMgPQpAQCAtNTEzLDYgKzUyNCw3IEBACiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRTUwMAogCSAgICBDUFVfRlRSU19FNTAwICYgQ1BVX0ZUUlNfRTUwMF8yICYgQ1BVX0ZUUlNfRTUwME1DICYKKwkgICAgQ1BVX0ZUUlNfRTU1MDAgJgogI2VuZGlmCiAJICAgIENQVV9GVFJTX1BPU1NJQkxFLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBpYy5oCmluZGV4IDcwMDVlZTAuLjQ5YmFkZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGljLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21waWMuaApAQCAtMyw3ICszLDYgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KICNpbmNsdWRlIDxhc20vZGNyLmg+CiAjaW5jbHVkZSA8YXNtL21zaV9iaXRtYXAuaD4KIApAQCAtMzIwLDggKzMxOSw2IEBACiAJLyogbGluayAqLwogCXN0cnVjdCBtcGljCQkqbmV4dDsKIAotCXN0cnVjdCBzeXNfZGV2aWNlCXN5c2RldjsKLQogI2lmZGVmIENPTkZJR19QTQogCXN0cnVjdCBtcGljX2lycV9zYXZlCSpzYXZlX2RhdGE7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oCmluZGV4IDgxMWYwNGEuLjhkMTU2OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtY29tbW9uLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApAQCAtMTYyLDcgKzE2Miw3IEBACiAgKiBvbiBwbGF0Zm9ybXMgd2hlcmUgc3VjaCBjb250cm9sIGlzIHBvc3NpYmxlLgogICovCiAjaWYgZGVmaW5lZChDT05GSUdfS0dEQikgfHwgZGVmaW5lZChDT05GSUdfWE1PTikgfHwgZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkgfHxcCi0JZGVmaW5lZChDT05GSUdfS1BST0JFUykKKwlkZWZpbmVkKENPTkZJR19LUFJPQkVTKSB8fCBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkKICNkZWZpbmUgUEFHRV9LRVJORUxfVEVYVAlQQUdFX0tFUk5FTF9YCiAjZWxzZQogI2RlZmluZSBQQUdFX0tFUk5FTF9URVhUCVBBR0VfS0VSTkVMX1JPWApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaW5vcnRoLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pbm9ydGguaAppbmRleCBhZTljODk5Li5kMTJiMTFkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pbm9ydGguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pbm9ydGguaApAQCAtNjAsNyArNjAsNyBAQAogICoKICAqIE9idmlvdXNseSwgdGhlIEdBUlQgaXMgbm90IGNhY2hlIGNvaGVyZW50IGFuZCBzbyBhbnkgY2hhbmdlIHRvIGl0CiAgKiBtdXN0IGJlIGZsdXNoZWQgdG8gbWVtb3J5IChvciBtYXliZSBqdXN0IG1ha2UgdGhlIEdBUlQgc3BhY2Ugbm9uCi0gKiBjYWNoYWJsZSkuIEFHUCBtZW1vcnkgaXRzZWxmIGRvZXMndCBzZWVtIHRvIGJlIGNhY2hlIGNvaGVyZW50IG5laXRoZXIuCisgKiBjYWNoYWJsZSkuIEFHUCBtZW1vcnkgaXRzZWxmIGRvZXNuJ3Qgc2VlbSB0byBiZSBjYWNoZSBjb2hlcmVudCBuZWl0aGVyLgogICoKICAqIEluIG9yZGVyIHRvIGludmFsaWRhdGUgdGhlIEdBUlQgKHdoaWNoIGlzIHByb2JhYmx5IG5lY2Vzc2FyeSB0byBpbnZhbAogICogdGhlIGJyaWRnZSBpbnRlcm5hbCBUTEJzKSwgdGhlIGZvbGxvd2luZyBzZXF1ZW5jZSBoYXMgdG8gYmUgd3JpdHRlbiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCBjOWI2OGQwLi5iOTYwMmVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0xOTczLDcgKzE5NzMsNyBAQAogCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKIAkJLnB2cl92YWx1ZQkJPSAweDgwMjQwMDAwLAogCQkuY3B1X25hbWUJCT0gImU1NTAwIiwKLQkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FNTAwTUMsCisJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfRTU1MDAsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFLAogCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV9GU0xfRSB8IE1NVV9GVFJfQklHX1BIWVMgfAogCQkJTU1VX0ZUUl9VU0VfVExCSUxYLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCmluZGV4IDNkM2Q0MTYuLjViNWUxZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKQEAgLTE2Myw3ICsxNjMsNyBAQAogfQogCiAvKiB3YWl0IGZvciBhbGwgdGhlIENQVXMgdG8gaGl0IHJlYWwgbW9kZSBidXQgdGltZW91dCBpZiB0aGV5IGRvbid0IGNvbWUgaW4gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVV82NCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorI2lmZGVmIENPTkZJR19QUENfU1REX01NVV82NAogc3RhdGljIHZvaWQgY3Jhc2hfa2V4ZWNfd2FpdF9yZWFsbW9kZShpbnQgY3B1KQogewogCXVuc2lnbmVkIGludCBtc2VjczsKQEAgLTE4OCw5ICsxODgsNyBAQAogCX0KIAltYigpOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9rZXhlY193YWl0X3JlYWxtb2RlKGludCBjcHUpIHt9Ci0jZW5kaWYKKyNlbmRpZgkvKiBDT05GSUdfUFBDX1NURF9NTVVfNjQgKi8KIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgYnkgc2Vjb25kYXJ5IGNwdXMgb3IgYnkga2V4ZWMgY3B1CkBAIC0yMzUsNyArMjMzLDkgQEAKIAljcmFzaF9pcGlfY2FsbGJhY2socmVncyk7CiB9CiAKLSNlbHNlCisjZWxzZQkvKiAhIENPTkZJR19TTVAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9rZXhlY193YWl0X3JlYWxtb2RlKGludCBjcHUpIHt9CisKIHN0YXRpYyB2b2lkIGNyYXNoX2tleGVjX3ByZXBhcmVfY3B1cyhpbnQgY3B1KQogewogCS8qCkBAIC0yNTUsNyArMjU1LDcgQEAKIHsKIAljcHVzX2luX3NyID0gQ1BVX01BU0tfTk9ORTsKIH0KLSNlbmRpZgorI2VuZGlmCS8qIENPTkZJR19TTVAgKi8KIAogLyoKICAqIFJlZ2lzdGVyIGEgZnVuY3Rpb24gdG8gYmUgY2FsbGVkIG9uIHNodXRkb3duLiAgT25seSB1c2UgdGhpcyBpZiB5b3UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMKaW5kZXggYzgzNDc1Ny4uMmI5N2I4MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMKQEAgLTMzMCw5ICszMzAsMTEgQEAKIAkJaWYgKCFwYXJlbnQpCiAJCQljb250aW51ZTsKIAkJaWYgKG9mX21hdGNoX25vZGUobGVnYWN5X3NlcmlhbF9wYXJlbnRzLCBwYXJlbnQpICE9IE5VTEwpIHsKLQkJCWluZGV4ID0gYWRkX2xlZ2FjeV9zb2NfcG9ydChucCwgbnApOwotCQkJaWYgKGluZGV4ID49IDAgJiYgbnAgPT0gc3Rkb3V0KQotCQkJCWxlZ2FjeV9zZXJpYWxfY29uc29sZSA9IGluZGV4OworCQkJaWYgKG9mX2RldmljZV9pc19hdmFpbGFibGUobnApKSB7CisJCQkJaW5kZXggPSBhZGRfbGVnYWN5X3NvY19wb3J0KG5wLCBucCk7CisJCQkJaWYgKGluZGV4ID49IDAgJiYgbnAgPT0gc3Rkb3V0KQorCQkJCQlsZWdhY3lfc2VyaWFsX2NvbnNvbGUgPSBpbmRleDsKKwkJCX0KIAkJfQogCQlvZl9ub2RlX3B1dChwYXJlbnQpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKaW5kZXggYzQwNjNiNy4uODIyZjYzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wZXJmX2V2ZW50LmMKQEAgLTM5OCw2ICszOTgsMjUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHU2NCBjaGVja19hbmRfY29tcHV0ZV9kZWx0YSh1NjQgcHJldiwgdTY0IHZhbCkKK3sKKwl1NjQgZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7CisKKwkvKgorCSAqIFBPV0VSNyBjYW4gcm9sbCBiYWNrIGNvdW50ZXIgdmFsdWVzLCBpZiB0aGUgbmV3IHZhbHVlIGlzIHNtYWxsZXIKKwkgKiB0aGFuIHRoZSBwcmV2aW91cyB2YWx1ZSBpdCB3aWxsIGNhdXNlIHRoZSBkZWx0YSBhbmQgdGhlIGNvdW50ZXIgdG8KKwkgKiBoYXZlIGJvZ3VzIHZhbHVlcyB1bmxlc3Mgd2Ugcm9sbGVkIGEgY291bnRlciBvdmVyLiAgSWYgYSBjb3V0bmVyIGlzCisJICogcm9sbGVkIGJhY2ssIGl0IHdpbGwgYmUgc21hbGxlciwgYnV0IHdpdGhpbiAyNTYsIHdoaWNoIGlzIHRoZSBtYXhpbXVtCisJICogbnVtYmVyIG9mIGV2ZW50cyB0byByb2xsYmFjayBhdCBvbmNlLiAgSWYgd2UgZGVjdGVjdCBhIHJvbGxiYWNrCisJICogcmV0dXJuIDAuICBUaGlzIGNhbiBsZWFkIHRvIGEgc21hbGwgbGFjayBvZiBwcmVjaXNpb24gaW4gdGhlCisJICogY291bnRlcnMuCisJICovCisJaWYgKHByZXYgPiB2YWwgJiYgKHByZXYgLSB2YWwpIDwgMjU2KQorCQlkZWx0YSA9IDA7CisKKwlyZXR1cm4gZGVsdGE7Cit9CisKIHN0YXRpYyB2b2lkIHBvd2VyX3BtdV9yZWFkKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKIAlzNjQgdmFsLCBkZWx0YSwgcHJldjsKQEAgLTQxNiwxMCArNDM1LDExIEBACiAJCXByZXYgPSBsb2NhbDY0X3JlYWQoJmV2ZW50LT5ody5wcmV2X2NvdW50KTsKIAkJYmFycmllcigpOwogCQl2YWwgPSByZWFkX3BtYyhldmVudC0+aHcuaWR4KTsKKwkJZGVsdGEgPSBjaGVja19hbmRfY29tcHV0ZV9kZWx0YShwcmV2LCB2YWwpOworCQlpZiAoIWRlbHRhKQorCQkJcmV0dXJuOwogCX0gd2hpbGUgKGxvY2FsNjRfY21weGNoZygmZXZlbnQtPmh3LnByZXZfY291bnQsIHByZXYsIHZhbCkgIT0gcHJldik7CiAKLQkvKiBUaGUgY291bnRlcnMgYXJlIG9ubHkgMzIgYml0cyB3aWRlICovCi0JZGVsdGEgPSAodmFsIC0gcHJldikgJiAweGZmZmZmZmZmdWw7CiAJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOwogCWxvY2FsNjRfc3ViKGRlbHRhLCAmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKIH0KQEAgLTQ0OSw4ICs0NjksOSBAQAogCQl2YWwgPSAoZXZlbnQtPmh3LmlkeCA9PSA1KSA/IHBtYzUgOiBwbWM2OwogCQlwcmV2ID0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CiAJCWV2ZW50LT5ody5pZHggPSAwOwotCQlkZWx0YSA9ICh2YWwgLSBwcmV2KSAmIDB4ZmZmZmZmZmZ1bDsKLQkJbG9jYWw2NF9hZGQoZGVsdGEsICZldmVudC0+Y291bnQpOworCQlkZWx0YSA9IGNoZWNrX2FuZF9jb21wdXRlX2RlbHRhKHByZXYsIHZhbCk7CisJCWlmIChkZWx0YSkKKwkJCWxvY2FsNjRfYWRkKGRlbHRhLCAmZXZlbnQtPmNvdW50KTsKIAl9CiB9CiAKQEAgLTQ1OCwxNCArNDc5LDE2IEBACiAJCQkJICB1bnNpZ25lZCBsb25nIHBtYzUsIHVuc2lnbmVkIGxvbmcgcG1jNikKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7Ci0JdTY0IHZhbDsKKwl1NjQgdmFsLCBwcmV2OwogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGNwdWh3LT5uX2xpbWl0ZWQ7ICsraSkgewogCQlldmVudCA9IGNwdWh3LT5saW1pdGVkX2NvdW50ZXJbaV07CiAJCWV2ZW50LT5ody5pZHggPSBjcHVody0+bGltaXRlZF9od2lkeFtpXTsKIAkJdmFsID0gKGV2ZW50LT5ody5pZHggPT0gNSkgPyBwbWM1IDogcG1jNjsKLQkJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCQlwcmV2ID0gbG9jYWw2NF9yZWFkKCZldmVudC0+aHcucHJldl9jb3VudCk7CisJCWlmIChjaGVja19hbmRfY29tcHV0ZV9kZWx0YShwcmV2LCB2YWwpKQorCQkJbG9jYWw2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOwogCQlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7CiAJfQogfQpAQCAtMTE5Nyw3ICsxMjIwLDcgQEAKIAogCS8qIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgaW50ZXJydXB0cyBoZXJlICovCiAJcHJldiA9IGxvY2FsNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOwotCWRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOworCWRlbHRhID0gY2hlY2tfYW5kX2NvbXB1dGVfZGVsdGEocHJldiwgdmFsKTsKIAlsb2NhbDY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNTU2MTNlMy4uYTZhZTFjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCkBAIC05MzMsMTIgKzkzMywxNiBAQAogCWlmIChkYXRhICYmICEoZGF0YSAmIERBQlJfVFJBTlNMQVRJT04pKQogCQlyZXR1cm4gLUVJTzsKICNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCisJaWYgKHB0cmFjZV9nZXRfYnJlYWtwb2ludHModGFzaykgPCAwKQorCQlyZXR1cm4gLUVTUkNIOworCiAJYnAgPSB0aHJlYWQtPnB0cmFjZV9icHNbMF07CiAJaWYgKCghZGF0YSkgfHwgIShkYXRhICYgKERBQlJfREFUQV9XUklURSB8IERBQlJfREFUQV9SRUFEKSkpIHsKIAkJaWYgKGJwKSB7CiAJCQl1bnJlZ2lzdGVyX2h3X2JyZWFrcG9pbnQoYnApOwogCQkJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gTlVMTDsKIAkJfQorCQlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRhc2spOwogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKGJwKSB7CkBAIC05NDgsOSArOTUyLDEyIEBACiAJCQkJCShEQUJSX0RBVEFfV1JJVEUgfCBEQUJSX0RBVEFfUkVBRCksCiAJCQkJCQkJJmF0dHIuYnBfdHlwZSk7CiAJCXJldCA9ICBtb2RpZnlfdXNlcl9od19icmVha3BvaW50KGJwLCAmYXR0cik7Ci0JCWlmIChyZXQpCisJCWlmIChyZXQpIHsKKwkJCXB0cmFjZV9wdXRfYnJlYWtwb2ludHModGFzayk7CiAJCQlyZXR1cm4gcmV0OworCQl9CiAJCXRocmVhZC0+cHRyYWNlX2Jwc1swXSA9IGJwOworCQlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRhc2spOwogCQl0aHJlYWQtPmRhYnIgPSBkYXRhOwogCQlyZXR1cm4gMDsKIAl9CkBAIC05NjUsOSArOTcyLDEyIEBACiAJCQkJCQkJcHRyYWNlX3RyaWdnZXJlZCwgdGFzayk7CiAJaWYgKElTX0VSUihicCkpIHsKIAkJdGhyZWFkLT5wdHJhY2VfYnBzWzBdID0gTlVMTDsKKwkJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0YXNrKTsKIAkJcmV0dXJuIFBUUl9FUlIoYnApOwogCX0KIAorCXB0cmFjZV9wdXRfYnJlYWtwb2ludHModGFzayk7CisKICNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCiAKIAkvKiBNb3ZlIGNvbnRlbnRzIHRvIHRoZSBEQUJSIHJlZ2lzdGVyICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAuYwppbmRleCBjYmRiYjE0Li45ZjljMjA0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCgpOwogCQlicmVhazsKIAljYXNlIFBQQ19NU0dfUkVTQ0hFRFVMRToKLQkJLyogd2Ugbm90aWNlIG5lZWRfcmVzY2hlZCBvbiBleGl0ICovCisJCXNjaGVkdWxlcl9pcGkoKTsKIAkJYnJlYWs7CiAJY2FzZSBQUENfTVNHX0NBTExfRlVOQ19TSU5HTEU6CiAJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCByZXNjaGVkdWxlX2FjdGlvbihpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCS8qIHdlIGp1c3QgbmVlZCB0aGUgcmV0dXJuIHBhdGggc2lkZSBlZmZlY3Qgb2YgY2hlY2tpbmcgbmVlZF9yZXNjaGVkICovCisJc2NoZWR1bGVyX2lwaSgpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCAzNzU0ODBjLi5mMzNhY2ZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMjI5LDYgKzIyOSw5IEBACiAJdTY0IHN0b2xlbiA9IDA7CiAJdTY0IGR0YjsKIAorCWlmICghZHRsKQorCQlyZXR1cm4gMDsKKwogCWlmIChpID09IHZwYS0+ZHRsX2lkeCkKIAkJcmV0dXJuIDA7CiAJd2hpbGUgKGkgPCB2cGEtPmR0bF9pZHgpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc3VzcGVuZC5jCmluZGV4IDE4ODI3MjkuLjEwNGZhYTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zdXNwZW5kLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3N1c3BlbmQuYwpAQCAtMzE4LDE3ICszMTgsMjAgQEAKIAkuZW5kID0gbXBjODN4eF9zdXNwZW5kX2VuZCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBtY19tYXRjaFtdOwogc3RhdGljIGludCBwbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZkZXYpCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwogCXN0cnVjdCBwbWNfdHlwZSAqdHlwZTsKIAlpbnQgcmV0ID0gMDsKIAotCWlmICghb2ZkZXYtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShwbWNfbWF0Y2gsICZvZmRldi0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXR5cGUgPSBvZmRldi0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCXR5cGUgPSBtYXRjaC0+ZGF0YTsKIAogCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYwppbmRleCBhY2ZhY2NlLi4zNjc1ZGE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9saW51eF9sb2dvLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KICNpbmNsdWRlIDxhc20vc3B1Lmg+CiAjaW5jbHVkZSA8YXNtL3NwdV9wcml2MS5oPgogI2luY2x1ZGUgPGFzbS9zcHVfY3NhLmg+CkBAIC01MjEsMTggKzUyMiw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcHVfaW5pdF9jaGFubmVscyk7CiAKLXN0YXRpYyBpbnQgc3B1X3NodXRkb3duKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCi17Ci0Jc3RydWN0IHNwdSAqc3B1ID0gY29udGFpbmVyX29mKHN5c2Rldiwgc3RydWN0IHNwdSwgc3lzZGV2KTsKLQotCXNwdV9mcmVlX2lycXMoc3B1KTsKLQlzcHVfZGVzdHJveV9zcHUoc3B1KTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3Mgc3B1X3N5c2Rldl9jbGFzcyA9IHsKIAkubmFtZSA9ICJzcHUiLAotCS5zaHV0ZG93biA9IHNwdV9zaHV0ZG93biwKIH07CiAKIGludCBzcHVfYWRkX3N5c2Rldl9hdHRyKHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyKQpAQCAtNzk3LDYgKzc4OCwyMiBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyB2b2lkIHNwdV9zaHV0ZG93bih2b2lkKQoreworCXN0cnVjdCBzcHUgKnNwdTsKKworCW11dGV4X2xvY2soJnNwdV9mdWxsX2xpc3RfbXV0ZXgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc3B1LCAmc3B1X2Z1bGxfbGlzdCwgZnVsbF9saXN0KSB7CisJCXNwdV9mcmVlX2lycXMoc3B1KTsKKwkJc3B1X2Rlc3Ryb3lfc3B1KHNwdSk7CisJfQorCW11dGV4X3VubG9jaygmc3B1X2Z1bGxfbGlzdF9tdXRleCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgc3B1X3N5c2NvcmVfb3BzID0geworCS5zaHV0ZG93biA9IHNwdV9zaHV0ZG93biwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGluaXRfc3B1X2Jhc2Uodm9pZCkKIHsKIAlpbnQgaSwgcmV0ID0gMDsKQEAgLTgzMCw2ICs4MzcsNyBAQAogCWNyYXNoX3JlZ2lzdGVyX3NwdXMoJnNwdV9mdWxsX2xpc3QpOwogCW11dGV4X3VubG9jaygmc3B1X2Z1bGxfbGlzdF9tdXRleCk7CiAJc3B1X2FkZF9zeXNkZXZfYXR0cigmYXR0cl9zdGF0KTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmc3B1X3N5c2NvcmVfb3BzKTsKIAogCXNwdV9pbml0X2FmZmluaXR5KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IDAyM2YyNDAuLjdjMThhMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvYWRiLmg+CiAjaW5jbHVkZSA8bGludXgvcG11Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC02NzcsNyArNjc3LDcgQEAKIAlyZXR1cm4gdmlhaW50OwogfQogCi1zdGF0aWMgaW50IHBtYWNwaWNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IHBtYWNwaWNfc3VzcGVuZCh2b2lkKQogewogCWludCB2aWFpbnQgPSBwbWFjcGljX2ZpbmRfdmlhaW50KCk7CiAKQEAgLTY5OCw3ICs2OTgsNyBAQAogICAgICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwbWFjcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQorc3RhdGljIHZvaWQgcG1hY3BpY19yZXN1bWUodm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtNzA5LDM5ICs3MDksMTkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgbWF4X3JlYWxfaXJxczsgKytpKQogCQlpZiAodGVzdF9iaXQoaSwgc2xlZXBfc2F2ZV9tYXNrKSkKIAkJCXBtYWNfdW5tYXNrX2lycShpcnFfZ2V0X2lycV9kYXRhKGkpKTsKLQotCXJldHVybiAwOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1BNICYmIENPTkZJR19QUEMzMiAqLwotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBwbWFjcGljX3N5c2NsYXNzID0gewotCS5uYW1lID0gInBtYWNfcGljIiwKK3N0YXRpYyBzdHJ1Y3Qgc3lzY29yZV9vcHMgcG1hY3BpY19zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZAk9IHBtYWNwaWNfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBtYWNwaWNfcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIGRldmljZV9wbWFjcGljID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJnBtYWNwaWNfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgZHJpdmVyX3BtYWNwaWMgPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQotCS5zdXNwZW5kCT0gJnBtYWNwaWNfc3VzcGVuZCwKLQkucmVzdW1lCQk9ICZwbWFjcGljX3Jlc3VtZSwKLSNlbmRpZiAvKiBDT05GSUdfUE0gJiYgQ09ORklHX1BQQzMyICovCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpbml0X3BtYWNwaWNfc3lzZnModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfcG1hY3BpY19zeXNjb3JlKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1BQQzMyCi0JaWYgKG1heF9pcnFzID09IDApCi0JCXJldHVybiAtRU5PREVWOwotI2VuZGlmCi0JcHJpbnRrKEtFUk5fREVCVUcgIlJlZ2lzdGVyaW5nIHBtYWMgcGljIHdpdGggc3lzZnMuLi5cbiIpOwotCXN5c2Rldl9jbGFzc19yZWdpc3RlcigmcG1hY3BpY19zeXNjbGFzcyk7Ci0Jc3lzZGV2X3JlZ2lzdGVyKCZkZXZpY2VfcG1hY3BpYyk7Ci0Jc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmcG1hY3BpY19zeXNjbGFzcywgJmRyaXZlcl9wbWFjcGljKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcG1hY3BpY19zeXNjb3JlX29wcyk7CiAJcmV0dXJuIDA7CiB9Ci1tYWNoaW5lX3N1YnN5c19pbml0Y2FsbChwb3dlcm1hYywgaW5pdF9wbWFjcGljX3N5c2ZzKTsKIAorbWFjaGluZV9zdWJzeXNfaW5pdGNhbGwocG93ZXJtYWMsIGluaXRfcG1hY3BpY19zeXNjb3JlKTsKKworI2VuZGlmIC8qIENPTkZJR19QTSAmJiBDT05GSUdfUFBDMzIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IGE4MzBjNWUuLmJjNWYwZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtODQyLDYgKzg0Miw3IEBACiAJbXBpY19zZXR1cF90aGlzX2NwdSgpOwogfQogCisjaWZkZWYgQ09ORklHX1BQQzY0CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiBzdGF0aWMgaW50IHNtcF9jb3JlOTlfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQpAQCAtODc5LDcgKzg4MCw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbXBfY29yZTk5X2JyaW5ndXBfZG9uZSh2b2lkKQogewotI2lmZGVmIENPTkZJR19QUEM2NAogCWV4dGVybiB2b2lkIGc1X3BoeV9kaXNhYmxlX2NwdTEodm9pZCk7CiAKIAkvKiBDbG9zZSBpMmMgYnVzIGlmIGl0IHdhcyB1c2VkIGZvciB0YiBzeW5jICovCkBAIC04OTQsMTQgKzg5NCwxNCBAQAogCQlzZXRfY3B1X3ByZXNlbnQoMSwgZmFsc2UpOwogCQlnNV9waHlfZGlzYWJsZV9jcHUxKCk7CiAJfQotI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZzbXBfY29yZTk5X2NwdV9uYik7CiAjZW5kaWYKKwogCWlmIChwcGNfbWQucHJvZ3Jlc3MpCiAJCXBwY19tZC5wcm9ncmVzcygic21wX2NvcmU5OV9icmluZ3VwX2RvbmUiLCAweDM0OSk7CiB9CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIApAQCAtOTc1LDcgKzk3NSw5IEBACiBzdHJ1Y3Qgc21wX29wc190IGNvcmU5OV9zbXBfb3BzID0gewogCS5tZXNzYWdlX3Bhc3MJPSBzbXBfbXBpY19tZXNzYWdlX3Bhc3MsCiAJLnByb2JlCQk9IHNtcF9jb3JlOTlfcHJvYmUsCisjaWZkZWYgQ09ORklHX1BQQzY0CiAJLmJyaW5ndXBfZG9uZQk9IHNtcF9jb3JlOTlfYnJpbmd1cF9kb25lLAorI2VuZGlmCiAJLmtpY2tfY3B1CT0gc21wX2NvcmU5OV9raWNrX2NwdSwKIAkuc2V0dXBfY3B1CT0gc21wX2NvcmU5OV9zZXR1cF9jcHUsCiAJLmdpdmVfdGltZWJhc2UJPSBzbXBfY29yZTk5X2dpdmVfdGltZWJhc2UsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCmluZGV4IDAwMDcyNDEuLjZjNDJjZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jCkBAIC0yODcsMTQgKzI4NywyMiBAQAogCWludCBjcHUsIHJldDsKIAlzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKnBwOwogCXN0cnVjdCBkdGxfZW50cnkgKmR0bDsKKwlzdHJ1Y3Qga21lbV9jYWNoZSAqZHRsX2NhY2hlOwogCiAJaWYgKCFmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX1NQTFBBUikpCiAJCXJldHVybiAwOwogCisJZHRsX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImR0bCIsIERJU1BBVENIX0xPR19CWVRFUywKKwkJCQkJCURJU1BBVENIX0xPR19CWVRFUywgMCwgTlVMTCk7CisJaWYgKCFkdGxfY2FjaGUpIHsKKwkJcHJfd2FybigiRmFpbGVkIHRvIGNyZWF0ZSBkaXNwYXRjaCB0cmFjZSBsb2cgYnVmZmVyIGNhY2hlXG4iKTsKKwkJcHJfd2FybigiU3RvbGVuIHRpbWUgc3RhdGlzdGljcyB3aWxsIGJlIHVucmVsaWFibGVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXBwID0gJnBhY2FbY3B1XTsKLQkJZHRsID0ga21hbGxvY19ub2RlKERJU1BBVENIX0xPR19CWVRFUywgR0ZQX0tFUk5FTCwKLQkJCQkgICBjcHVfdG9fbm9kZShjcHUpKTsKKwkJZHRsID0ga21lbV9jYWNoZV9hbGxvYyhkdGxfY2FjaGUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWR0bCkgewogCQkJcHJfd2FybigiRmFpbGVkIHRvIGFsbG9jYXRlIGRpc3BhdGNoIHRyYWNlIGxvZyBmb3IgY3B1ICVkXG4iLAogCQkJCWNwdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9tc2kuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCmluZGV4IGQ1Njc5ZGMuLjAxY2QyZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX21zaS5jCkBAIC0zMDQsOCArMzA0LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbF9vZl9tc2lfaWRzW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfb2ZfbXNpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgZnNsX21zaSAqbXNpOwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJaW50IGVyciwgaSwgaiwgaXJxX2luZGV4LCBjb3VudDsKQEAgLTMxNiw5ICszMTgsMTAgQEAKIAl1MzIgb2Zmc2V0OwogCXN0YXRpYyBjb25zdCB1MzIgYWxsX2F2YWlsW10gPSB7IDAsIE5SX01TSV9JUlFTIH07CiAKLQlpZiAoIWRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKGZzbF9vZl9tc2lfaWRzLCAmZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCWZlYXR1cmVzID0gZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CisJZmVhdHVyZXMgPSBtYXRjaC0+ZGF0YTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJTZXR0aW5nIHVwIEZyZWVzY2FsZSBNU0kgc3VwcG9ydFxuIik7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKaW5kZXggZjhmN2YyOC4uNjhjYTkyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKQEAgLTMyNCw2ICszMjQsMTEgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsKIAljb25zdCBpbnQgKmJ1c19yYW5nZTsKIAorCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShkZXYpKSB7CisJCXByX3dhcm5pbmcoIiVzOiBkaXNhYmxlZFxuIiwgZGV2LT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlwcl9kZWJ1ZygiQWRkaW5nIFBDSSBob3N0IGJyaWRnZSAlc1xuIiwgZGV2LT5mdWxsX25hbWUpOwogCiAJLyogRmV0Y2ggaG9zdCBicmlkZ2UgcmVnaXN0ZXJzIGFkZHJlc3MgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKaW5kZXggZmE0MzhiZS4uNTk2NTU0YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC05MDIsNyArOTAyLDcgQEAKIAl1MzIgc2VyY3I7CiB9IGlwaWNfc2F2ZWRfc3RhdGU7CiAKLXN0YXRpYyBpbnQgaXBpY19zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpzZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IGlwaWNfc3VzcGVuZCh2b2lkKQogewogCXN0cnVjdCBpcGljICppcGljID0gcHJpbWFyeV9pcGljOwogCkBAIC05MzMsNyArOTMzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcGljX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqc2RldikKK3N0YXRpYyB2b2lkIGlwaWNfcmVzdW1lKHZvaWQpCiB7CiAJc3RydWN0IGlwaWMgKmlwaWMgPSBwcmltYXJ5X2lwaWM7CiAKQEAgLTk0OSw0NCArOTQ5LDI2IEBACiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NFQ05SLCBpcGljX3NhdmVkX3N0YXRlLnNlY25yKTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIElQSUNfU0VSTVIsIGlwaWNfc2F2ZWRfc3RhdGUuc2VybXIpOwogCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TRVJDUiwgaXBpY19zYXZlZF9zdGF0ZS5zZXJjcik7Ci0KLQlyZXR1cm4gMDsKIH0KICNlbHNlCiAjZGVmaW5lIGlwaWNfc3VzcGVuZCBOVUxMCiAjZGVmaW5lIGlwaWNfcmVzdW1lIE5VTEwKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBpcGljX3N5c2NsYXNzID0gewotCS5uYW1lID0gImlwaWMiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBpcGljX3N5c2NvcmVfb3BzID0gewogCS5zdXNwZW5kID0gaXBpY19zdXNwZW5kLAogCS5yZXN1bWUgPSBpcGljX3Jlc3VtZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfaXBpYyA9IHsKLQkuaWQJCT0gMCwKLQkuY2xzCQk9ICZpcGljX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9pcGljX3N5c2ZzKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2lwaWNfc3lzY29yZSh2b2lkKQogewotCWludCByYzsKLQogCWlmICghcHJpbWFyeV9pcGljIHx8ICFwcmltYXJ5X2lwaWMtPnJlZ3MpCiAJCXJldHVybiAtRU5PREVWOwotCXByaW50ayhLRVJOX0RFQlVHICJSZWdpc3RlcmluZyBpcGljIHdpdGggc3lzZnMuLi5cbiIpOwogCi0JcmMgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmlwaWNfc3lzY2xhc3MpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZWdpc3RlcmluZyBpcGljIHN5cyBjbGFzc1xuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyYyA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX2lwaWMpOwotCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZWdpc3RlcmluZyBpcGljIHN5cyBkZXZpY2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJcHJpbnRrKEtFUk5fREVCVUcgIlJlZ2lzdGVyaW5nIGlwaWMgc3lzdGVtIGNvcmUgb3BlcmF0aW9uc1xuIik7CisJcmVnaXN0ZXJfc3lzY29yZV9vcHMoJmlwaWNfc3lzY29yZV9vcHMpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChpbml0X2lwaWNfc3lzZnMpOworc3Vic3lzX2luaXRjYWxsKGluaXRfaXBpY19zeXNjb3JlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKaW5kZXggZjkxYzA2NS4uN2U1ZGM4ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KQEAgLTE3MDIsOSArMTcwMyw4IEBACiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAjaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50IG1waWNfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgdm9pZCBtcGljX3N1c3BlbmRfb25lKHN0cnVjdCBtcGljICptcGljKQogewotCXN0cnVjdCBtcGljICptcGljID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG1waWMsIHN5c2Rldik7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbXBpYy0+bnVtX3NvdXJjZXM7IGkrKykgewpAQCAtMTcxMywxMyArMTcxMywyMiBAQAogCQltcGljLT5zYXZlX2RhdGFbaV0uZGVzdCA9CiAJCQltcGljX2lycV9yZWFkKGksIE1QSUNfSU5GTyhJUlFfREVTVElOQVRJT04pKTsKIAl9Cit9CisKK3N0YXRpYyBpbnQgbXBpY19zdXNwZW5kKHZvaWQpCit7CisJc3RydWN0IG1waWMgKm1waWMgPSBtcGljczsKKworCXdoaWxlIChtcGljKSB7CisJCW1waWNfc3VzcGVuZF9vbmUobXBpYyk7CisJCW1waWMgPSBtcGljLT5uZXh0OworCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG1waWNfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBtcGljX3Jlc3VtZV9vbmUoc3RydWN0IG1waWMgKm1waWMpCiB7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgbXBpYywgc3lzZGV2KTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBtcGljLT5udW1fc291cmNlczsgaSsrKSB7CkBAIC0xNzQ2LDMzICsxNzU1LDI4IEBACiAJfQogI2VuZGlmCiAJfSAvKiBlbmQgZm9yIGxvb3AgKi8KLQotCXJldHVybiAwOwogfQotI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG1waWNfc3lzY2xhc3MgPSB7Ci0jaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgdm9pZCBtcGljX3Jlc3VtZSh2b2lkKQoreworCXN0cnVjdCBtcGljICptcGljID0gbXBpY3M7CisKKwl3aGlsZSAobXBpYykgeworCQltcGljX3Jlc3VtZV9vbmUobXBpYyk7CisJCW1waWMgPSBtcGljLT5uZXh0OworCX0KK30KKworc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBtcGljX3N5c2NvcmVfb3BzID0gewogCS5yZXN1bWUgPSBtcGljX3Jlc3VtZSwKIAkuc3VzcGVuZCA9IG1waWNfc3VzcGVuZCwKLSNlbmRpZgotCS5uYW1lID0gIm1waWMiLAogfTsKIAogc3RhdGljIGludCBtcGljX2luaXRfc3lzKHZvaWQpCiB7Ci0Jc3RydWN0IG1waWMgKm1waWMgPSBtcGljczsKLQlpbnQgZXJyb3IsIGlkID0gMDsKLQotCWVycm9yID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZtcGljX3N5c2NsYXNzKTsKLQotCXdoaWxlIChtcGljICYmICFlcnJvcikgewotCQltcGljLT5zeXNkZXYuY2xzID0gJm1waWNfc3lzY2xhc3M7Ci0JCW1waWMtPnN5c2Rldi5pZCA9IGlkKys7Ci0JCWVycm9yID0gc3lzZGV2X3JlZ2lzdGVyKCZtcGljLT5zeXNkZXYpOwotCQltcGljID0gbXBpYy0+bmV4dDsKLQl9Ci0JcmV0dXJuIGVycm9yOworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZtcGljX3N5c2NvcmVfb3BzKTsKKwlyZXR1cm4gMDsKIH0KIAogZGV2aWNlX2luaXRjYWxsKG1waWNfaW5pdF9zeXMpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IDI1MDhhNmYuLjRhN2YxNDAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9LY29uZmlnCisrKyBiL2FyY2gvczM5MC9LY29uZmlnCkBAIC04OCw2ICs4OCw3IEBACiAJc2VsZWN0IEhBVkVfS0VSTkVMX1haCiAJc2VsZWN0IEhBVkVfR0VUX1VTRVJfUEFHRVNfRkFTVAogCXNlbGVjdCBIQVZFX0FSQ0hfTVVURVhfQ1BVX1JFTEFYCisJc2VsZWN0IEhBVkVfQVJDSF9KVU1QX0xBQkVMIGlmICFNQVJDSF9HNQogCXNlbGVjdCBBUkNIX0lOTElORV9TUElOX1RSWUxPQ0sKIAlzZWxlY3QgQVJDSF9JTkxJTkVfU1BJTl9UUllMT0NLX0JICiAJc2VsZWN0IEFSQ0hfSU5MSU5FX1NQSU5fTE9DSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9wcm5nLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYwppbmRleCA5NzVlM2FiLi44YjE2YzQ3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3BybmcuYwpAQCAtNzYsNyArNzYsNyBAQAogCiAJLyogQWRkIHRoZSBlbnRyb3B5ICovCiAJd2hpbGUgKG5ieXRlcyA+PSA4KSB7Ci0JCSooKF9fdTY0ICopcGFybV9ibG9jaykgXj0gKigoX191NjQgKilidWYraSo4KTsKKwkJKigoX191NjQgKilwYXJtX2Jsb2NrKSBePSAqKChfX3U2NCAqKShidWYraSkpOwogCQlwcm5nX2FkZF9lbnRyb3B5KCk7CiAJCWkgKz0gODsKIAkJbmJ5dGVzIC09IDg7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA0M2E1Yzc4Li4zZTIwMzgzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTExLDUgKzExLDYgQEAKIGludCBzZXRfbWVtb3J5X3JvKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKIGludCBzZXRfbWVtb3J5X3J3KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKIGludCBzZXRfbWVtb3J5X254KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKTsKK2ludCBzZXRfbWVtb3J5X3godW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMpOwogCiAjZW5kaWYgLyogX1MzOTBfQ0FDSEVGTFVTSF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGlhZy5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2RpYWcuaAppbmRleCA3MmIyZTJmLi43ZTkxYzU4IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZGlhZy5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9kaWFnLmgKQEAgLTksOSArOSwyMiBAQAogI2RlZmluZSBfQVNNX1MzOTBfRElBR19ICiAKIC8qCi0gKiBEaWFnbm9zZSAxMDogUmVsZWFzZSBwYWdlcworICogRGlhZ25vc2UgMTA6IFJlbGVhc2UgcGFnZSByYW5nZQogICovCi1leHRlcm4gdm9pZCBkaWFnMTAodW5zaWduZWQgbG9uZyBhZGRyKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaWFnMTBfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgbnVtX3BmbikKK3sKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2FkZHIsIGVuZF9hZGRyOworCisJc3RhcnRfYWRkciA9IHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOworCWVuZF9hZGRyID0gKHN0YXJ0X3BmbiArIG51bV9wZm4gLSAxKSA8PCBQQUdFX1NISUZUOworCisJYXNtIHZvbGF0aWxlKAorCQkiMDoJZGlhZwklMCwlMSwweDEwXG4iCisJCSIxOlxuIgorCQlFWF9UQUJMRSgwYiwgMWIpCisJCUVYX1RBQkxFKDFiLCAxYikKKwkJOiA6ICJhIiAoc3RhcnRfYWRkciksICJhIiAoZW5kX2FkZHIpKTsKK30KIAogLyoKICAqIERpYWdub3NlIDE0OiBJbnB1dCBzcG9vbCBmaWxlIG1hbmlwdWxhdGlvbgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCmluZGV4IDNjMjliZTQuLmI3OTMxZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTExLDE1ICsxMSwxMyBAQAogCiAjaWZkZWYgQ09ORklHXzY0QklUCiAjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUgIDEyCi0jZGVmaW5lIE1DT1VOVF9PRkZTRVQJICAgOAogI2Vsc2UKICNkZWZpbmUgTUNPVU5UX0lOU05fU0laRSAgMjAKLSNkZWZpbmUgTUNPVU5UX09GRlNFVAkgICA0CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZ0cmFjZV9jYWxsX2FkanVzdCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcmV0dXJuIGFkZHIgLSBNQ09VTlRfT0ZGU0VUOworCXJldHVybiBhZGRyOwogfQogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWE2Y2YyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaApAQCAtMCwwICsxLDM3IEBACisjaWZuZGVmIF9BU01fUzM5MF9KVU1QX0xBQkVMX0gKKyNkZWZpbmUgX0FTTV9TMzkwX0pVTVBfTEFCRUxfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBKVU1QX0xBQkVMX05PUF9TSVpFIDYKKworI2lmZGVmIENPTkZJR182NEJJVAorI2RlZmluZSBBU01fUFRSICIucXVhZCIKKyNkZWZpbmUgQVNNX0FMSUdOICIuYmFsaWduIDgiCisjZWxzZQorI2RlZmluZSBBU01fUFRSICIubG9uZyIKKyNkZWZpbmUgQVNNX0FMSUdOICIuYmFsaWduIDQiCisjZW5kaWYKKworc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGFyY2hfc3RhdGljX2JyYW5jaChzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSkKK3sKKwlhc20gZ290bygiMDoJYnJjbCAwLDBcbiIKKwkJIi5wdXNoc2VjdGlvbiBfX2p1bXBfdGFibGUsIFwiYXdcIlxuIgorCQlBU01fQUxJR04gIlxuIgorCQlBU01fUFRSICIgMGIsICVsW2xhYmVsXSwgJTBcbiIKKwkJIi5wb3BzZWN0aW9uXG4iCisJCTogOiAiWCIgKGtleSkgOiA6IGxhYmVsKTsKKwlyZXR1cm4gZmFsc2U7CitsYWJlbDoKKwlyZXR1cm4gdHJ1ZTsKK30KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGp1bXBfbGFiZWxfdDsKKworc3RydWN0IGp1bXBfZW50cnkgeworCWp1bXBfbGFiZWxfdCBjb2RlOworCWp1bXBfbGFiZWxfdCB0YXJnZXQ7CisJanVtcF9sYWJlbF90IGtleTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAppbmRleCBhNmYwZTdjLi44YzI3N2NhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vbW11X2NvbnRleHQuaApAQCAtMjMsNyArMjMsNyBAQAogI2lmZGVmIENPTkZJR182NEJJVAogCW1tLT5jb250ZXh0LmFzY2VfYml0cyB8PSBfQVNDRV9UWVBFX1JFR0lPTjM7CiAjZW5kaWYKLQlpZiAoY3VycmVudC0+bW0tPmNvbnRleHQuYWxsb2NfcGdzdGUpIHsKKwlpZiAoY3VycmVudC0+bW0gJiYgY3VycmVudC0+bW0tPmNvbnRleHQuYWxsb2NfcGdzdGUpIHsKIAkJLyoKIAkJICogYWxsb2NfcGdzdGUgaW5kaWNhdGVzLCB0aGF0IGFueSBORVcgY29udGV4dCB3aWxsIGJlIGNyZWF0ZWQKIAkJICogd2l0aCBleHRlbmRlZCBwYWdlIHRhYmxlcy4gVGhlIG9sZCBjb250ZXh0IGlzIHVuY2hhbmdlZC4gVGhlCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQppbmRleCA2NDIzMGJjLi41ZmYxNWRhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKQEAgLTIzLDcgKzIzLDcgQEAKIG9iai15CTo9ICBiaXRtYXAubyB0cmFwcy5vIHRpbWUubyBwcm9jZXNzLm8gYmFzZS5vIGVhcmx5Lm8gc2V0dXAubyBcCiAJICAgIHByb2Nlc3Nvci5vIHN5c19zMzkwLm8gcHRyYWNlLm8gc2lnbmFsLm8gY3BjbWQubyBlYmNkaWMubyBcCiAJICAgIHMzOTBfZXh0Lm8gZGVidWcubyBpcnEubyBpcGwubyBkaXMubyBkaWFnLm8gbWVtX2RldGVjdC5vIFwKLQkgICAgdmRzby5vIHZ0aW1lLm8gc3lzaW5mby5vIG5taS5vIHNjbHAubworCSAgICB2ZHNvLm8gdnRpbWUubyBzeXNpbmZvLm8gbm1pLm8gc2NscC5vIGp1bXBfbGFiZWwubwogCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxlbnRyeTY0Lm8sZW50cnkubykKIG9iai15CSs9ICQoaWYgJChDT05GSUdfNjRCSVQpLHJlaXBsNjQubyxyZWlwbC5vKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kaWFnLmMgYi9hcmNoL3MzOTAva2VybmVsL2RpYWcuYwppbmRleCBjMDMyZDExLi44MjM3ZmMwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2RpYWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RpYWcuYwpAQCAtOSwyNyArOSw2IEBACiAjaW5jbHVkZSA8YXNtL2RpYWcuaD4KIAogLyoKLSAqIERpYWdub3NlIDEwOiBSZWxlYXNlIHBhZ2VzCi0gKi8KLXZvaWQgZGlhZzEwKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlpZiAoYWRkciA+PSAweDdmZjAwMDAwKQotCQlyZXR1cm47Ci0JYXNtIHZvbGF0aWxlKAotI2lmZGVmIENPTkZJR182NEJJVAotCQkiCXNhbTMxXG4iCi0JCSIJZGlhZwklMCwlMCwweDEwXG4iCi0JCSIwOglzYW02NFxuIgotI2Vsc2UKLQkJIglkaWFnCSUwLCUwLDB4MTBcbiIKLQkJIjA6XG4iCi0jZW5kaWYKLQkJRVhfVEFCTEUoMGIsIDBiKQotCQk6IDogImEiIChhZGRyKSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRpYWcxMCk7Ci0KLS8qCiAgKiBEaWFnbm9zZSAxNDogSW5wdXQgc3Bvb2wgZmlsZSBtYW5pcHVsYXRpb24KICAqLwogaW50IGRpYWcxNCh1bnNpZ25lZCBsb25nIHJ4LCB1bnNpZ25lZCBsb25nIHJ5MSwgdW5zaWduZWQgbG9uZyBzdWJjb2RlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYyBiL2FyY2gvczM5MC9rZXJuZWwvZGlzLmMKaW5kZXggYzgzNzI2Yy4uM2Q0YTc4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9kaXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2Rpcy5jCkBAIC02NzIsNiArNjcyLDcgQEAKIAl7ICJycCIsIDB4NzcsIElOU1RSX1NfUkQgfSwKIAl7ICJzdGNrZSIsIDB4NzgsIElOU1RSX1NfUkQgfSwKIAl7ICJzYWNmIiwgMHg3OSwgSU5TVFJfU19SRCB9LAorCXsgInNwcCIsIDB4ODAsIElOU1RSX1NfUkQgfSwKIAl7ICJzdHNpIiwgMHg3ZCwgSU5TVFJfU19SRCB9LAogCXsgInNybm0iLCAweDk5LCBJTlNUUl9TX1JEIH0sCiAJeyAic3RmcGMiLCAweDljLCBJTlNUUl9TX1JEIH0sCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKaW5kZXggNjQ4ZjY0Mi4uMWI2N2ZjNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwpAQCAtODM2LDcgKzgzNiw3IEBACiAJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0CSMgbm93IHdlIGNhbiB0dXJuIGRhdCBvbgogCWJhc3IJJXIxNCwwCiAJbAklcjE0LHJlc3RhcnRfYWRkci0uKCVyMTQpCi0JYnIJJXIxNAkJCSMgYnJhbmNoIHRvIHN0YXJ0X3NlY29uZGFyeQorCWJhc3IJJXIxNCwlcjE0CQkjIGJyYW5jaCB0byBzdGFydF9zZWNvbmRhcnkKIHJlc3RhcnRfYWRkcjoKIAkubG9uZwlzdGFydF9zZWNvbmRhcnkKIAkuYWxpZ24JOApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwppbmRleCA5ZDM2MDNkLi45ZmQ4NjQ1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUwpAQCAtODQxLDcgKzg0MSw3IEBACiAJbXZjCV9fTENfU1lTVEVNX1RJTUVSKDgpLF9fVElfc3lzdGVtX3RpbWVyKCVyMSkKIAl4YwlfX0xDX1NURUFMX1RJTUVSKDgpLF9fTENfU1RFQUxfVElNRVIKIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDQJIyBub3cgd2UgY2FuIHR1cm4gZGF0IG9uCi0JamcJc3RhcnRfc2Vjb25kYXJ5CisJYnJhc2wJJXIxNCxzdGFydF9zZWNvbmRhcnkKIAkuYWxpZ24JOAogcmVzdGFydF92dGltZToKIAkubG9uZwkweDdmZmZmZmZmLDB4ZmZmZmZmZmYKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvanVtcF9sYWJlbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9qdW1wX2xhYmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjYzA2YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvanVtcF9sYWJlbC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBKdW1wIGxhYmVsIHMzOTAgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCBJQk0gQ29ycC4gMjAxMQorICogQXV0aG9yKHMpOiBKYW4gR2xhdWJlciA8amFuZ0BsaW51eC52bmV0LmlibS5jb20+CisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgorI2luY2x1ZGUgPGFzbS9pcGwuaD4KKworI2lmZGVmIEhBVkVfSlVNUF9MQUJFTAorCitzdHJ1Y3QgaW5zbiB7CisJdTE2IG9wY29kZTsKKwlzMzIgb2Zmc2V0OworfSBfX3BhY2tlZDsKKworc3RydWN0IGluc25fYXJncyB7CisJdW5zaWduZWQgbG9uZyAqdGFyZ2V0OworCXN0cnVjdCBpbnNuICppbnNuOworCXNzaXplX3Qgc2l6ZTsKK307CisKK3N0YXRpYyBpbnQgX19hcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGluc25fYXJncyAqYXJncyA9IGRhdGE7CisJaW50IHJjOworCisJcmMgPSBwcm9iZV9rZXJuZWxfd3JpdGUoYXJncy0+dGFyZ2V0LCBhcmdzLT5pbnNuLCBhcmdzLT5zaXplKTsKKwlXQVJOX09OX09OQ0UocmMgPCAwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKKwkJCSAgICAgICBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQoreworCXN0cnVjdCBpbnNuX2FyZ3MgYXJnczsKKwlzdHJ1Y3QgaW5zbiBpbnNuOworCisJaWYgKHR5cGUgPT0gSlVNUF9MQUJFTF9FTkFCTEUpIHsKKwkJLyogYnJjbCAxNSxvZmZzZXQgKi8KKwkJaW5zbi5vcGNvZGUgPSAweGMwZjQ7CisJCWluc24ub2Zmc2V0ID0gKGVudHJ5LT50YXJnZXQgLSBlbnRyeS0+Y29kZSkgPj4gMTsKKwl9IGVsc2UgeworCQkvKiBicmNsIDAsMCAqLworCQlpbnNuLm9wY29kZSA9IDB4YzAwNDsKKwkJaW5zbi5vZmZzZXQgPSAwOworCX0KKworCWFyZ3MudGFyZ2V0ID0gKHZvaWQgKikgZW50cnktPmNvZGU7CisJYXJncy5pbnNuID0gJmluc247CisJYXJncy5zaXplID0gSlVNUF9MQUJFTF9OT1BfU0laRTsKKworCXN0b3BfbWFjaGluZShfX2FyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm0sICZhcmdzLCBOVUxMKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwppbmRleCA2M2E5N2RiLi42M2M3ZDlmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKQEAgLTE2NSwxMiArMTY1LDEyIEBACiAJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfSVBJXSsrOwogCS8qCiAJICogaGFuZGxlIGJpdCBzaWduYWwgZXh0ZXJuYWwgY2FsbHMKLQkgKgotCSAqIEZvciB0aGUgZWNfc2NoZWR1bGUgc2lnbmFsIHdlIGhhdmUgdG8gZG8gbm90aGluZy4gQWxsIHRoZSB3b3JrCi0JICogaXMgZG9uZSBhdXRvbWF0aWNhbGx5IHdoZW4gd2UgcmV0dXJuIGZyb20gdGhlIGludGVycnVwdC4KIAkgKi8KIAliaXRzID0geGNoZygmUzM5MF9sb3djb3JlLmV4dF9jYWxsX2Zhc3QsIDApOwogCisJaWYgKHRlc3RfYml0KGVjX3NjaGVkdWxlLCAmYml0cykpCisJCXNjaGVkdWxlcl9pcGkoKTsKKwogCWlmICh0ZXN0X2JpdChlY19jYWxsX2Z1bmN0aW9uLCAmYml0cykpCiAJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0vc2llNjRhLlMgYi9hcmNoL3MzOTAva3ZtL3NpZTY0YS5TCmluZGV4IDdlOWQzMGQuLmFiMGUwNDEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vc2llNjRhLlMKKysrIGIvYXJjaC9zMzkwL2t2bS9zaWU2NGEuUwpAQCAtNDgsMTAgKzQ4LDEwIEBACiAJdG0JX19USV9mbGFncys3KCVyMiksX1RJRl9FWElUX1NJRQogCWp6CTBmCiAJbGFybAklcjIsc2llX2V4aXQJCQkjIHdvcmsgcGVuZGluZywgbGVhdmUgc2llCi0Jc3RnCSVyMixfX0xDX1JFVFVSTl9QU1crOAorCXN0ZwklcjIsU1BJX1BTVys4KDAsJXIxNSkKIAlicgklcjE0CiAwOglsYXJsCSVyMixzaWVfcmVlbnRlcgkJCSMgcmUtZW50ZXIgd2l0aCBndWVzdCBpZAotCXN0ZwklcjIsX19MQ19SRVRVUk5fUFNXKzgKKwlzdGcJJXIyLFNQSV9QU1crOCgwLCVyMTUpCiAxOglicgklcjE0CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vY21tLmMgYi9hcmNoL3MzOTAvbW0vY21tLmMKaW5kZXggYzY2ZmZkOC4uMWYxZGJhOSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2NtbS5jCisrKyBiL2FyY2gvczM5MC9tbS9jbW0uYwpAQCAtOTEsNyArOTEsNyBAQAogCQkJfSBlbHNlCiAJCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBucGEpOwogCQl9Ci0JCWRpYWcxMChhZGRyKTsKKwkJZGlhZzEwX3JhbmdlKGFkZHIgPj4gUEFHRV9TSElGVCwgMSk7CiAJCXBhLT5wYWdlc1twYS0+aW5kZXgrK10gPSBhZGRyOwogCQkoKmNvdW50ZXIpKys7CiAJCXNwaW5fdW5sb2NrKCZjbW1fbG9jayk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IDkyMTdlMzMuLmFiOTg4MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC01NDMsNyArNTQzLDYgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKIAlfX3UxNiBzdWJjb2RlOwogCi0Ja3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfUEZMXSsrOwogCS8qCiAJICogR2V0IHRoZSBleHRlcm5hbCBpbnRlcnJ1cHRpb24gc3ViY29kZSAmIHBmYXVsdAogCSAqIGluaXRpYWwvY29tcGxldGlvbiBzaWduYWwgYml0LiBWTSBzdG9yZXMgdGhpcyAKQEAgLTU1MywxNCArNTUyLDE1IEBACiAJc3ViY29kZSA9IGV4dF9pbnRfY29kZSA+PiAxNjsKIAlpZiAoKHN1YmNvZGUgJiAweGZmMDApICE9IF9fU1VCQ09ERV9NQVNLKQogCQlyZXR1cm47CisJa3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfUEZMXSsrOwogCiAJLyoKIAkgKiBHZXQgdGhlIHRva2VuICg9IGFkZHJlc3Mgb2YgdGhlIHRhc2sgc3RydWN0dXJlIG9mIHRoZSBhZmZlY3RlZCB0YXNrKS4KIAkgKi8KICNpZmRlZiBDT05GSUdfNjRCSVQKLQl0c2sgPSAqKHN0cnVjdCB0YXNrX3N0cnVjdCAqKikgcGFyYW02NDsKKwl0c2sgPSAoc3RydWN0IHRhc2tfc3RydWN0ICopIHBhcmFtNjQ7CiAjZWxzZQotCXRzayA9ICooc3RydWN0IHRhc2tfc3RydWN0ICoqKSBwYXJhbTMyOworCXRzayA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKikgcGFyYW0zMjsKICNlbmRpZgogCiAJaWYgKHN1YmNvZGUgJiAweDAwODApIHsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9wYWdlYXR0ci5jIGIvYXJjaC9zMzkwL21tL3BhZ2VhdHRyLmMKaW5kZXggMTIyZmZiZC4uZjA1ZWRjYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC9zMzkwL21tL3BhZ2VhdHRyLmMKQEAgLTI0LDEyICsyNCwxMyBAQAogCQkJV0FSTl9PTl9PTkNFKDEpOwogCQkJY29udGludWU7CiAJCX0KLQkJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIgKyBpICogUEFHRV9TSVpFKTsKKwkJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIGFkZHIpOwogCiAJCXB0ZSA9ICpwdGVwOwogCQlwdGUgPSBzZXQocHRlKTsKLQkJcHRlcF9pbnZhbGlkYXRlKCZpbml0X21tLCBhZGRyICsgaSAqIFBBR0VfU0laRSwgcHRlcCk7CisJCXB0ZXBfaW52YWxpZGF0ZSgmaW5pdF9tbSwgYWRkciwgcHRlcCk7CiAJCSpwdGVwID0gcHRlOworCQlhZGRyICs9IFBBR0VfU0laRTsKIAl9CiB9CiAKQEAgLTUzLDMgKzU0LDggQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNldF9tZW1vcnlfbngpOworCitpbnQgc2V0X21lbW9yeV94KHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jIGIvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5jCmluZGV4IDQ5NTI4NzIuLjMzY2JkMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuYworKysgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmMKQEAgLTEwMjEsMjAgKzEwMjEsMTQgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWxvbmcgaHdzYW1wbGVyX3F1ZXJ5X21pbl9pbnRlcnZhbCh2b2lkKQordW5zaWduZWQgbG9uZyBod3NhbXBsZXJfcXVlcnlfbWluX2ludGVydmFsKHZvaWQpCiB7Ci0JaWYgKG1pbl9zYW1wbGVyX3JhdGUpCi0JCXJldHVybiBtaW5fc2FtcGxlcl9yYXRlOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG1pbl9zYW1wbGVyX3JhdGU7CiB9CiAKLWxvbmcgaHdzYW1wbGVyX3F1ZXJ5X21heF9pbnRlcnZhbCh2b2lkKQordW5zaWduZWQgbG9uZyBod3NhbXBsZXJfcXVlcnlfbWF4X2ludGVydmFsKHZvaWQpCiB7Ci0JaWYgKG1heF9zYW1wbGVyX3JhdGUpCi0JCXJldHVybiBtYXhfc2FtcGxlcl9yYXRlOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIG1heF9zYW1wbGVyX3JhdGU7CiB9CiAKIHVuc2lnbmVkIGxvbmcgaHdzYW1wbGVyX2dldF9zYW1wbGVfb3ZlcmZsb3dfY291bnQodW5zaWduZWQgaW50IGNwdSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuaCBiL2FyY2gvczM5MC9vcHJvZmlsZS9od3NhbXBsZXIuaAppbmRleCA4YzcyYjU5Li4xOTEyZjNiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvb3Byb2ZpbGUvaHdzYW1wbGVyLmgKKysrIGIvYXJjaC9zMzkwL29wcm9maWxlL2h3c2FtcGxlci5oCkBAIC0xMDIsOCArMTAyLDggQEAKIGludCBod3NhbXBsZXJfc2h1dGRvd24odm9pZCk7CiBpbnQgaHdzYW1wbGVyX2FsbG9jYXRlKHVuc2lnbmVkIGxvbmcgc2RidCwgdW5zaWduZWQgbG9uZyBzZGIpOwogaW50IGh3c2FtcGxlcl9kZWFsbG9jYXRlKHZvaWQpOwotbG9uZyBod3NhbXBsZXJfcXVlcnlfbWluX2ludGVydmFsKHZvaWQpOwotbG9uZyBod3NhbXBsZXJfcXVlcnlfbWF4X2ludGVydmFsKHZvaWQpOwordW5zaWduZWQgbG9uZyBod3NhbXBsZXJfcXVlcnlfbWluX2ludGVydmFsKHZvaWQpOwordW5zaWduZWQgbG9uZyBod3NhbXBsZXJfcXVlcnlfbWF4X2ludGVydmFsKHZvaWQpOwogaW50IGh3c2FtcGxlcl9zdGFydF9hbGwodW5zaWduZWQgbG9uZyBpbnRlcnZhbCk7CiBpbnQgaHdzYW1wbGVyX3N0b3BfYWxsKHZvaWQpOwogaW50IGh3c2FtcGxlcl9kZWFjdGl2YXRlKHVuc2lnbmVkIGludCBjcHUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL29wcm9maWxlL2luaXQuYyBiL2FyY2gvczM5MC9vcHJvZmlsZS9pbml0LmMKaW5kZXggYzYzZDdlNS4uNTk5NWU5YiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL29wcm9maWxlL2luaXQuYworKysgYi9hcmNoL3MzOTAvb3Byb2ZpbGUvaW5pdC5jCkBAIC0xNDUsMTUgKzE0NSwxMSBAQAogCSAqIGNyZWF0ZSBod3NhbXBsZXIgZmlsZXMgb25seSBpZiBod3NhbXBsZXJfc2V0dXAoKSBzdWNjZWVkcy4KIAkgKi8KIAlvcHJvZmlsZV9taW5faW50ZXJ2YWwgPSBod3NhbXBsZXJfcXVlcnlfbWluX2ludGVydmFsKCk7Ci0JaWYgKG9wcm9maWxlX21pbl9pbnRlcnZhbCA8IDApIHsKLQkJb3Byb2ZpbGVfbWluX2ludGVydmFsID0gMDsKKwlpZiAob3Byb2ZpbGVfbWluX2ludGVydmFsID09IDApCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAlvcHJvZmlsZV9tYXhfaW50ZXJ2YWwgPSBod3NhbXBsZXJfcXVlcnlfbWF4X2ludGVydmFsKCk7Ci0JaWYgKG9wcm9maWxlX21heF9pbnRlcnZhbCA8IDApIHsKLQkJb3Byb2ZpbGVfbWF4X2ludGVydmFsID0gMDsKKwlpZiAob3Byb2ZpbGVfbWF4X2ludGVydmFsID09IDApCiAJCXJldHVybiAtRU5PREVWOwotCX0KIAogCWlmIChvcHJvZmlsZV90aW1lcl9pbml0KG9wcykpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDRiODlkYTIuLmJjNDM5ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTI0LDcgKzI0LDYgQEAKIAlzZWxlY3QgUlRDX0xJQgogCXNlbGVjdCBHRU5FUklDX0FUT01JQzY0CiAJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKLQlzZWxlY3QgQVJDSF9OT19TWVNERVZfT1BTCiAJaGVscAogCSAgVGhlIFN1cGVySCBpcyBhIFJJU0MgcHJvY2Vzc29yIHRhcmdldGVkIGZvciB1c2UgaW4gZW1iZWRkZWQgc3lzdGVtcwogCSAgYW5kIGNvbnN1bWVyIGVsZWN0cm9uaWNzOyBpdCB3YXMgYWxzbyB1c2VkIGluIHRoZSBTZWdhIERyZWFtY2FzdApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL2Fwc2g0YWQwYV9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZwppbmRleCBlNzFhNTMxLi43N2VjMGU3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3MvYXBzaDRhZDBhX2RlZmNvbmZpZwpAQCAtNDgsNyArNDgsNiBAQAogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19QTT15CiBDT05GSUdfUE1fREVCVUc9eQotQ09ORklHX1BNX1ZFUkJPU0U9eQogQ09ORklHX1BNX1JVTlRJTUU9eQogQ09ORklHX0NQVV9JRExFPXkKIENPTkZJR19ORVQ9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3Nkazc3ODZfZGVmY29uZmlnCmluZGV4IGRjNGEyZWIuLmM0MTY1MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY29uZmlncy9zZGs3Nzg2X2RlZmNvbmZpZworKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2RrNzc4Nl9kZWZjb25maWcKQEAgLTgzLDcgKzgzLDYgQEAKIENPTkZJR19CSU5GTVRfTUlTQz15CiBDT05GSUdfUE09eQogQ09ORklHX1BNX0RFQlVHPXkKLUNPTkZJR19QTV9WRVJCT1NFPXkKIENPTkZJR19QTV9SVU5USU1FPXkKIENPTkZJR19DUFVfSURMRT15CiBDT05GSUdfTkVUPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbV9ydW50aW1lLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2htb2JpbGUvcG1fcnVudGltZS5jCmluZGV4IDZkY2I4MTYuLjIyZGIxMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaG1vYmlsZS9wbV9ydW50aW1lLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NobW9iaWxlL3BtX3J1bnRpbWUuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJcXVldWVfd29yayhwbV93cSwgJmh3YmxrX3dvcmspOwogfQogCi1pbnQgcGxhdGZvcm1fcG1fcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZGVmYXVsdF9wbGF0Zm9ybV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgcGRldl9hcmNoZGF0YSAqYWQgPSAmcGRldi0+YXJjaGRhdGE7CkBAIC0xNDcsNyArMTQ3LDcgQEAKIAlpbnQgaHdibGsgPSBhZC0+aHdibGtfaWQ7CiAJaW50IHJldCA9IDA7CiAKLQlkZXZfZGJnKGRldiwgInBsYXRmb3JtX3BtX3J1bnRpbWVfc3VzcGVuZCgpIFslZF1cbiIsIGh3YmxrKTsKKwlkZXZfZGJnKGRldiwgIiVzKCkgWyVkXVxuIiwgX19mdW5jX18sIGh3YmxrKTsKIAogCS8qIGlnbm9yZSBvZmYtY2hpcCBwbGF0Zm9ybSBkZXZpY2VzICovCiAJaWYgKCFod2JsaykKQEAgLTE4MywyMCArMTgzLDIwIEBACiAJbXV0ZXhfdW5sb2NrKCZhZC0+bXV0ZXgpOwogCiBvdXQ6Ci0JZGV2X2RiZyhkZXYsICJwbGF0Zm9ybV9wbV9ydW50aW1lX3N1c3BlbmQoKSBbJWRdIHJldHVybnMgJWRcbiIsCi0JCWh3YmxrLCByZXQpOworCWRldl9kYmcoZGV2LCAiJXMoKSBbJWRdIHJldHVybnMgJWRcbiIsCisJCSBfX2Z1bmNfXywgaHdibGssIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgcGxhdGZvcm1fcG1fcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBkZWZhdWx0X3BsYXRmb3JtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHBkZXZfYXJjaGRhdGEgKmFkID0gJnBkZXYtPmFyY2hkYXRhOwogCWludCBod2JsayA9IGFkLT5od2Jsa19pZDsKIAlpbnQgcmV0ID0gMDsKIAotCWRldl9kYmcoZGV2LCAicGxhdGZvcm1fcG1fcnVudGltZV9yZXN1bWUoKSBbJWRdXG4iLCBod2Jsayk7CisJZGV2X2RiZyhkZXYsICIlcygpIFslZF1cbiIsIF9fZnVuY19fLCBod2Jsayk7CiAKIAkvKiBpZ25vcmUgb2ZmLWNoaXAgcGxhdGZvcm0gZGV2aWNlcyAqLwogCWlmICghaHdibGspCkBAIC0yMjgsMTkgKzIyOCwxOSBAQAogCSAqLwogCW11dGV4X3VubG9jaygmYWQtPm11dGV4KTsKIG91dDoKLQlkZXZfZGJnKGRldiwgInBsYXRmb3JtX3BtX3J1bnRpbWVfcmVzdW1lKCkgWyVkXSByZXR1cm5zICVkXG4iLAotCQlod2JsaywgcmV0KTsKKwlkZXZfZGJnKGRldiwgIiVzKCkgWyVkXSByZXR1cm5zICVkXG4iLAorCQlfX2Z1bmNfXywgaHdibGssIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgcGxhdGZvcm1fcG1fcnVudGltZV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZGVmYXVsdF9wbGF0Zm9ybV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKIAlpbnQgaHdibGsgPSBwZGV2LT5hcmNoZGF0YS5od2Jsa19pZDsKIAlpbnQgcmV0ID0gMDsKIAotCWRldl9kYmcoZGV2LCAicGxhdGZvcm1fcG1fcnVudGltZV9pZGxlKCkgWyVkXVxuIiwgaHdibGspOworCWRldl9kYmcoZGV2LCAiJXMoKSBbJWRdXG4iLCBfX2Z1bmNfXywgaHdibGspOwogCiAJLyogaWdub3JlIG9mZi1jaGlwIHBsYXRmb3JtIGRldmljZXMgKi8KIAlpZiAoIWh3YmxrKQpAQCAtMjUyLDEwICsyNTIsMTkgQEAKIAkvKiBzdXNwZW5kIHN5bmNocm9ub3VzbHkgdG8gZGlzYWJsZSBjbG9ja3MgaW1tZWRpYXRlbHkgKi8KIAlyZXQgPSBwbV9ydW50aW1lX3N1c3BlbmQoZGV2KTsKIG91dDoKLQlkZXZfZGJnKGRldiwgInBsYXRmb3JtX3BtX3J1bnRpbWVfaWRsZSgpIFslZF0gZG9uZSFcbiIsIGh3YmxrKTsKKwlkZXZfZGJnKGRldiwgIiVzKCkgWyVkXSBkb25lIVxuIiwgX19mdW5jX18sIGh3YmxrKTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3RydWN0IGRldl9wb3dlcl9kb21haW4gZGVmYXVsdF9wb3dlcl9kb21haW4gPSB7CisJLm9wcyA9IHsKKwkJLnJ1bnRpbWVfc3VzcGVuZCA9IGRlZmF1bHRfcGxhdGZvcm1fcnVudGltZV9zdXNwZW5kLAorCQkucnVudGltZV9yZXN1bWUgPSBkZWZhdWx0X3BsYXRmb3JtX3J1bnRpbWVfcmVzdW1lLAorCQkucnVudGltZV9pZGxlID0gZGVmYXVsdF9wbGF0Zm9ybV9ydW50aW1lX2lkbGUsCisJCVVTRV9QTEFURk9STV9QTV9TTEVFUF9PUFMKKwl9LAorfTsKKwogc3RhdGljIGludCBwbGF0Zm9ybV9idXNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCiB7CkBAIC0yNzYsNiArMjg1LDcgQEAKIAkJaHdibGtfZGlzYWJsZShod2Jsa19pbmZvLCBod2Jsayk7CiAJCS8qIG1ha2Ugc3VyZSBkcml2ZXIgcmUtaW5pdHMgaXRzZWxmIG9uY2UgKi8KIAkJX19zZXRfYml0KFBERVZfQVJDSERBVEFfRkxBR19JTklULCAmcGRldi0+YXJjaGRhdGEuZmxhZ3MpOworCQlkZXYtPnB3cl9kb21haW4gPSAmZGVmYXVsdF9wb3dlcl9kb21haW47CiAJCWJyZWFrOwogCS8qIFRPRE86IGFkZCBCVVNfTk9USUZZX0JJTkRfRFJJVkVSIGFuZCBpbmNyZWFzZSBpZGxlIGNvdW50ICovCiAJY2FzZSBCVVNfTk9USUZZX0JPVU5EX0RSSVZFUjoKQEAgLTI4OSw2ICsyOTksNyBAQAogCQlfX3NldF9iaXQoUERFVl9BUkNIREFUQV9GTEFHX0lOSVQsICZwZGV2LT5hcmNoZGF0YS5mbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgQlVTX05PVElGWV9ERUxfREVWSUNFOgorCQlkZXYtPnB3cl9kb21haW4gPSBOVUxMOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9wdHJhY2VfMzIuYyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCmluZGV4IDIxMzBjYTYuLjNkN2IyMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCisrKyBiL2FyY2gvc2gva2VybmVsL3B0cmFjZV8zMi5jCkBAIC0xMTcsNyArMTE3LDExIEBACiAKIAlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU0lOR0xFU1RFUCk7CiAKKwlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyhjaGlsZCkgPCAwKQorCQlyZXR1cm47CisKIAlzZXRfc2luZ2xlX3N0ZXAoY2hpbGQsIHBjKTsKKwlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKGNoaWxkKTsKIH0KIAogdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NtcC5jIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKaW5kZXggNTA5YjM2Yi4uNjIwNzU2MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc21wLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMzIzLDYgKzMyNCw3IEBACiAJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KCk7CiAJCWJyZWFrOwogCWNhc2UgU01QX01TR19SRVNDSEVEVUxFOgorCQlzY2hlZHVsZXJfaXBpKCk7CiAJCWJyZWFrOwogCWNhc2UgU01QX01TR19GVU5DVElPTl9TSU5HTEU6CiAJCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaAppbmRleCA0MjdkNDY4Li5mYzczYTgyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaApAQCAtNywxNyArNywyMCBAQAogCiAjZGVmaW5lIEpVTVBfTEFCRUxfTk9QX1NJWkUgNAogCi0jZGVmaW5lIEpVTVBfTEFCRUwoa2V5LCBsYWJlbCkJCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJYXNtIGdvdG8oIjE6XG5cdCIJCQkJXAotCQkJICJub3Bcblx0IgkJCQlcCi0JCQkgIm5vcFxuXHQiCQkJCVwKLQkJCSAiLnB1c2hzZWN0aW9uIF9fanVtcF90YWJsZSwgIFwiYVwiXG5cdCJcCi0JCQkgIi5hbGlnbiA0XG5cdCIJCQkJXAotCQkJICIud29yZCAxYiwgJWxbIiAjbGFiZWwgIl0sICVjMFxuXHQiCVwKLQkJCSAiLnBvcHNlY3Rpb24gXG5cdCIJCQlcCi0JCQkgOiA6ICAiaSIgKGtleSkgOiAgOiBsYWJlbCk7XAotCX0gd2hpbGUgKDApCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgYXJjaF9zdGF0aWNfYnJhbmNoKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5KQoreworCQlhc20gZ290bygiMTpcblx0IgorCQkJICJub3Bcblx0IgorCQkJICJub3Bcblx0IgorCQkJICIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCAgXCJhd1wiXG5cdCIKKwkJCSAiLmFsaWduIDRcblx0IgorCQkJICIud29yZCAxYiwgJWxbbF95ZXNdLCAlYzBcblx0IgorCQkJICIucG9wc2VjdGlvbiBcblx0IgorCQkJIDogOiAgImkiIChrZXkpIDogOiBsX3llcyk7CisJcmV0dXJuIGZhbHNlOworbF95ZXM6CisJcmV0dXJuIHRydWU7Cit9CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdG9wb2xvZ3lfNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdG9wb2xvZ3lfNjQuaAppbmRleCAxYzc5ZjMyLi44YjljNTU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RvcG9sb2d5XzY0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90b3BvbG9neV82NC5oCkBAIC02NSw2ICs2NSwxMCBAQAogI2RlZmluZSBzbXRfY2FwYWJsZSgpCQkJCShzcGFyYzY0X211bHRpX2NvcmUpCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi0jZGVmaW5lIGNwdV9jb3JlZ3JvdXBfbWFzayhjcHUpCQkJKCZjcHVfY29yZV9tYXBbY3B1XSkKK2V4dGVybiBjcHVtYXNrX3QgY3B1X2NvcmVfbWFwW05SX0NQVVNdOworc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X2NvcmVncm91cF9tYXNrKGludCBjcHUpCit7CisgICAgICAgIHJldHVybiAmY3B1X2NvcmVfbWFwW2NwdV07Cit9CiAKICNlbmRpZiAvKiBfQVNNX1NQQVJDNjRfVE9QT0xPR1lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvYXBjLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYwppbmRleCBmNjc5YzU3Li4xZTM0ZjI5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9hcGMuYwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgYXBjX21hdGNoW10gPSB7CitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBhcGNfbWF0Y2hbXSA9IHsKIAl7CiAJCS5uYW1lID0gQVBDX09CUE5BTUUsCiAJfSwKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zYWJyZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NhYnJlLmMKaW5kZXggOTQ4MDY4YS4uZDE4NDBkYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NhYnJlLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NhYnJlLmMKQEAgLTQ1Miw4ICs0NTIsMTAgQEAKIAlzYWJyZV9zY2FuX2J1cyhwYm0sICZvcC0+ZGV2KTsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2FicmVfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNhYnJlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCWNvbnN0IHN0cnVjdCBsaW51eF9wcm9tNjRfcmVnaXN0ZXJzICpwcl9yZWdzOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBvcC0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IHBjaV9wYm1faW5mbyAqcGJtOwpAQCAtNDYzLDcgKzQ2NSw4IEBACiAJY29uc3QgdTMyICp2ZG1hOwogCXU2NCBjbGVhcl9pcnE7CiAKLQlodW1taW5nYmlyZF9wID0gb3AtPmRldi5vZl9tYXRjaCAmJiAob3AtPmRldi5vZl9tYXRjaC0+ZGF0YSAhPSBOVUxMKTsKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShzYWJyZV9tYXRjaCwgJm9wLT5kZXYpOworCWh1bW1pbmdiaXJkX3AgPSBtYXRjaCAmJiAobWF0Y2gtPmRhdGEgIT0gTlVMTCk7CiAJaWYgKCFodW1taW5nYmlyZF9wKSB7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1X2RwOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2lfc2NoaXpvLmMKaW5kZXggZmVjZmNiMi4uMjgzZmJjMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpX3NjaGl6by5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaV9zY2hpem8uYwpAQCAtMTQ1OCwxMSArMTQ1OCwxNSBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHNjaGl6b19tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgc2NoaXpvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogewotCWlmICghb3AtPmRldi5vZl9tYXRjaCkKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKKworCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHNjaGl6b19tYXRjaCwgJm9wLT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBfX3NjaGl6b19pbml0KG9wLCAodW5zaWduZWQgbG9uZykgb3AtPmRldi5vZl9tYXRjaC0+ZGF0YSk7CisJcmV0dXJuIF9fc2NoaXpvX2luaXQob3AsICh1bnNpZ25lZCBsb25nKW1hdGNoLT5kYXRhKTsKIH0KIAogLyogVGhlIG9yZGVyaW5nIG9mIHRoaXMgdGFibGUgaXMgdmVyeSBpbXBvcnRhbnQuICBTb21lIFRvbWF0aWxsbwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcG1jLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9wbWMuYwppbmRleCA5M2Q3YjQ0Li42YTU4NWQzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wbWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wbWMuYwpAQCAtNjksNyArNjksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIHBtY19tYXRjaFtdID0geworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgcG1jX21hdGNoW10gPSB7CiAJewogCQkubmFtZSA9IFBNQ19PQlBOQU1FLAogCX0sCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zbXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCmluZGV4IDkxYzEwZmIuLjQ0MjI4NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3NtcF8zMi5jCkBAIC01Myw2ICs1Myw3IEBACiB2b2lkIF9fY3B1aW5pdCBzbXBfc3RvcmVfY3B1X2luZm8oaW50IGlkKQogewogCWludCBjcHVfbm9kZTsKKwlpbnQgbWlkOwogCiAJY3B1X2RhdGEoaWQpLnVkZWxheV92YWwgPSBsb29wc19wZXJfamlmZnk7CiAKQEAgLTYwLDEwICs2MSwxMyBAQAogCWNwdV9kYXRhKGlkKS5jbG9ja190aWNrID0gcHJvbV9nZXRpbnRkZWZhdWx0KGNwdV9ub2RlLAogCQkJCQkJICAgICAiY2xvY2stZnJlcXVlbmN5IiwgMCk7CiAJY3B1X2RhdGEoaWQpLnByb21fbm9kZSA9IGNwdV9ub2RlOwotCWNwdV9kYXRhKGlkKS5taWQgPSBjcHVfZ2V0X2h3bWlkKGNwdV9ub2RlKTsKKwltaWQgPSBjcHVfZ2V0X2h3bWlkKGNwdV9ub2RlKTsKIAotCWlmIChjcHVfZGF0YShpZCkubWlkIDwgMCkKLQkJcGFuaWMoIk5vIE1JRCBmb3VuZCBmb3IgQ1BVJWQgYXQgbm9kZSAweCUwOGQiLCBpZCwgY3B1X25vZGUpOworCWlmIChtaWQgPCAwKSB7CisJCXByaW50ayhLRVJOX05PVElDRSAiTm8gTUlEIGZvdW5kIGZvciBDUFUlZCBhdCBub2RlIDB4JTA4ZCIsIGlkLCBjcHVfbm9kZSk7CisJCW1pZCA9IDA7CisJfQorCWNwdV9kYXRhKGlkKS5taWQgPSBtaWQ7CiB9CiAKIHZvaWQgX19pbml0IHNtcF9jcHVzX2RvbmUodW5zaWduZWQgaW50IG1heF9jcHVzKQpAQCAtMTI1LDcgKzEyOSw5IEBACiAKIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQogewotCS8qIFNlZSBzcGFyYzY0ICovCisJLyoKKwkgKiBYWFggbWlzc2luZyByZXNjaGVkdWxlIElQSSwgc2VlIHNjaGVkdWxlcl9pcGkoKQorCSAqLwogfQogCiB2b2lkIHNtcF9zZW5kX3N0b3Aodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcF82NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKaW5kZXggM2U5NGE4Yy4uOTQ3OGRhNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wXzY0LmMKQEAgLTEzNjgsNiArMTM2OCw3IEBACiB2b2lkIF9faXJxX2VudHJ5IHNtcF9yZWNlaXZlX3NpZ25hbF9jbGllbnQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJY2xlYXJfc29mdGludCgxIDw8IGlycSk7CisJc2NoZWR1bGVyX2lwaSgpOwogfQogCiAvKiBUaGlzIGlzIGEgbm9wIGJlY2F1c2Ugd2UgY2FwdHVyZSBhbGwgb3RoZXIgY3B1cwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV8zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZV8zMi5jCmluZGV4IDRlMjM2MzkuLjk2MDQ2YTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWVfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lXzMyLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIGNsb2NrX21hdGNoW10gPSB7CitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBjbG9ja19tYXRjaFtdID0gewogCXsKIAkJLm5hbWUgPSAiZWVwcm9tIiwKIAl9LApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9saWIvY2hlY2tzdW1fMzIuUyBiL2FyY2gvc3BhcmMvbGliL2NoZWNrc3VtXzMyLlMKaW5kZXggMzYzMmNiMy4uMDA4NGMzMyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvY2hlY2tzdW1fMzIuUworKysgYi9hcmNoL3NwYXJjL2xpYi9jaGVja3N1bV8zMi5TCkBAIC0yODksMTAgKzI4OSwxNiBAQAogCiAJLyogQWxzbywgaGFuZGxlIHRoZSBhbGlnbm1lbnQgY29kZSBvdXQgb2YgYmFuZC4gKi8KIGNjX2R3b3JkX2FsaWduOgotCWNtcAklZzEsIDYKLQlibCxhCWNjdGUKKwljbXAJJWcxLCAxNgorCWJnZQkxZgorCSBzcmwJJWcxLCAxLCAlbzMKKzI6CWNtcAklbzMsIDAKKwliZSxhCWNjdGUKIAkgYW5kY2MJJWcxLCAweGYsICVvMwotCWFuZGNjCSVvMCwgMHgxLCAlZzAKKwlhbmRjYwklbzMsICVvMCwgJWcwCSEgQ2hlY2sgJW8wIG9ubHkgKCVvMSBoYXMgdGhlIHNhbWUgbGFzdCAyIGJpdHMpCisJYmUsYQkyYgorCSBzcmwJJW8zLCAxLCAlbzMKKzE6CWFuZGNjCSVvMCwgMHgxLCAlZzAKIAlibmUJY2NzbG93CiAJIGFuZGNjCSVvMCwgMHgyLCAlZzAKIAliZQkxZgpkaWZmIC0tZ2l0IGEvYXJjaC90aWxlL2tlcm5lbC9zbXAuYyBiL2FyY2gvdGlsZS9rZXJuZWwvc21wLmMKaW5kZXggYTQyOTMxMC4uYzUyMjI0ZCAxMDA2NDQKLS0tIGEvYXJjaC90aWxlL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3RpbGUva2VybmVsL3NtcC5jCkBAIC0xODksMTIgKzE4OSw4IEBACiAvKiBDYWxsZWQgd2hlbiBzbXBfc2VuZF9yZXNjaGVkdWxlKCkgdHJpZ2dlcnMgSVJRX1JFU0NIRURVTEUuICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgaGFuZGxlX3Jlc2NoZWR1bGVfaXBpKGludCBpcnEsIHZvaWQgKnRva2VuKQogewotCS8qCi0JICogTm90aGluZyB0byBkbyBoZXJlOyB3aGVuIHdlIHJldHVybiBmcm9tIGludGVycnVwdCwgdGhlCi0JICogcmVzY2hlZHVsaW5nIHdpbGwgb2NjdXIgdGhlcmUuIEJ1dCBkbyBidW1wIHRoZSBpbnRlcnJ1cHQKLQkgKiBwcm9maWxlciBjb3VudCBpbiB0aGUgbWVhbnRpbWUuCi0JICovCiAJX19nZXRfY3B1X3ZhcihpcnFfc3RhdCkuaXJxX3Jlc2NoZWRfY291bnQrKzsKKwlzY2hlZHVsZXJfaXBpKCk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL0tjb25maWcudW0gYi9hcmNoL3VtL0tjb25maWcudW0KaW5kZXggOTBhNDM4YS4uYjVlNjc1ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9LY29uZmlnLnVtCisrKyBiL2FyY2gvdW0vS2NvbmZpZy51bQpAQCAtNDcsNyArNDcsNyBAQAogCiBjb25maWcgSFBQRlMKIAl0cmlzdGF0ZSAiSG9uZXlQb3QgUHJvY0ZTIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgUFJPQ19GUwogCWhlbHAKIAkgIGhwcGZzIChIb25leVBvdCBQcm9jRlMpIGlzIGEgZmlsZXN5c3RlbSB3aGljaCBhbGxvd3MgVU1MIC9wcm9jCiAJICBlbnRyaWVzIHRvIGJlIG92ZXJyaWRkZW4sIHJlbW92ZWQsIG9yIGZhYnJpY2F0ZWQgZnJvbSB0aGUgaG9zdC4KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaAppbmRleCBlMmNmNzg2Li41YmQxYmFkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC00OSw3ICs0OSwxMCBAQAogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CiAJdW5zaWduZWQgbG9uZyBtYXNrID0gVEhSRUFEX1NJWkUgLSAxOwotCXRpID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKCh1bnNpZ25lZCBsb25nKSAmdGkpICYgfm1hc2spOworCXZvaWQgKnA7CisKKwlhc20gdm9sYXRpbGUgKCIiIDogIj1yIiAocCkgOiAiMCIgKCZ0aSkpOworCXRpID0gKHN0cnVjdCB0aHJlYWRfaW5mbyAqKSAoKCh1bnNpZ25lZCBsb25nKXApICYgfm1hc2spOwogCXJldHVybiB0aTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc21wLmMgYi9hcmNoL3VtL2tlcm5lbC9zbXAuYwppbmRleCAxMDZiZjI3Li5lZWZiMTA3IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3VtL2tlcm5lbC9zbXAuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJCQlicmVhazsKIAogCQljYXNlICdSJzoKLQkJCXNldF90c2tfbmVlZF9yZXNjaGVkKGN1cnJlbnQpOworCQkJc2NoZWR1bGVyX2lwaSgpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnUyc6CmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L3V0aWwuYyBiL2FyY2gvdW0vb3MtTGludXgvdXRpbC5jCmluZGV4IDZlYTc3OTcuLjQyODI3Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvdXRpbC5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvdXRpbC5jCkBAIC01LDYgKzUsNyBAQAogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNzUsNiArNzYsMjYgQEAKIAkJIGhvc3QucmVsZWFzZSwgaG9zdC52ZXJzaW9uLCBob3N0Lm1hY2hpbmUpOwogfQogCisvKgorICogV2UgY2Fubm90IHVzZSBnbGliYydzIGFib3J0KCkuIEl0IG1ha2VzIHVzZSBvZiB0Z2tpbGwoKSB3aGljaAorICogaGFzIG5vIGVmZmVjdCB3aXRoaW4gVU1MJ3Mga2VybmVsIHRocmVhZHMuCisgKiBBZnRlciB0aGF0IGdsaWJjIHdvdWxkIGV4ZWN1dGUgYW4gaW52YWxpZCBpbnN0cnVjdGlvbiB0byBraWxsCisgKiB0aGUgY2FsbGluZyBwcm9jZXNzIGFuZCBVTUwgY3Jhc2hlcyB3aXRoIFNJR1NFR1YuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKSB1bWxfYWJvcnQodm9pZCkKK3sKKwlzaWdzZXRfdCBzaWc7CisKKwlmZmx1c2goTlVMTCk7CisKKwlpZiAoIXNpZ2VtcHR5c2V0KCZzaWcpICYmICFzaWdhZGRzZXQoJnNpZywgU0lHQUJSVCkpCisJCXNpZ3Byb2NtYXNrKFNJR19VTkJMT0NLLCAmc2lnLCAwKTsKKworCWZvciAoOzspCisJCWlmIChraWxsKGdldHBpZCgpLCBTSUdBQlJUKSA8IDApCisJCQlleGl0KDEyNyk7Cit9CisKIHZvaWQgb3NfZHVtcF9jb3JlKHZvaWQpCiB7CiAJaW50IHBpZDsKQEAgLTExNiw1ICsxMzcsNSBAQAogCXdoaWxlICgocGlkID0gd2FpdHBpZCgtMSwgTlVMTCwgV05PSEFORyB8IF9fV0FMTCkpID4gMCkKIAkJb3Nfa2lsbF9wdHJhY2VkX3Byb2Nlc3MocGlkLCAwKTsKIAotCWFib3J0KCk7CisJdW1sX2Fib3J0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlIGIvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQppbmRleCA4MDRiMjhkLi5iMWRhOTFjIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIG9iai15ID0gYnVnLm8gYnVncy5vIGNoZWNrc3VtLm8gZGVsYXkubyBmYXVsdC5vIGtzeW1zLm8gbGR0Lm8gcHRyYWNlLm8gXAogCXB0cmFjZV91c2VyLm8gc2V0am1wLm8gc2lnbmFsLm8gc3R1Yi5vIHN0dWJfc2Vndi5vIHN5c2NhbGxzLm8gc3lzcnEubyBcCi0Jc3lzX2NhbGxfdGFibGUubyB0bHMubworCXN5c19jYWxsX3RhYmxlLm8gdGxzLm8gYXRvbWljNjRfY3g4XzMyLm8KIAogb2JqLSQoQ09ORklHX0JJTkZNVF9FTEYpICs9IGVsZmNvcmUubwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2F0b21pYzY0X2N4OF8zMi5TIGIvYXJjaC91bS9zeXMtaTM4Ni9hdG9taWM2NF9jeDhfMzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTkwMWQzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9hdG9taWM2NF9jeDhfMzIuUwpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIGF0b21pYzY0X3QgZm9yIDU4NisKKyAqCisgKiBDb3BpZWQgZnJvbSBhcmNoL3g4Ni9saWIvYXRvbWljNjRfY3g4XzMyLlMKKyAqCisgKiBDb3B5cmlnaHQgwqkgMjAxMCAgTHVjYSBCYXJiaWVyaQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgorI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKworLm1hY3JvIFNBVkUgcmVnCisJcHVzaGxfY2ZpICVccmVnCisJQ0ZJX1JFTF9PRkZTRVQgXHJlZywgMAorLmVuZG0KKworLm1hY3JvIFJFU1RPUkUgcmVnCisJcG9wbF9jZmkgJVxyZWcKKwlDRklfUkVTVE9SRSBccmVnCisuZW5kbQorCisubWFjcm8gcmVhZDY0IHJlZworCW1vdmwgJWVieCwgJWVheAorCW1vdmwgJWVjeCwgJWVkeAorLyogd2UgbmVlZCBMT0NLX1BSRUZJWCBzaW5jZSBvdGhlcndpc2UgY21weGNoZzhiIGFsd2F5cyBkb2VzIHRoZSB3cml0ZSAqLworCUxPQ0tfUFJFRklYCisJY21weGNoZzhiIChccmVnKQorLmVuZG0KKworRU5UUlkoYXRvbWljNjRfcmVhZF9jeDgpCisJQ0ZJX1NUQVJUUFJPQworCisJcmVhZDY0ICVlY3gKKwlyZXQKKwlDRklfRU5EUFJPQworRU5EUFJPQyhhdG9taWM2NF9yZWFkX2N4OCkKKworRU5UUlkoYXRvbWljNjRfc2V0X2N4OCkKKwlDRklfU1RBUlRQUk9DCisKKzE6CisvKiB3ZSBkb24ndCBuZWVkIExPQ0tfUFJFRklYIHNpbmNlIGFsaWduZWQgNjQtYml0IHdyaXRlcworICogYXJlIGF0b21pYyBvbiA1ODYgYW5kIG5ld2VyICovCisJY21weGNoZzhiICglZXNpKQorCWpuZSAxYgorCisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfc2V0X2N4OCkKKworRU5UUlkoYXRvbWljNjRfeGNoZ19jeDgpCisJQ0ZJX1NUQVJUUFJPQworCisJbW92bCAlZWJ4LCAlZWF4CisJbW92bCAlZWN4LCAlZWR4CisxOgorCUxPQ0tfUFJFRklYCisJY21weGNoZzhiICglZXNpKQorCWpuZSAxYgorCisJcmV0CisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfeGNoZ19jeDgpCisKKy5tYWNybyBhZGRzdWJfcmV0dXJuIGZ1bmMgaW5zIGluc2MKK0VOVFJZKGF0b21pYzY0X1xmdW5jXCgpX3JldHVybl9jeDgpCisJQ0ZJX1NUQVJUUFJPQworCVNBVkUgZWJwCisJU0FWRSBlYngKKwlTQVZFIGVzaQorCVNBVkUgZWRpCisKKwltb3ZsICVlYXgsICVlc2kKKwltb3ZsICVlZHgsICVlZGkKKwltb3ZsICVlY3gsICVlYnAKKworCXJlYWQ2NCAlZWJwCisxOgorCW1vdmwgJWVheCwgJWVieAorCW1vdmwgJWVkeCwgJWVjeAorCVxpbnNcKClsICVlc2ksICVlYngKKwlcaW5zY1woKWwgJWVkaSwgJWVjeAorCUxPQ0tfUFJFRklYCisJY21weGNoZzhiICglZWJwKQorCWpuZSAxYgorCisxMDoKKwltb3ZsICVlYngsICVlYXgKKwltb3ZsICVlY3gsICVlZHgKKwlSRVNUT1JFIGVkaQorCVJFU1RPUkUgZXNpCisJUkVTVE9SRSBlYngKKwlSRVNUT1JFIGVicAorCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X1xmdW5jXCgpX3JldHVybl9jeDgpCisuZW5kbQorCithZGRzdWJfcmV0dXJuIGFkZCBhZGQgYWRjCithZGRzdWJfcmV0dXJuIHN1YiBzdWIgc2JiCisKKy5tYWNybyBpbmNkZWNfcmV0dXJuIGZ1bmMgaW5zIGluc2MKK0VOVFJZKGF0b21pYzY0X1xmdW5jXCgpX3JldHVybl9jeDgpCisJQ0ZJX1NUQVJUUFJPQworCVNBVkUgZWJ4CisKKwlyZWFkNjQgJWVzaQorMToKKwltb3ZsICVlYXgsICVlYngKKwltb3ZsICVlZHgsICVlY3gKKwlcaW5zXCgpbCAkMSwgJWVieAorCVxpbnNjXCgpbCAkMCwgJWVjeAorCUxPQ0tfUFJFRklYCisJY21weGNoZzhiICglZXNpKQorCWpuZSAxYgorCisxMDoKKwltb3ZsICVlYngsICVlYXgKKwltb3ZsICVlY3gsICVlZHgKKwlSRVNUT1JFIGVieAorCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X1xmdW5jXCgpX3JldHVybl9jeDgpCisuZW5kbQorCitpbmNkZWNfcmV0dXJuIGluYyBhZGQgYWRjCitpbmNkZWNfcmV0dXJuIGRlYyBzdWIgc2JiCisKK0VOVFJZKGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZV9jeDgpCisJQ0ZJX1NUQVJUUFJPQworCVNBVkUgZWJ4CisKKwlyZWFkNjQgJWVzaQorMToKKwltb3ZsICVlYXgsICVlYngKKwltb3ZsICVlZHgsICVlY3gKKwlzdWJsICQxLCAlZWJ4CisJc2JiICQwLCAlZWN4CisJanMgMmYKKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoJWVzaSkKKwlqbmUgMWIKKworMjoKKwltb3ZsICVlYngsICVlYXgKKwltb3ZsICVlY3gsICVlZHgKKwlSRVNUT1JFIGVieAorCXJldAorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X2RlY19pZl9wb3NpdGl2ZV9jeDgpCisKK0VOVFJZKGF0b21pYzY0X2FkZF91bmxlc3NfY3g4KQorCUNGSV9TVEFSVFBST0MKKwlTQVZFIGVicAorCVNBVkUgZWJ4CisvKiB0aGVzZSBqdXN0IHB1c2ggdGhlc2UgdHdvIHBhcmFtZXRlcnMgb24gdGhlIHN0YWNrICovCisJU0FWRSBlZGkKKwlTQVZFIGVzaQorCisJbW92bCAlZWN4LCAlZWJwCisJbW92bCAlZWF4LCAlZXNpCisJbW92bCAlZWR4LCAlZWRpCisKKwlyZWFkNjQgJWVicAorMToKKwljbXBsICVlYXgsIDAoJWVzcCkKKwlqZSA0ZgorMjoKKwltb3ZsICVlYXgsICVlYngKKwltb3ZsICVlZHgsICVlY3gKKwlhZGRsICVlc2ksICVlYngKKwlhZGNsICVlZGksICVlY3gKKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoJWVicCkKKwlqbmUgMWIKKworCW1vdmwgJDEsICVlYXgKKzM6CisJYWRkbCAkOCwgJWVzcAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtOAorCVJFU1RPUkUgZWJ4CisJUkVTVE9SRSBlYnAKKwlyZXQKKzQ6CisJY21wbCAlZWR4LCA0KCVlc3ApCisJam5lIDJiCisJeG9ybCAlZWF4LCAlZWF4CisJam1wIDNiCisJQ0ZJX0VORFBST0MKK0VORFBST0MoYXRvbWljNjRfYWRkX3VubGVzc19jeDgpCisKK0VOVFJZKGF0b21pYzY0X2luY19ub3RfemVyb19jeDgpCisJQ0ZJX1NUQVJUUFJPQworCVNBVkUgZWJ4CisKKwlyZWFkNjQgJWVzaQorMToKKwl0ZXN0bCAlZWF4LCAlZWF4CisJamUgNGYKKzI6CisJbW92bCAlZWF4LCAlZWJ4CisJbW92bCAlZWR4LCAlZWN4CisJYWRkbCAkMSwgJWVieAorCWFkY2wgJDAsICVlY3gKKwlMT0NLX1BSRUZJWAorCWNtcHhjaGc4YiAoJWVzaSkKKwlqbmUgMWIKKworCW1vdmwgJDEsICVlYXgKKzM6CisJUkVTVE9SRSBlYngKKwlyZXQKKzQ6CisJdGVzdGwgJWVkeCwgJWVkeAorCWpuZSAyYgorCWptcCAzYgorCUNGSV9FTkRQUk9DCitFTkRQUk9DKGF0b21pYzY0X2luY19ub3RfemVyb19jeDgpCmRpZmYgLS1naXQgYS9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvaXJxLmMgYi9hcmNoL3VuaWNvcmUzMi9rZXJuZWwvaXJxLmMKaW5kZXggMmFhMzBhMy4uZDRlZmE3ZCAxMDA2NDQKLS0tIGEvYXJjaC91bmljb3JlMzIva2VybmVsL2lycS5jCisrKyBiL2FyY2gvdW5pY29yZTMyL2tlcm5lbC9pcnEuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTIzNyw3ICsyMzcsNyBAQAogCXVuc2lnbmVkIGludAlpY2NyOwogfSBwdXYzX2lycV9zdGF0ZTsKIAotc3RhdGljIGludCBwdXYzX2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3N0YXRpYyBpbnQgcHV2M19pcnFfc3VzcGVuZCh2b2lkKQogewogCXN0cnVjdCBwdXYzX2lycV9zdGF0ZSAqc3QgPSAmcHV2M19pcnFfc3RhdGU7CiAKQEAgLTI2NSw3ICsyNjUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHB1djNfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcHV2M19pcnFfcmVzdW1lKHZvaWQpCiB7CiAJc3RydWN0IHB1djNfaXJxX3N0YXRlICpzdCA9ICZwdXYzX2lycV9zdGF0ZTsKIApAQCAtMjc4LDI3ICsyNzgsMjAgQEAKIAogCQl3cml0ZWwoc3QtPmljbXIsIElOVENfSUNNUik7CiAJfQotCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBwdXYzX2lycV9zeXNjbGFzcyA9IHsKLQkubmFtZQkJPSAicGt1bml0eS1pcnEiLAorc3RhdGljIHN0cnVjdCBzeXNjb3JlX29wcyBwdXYzX2lycV9zeXNjb3JlX29wcyA9IHsKIAkuc3VzcGVuZAk9IHB1djNfaXJxX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBwdXYzX2lycV9yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgcHV2M19pcnFfZGV2aWNlID0gewotCS5pZAkJPSAwLAotCS5jbHMJCT0gJnB1djNfaXJxX3N5c2NsYXNzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcHV2M19pcnFfaW5pdF9kZXZpY2Vmcyh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcHV2M19pcnFfaW5pdF9zeXNjb3JlKHZvaWQpCiB7Ci0Jc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZwdXYzX2lycV9zeXNjbGFzcyk7Ci0JcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmcHV2M19pcnFfZGV2aWNlKTsKKwlyZWdpc3Rlcl9zeXNjb3JlX29wcygmcHV2M19pcnFfc3lzY29yZV9vcHMpOworCXJldHVybiAwOwogfQogCi1kZXZpY2VfaW5pdGNhbGwocHV2M19pcnFfaW5pdF9kZXZpY2Vmcyk7CitkZXZpY2VfaW5pdGNhbGwocHV2M19pcnFfaW5pdF9zeXNjb3JlKTsKIAogdm9pZCBfX2luaXQgaW5pdF9JUlEodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IGNjNmM1M2EuLjM4YWRiMmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtOCw2ICs4LDcgQEAKIAogY29uZmlnIFg4Nl8zMgogCWRlZl9ib29sICE2NEJJVAorCXNlbGVjdCBDTEtTUkNfSTgyNTMKIAogY29uZmlnIFg4Nl82NAogCWRlZl9ib29sIDY0QklUCkBAIC03MSw3ICs3Miw2IEBACiAJc2VsZWN0IEdFTkVSSUNfSVJRX1NIT1cKIAlzZWxlY3QgSVJRX0ZPUkNFRF9USFJFQURJTkcKIAlzZWxlY3QgVVNFX0dFTkVSSUNfU01QX0hFTFBFUlMgaWYgU01QCi0Jc2VsZWN0IEFSQ0hfTk9fU1lTREVWX09QUwogCiBjb25maWcgSU5TVFJVQ1RJT05fREVDT0RFUgogCWRlZl9ib29sIChLUFJPQkVTIHx8IFBFUkZfRVZFTlRTKQpAQCAtMzY1LDE3ICszNjUsNiBAQAogIyBGb2xsb3dpbmcgaXMgYW4gYWxwaGFiZXRpY2FsbHkgc29ydGVkIGxpc3Qgb2YgMzIgYml0IGV4dGVuZGVkIHBsYXRmb3JtcwogIyBQbGVhc2UgbWFpbnRhaW4gdGhlIGFscGhhYmV0aWMgb3JkZXIgaWYgYW5kIHdoZW4gdGhlcmUgYXJlIGFkZGl0aW9ucwogCi1jb25maWcgWDg2X0VMQU4KLQlib29sICJBTUQgRWxhbiIKLQlkZXBlbmRzIG9uIFg4Nl8zMgotCWRlcGVuZHMgb24gWDg2X0VYVEVOREVEX1BMQVRGT1JNCi0JLS0taGVscC0tLQotCSAgU2VsZWN0IHRoaXMgZm9yIGFuIEFNRCBFbGFuIHByb2Nlc3Nvci4KLQotCSAgRG8gbm90IHVzZSB0aGlzIG9wdGlvbiBmb3IgSzYvQXRobG9uL09wdGVyb24gcHJvY2Vzc29ycyEKLQotCSAgSWYgdW5zdXJlLCBjaG9vc2UgIlBDLWNvbXBhdGlibGUiIGluc3RlYWQuCi0KIGNvbmZpZyBYODZfSU5URUxfQ0UKIAlib29sICJDRTQxMDAgVFYgcGxhdGZvcm0iCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTY5MCw2ICs2NzksNyBAQAogCWJvb2wgIkFNRCBJT01NVSBzdXBwb3J0IgogCXNlbGVjdCBTV0lPVExCCiAJc2VsZWN0IFBDSV9NU0kKKwlzZWxlY3QgUENJX0lPVgogCWRlcGVuZHMgb24gWDg2XzY0ICYmIFBDSSAmJiBBQ1BJCiAJLS0taGVscC0tLQogCSAgV2l0aCB0aGlzIG9wdGlvbiB5b3UgY2FuIGVuYWJsZSBzdXBwb3J0IGZvciBBTUQgSU9NTVUgaGFyZHdhcmUgaW4KQEAgLTE4NDgsNyArMTgzOCw3IEBACiAKIGVuZGlmICMgQVBNCiAKLXNvdXJjZSAiYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvY3B1ZnJlcS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvY3B1aWRsZS9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IGQxNjFlOTMuLjZhN2NmZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC0xLDYgKzEsNCBAQAogIyBQdXQgaGVyZSBvcHRpb24gZm9yIENQVSBzZWxlY3Rpb24gYW5kIGRlcGVuZGluZyBvcHRpbWl6YXRpb24KLWlmICFYODZfRUxBTgotCiBjaG9pY2UKIAlwcm9tcHQgIlByb2Nlc3NvciBmYW1pbHkiCiAJZGVmYXVsdCBNNjg2IGlmIFg4Nl8zMgpAQCAtMjAzLDYgKzIwMSwxNCBAQAogCSAgc3RvcmVzIGZvciB0aGlzIENQVSwgd2hpY2ggY2FuIGluY3JlYXNlIHBlcmZvcm1hbmNlIG9mIHNvbWUKIAkgIG9wZXJhdGlvbnMuCiAKK2NvbmZpZyBNRUxBTgorCWJvb2wgIkFNRCBFbGFuIgorCWRlcGVuZHMgb24gWDg2XzMyCisJLS0taGVscC0tLQorCSAgU2VsZWN0IHRoaXMgZm9yIGFuIEFNRCBFbGFuIHByb2Nlc3Nvci4KKworCSAgRG8gbm90IHVzZSB0aGlzIG9wdGlvbiBmb3IgSzYvQXRobG9uL09wdGVyb24gcHJvY2Vzc29ycyEKKwogY29uZmlnIE1HRU9ERUdYMQogCWJvb2wgIkdlb2RlR1gxIgogCWRlcGVuZHMgb24gWDg2XzMyCkBAIC0yOTIsOCArMjk4LDYgQEAKIAkgIFRoaXMgaXMgcmVhbGx5IGludGVuZGVkIGZvciBkaXN0cmlidXRvcnMgd2hvIG5lZWQgbW9yZQogCSAgZ2VuZXJpYyBvcHRpbWl6YXRpb25zLgogCi1lbmRpZgotCiAjCiAjIERlZmluZSBpbXBsaWVkIG9wdGlvbnMgZnJvbSB0aGUgQ1BVIHNlbGVjdGlvbiBoZXJlCiBjb25maWcgWDg2X0lOVEVSTk9ERV9DQUNIRV9TSElGVApAQCAtMzEyLDcgKzMxNiw3IEBACiAJaW50CiAJZGVmYXVsdCAiNyIgaWYgTVBFTlRJVU00IHx8IE1QU0MKIAlkZWZhdWx0ICI2IiBpZiBNSzcgfHwgTUs4IHx8IE1QRU5USVVNTSB8fCBNQ09SRTIgfHwgTUFUT00gfHwgTVZJQUM3IHx8IFg4Nl9HRU5FUklDIHx8IEdFTkVSSUNfQ1BVCi0JZGVmYXVsdCAiNCIgaWYgWDg2X0VMQU4gfHwgTTQ4NiB8fCBNMzg2IHx8IE1HRU9ERUdYMQorCWRlZmF1bHQgIjQiIGlmIE1FTEFOIHx8IE00ODYgfHwgTTM4NiB8fCBNR0VPREVHWDEKIAlkZWZhdWx0ICI1IiBpZiBNV0lOQ0hJUDNEIHx8IE1XSU5DSElQQzYgfHwgTUNSVVNPRSB8fCBNRUZGSUNFT04gfHwgTUNZUklYSUlJIHx8IE1LNiB8fCBNUEVOVElVTUlJSSB8fCBNUEVOVElVTUlJIHx8IE02ODYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTVZJQUMzXzIgfHwgTUdFT0RFX0xYCiAKIGNvbmZpZyBYODZfWEFERApAQCAtMzU4LDcgKzM2Miw3IEBACiAKIGNvbmZpZyBYODZfQUxJR05NRU5UXzE2CiAJZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gTVdJTkNISVAzRCB8fCBNV0lOQ0hJUEM2IHx8IE1DWVJJWElJSSB8fCBYODZfRUxBTiB8fCBNSzYgfHwgTTU4Nk1NWCB8fCBNNTg2VFNDIHx8IE01ODYgfHwgTTQ4NiB8fCBNVklBQzNfMiB8fCBNR0VPREVHWDEKKwlkZXBlbmRzIG9uIE1XSU5DSElQM0QgfHwgTVdJTkNISVBDNiB8fCBNQ1lSSVhJSUkgfHwgTUVMQU4gfHwgTUs2IHx8IE01ODZNTVggfHwgTTU4NlRTQyB8fCBNNTg2IHx8IE00ODYgfHwgTVZJQUMzXzIgfHwgTUdFT0RFR1gxCiAKIGNvbmZpZyBYODZfSU5URUxfVVNFUkNPUFkKIAlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUgYi9hcmNoL3g4Ni9NYWtlZmlsZV8zMi5jcHUKaW5kZXggZjJlZTFhYi4uODZjZWU3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvTWFrZWZpbGVfMzIuY3B1CisrKyBiL2FyY2gveDg2L01ha2VmaWxlXzMyLmNwdQpAQCAtMzcsNyArMzcsNyBAQAogCSQoY2FsbCBjYy1vcHRpb24sLW10dW5lPWF0b20sJChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9Z2VuZXJpYykpCiAKICMgQU1EIEVsYW4gc3VwcG9ydAotY2ZsYWdzLSQoQ09ORklHX1g4Nl9FTEFOKQkrPSAtbWFyY2g9aTQ4NgorY2ZsYWdzLSQoQ09ORklHX01FTEFOKQkJKz0gLW1hcmNoPWk0ODYKIAogIyBHZW9kZSBHWDEgc3VwcG9ydAogY2ZsYWdzLSQoQ09ORklHX01HRU9ERUdYMSkJKz0gLW1hcmNoPXBlbnRpdW0tbW14CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L21lbW9yeS5jIGIvYXJjaC94ODYvYm9vdC9tZW1vcnkuYwppbmRleCBjYWUzZmViLi5kYjc1ZDA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9ib290L21lbW9yeS5jCisrKyBiL2FyY2gveDg2L2Jvb3QvbWVtb3J5LmMKQEAgLTkxLDcgKzkxLDcgQEAKIAlpZiAob3JlZy5heCA+IDE1KjEwMjQpIHsKIAkJcmV0dXJuIC0xOwkvKiBCb2d1cyEgKi8KIAl9IGVsc2UgaWYgKG9yZWcuYXggPT0gMTUqMTAyNCkgewotCQlib290X3BhcmFtcy5hbHRfbWVtX2sgPSAob3JlZy5keCA8PCA2KSArIG9yZWcuYXg7CisJCWJvb3RfcGFyYW1zLmFsdF9tZW1fayA9IChvcmVnLmJ4IDw8IDYpICsgb3JlZy5heDsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGlzIGlnbm9yZXMgbWVtb3J5IGFib3ZlIDE2TUIgaWYgd2UgaGF2ZSBhIG1lbW9yeQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaAppbmRleCBhNjNhNjhiLi45NGQ0MjBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS1hc20uaApAQCAtMTUsNCArMTUsMTMgQEAKIAkuZW5kbQogI2VuZGlmCiAKKy5tYWNybyBhbHRpbnN0cnVjdGlvbl9lbnRyeSBvcmlnIGFsdCBmZWF0dXJlIG9yaWdfbGVuIGFsdF9sZW4KKwkuYWxpZ24gOAorCS5xdWFkIFxvcmlnCisJLnF1YWQgXGFsdAorCS53b3JkIFxmZWF0dXJlCisJLmJ5dGUgXG9yaWdfbGVuCisJLmJ5dGUgXGFsdF9sZW4KKy5lbmRtCisKICNlbmRpZiAgLyogIF9fQVNTRU1CTFlfXyAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCmluZGV4IDEzMDA5ZDEuLmJmNTM1ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaApAQCAtNCw3ICs0LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgotI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KICNpbmNsdWRlIDxhc20vYXNtLmg+CiAKIC8qCkBAIC0xOTEsMTIgKzE5MCw0IEBACiBleHRlcm4gdm9pZCAqdGV4dF9wb2tlX3NtcCh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOwogZXh0ZXJuIHZvaWQgdGV4dF9wb2tlX3NtcF9iYXRjaChzdHJ1Y3QgdGV4dF9wb2tlX3BhcmFtICpwYXJhbXMsIGludCBuKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSB8fCBkZWZpbmVkKEhBVkVfSlVNUF9MQUJFTCkKLSNkZWZpbmUgSURFQUxfTk9QX1NJWkVfNSA1Ci1leHRlcm4gdW5zaWduZWQgY2hhciBpZGVhbF9ub3A1W0lERUFMX05PUF9TSVpFXzVdOwotZXh0ZXJuIHZvaWQgYXJjaF9pbml0X2lkZWFsX25vcDUodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfaW5pdF9pZGVhbF9ub3A1KHZvaWQpIHt9Ci0jZW5kaWYKLQogI2VuZGlmIC8qIF9BU01fWDg2X0FMVEVSTkFUSVZFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FtZF9pb21tdV9wcm90by5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKaW5kZXggOTE2YmM4MS4uNTVkOTVlYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3Byb3RvLmgKQEAgLTE5LDEzICsxOSwxMiBAQAogI2lmbmRlZiBfQVNNX1g4Nl9BTURfSU9NTVVfUFJPVE9fSAogI2RlZmluZSBfQVNNX1g4Nl9BTURfSU9NTVVfUFJPVE9fSAogCi1zdHJ1Y3QgYW1kX2lvbW11OworI2luY2x1ZGUgPGFzbS9hbWRfaW9tbXVfdHlwZXMuaD4KIAogZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdF9kbWFfb3BzKHZvaWQpOwogZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdF9wYXNzdGhyb3VnaCh2b2lkKTsKK2V4dGVybiBpcnFyZXR1cm5fdCBhbWRfaW9tbXVfaW50X3RocmVhZChpbnQgaXJxLCB2b2lkICpkYXRhKTsKIGV4dGVybiBpcnFyZXR1cm5fdCBhbWRfaW9tbXVfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSk7Ci1leHRlcm4gdm9pZCBhbWRfaW9tbXVfZmx1c2hfYWxsX2RvbWFpbnModm9pZCk7Ci1leHRlcm4gdm9pZCBhbWRfaW9tbXVfZmx1c2hfYWxsX2RldmljZXModm9pZCk7CiBleHRlcm4gdm9pZCBhbWRfaW9tbXVfYXBwbHlfZXJyYXR1bV82Myh1MTYgZGV2aWQpOwogZXh0ZXJuIHZvaWQgYW1kX2lvbW11X3Jlc2V0X2NtZF9idWZmZXIoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUpOwogZXh0ZXJuIGludCBhbWRfaW9tbXVfaW5pdF9kZXZpY2VzKHZvaWQpOwpAQCAtNDQsNCArNDMsMTIgQEAKIAkgICAgICAgKHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JEODkwX0lPTU1VKTsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGlvbW11X2ZlYXR1cmUoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHU2NCBmKQoreworCWlmICghKGlvbW11LT5jYXAgJiAoMSA8PCBJT01NVV9DQVBfRUZSKSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiAhIShpb21tdS0+ZmVhdHVyZXMgJiBmKTsKK30KKwogI2VuZGlmIC8qIF9BU01fWDg2X0FNRF9JT01NVV9QUk9UT19IICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYW1kX2lvbW11X3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfdHlwZXMuaAppbmRleCBlMzUwOWZjLi40Yzk5ODI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbWRfaW9tbXVfdHlwZXMuaApAQCAtNjgsMTIgKzY4LDI1IEBACiAjZGVmaW5lIE1NSU9fQ09OVFJPTF9PRkZTRVQgICAgIDB4MDAxOAogI2RlZmluZSBNTUlPX0VYQ0xfQkFTRV9PRkZTRVQgICAweDAwMjAKICNkZWZpbmUgTU1JT19FWENMX0xJTUlUX09GRlNFVCAgMHgwMDI4CisjZGVmaW5lIE1NSU9fRVhUX0ZFQVRVUkVTCTB4MDAzMAogI2RlZmluZSBNTUlPX0NNRF9IRUFEX09GRlNFVAkweDIwMDAKICNkZWZpbmUgTU1JT19DTURfVEFJTF9PRkZTRVQJMHgyMDA4CiAjZGVmaW5lIE1NSU9fRVZUX0hFQURfT0ZGU0VUCTB4MjAxMAogI2RlZmluZSBNTUlPX0VWVF9UQUlMX09GRlNFVAkweDIwMTgKICNkZWZpbmUgTU1JT19TVEFUVVNfT0ZGU0VUCTB4MjAyMAogCisKKy8qIEV4dGVuZGVkIEZlYXR1cmUgQml0cyAqLworI2RlZmluZSBGRUFUVVJFX1BSRUZFVENICSgxVUxMPDwwKQorI2RlZmluZSBGRUFUVVJFX1BQUgkJKDFVTEw8PDEpCisjZGVmaW5lIEZFQVRVUkVfWDJBUElDCQkoMVVMTDw8MikKKyNkZWZpbmUgRkVBVFVSRV9OWAkJKDFVTEw8PDMpCisjZGVmaW5lIEZFQVRVUkVfR1QJCSgxVUxMPDw0KQorI2RlZmluZSBGRUFUVVJFX0lBCQkoMVVMTDw8NikKKyNkZWZpbmUgRkVBVFVSRV9HQQkJKDFVTEw8PDcpCisjZGVmaW5lIEZFQVRVUkVfSEUJCSgxVUxMPDw4KQorI2RlZmluZSBGRUFUVVJFX1BDCQkoMVVMTDw8OSkKKwogLyogTU1JTyBzdGF0dXMgYml0cyAqLwogI2RlZmluZSBNTUlPX1NUQVRVU19DT01fV0FJVF9JTlRfTUFTSwkweDA0CiAKQEAgLTExMyw3ICsxMjYsOSBAQAogLyogY29tbWFuZCBzcGVjaWZpYyBkZWZpbmVzICovCiAjZGVmaW5lIENNRF9DT01QTF9XQUlUICAgICAgICAgIDB4MDEKICNkZWZpbmUgQ01EX0lOVl9ERVZfRU5UUlkgICAgICAgMHgwMgotI2RlZmluZSBDTURfSU5WX0lPTU1VX1BBR0VTICAgICAweDAzCisjZGVmaW5lIENNRF9JTlZfSU9NTVVfUEFHRVMJMHgwMworI2RlZmluZSBDTURfSU5WX0lPVExCX1BBR0VTCTB4MDQKKyNkZWZpbmUgQ01EX0lOVl9BTEwJCTB4MDgKIAogI2RlZmluZSBDTURfQ09NUExfV0FJVF9TVE9SRV9NQVNLCTB4MDEKICNkZWZpbmUgQ01EX0NPTVBMX1dBSVRfSU5UX01BU0sJCTB4MDIKQEAgLTIxNSw2ICsyMzAsOCBAQAogI2RlZmluZSBJT01NVV9QVEVfSVIgKDFVTEwgPDwgNjEpCiAjZGVmaW5lIElPTU1VX1BURV9JVyAoMVVMTCA8PCA2MikKIAorI2RlZmluZSBEVEVfRkxBR19JT1RMQgkweDAxCisKICNkZWZpbmUgSU9NTVVfUEFHRV9NQVNLICgoKDFVTEwgPDwgNTIpIC0gMSkgJiB+MHhmZmZVTEwpCiAjZGVmaW5lIElPTU1VX1BURV9QUkVTRU5UKHB0ZSkgKChwdGUpICYgSU9NTVVfUFRFX1ApCiAjZGVmaW5lIElPTU1VX1BURV9QQUdFKHB0ZSkgKHBoeXNfdG9fdmlydCgocHRlKSAmIElPTU1VX1BBR0VfTUFTSykpCkBAIC0yMjcsNiArMjQ0LDcgQEAKIC8qIElPTU1VIGNhcGFiaWxpdGllcyAqLwogI2RlZmluZSBJT01NVV9DQVBfSU9UTEIgICAyNAogI2RlZmluZSBJT01NVV9DQVBfTlBDQUNIRSAyNgorI2RlZmluZSBJT01NVV9DQVBfRUZSICAgICAyNwogCiAjZGVmaW5lIE1BWF9ET01BSU5fSUQgNjU1MzYKIApAQCAtMjQ5LDYgKzI2Nyw4IEBACiAKIC8qIGdsb2JhbCBmbGFnIGlmIElPTU1VcyBjYWNoZSBub24tcHJlc2VudCBlbnRyaWVzICovCiBleHRlcm4gYm9vbCBhbWRfaW9tbXVfbnBfY2FjaGU7CisvKiBPbmx5IHRydWUgaWYgYWxsIElPTU1VcyBzdXBwb3J0IGRldmljZSBJT1RMQnMgKi8KK2V4dGVybiBib29sIGFtZF9pb21tdV9pb3RsYl9zdXA7CiAKIC8qCiAgKiBNYWtlIGl0ZXJhdGluZyBvdmVyIGFsbCBJT01NVXMgZWFzaWVyCkBAIC0zNzEsNiArMzkxLDkgQEAKIAkvKiBmbGFncyByZWFkIGZyb20gYWNwaSB0YWJsZSAqLwogCXU4IGFjcGlfZmxhZ3M7CiAKKwkvKiBFeHRlbmRlZCBmZWF0dXJlcyAqLworCXU2NCBmZWF0dXJlczsKKwogCS8qCiAJICogQ2FwYWJpbGl0eSBwb2ludGVyLiBUaGVyZSBjb3VsZCBiZSBtb3JlIHRoYW4gb25lIElPTU1VIHBlciBQQ0kKIAkgKiBkZXZpY2UgZnVuY3Rpb24gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgQU1EIElPTU1VIGNhcGFiaWxpdHkKQEAgLTQwOSw5ICs0MzIsNiBAQAogCS8qIGlmIG9uZSwgd2UgbmVlZCB0byBzZW5kIGEgY29tcGxldGlvbiB3YWl0IGNvbW1hbmQgKi8KIAlib29sIG5lZWRfc3luYzsKIAotCS8qIGJlY29tZXMgdHJ1ZSBpZiBhIGNvbW1hbmQgYnVmZmVyIHJlc2V0IGlzIHJ1bm5pbmcgKi8KLQlib29sIHJlc2V0X2luX3Byb2dyZXNzOwotCiAJLyogZGVmYXVsdCBkbWFfb3BzIGRvbWFpbiBmb3IgdGhhdCBJT01NVSAqLwogCXN0cnVjdCBkbWFfb3BzX2RvbWFpbiAqZGVmYXVsdF9kb207CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaAppbmRleCBkODc5ODhiLi4zNDU5NWQ1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCkBAIC03OCw2ICs3OCw3IEBACiAjZGVmaW5lCQlBUElDX0RFU1RfTE9HSUNBTAkweDAwODAwCiAjZGVmaW5lCQlBUElDX0RFU1RfUEhZU0lDQUwJMHgwMDAwMAogI2RlZmluZQkJQVBJQ19ETV9GSVhFRAkJMHgwMDAwMAorI2RlZmluZQkJQVBJQ19ETV9GSVhFRF9NQVNLCTB4MDA3MDAKICNkZWZpbmUJCUFQSUNfRE1fTE9XRVNUCQkweDAwMTAwCiAjZGVmaW5lCQlBUElDX0RNX1NNSQkJMHgwMDIwMAogI2RlZmluZQkJQVBJQ19ETV9SRU1SRAkJMHgwMDMwMApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCmluZGV4IDkxZjNlMDg3Li43ZjJmN2IxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVmZWF0dXJlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1ZmVhdHVyZS5oCkBAIC0xOTUsNiArMTk1LDcgQEAKIAogLyogSW50ZWwtZGVmaW5lZCBDUFUgZmVhdHVyZXMsIENQVUlEIGxldmVsIDB4MDAwMDAwMDc6MCAoZWJ4KSwgd29yZCA5ICovCiAjZGVmaW5lIFg4Nl9GRUFUVVJFX0ZTR1NCQVNFCSg5KjMyKyAwKSAvKiB7UkQvV1J9e0ZTL0dTfUJBU0UgaW5zdHJ1Y3Rpb25zKi8KKyNkZWZpbmUgWDg2X0ZFQVRVUkVfRVJNUwkoOSozMisgOSkgLyogRW5oYW5jZWQgUkVQIE1PVlNCL1NUT1NCICovCiAKICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmICFkZWZpbmVkKF9fQVNTRU1CTFlfXykKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZWZpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaAppbmRleCA4ZTRhMTY1Li43MDkzZTRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lZmkuaApAQCAtOTAsNiArOTAsNyBAQAogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogZXh0ZXJuIGludCBhZGRfZWZpX21lbW1hcDsKK2V4dGVybiB2b2lkIGVmaV9zZXRfZXhlY3V0YWJsZShlZmlfbWVtb3J5X2Rlc2NfdCAqbWQsIGJvb2wgZXhlY3V0YWJsZSk7CiBleHRlcm4gdm9pZCBlZmlfbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Uodm9pZCk7CiBleHRlcm4gdm9pZCBlZmlfY2FsbF9waHlzX3ByZWxvZyh2b2lkKTsKIGV4dGVybiB2b2lkIGVmaV9jYWxsX3BoeXNfZXBpbG9nKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCBkYjI0YzIyLi4yNjhjNzgzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaApAQCAtMzgsMTEgKzM4LDEwIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZnRyYWNlX2NhbGxfYWRqdXN0KHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAkvKgotCSAqIGNhbGwgbWNvdW50IGlzICJlOCA8NCBieXRlIG9mZnNldD4iCi0JICogVGhlIGFkZHIgcG9pbnRzIHRvIHRoZSA0IGJ5dGUgb2Zmc2V0IGFuZCB0aGUgY2FsbGVyIG9mIHRoaXMKLQkgKiBmdW5jdGlvbiB3YW50cyB0aGUgcG9pbnRlciB0byBlOC4gU2ltcGx5IHN1YnRyYWN0IG9uZS4KKwkgKiBhZGRyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZSBtY291bnQgY2FsbCBpbnN0cnVjdGlvbi4KKwkgKiByZWNvcmRtY291bnQgZG9lcyB0aGUgbmVjZXNzYXJ5IG9mZnNldCBjYWxjdWxhdGlvbi4KIAkgKi8KLQlyZXR1cm4gYWRkciAtIDE7CisJcmV0dXJuIGFkZHI7CiB9CiAKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjUzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1My5oCmluZGV4IGZjMWY1NzkuLjY1YWFhOTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjUzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTMuaApAQCAtNiw2ICs2LDggQEAKICNkZWZpbmUgUElUX0NIMAkJCTB4NDAKICNkZWZpbmUgUElUX0NIMgkJCTB4NDIKIAorI2RlZmluZSBQSVRfTEFUQ0gJTEFUQ0gKKwogZXh0ZXJuIHJhd19zcGlubG9ja190IGk4MjUzX2xvY2s7CiAKIGV4dGVybiBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpnbG9iYWxfY2xvY2tfZXZlbnQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKaW5kZXggYzRiZDI2Ny4uYTk3YTI0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaApAQCAtMTUwLDcgKzE1MCw3IEBACiBleHRlcm4gdm9pZCBpb2FwaWNfYW5kX2dzaV9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgaW9hcGljX2luc2VydF9yZXNvdXJjZXModm9pZCk7CiAKLWludCBpb19hcGljX3NldHVwX2lycV9waW4odW5zaWduZWQgaW50IGlycSwgaW50IG5vZGUsIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKTsKK2ludCBpb19hcGljX3NldHVwX2lycV9waW5fb25jZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmF0dHIpOwogCiBleHRlcm4gc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKiphbGxvY19pb2FwaWNfZW50cmllcyh2b2lkKTsKIGV4dGVybiB2b2lkIGZyZWVfaW9hcGljX2VudHJpZXMoc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKippb2FwaWNfZW50cmllcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9qdW1wX2xhYmVsLmgKaW5kZXggNTc0ZGJjMi4uYTMyYjE4YyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vanVtcF9sYWJlbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2p1bXBfbGFiZWwuaApAQCAtNSwyMCArNSwyNSBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbm9wcy5oPgorI2luY2x1ZGUgPGFzbS9hc20uaD4KIAogI2RlZmluZSBKVU1QX0xBQkVMX05PUF9TSVpFIDUKIAotIyBkZWZpbmUgSlVNUF9MQUJFTF9JTklUSUFMX05PUCAiLmJ5dGUgMHhlOSBcblx0IC5sb25nIDBcblx0IgorI2RlZmluZSBKVU1QX0xBQkVMX0lOSVRJQUxfTk9QICIuYnl0ZSAweGU5IFxuXHQgLmxvbmcgMFxuXHQiCiAKLSMgZGVmaW5lIEpVTVBfTEFCRUwoa2V5LCBsYWJlbCkJCQkJCVwKLQlkbyB7CQkJCQkJCVwKLQkJYXNtIGdvdG8oIjE6IgkJCQkJXAotCQkJSlVNUF9MQUJFTF9JTklUSUFMX05PUAkJCVwKLQkJCSIucHVzaHNlY3Rpb24gX19qdW1wX3RhYmxlLCAgXCJhd1wiIFxuXHQiXAotCQkJX0FTTV9QVFIgIjFiLCAlbFsiICNsYWJlbCAiXSwgJWMwIFxuXHQiIFwKLQkJCSIucG9wc2VjdGlvbiBcblx0IgkJCVwKLQkJCTogOiAgImkiIChrZXkpIDogIDogbGFiZWwpOwkJXAotCX0gd2hpbGUgKDApCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgYXJjaF9zdGF0aWNfYnJhbmNoKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5KQoreworCWFzbSBnb3RvKCIxOiIKKwkJSlVNUF9MQUJFTF9JTklUSUFMX05PUAorCQkiLnB1c2hzZWN0aW9uIF9fanVtcF90YWJsZSwgIFwiYXdcIiBcblx0IgorCQlfQVNNX0FMSUdOICJcblx0IgorCQlfQVNNX1BUUiAiMWIsICVsW2xfeWVzXSwgJWMwIFxuXHQiCisJCSIucG9wc2VjdGlvbiBcblx0IgorCQk6IDogICJpIiAoa2V5KSA6IDogbF95ZXMpOworCXJldHVybiBmYWxzZTsKK2xfeWVzOgorCXJldHVybiB0cnVlOworfQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCmluZGV4IGViMTZlOTQuLjAyMTk3OWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCkBAIC0xNDIsOCArMTQyLDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfcDVfbWNlKHZvaWQpIHt9CiAjZW5kaWYKIAotZXh0ZXJuIHZvaWQgKCp4ODZfbWNlX2RlY29kZV9jYWxsYmFjaykoc3RydWN0IG1jZSAqbSk7Ci0KIHZvaWQgbWNlX3NldHVwKHN0cnVjdCBtY2UgKm0pOwogdm9pZCBtY2VfbG9nKHN0cnVjdCBtY2UgKm0pOwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBzeXNfZGV2aWNlLCBtY2VfZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggNjc3NjNjNS4uOWVhZTc3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbW9kdWxlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbW9kdWxlLmgKQEAgLTM1LDcgKzM1LDcgQEAKICNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJLNyAiCiAjZWxpZiBkZWZpbmVkIENPTkZJR19NSzgKICNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJLOCAiCi0jZWxpZiBkZWZpbmVkIENPTkZJR19YODZfRUxBTgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTUVMQU4KICNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJFTEFOICIKICNlbGlmIGRlZmluZWQgQ09ORklHX01DUlVTT0UKICNkZWZpbmUgTU9EVUxFX1BST0NfRkFNSUxZICJDUlVTT0UgIgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbm9wcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbm9wcy5oCmluZGV4IGFmNzg4NDkuLjQwNWI0MDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL25vcHMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ub3BzLmgKQEAgLTEsNyArMSwxMyBAQAogI2lmbmRlZiBfQVNNX1g4Nl9OT1BTX0gKICNkZWZpbmUgX0FTTV9YODZfTk9QU19ICiAKLS8qIERlZmluZSBub3BzIGZvciB1c2Ugd2l0aCBhbHRlcm5hdGl2ZSgpICovCisvKgorICogRGVmaW5lIG5vcHMgZm9yIHVzZSB3aXRoIGFsdGVybmF0aXZlKCkgYW5kIGZvciB0cmFjaW5nLgorICoKKyAqICpfTk9QNV9BVE9NSUMgbXVzdCBiZSBhIHNpbmdsZSBpbnN0cnVjdGlvbi4KKyAqLworCisjZGVmaW5lIE5PUF9EU19QUkVGSVggMHgzZQogCiAvKiBnZW5lcmljIHZlcnNpb25zIGZyb20gZ2FzCiAgICAxOiBub3AKQEAgLTEzLDE0ICsxOSwxNSBAQAogICAgNjogbGVhbCAweDAwMDAwMDAwKCVlc2kpLCVlc2kKICAgIDc6IGxlYWwgMHgwMDAwMDAwMCgsJWVzaSwxKSwlZXNpCiAqLwotI2RlZmluZSBHRU5FUklDX05PUDEgIi5ieXRlIDB4OTBcbiIKLSNkZWZpbmUgR0VORVJJQ19OT1AyICIuYnl0ZSAweDg5LDB4ZjZcbiIKLSNkZWZpbmUgR0VORVJJQ19OT1AzICIuYnl0ZSAweDhkLDB4NzYsMHgwMFxuIgotI2RlZmluZSBHRU5FUklDX05PUDQgIi5ieXRlIDB4OGQsMHg3NCwweDI2LDB4MDBcbiIKLSNkZWZpbmUgR0VORVJJQ19OT1A1IEdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDQKLSNkZWZpbmUgR0VORVJJQ19OT1A2ICIuYnl0ZSAweDhkLDB4YjYsMHgwMCwweDAwLDB4MDAsMHgwMFxuIgotI2RlZmluZSBHRU5FUklDX05PUDcgIi5ieXRlIDB4OGQsMHhiNCwweDI2LDB4MDAsMHgwMCwweDAwLDB4MDBcbiIKLSNkZWZpbmUgR0VORVJJQ19OT1A4IEdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDcKKyNkZWZpbmUgR0VORVJJQ19OT1AxIDB4OTAKKyNkZWZpbmUgR0VORVJJQ19OT1AyIDB4ODksMHhmNgorI2RlZmluZSBHRU5FUklDX05PUDMgMHg4ZCwweDc2LDB4MDAKKyNkZWZpbmUgR0VORVJJQ19OT1A0IDB4OGQsMHg3NCwweDI2LDB4MDAKKyNkZWZpbmUgR0VORVJJQ19OT1A1IEdFTkVSSUNfTk9QMSxHRU5FUklDX05PUDQKKyNkZWZpbmUgR0VORVJJQ19OT1A2IDB4OGQsMHhiNiwweDAwLDB4MDAsMHgwMCwweDAwCisjZGVmaW5lIEdFTkVSSUNfTk9QNyAweDhkLDB4YjQsMHgyNiwweDAwLDB4MDAsMHgwMCwweDAwCisjZGVmaW5lIEdFTkVSSUNfTk9QOCBHRU5FUklDX05PUDEsR0VORVJJQ19OT1A3CisjZGVmaW5lIEdFTkVSSUNfTk9QNV9BVE9NSUMgTk9QX0RTX1BSRUZJWCxHRU5FUklDX05PUDQKIAogLyogT3B0ZXJvbiA2NGJpdCBub3BzCiAgICAxOiBub3AKQEAgLTI5LDEzICszNiwxNCBAQAogICAgNDogb3NwIG9zcCBvc3Agbm9wCiAqLwogI2RlZmluZSBLOF9OT1AxIEdFTkVSSUNfTk9QMQotI2RlZmluZSBLOF9OT1AyCSIuYnl0ZSAweDY2LDB4OTBcbiIKLSNkZWZpbmUgSzhfTk9QMwkiLmJ5dGUgMHg2NiwweDY2LDB4OTBcbiIKLSNkZWZpbmUgSzhfTk9QNAkiLmJ5dGUgMHg2NiwweDY2LDB4NjYsMHg5MFxuIgotI2RlZmluZSBLOF9OT1A1CUs4X05PUDMgSzhfTk9QMgotI2RlZmluZSBLOF9OT1A2CUs4X05PUDMgSzhfTk9QMwotI2RlZmluZSBLOF9OT1A3CUs4X05PUDQgSzhfTk9QMwotI2RlZmluZSBLOF9OT1A4CUs4X05PUDQgSzhfTk9QNAorI2RlZmluZSBLOF9OT1AyCTB4NjYsSzhfTk9QMQorI2RlZmluZSBLOF9OT1AzCTB4NjYsSzhfTk9QMgorI2RlZmluZSBLOF9OT1A0CTB4NjYsSzhfTk9QMworI2RlZmluZSBLOF9OT1A1CUs4X05PUDMsSzhfTk9QMgorI2RlZmluZSBLOF9OT1A2CUs4X05PUDMsSzhfTk9QMworI2RlZmluZSBLOF9OT1A3CUs4X05PUDQsSzhfTk9QMworI2RlZmluZSBLOF9OT1A4CUs4X05PUDQsSzhfTk9QNAorI2RlZmluZSBLOF9OT1A1X0FUT01JQyAweDY2LEs4X05PUDQKIAogLyogSzcgbm9wcwogICAgdXNlcyBlYXggZGVwZW5kZW5jaWVzIChhcmJpdHJhcnkgY2hvaWNlKQpAQCAtNDcsMTMgKzU1LDE0IEBACiAgICA3OiBsZWFsIDB4MDAwMDAwMDAoLCVlYXgsMSksJWVheAogKi8KICNkZWZpbmUgSzdfTk9QMQlHRU5FUklDX05PUDEKLSNkZWZpbmUgSzdfTk9QMgkiLmJ5dGUgMHg4YiwweGMwXG4iCi0jZGVmaW5lIEs3X05PUDMJIi5ieXRlIDB4OGQsMHgwNCwweDIwXG4iCi0jZGVmaW5lIEs3X05PUDQJIi5ieXRlIDB4OGQsMHg0NCwweDIwLDB4MDBcbiIKLSNkZWZpbmUgSzdfTk9QNQlLN19OT1A0IEFTTV9OT1AxCi0jZGVmaW5lIEs3X05PUDYJIi5ieXRlIDB4OGQsMHg4MCwwLDAsMCwwXG4iCi0jZGVmaW5lIEs3X05PUDcJIi5ieXRlIDB4OEQsMHgwNCwweDA1LDAsMCwwLDBcbiIKLSNkZWZpbmUgSzdfTk9QOAlLN19OT1A3IEFTTV9OT1AxCisjZGVmaW5lIEs3X05PUDIJMHg4YiwweGMwCisjZGVmaW5lIEs3X05PUDMJMHg4ZCwweDA0LDB4MjAKKyNkZWZpbmUgSzdfTk9QNAkweDhkLDB4NDQsMHgyMCwweDAwCisjZGVmaW5lIEs3X05PUDUJSzdfTk9QNCxLN19OT1AxCisjZGVmaW5lIEs3X05PUDYJMHg4ZCwweDgwLDAsMCwwLDAKKyNkZWZpbmUgSzdfTk9QNwkweDhELDB4MDQsMHgwNSwwLDAsMCwwCisjZGVmaW5lIEs3X05PUDgJSzdfTk9QNyxLN19OT1AxCisjZGVmaW5lIEs3X05PUDVfQVRPTUlDIE5PUF9EU19QUkVGSVgsSzdfTk9QNAogCiAvKiBQNiBub3BzCiAgICB1c2VzIGVheCBkZXBlbmRlbmNpZXMgKEludGVsLXJlY29tbWVuZGVkIGNob2ljZSkKQEAgLTY5LDUyICs3OCw2NSBAQAogCVRoZXJlIGlzIGtlcm5lbCBjb2RlIHRoYXQgZGVwZW5kcyBvbiB0aGlzLgogKi8KICNkZWZpbmUgUDZfTk9QMQlHRU5FUklDX05PUDEKLSNkZWZpbmUgUDZfTk9QMgkiLmJ5dGUgMHg2NiwweDkwXG4iCi0jZGVmaW5lIFA2X05PUDMJIi5ieXRlIDB4MGYsMHgxZiwweDAwXG4iCi0jZGVmaW5lIFA2X05PUDQJIi5ieXRlIDB4MGYsMHgxZiwweDQwLDBcbiIKLSNkZWZpbmUgUDZfTk9QNQkiLmJ5dGUgMHgwZiwweDFmLDB4NDQsMHgwMCwwXG4iCi0jZGVmaW5lIFA2X05PUDYJIi5ieXRlIDB4NjYsMHgwZiwweDFmLDB4NDQsMHgwMCwwXG4iCi0jZGVmaW5lIFA2X05PUDcJIi5ieXRlIDB4MGYsMHgxZiwweDgwLDAsMCwwLDBcbiIKLSNkZWZpbmUgUDZfTk9QOAkiLmJ5dGUgMHgwZiwweDFmLDB4ODQsMHgwMCwwLDAsMCwwXG4iCisjZGVmaW5lIFA2X05PUDIJMHg2NiwweDkwCisjZGVmaW5lIFA2X05PUDMJMHgwZiwweDFmLDB4MDAKKyNkZWZpbmUgUDZfTk9QNAkweDBmLDB4MWYsMHg0MCwwCisjZGVmaW5lIFA2X05PUDUJMHgwZiwweDFmLDB4NDQsMHgwMCwwCisjZGVmaW5lIFA2X05PUDYJMHg2NiwweDBmLDB4MWYsMHg0NCwweDAwLDAKKyNkZWZpbmUgUDZfTk9QNwkweDBmLDB4MWYsMHg4MCwwLDAsMCwwCisjZGVmaW5lIFA2X05PUDgJMHgwZiwweDFmLDB4ODQsMHgwMCwwLDAsMCwwCisjZGVmaW5lIFA2X05PUDVfQVRPTUlDIFA2X05PUDUKKworI2RlZmluZSBfQVNNX01LX05PUCh4KSAiLmJ5dGUgIiBfX3N0cmluZ2lmeSh4KSAiXG4iCiAKICNpZiBkZWZpbmVkKENPTkZJR19NSzcpCi0jZGVmaW5lIEFTTV9OT1AxIEs3X05PUDEKLSNkZWZpbmUgQVNNX05PUDIgSzdfTk9QMgotI2RlZmluZSBBU01fTk9QMyBLN19OT1AzCi0jZGVmaW5lIEFTTV9OT1A0IEs3X05PUDQKLSNkZWZpbmUgQVNNX05PUDUgSzdfTk9QNQotI2RlZmluZSBBU01fTk9QNiBLN19OT1A2Ci0jZGVmaW5lIEFTTV9OT1A3IEs3X05PUDcKLSNkZWZpbmUgQVNNX05PUDggSzdfTk9QOAorI2RlZmluZSBBU01fTk9QMSBfQVNNX01LX05PUChLN19OT1AxKQorI2RlZmluZSBBU01fTk9QMiBfQVNNX01LX05PUChLN19OT1AyKQorI2RlZmluZSBBU01fTk9QMyBfQVNNX01LX05PUChLN19OT1AzKQorI2RlZmluZSBBU01fTk9QNCBfQVNNX01LX05PUChLN19OT1A0KQorI2RlZmluZSBBU01fTk9QNSBfQVNNX01LX05PUChLN19OT1A1KQorI2RlZmluZSBBU01fTk9QNiBfQVNNX01LX05PUChLN19OT1A2KQorI2RlZmluZSBBU01fTk9QNyBfQVNNX01LX05PUChLN19OT1A3KQorI2RlZmluZSBBU01fTk9QOCBfQVNNX01LX05PUChLN19OT1A4KQorI2RlZmluZSBBU01fTk9QNV9BVE9NSUMgX0FTTV9NS19OT1AoSzdfTk9QNV9BVE9NSUMpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19YODZfUDZfTk9QKQotI2RlZmluZSBBU01fTk9QMSBQNl9OT1AxCi0jZGVmaW5lIEFTTV9OT1AyIFA2X05PUDIKLSNkZWZpbmUgQVNNX05PUDMgUDZfTk9QMwotI2RlZmluZSBBU01fTk9QNCBQNl9OT1A0Ci0jZGVmaW5lIEFTTV9OT1A1IFA2X05PUDUKLSNkZWZpbmUgQVNNX05PUDYgUDZfTk9QNgotI2RlZmluZSBBU01fTk9QNyBQNl9OT1A3Ci0jZGVmaW5lIEFTTV9OT1A4IFA2X05PUDgKKyNkZWZpbmUgQVNNX05PUDEgX0FTTV9NS19OT1AoUDZfTk9QMSkKKyNkZWZpbmUgQVNNX05PUDIgX0FTTV9NS19OT1AoUDZfTk9QMikKKyNkZWZpbmUgQVNNX05PUDMgX0FTTV9NS19OT1AoUDZfTk9QMykKKyNkZWZpbmUgQVNNX05PUDQgX0FTTV9NS19OT1AoUDZfTk9QNCkKKyNkZWZpbmUgQVNNX05PUDUgX0FTTV9NS19OT1AoUDZfTk9QNSkKKyNkZWZpbmUgQVNNX05PUDYgX0FTTV9NS19OT1AoUDZfTk9QNikKKyNkZWZpbmUgQVNNX05PUDcgX0FTTV9NS19OT1AoUDZfTk9QNykKKyNkZWZpbmUgQVNNX05PUDggX0FTTV9NS19OT1AoUDZfTk9QOCkKKyNkZWZpbmUgQVNNX05PUDVfQVRPTUlDIF9BU01fTUtfTk9QKFA2X05PUDVfQVRPTUlDKQogI2VsaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KQotI2RlZmluZSBBU01fTk9QMSBLOF9OT1AxCi0jZGVmaW5lIEFTTV9OT1AyIEs4X05PUDIKLSNkZWZpbmUgQVNNX05PUDMgSzhfTk9QMwotI2RlZmluZSBBU01fTk9QNCBLOF9OT1A0Ci0jZGVmaW5lIEFTTV9OT1A1IEs4X05PUDUKLSNkZWZpbmUgQVNNX05PUDYgSzhfTk9QNgotI2RlZmluZSBBU01fTk9QNyBLOF9OT1A3Ci0jZGVmaW5lIEFTTV9OT1A4IEs4X05PUDgKKyNkZWZpbmUgQVNNX05PUDEgX0FTTV9NS19OT1AoSzhfTk9QMSkKKyNkZWZpbmUgQVNNX05PUDIgX0FTTV9NS19OT1AoSzhfTk9QMikKKyNkZWZpbmUgQVNNX05PUDMgX0FTTV9NS19OT1AoSzhfTk9QMykKKyNkZWZpbmUgQVNNX05PUDQgX0FTTV9NS19OT1AoSzhfTk9QNCkKKyNkZWZpbmUgQVNNX05PUDUgX0FTTV9NS19OT1AoSzhfTk9QNSkKKyNkZWZpbmUgQVNNX05PUDYgX0FTTV9NS19OT1AoSzhfTk9QNikKKyNkZWZpbmUgQVNNX05PUDcgX0FTTV9NS19OT1AoSzhfTk9QNykKKyNkZWZpbmUgQVNNX05PUDggX0FTTV9NS19OT1AoSzhfTk9QOCkKKyNkZWZpbmUgQVNNX05PUDVfQVRPTUlDIF9BU01fTUtfTk9QKEs4X05PUDVfQVRPTUlDKQogI2Vsc2UKLSNkZWZpbmUgQVNNX05PUDEgR0VORVJJQ19OT1AxCi0jZGVmaW5lIEFTTV9OT1AyIEdFTkVSSUNfTk9QMgotI2RlZmluZSBBU01fTk9QMyBHRU5FUklDX05PUDMKLSNkZWZpbmUgQVNNX05PUDQgR0VORVJJQ19OT1A0Ci0jZGVmaW5lIEFTTV9OT1A1IEdFTkVSSUNfTk9QNQotI2RlZmluZSBBU01fTk9QNiBHRU5FUklDX05PUDYKLSNkZWZpbmUgQVNNX05PUDcgR0VORVJJQ19OT1A3Ci0jZGVmaW5lIEFTTV9OT1A4IEdFTkVSSUNfTk9QOAorI2RlZmluZSBBU01fTk9QMSBfQVNNX01LX05PUChHRU5FUklDX05PUDEpCisjZGVmaW5lIEFTTV9OT1AyIF9BU01fTUtfTk9QKEdFTkVSSUNfTk9QMikKKyNkZWZpbmUgQVNNX05PUDMgX0FTTV9NS19OT1AoR0VORVJJQ19OT1AzKQorI2RlZmluZSBBU01fTk9QNCBfQVNNX01LX05PUChHRU5FUklDX05PUDQpCisjZGVmaW5lIEFTTV9OT1A1IF9BU01fTUtfTk9QKEdFTkVSSUNfTk9QNSkKKyNkZWZpbmUgQVNNX05PUDYgX0FTTV9NS19OT1AoR0VORVJJQ19OT1A2KQorI2RlZmluZSBBU01fTk9QNyBfQVNNX01LX05PUChHRU5FUklDX05PUDcpCisjZGVmaW5lIEFTTV9OT1A4IF9BU01fTUtfTk9QKEdFTkVSSUNfTk9QOCkKKyNkZWZpbmUgQVNNX05PUDVfQVRPTUlDIF9BU01fTUtfTk9QKEdFTkVSSUNfTk9QNV9BVE9NSUMpCiAjZW5kaWYKIAogI2RlZmluZSBBU01fTk9QX01BWCA4CisjZGVmaW5lIE5PUF9BVE9NSUM1IChBU01fTk9QX01BWCsxKQkvKiBFbnRyeSBmb3IgdGhlIDUtYnl0ZSBhdG9taWMgTk9QICovCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciAqIGNvbnN0ICppZGVhbF9ub3BzOworZXh0ZXJuIHZvaWQgYXJjaF9pbml0X2lkZWFsX25vcHModm9pZCk7CisjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X05PUFNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYS5oCmluZGV4IDNkNGRhYjQuLmE1MGZjOWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hLmgKQEAgLTUxLDcgKzUxLDcgQEAKICNlbmRpZgkvKiBDT05GSUdfTlVNQSAqLwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUwotc3RydWN0IGNwdW1hc2sgX19jcHVpbml0ICpkZWJ1Z19jcHVtYXNrX3NldF9jcHUoaW50IGNwdSwgaW50IGVuYWJsZSk7Cit2b2lkIGRlYnVnX2NwdW1hc2tfc2V0X2NwdShpbnQgY3B1LCBpbnQgbm9kZSwgYm9vbCBlbmFibGUpOwogI2VuZGlmCiAKICNlbmRpZgkvKiBfQVNNX1g4Nl9OVU1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggZDQ3NWI0My4uNzUxZTdmMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTUxNyw3ICs1MTcsNyBAQAogCXR5cGVvZihvMikgX19vMiA9IG8yOwkJCQkJCVwKIAl0eXBlb2YobzIpIF9fbjIgPSBuMjsJCQkJCQlcCiAJdHlwZW9mKG8yKSBfX2R1bW15OwkJCQkJCVwKLQlhbHRlcm5hdGl2ZV9pbygiY2FsbCB0aGlzX2NwdV9jbXB4Y2hnMTZiX2VtdVxuXHQiIFA2X05PUDQsCVwKKwlhbHRlcm5hdGl2ZV9pbygiY2FsbCB0aGlzX2NwdV9jbXB4Y2hnMTZiX2VtdVxuXHQiIEFTTV9OT1A0LAlcCiAJCSAgICAgICAiY21weGNoZzE2YiAiIF9fcGVyY3B1X3ByZWZpeCAiKCUlcnNpKVxuXHRzZXR6ICUwXG5cdCIsCVwKIAkJICAgICAgIFg4Nl9GRUFUVVJFX0NYMTYsCQkJCVwKIAkJICAgICAgIEFTTV9PVVRQVVQyKCI9YSIoX19yZXQpLCAiPWQiKF9fZHVtbXkpKSwJCVwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAppbmRleCA3ZGI3NzIzLi5kNTYxODdjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCkBAIC0yOTksNiArMjk5LDcgQEAKIC8qIEluc3RhbGwgYSBwdGUgZm9yIGEgcGFydGljdWxhciB2YWRkciBpbiBrZXJuZWwgc3BhY2UuICovCiB2b2lkIHNldF9wdGVfdmFkZHIodW5zaWduZWQgbG9uZyB2YWRkciwgcHRlX3QgcHRlKTsKIAorZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9yZXNlcnZlKHU2NCBzdGFydCwgdTY0IGVuZCk7CiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogZXh0ZXJuIHZvaWQgbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydChwZ2RfdCAqYmFzZSk7CiBleHRlcm4gdm9pZCBuYXRpdmVfcGFnZXRhYmxlX3NldHVwX2RvbmUocGdkX3QgKmJhc2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggZGI4YWExOS4uNjQ3ZDhhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC04OCw3ICs4OCw3IEBACiAgKiBleGVjdXRhYmxlLikKICAqLwogI2RlZmluZSBSRVNFUlZFX0JSSyhuYW1lLHN6KQkJCQkJCVwKLQlzdGF0aWMgdm9pZCBfX3NlY3Rpb24oLmRpc2NhcmQudGV4dCkgX191c2VkCQkJXAorCXN0YXRpYyB2b2lkIF9fc2VjdGlvbiguZGlzY2FyZC50ZXh0KSBfX3VzZWQgbm90cmFjZQkJXAogCV9fYnJrX3Jlc2VydmF0aW9uX2ZuXyMjbmFtZSMjX18odm9pZCkgewkJCQlcCiAJCWFzbSB2b2xhdGlsZSAoCQkJCQkJXAogCQkJIi5wdXNoc2VjdGlvbiAuYnJrX3Jlc2VydmF0aW9uLFwiYXdcIixAbm9iaXRzOyIgXApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3RhY2t0cmFjZS5oCmluZGV4IGQ3ZTg5YzguLjcwYmJlMzkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N0YWNrdHJhY2UuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zdGFja3RyYWNlLmgKQEAgLTM3LDkgKzM3LDYgQEAKIC8qIEdlbmVyaWMgc3RhY2sgdHJhY2VyIHdpdGggY2FsbGJhY2tzICovCiAKIHN0cnVjdCBzdGFja3RyYWNlX29wcyB7Ci0Jdm9pZCAoKndhcm5pbmcpKHZvaWQgKmRhdGEsIGNoYXIgKm1zZyk7Ci0JLyogbXNnIG11c3QgY29udGFpbiAlcyBmb3IgdGhlIHN5bWJvbCAqLwotCXZvaWQgKCp3YXJuaW5nX3N5bWJvbCkodm9pZCAqZGF0YSwgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIHN5bWJvbCk7CiAJdm9pZCAoKmFkZHJlc3MpKHZvaWQgKmRhdGEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHJlbGlhYmxlKTsKIAkvKiBPbiBuZWdhdGl2ZSByZXR1cm4gc3RvcCBkdW1waW5nICovCiAJaW50ICgqc3RhY2spKHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaAppbmRleCAxMjU2OWU2Li5jMmZmMmExIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtMzAzLDI0ICszMDMsODEgQEAKICNpZmRlZiBDT05GSUdfUEFSQVZJUlQKICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KICNlbHNlCi0jZGVmaW5lIHJlYWRfY3IwKCkJKG5hdGl2ZV9yZWFkX2NyMCgpKQotI2RlZmluZSB3cml0ZV9jcjAoeCkJKG5hdGl2ZV93cml0ZV9jcjAoeCkpCi0jZGVmaW5lIHJlYWRfY3IyKCkJKG5hdGl2ZV9yZWFkX2NyMigpKQotI2RlZmluZSB3cml0ZV9jcjIoeCkJKG5hdGl2ZV93cml0ZV9jcjIoeCkpCi0jZGVmaW5lIHJlYWRfY3IzKCkJKG5hdGl2ZV9yZWFkX2NyMygpKQotI2RlZmluZSB3cml0ZV9jcjMoeCkJKG5hdGl2ZV93cml0ZV9jcjMoeCkpCi0jZGVmaW5lIHJlYWRfY3I0KCkJKG5hdGl2ZV9yZWFkX2NyNCgpKQotI2RlZmluZSByZWFkX2NyNF9zYWZlKCkJKG5hdGl2ZV9yZWFkX2NyNF9zYWZlKCkpCi0jZGVmaW5lIHdyaXRlX2NyNCh4KQkobmF0aXZlX3dyaXRlX2NyNCh4KSkKLSNkZWZpbmUgd2JpbnZkKCkJKG5hdGl2ZV93YmludmQoKSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3IwKHZvaWQpCit7CisJcmV0dXJuIG5hdGl2ZV9yZWFkX2NyMCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3IwKHVuc2lnbmVkIGxvbmcgeCkKK3sKKwluYXRpdmVfd3JpdGVfY3IwKHgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjIodm9pZCkKK3sKKwlyZXR1cm4gbmF0aXZlX3JlYWRfY3IyKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9jcjIodW5zaWduZWQgbG9uZyB4KQoreworCW5hdGl2ZV93cml0ZV9jcjIoeCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyByZWFkX2NyMyh2b2lkKQoreworCXJldHVybiBuYXRpdmVfcmVhZF9jcjMoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2NyMyh1bnNpZ25lZCBsb25nIHgpCit7CisJbmF0aXZlX3dyaXRlX2NyMyh4KTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3I0KHZvaWQpCit7CisJcmV0dXJuIG5hdGl2ZV9yZWFkX2NyNCgpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcmVhZF9jcjRfc2FmZSh2b2lkKQoreworCXJldHVybiBuYXRpdmVfcmVhZF9jcjRfc2FmZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3I0KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwluYXRpdmVfd3JpdGVfY3I0KHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2JpbnZkKHZvaWQpCit7CisJbmF0aXZlX3diaW52ZCgpOworfQorCiAjaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSByZWFkX2NyOCgpCShuYXRpdmVfcmVhZF9jcjgoKSkKLSNkZWZpbmUgd3JpdGVfY3I4KHgpCShuYXRpdmVfd3JpdGVfY3I4KHgpKQotI2RlZmluZSBsb2FkX2dzX2luZGV4ICAgbmF0aXZlX2xvYWRfZ3NfaW5kZXgKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJlYWRfY3I4KHZvaWQpCit7CisJcmV0dXJuIG5hdGl2ZV9yZWFkX2NyOCgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfY3I4KHVuc2lnbmVkIGxvbmcgeCkKK3sKKwluYXRpdmVfd3JpdGVfY3I4KHgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9hZF9nc19pbmRleCh1bnNpZ25lZCBzZWxlY3RvcikKK3sKKwluYXRpdmVfbG9hZF9nc19pbmRleChzZWxlY3Rvcik7Cit9CisKICNlbmRpZgogCiAvKiBDbGVhciB0aGUgJ1RTJyBiaXQgKi8KLSNkZWZpbmUgY2x0cygpCQkobmF0aXZlX2NsdHMoKSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbHRzKHZvaWQpCit7CisJbmF0aXZlX2NsdHMoKTsKK30KIAogI2VuZGlmLyogQ09ORklHX1BBUkFWSVJUICovCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VhY2Nlc3MuaAppbmRleCBhYmQzZTBlLi45OWYwYWQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91YWNjZXNzLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCkBAIC00Miw3ICs0Miw3IEBACiAgKiBSZXR1cm5zIDAgaWYgdGhlIHJhbmdlIGlzIHZhbGlkLCBub256ZXJvIG90aGVyd2lzZS4KICAqCiAgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZyB0ZXN0OgotICogKHUzMylhZGRyICsgKHUzMylzaXplID49ICh1MzMpY3VycmVudC0+YWRkcl9saW1pdC5zZWcgKHU2NSBmb3IgeDg2XzY0KQorICogKHUzMylhZGRyICsgKHUzMylzaXplID4gKHUzMyljdXJyZW50LT5hZGRyX2xpbWl0LnNlZyAodTY1IGZvciB4ODZfNjQpCiAgKgogICogVGhpcyBuZWVkcyAzMy1iaXQgKDY1LWJpdCBmb3IgeDg2XzY0KSBhcml0aG1ldGljLiBXZSBoYXZlIGEgY2FycnkuLi4KICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfYmF1LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9iYXUuaAppbmRleCAzZTA5NGFmLi4xMzBmMWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9iYXUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9iYXUuaApAQCAtOTQsNiArOTQsOCBAQAogLyogYWZ0ZXIgdGhpcyAjIGNvbnNlY3V0aXZlIHN1Y2Nlc3NlcywgYnVtcCB1cCB0aGUgdGhyb3R0bGUgaWYgaXQgd2FzIGxvd2VyZWQgKi8KICNkZWZpbmUgQ09NUExFVEVfVEhSRVNIT0xEIDUKIAorI2RlZmluZSBVVl9MQl9TVUJOT0RFSUQgMHgxMAorCiAvKgogICogbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGRlc3RpbmF0aW9uIHNpZGUgcGF5bG9hZCBxdWV1ZQogICovCkBAIC0xMjQsNyArMTI2LDcgQEAKICAqIFRoZSBkaXN0cmlidXRpb24gc3BlY2lmaWNhdGlvbiAoMzIgYnl0ZXMpIGlzIGludGVycHJldGVkIGFzIGEgMjU2LWJpdAogICogZGlzdHJpYnV0aW9uIHZlY3Rvci4gQWRqYWNlbnQgYml0cyBjb3JyZXNwb25kIHRvIGNvbnNlY3V0aXZlIGV2ZW4gbnVtYmVyZWQKICAqIG5vZGVJRHMuIFRoZSByZXN1bHQgb2YgYWRkaW5nIHRoZSBpbmRleCBvZiBhIGdpdmVuIGJpdCB0byB0aGUgMTUtYml0Ci0gKiAnYmFzZV9kZXN0X25vZGVpZCcgZmllbGQgb2YgdGhlIGhlYWRlciBjb3JyZXNwb25kcyB0byB0aGUKKyAqICdiYXNlX2Rlc3RfbmFzaWQnIGZpZWxkIG9mIHRoZSBoZWFkZXIgY29ycmVzcG9uZHMgdG8gdGhlCiAgKiBkZXN0aW5hdGlvbiBub2RlSUQgYXNzb2NpYXRlZCB3aXRoIHRoYXQgc3BlY2lmaWVkIGJpdC4KICAqLwogc3RydWN0IGJhdV90YXJnZXRfdXZodWJtYXNrIHsKQEAgLTE3Niw3ICsxNzgsNyBAQAogc3RydWN0IGJhdV9tc2dfaGVhZGVyIHsKIAl1bnNpZ25lZCBpbnQgZGVzdF9zdWJub2RlaWQ6NjsJLyogbXVzdCBiZSAweDEwLCBmb3IgdGhlIExCICovCiAJLyogYml0cyA1OjAgKi8KLQl1bnNpZ25lZCBpbnQgYmFzZV9kZXN0X25vZGVpZDoxNTsgLyogbmFzaWQgb2YgdGhlICovCisJdW5zaWduZWQgaW50IGJhc2VfZGVzdF9uYXNpZDoxNTsgLyogbmFzaWQgb2YgdGhlICovCiAJLyogYml0cyAyMDo2ICovCQkJICAvKiBmaXJzdCBiaXQgaW4gdXZodWIgbWFwICovCiAJdW5zaWduZWQgaW50IGNvbW1hbmQ6ODsJLyogbWVzc2FnZSB0eXBlICovCiAJLyogYml0cyAyODoyMSAqLwpAQCAtMzc4LDYgKzM4MCwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZF9yY2FuY2VsZWQ7IC8qIG51bWJlciBvZiBtZXNzYWdlcyBjYW5jZWxlZCBieSByZXNldHMgKi8KIH07CiAKK3N0cnVjdCBodWJfYW5kX3Bub2RlIHsKKwlzaG9ydCB1dmh1YjsKKwlzaG9ydCBwbm9kZTsKK307CiAvKgogICogb25lIHBlci1jcHU7IHRvIGxvY2F0ZSB0aGUgc29mdHdhcmUgdGFibGVzCiAgKi8KQEAgLTM5OSwxMCArNDA1LDEyIEBACiAJaW50IGJhdWRpc2FibGVkOwogCWludCBzZXRfYmF1X29mZjsKIAlzaG9ydCBjcHU7CisJc2hvcnQgb3Nub2RlOwogCXNob3J0IHV2aHViX2NwdTsKIAlzaG9ydCB1dmh1YjsKIAlzaG9ydCBjcHVzX2luX3NvY2tldDsKIAlzaG9ydCBjcHVzX2luX3V2aHViOworCXNob3J0IHBhcnRpdGlvbl9iYXNlX3Bub2RlOwogCXVuc2lnbmVkIHNob3J0IG1lc3NhZ2VfbnVtYmVyOwogCXVuc2lnbmVkIHNob3J0IHV2aHViX3F1aWVzY2U7CiAJc2hvcnQgc29ja2V0X2Fja25vd2xlZGdlX2NvdW50W0RFU1RfUV9TSVpFXTsKQEAgLTQyMiwxNSArNDMwLDE2IEBACiAJaW50IGNvbmdlc3RlZF9wZXJpb2Q7CiAJY3ljbGVzX3QgcGVyaW9kX3RpbWU7CiAJbG9uZyBwZXJpb2RfcmVxdWVzdHM7CisJc3RydWN0IGh1Yl9hbmRfcG5vZGUgKnRhcmdldF9odWJfYW5kX3Bub2RlOwogfTsKIAogc3RhdGljIGlubGluZSBpbnQgYmF1X3V2aHViX2lzc2V0KGludCB1dmh1Yiwgc3RydWN0IGJhdV90YXJnZXRfdXZodWJtYXNrICpkc3RwKQogewogCXJldHVybiBjb25zdGFudF90ZXN0X2JpdCh1dmh1YiwgJmRzdHAtPmJpdHNbMF0pOwogfQotc3RhdGljIGlubGluZSB2b2lkIGJhdV91dmh1Yl9zZXQoaW50IHV2aHViLCBzdHJ1Y3QgYmF1X3RhcmdldF91dmh1Ym1hc2sgKmRzdHApCitzdGF0aWMgaW5saW5lIHZvaWQgYmF1X3V2aHViX3NldChpbnQgcG5vZGUsIHN0cnVjdCBiYXVfdGFyZ2V0X3V2aHVibWFzayAqZHN0cCkKIHsKLQlfX3NldF9iaXQodXZodWIsICZkc3RwLT5iaXRzWzBdKTsKKwlfX3NldF9iaXQocG5vZGUsICZkc3RwLT5iaXRzWzBdKTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBiYXVfdXZodWJzX2NsZWFyKHN0cnVjdCBiYXVfdGFyZ2V0X3V2aHVibWFzayAqZHN0cCwKIAkJCQkgICAgaW50IG5iaXRzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAppbmRleCBhNTAxNzQxLi40Mjk4MDAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9odWIuaApAQCAtMzk4LDYgKzM5OCw4IEBACiAJdW5zaWduZWQgc2hvcnQJbnJfb25saW5lX2NwdXM7CiAJdW5zaWduZWQgc2hvcnQJcG5vZGU7CiAJc2hvcnQJCW1lbW9yeV9uaWQ7CisJc3BpbmxvY2tfdAlubWlfbG9jazsKKwl1bnNpZ25lZCBsb25nCW5taV9jb3VudDsKIH07CiBleHRlcm4gc3RydWN0IHV2X2JsYWRlX2luZm8gKnV2X2JsYWRlX2luZm87CiBleHRlcm4gc2hvcnQgKnV2X25vZGVfdG9fYmxhZGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS91di91dl9tbXJzLmgKaW5kZXggMjBjYWZlYS4uZjViYjY0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfbW1ycy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X21tcnMuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBTR0kgVVYgTU1SIGRlZmluaXRpb25zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTEgU2lsaWNvbiBHcmFwaGljcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICovCiAKICNpZm5kZWYgX0FTTV9YODZfVVZfVVZfTU1SU19ICkBAIC0xMDk5LDUgKzEwOTksMTkgQEAKICAgICB9IHM7CiB9OwogCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVVkhfU0NSQVRDSDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisjZGVmaW5lIFVWSF9TQ1JBVENINSAweDJkMDIwMFVMCisjZGVmaW5lIFVWSF9TQ1JBVENINV8zMiAweDAwNzc4CisKKyNkZWZpbmUgVVZIX1NDUkFUQ0g1X1NDUkFUQ0g1X1NIRlQgMAorI2RlZmluZSBVVkhfU0NSQVRDSDVfU0NSQVRDSDVfTUFTSyAweGZmZmZmZmZmZmZmZmZmZmZVTAordW5pb24gdXZoX3NjcmF0Y2g1X3UgeworICAgIHVuc2lnbmVkIGxvbmcJdjsKKyAgICBzdHJ1Y3QgdXZoX3NjcmF0Y2g1X3MgeworCXVuc2lnbmVkIGxvbmcJc2NyYXRjaDUgOiA2NDsgIC8qIFJXLCBXMUNTICovCisgICAgfSBzOworfTsKIAogI2VuZGlmIC8qIF9fQVNNX1VWX01NUlNfWDg2X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKaW5kZXggNjQzZWJmMi4uZDNkODU5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCkBAIC02OCw2ICs2OCwxNyBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3QgeDg2X2luaXRfbWFwcGluZyAtIHBsYXRmb3JtIHNwZWNpZmljIGluaXRpYWwga2VybmVsIHBhZ2V0YWJsZSBzZXR1cAorICogQHBhZ2V0YWJsZV9yZXNlcnZlOglyZXNlcnZlIGEgcmFuZ2Ugb2YgYWRkcmVzc2VzIGZvciBrZXJuZWwgcGFnZXRhYmxlIHVzYWdlCisgKgorICogRm9yIG1vcmUgZGV0YWlscyBvbiB0aGUgcHVycG9zZSBvZiB0aGlzIGhvb2ssIGxvb2sgaW4KKyAqIGluaXRfbWVtb3J5X21hcHBpbmcgYW5kIHRoZSBjb21taXQgdGhhdCBhZGRlZCBpdC4KKyAqLworc3RydWN0IHg4Nl9pbml0X21hcHBpbmcgeworCXZvaWQgKCpwYWdldGFibGVfcmVzZXJ2ZSkodTY0IHN0YXJ0LCB1NjQgZW5kKTsKK307CisKKy8qKgogICogc3RydWN0IHg4Nl9pbml0X3BhZ2luZyAtIHBsYXRmb3JtIHNwZWNpZmljIHBhZ2luZyBmdW5jdGlvbnMKICAqIEBwYWdldGFibGVfc2V0dXBfc3RhcnQ6CXBsYXRmb3JtIHNwZWNpZmljIHByZSBwYWdpbmdfaW5pdCgpIGNhbGwKICAqIEBwYWdldGFibGVfc2V0dXBfZG9uZToJcGxhdGZvcm0gc3BlY2lmaWMgcG9zdCBwYWdpbmdfaW5pdCgpIGNhbGwKQEAgLTEyMyw2ICsxMzQsNyBAQAogCXN0cnVjdCB4ODZfaW5pdF9tcHBhcnNlCQltcHBhcnNlOwogCXN0cnVjdCB4ODZfaW5pdF9pcnFzCQlpcnFzOwogCXN0cnVjdCB4ODZfaW5pdF9vZW0JCW9lbTsKKwlzdHJ1Y3QgeDg2X2luaXRfbWFwcGluZwkJbWFwcGluZzsKIAlzdHJ1Y3QgeDg2X2luaXRfcGFnaW5nCQlwYWdpbmc7CiAJc3RydWN0IHg4Nl9pbml0X3RpbWVycwkJdGltZXJzOwogCXN0cnVjdCB4ODZfaW5pdF9pb21tdQkJaW9tbXU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaAppbmRleCBjNjE5MzRmLi42NGE2MTlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wYWdlLmgKQEAgLTQ3LDggKzQ3LDkgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNldF9waHlzX3JhbmdlX2lkZW50aXR5KHVuc2lnbmVkIGxvbmcgcGZuX3MsCiAJCQkJCSAgICAgdW5zaWduZWQgbG9uZyBwZm5fZSk7CiAKLWV4dGVybiBpbnQgbTJwX2FkZF9vdmVycmlkZSh1bnNpZ25lZCBsb25nIG1mbiwgc3RydWN0IHBhZ2UgKnBhZ2UpOwotZXh0ZXJuIGludCBtMnBfcmVtb3ZlX292ZXJyaWRlKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiBpbnQgbTJwX2FkZF9vdmVycmlkZSh1bnNpZ25lZCBsb25nIG1mbiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgYm9vbCBjbGVhcl9wdGUpOworZXh0ZXJuIGludCBtMnBfcmVtb3ZlX292ZXJyaWRlKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGNsZWFyX3B0ZSk7CiBleHRlcm4gc3RydWN0IHBhZ2UgKm0ycF9maW5kX292ZXJyaWRlKHVuc2lnbmVkIGxvbmcgbWZuKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG0ycF9maW5kX292ZXJyaWRlX3Bmbih1bnNpZ25lZCBsb25nIG1mbiwgdW5zaWduZWQgbG9uZyBwZm4pOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGNpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGNpLmgKaW5kZXggYWE4NjIwOS4uNGZiZGE5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BjaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wY2kuaApAQCAtMTUsMTAgKzE1LDI2IEBACiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19YRU5fRE9NMCkKIHZvaWQgX19pbml0IHhlbl9zZXR1cF9waXJxcyh2b2lkKTsKK2ludCB4ZW5fZmluZF9kZXZpY2VfZG9tYWluX293bmVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworaW50IHhlbl9yZWdpc3Rlcl9kZXZpY2VfZG9tYWluX293bmVyKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVpbnQxNl90IGRvbWFpbik7CitpbnQgeGVuX3VucmVnaXN0ZXJfZGV2aWNlX2RvbWFpbl9vd25lcihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IHhlbl9zZXR1cF9waXJxcyh2b2lkKQogewogfQorc3RhdGljIGlubGluZSBpbnQgeGVuX2ZpbmRfZGV2aWNlX2RvbWFpbl9vd25lcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAtMTsKK30KK3N0YXRpYyBpbmxpbmUgaW50IHhlbl9yZWdpc3Rlcl9kZXZpY2VfZG9tYWluX293bmVyKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCQkgICB1aW50MTZfdCBkb21haW4pCit7CisJcmV0dXJuIC0xOworfQorc3RhdGljIGlubGluZSBpbnQgeGVuX3VucmVnaXN0ZXJfZGV2aWNlX2RvbWFpbl9vd25lcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAtMTsKK30KICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfUENJX01TSSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCA3MzM4ZWYyLi45N2ViZjgyZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMTE3LDcgKzExNyw3IEBACiBpZmVxICgkKENPTkZJR19YODZfNjQpLHkpCiAJb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXRfNjQubwogCi0Jb2JqLSQoQ09ORklHX0dBUlRfSU9NTVUpCSs9IHBjaS1nYXJ0XzY0Lm8gYXBlcnR1cmVfNjQubworCW9iai0kKENPTkZJR19HQVJUX0lPTU1VKQkrPSBhbWRfZ2FydF82NC5vIGFwZXJ0dXJlXzY0Lm8KIAlvYmotJChDT05GSUdfQ0FMR0FSWV9JT01NVSkJKz0gcGNpLWNhbGdhcnlfNjQubyB0Y2VfNjQubwogCW9iai0kKENPTkZJR19BTURfSU9NTVUpCQkrPSBhbWRfaW9tbXVfaW5pdC5vIGFtZF9pb21tdS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9zbGVlcC5jCmluZGV4IGZmOTNiYzEuLjE4YTg1N2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL3NsZWVwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvc2xlZXAuYwpAQCAtMTEyLDExICsxMTIsNiBAQAogI2lmZGVmIENPTkZJR19ISUJFUk5BVElPTgogCQlpZiAoc3RybmNtcChzdHIsICJzNF9ub2h3c2lnIiwgMTApID09IDApCiAJCQlhY3BpX25vX3M0X2h3X3NpZ25hdHVyZSgpOwotCQlpZiAoc3RybmNtcChzdHIsICJzNF9ub252cyIsIDgpID09IDApIHsKLQkJCXByX3dhcm5pbmcoIkFDUEk6IGFjcGlfc2xlZXA9czRfbm9udnMgaXMgZGVwcmVjYXRlZCwgIgotCQkJCQkicGxlYXNlIHVzZSBhY3BpX3NsZWVwPW5vbnZzIGluc3RlYWQiKTsKLQkJCWFjcGlfbnZzX25vc2F2ZSgpOwotCQl9CiAjZW5kaWYKIAkJaWYgKHN0cm5jbXAoc3RyLCAibm9udnMiLCA1KSA9PSAwKQogCQkJYWNwaV9udnNfbm9zYXZlKCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCmluZGV4IDRhMjM0NjcuLmE4MWYyZDUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jCkBAIC02NywxNyArNjcsMzAgQEAKICNkZWZpbmUgRFBSSU5USyhmbXQsIGFyZ3MuLi4pIGlmIChkZWJ1Z19hbHRlcm5hdGl2ZSkgXAogCXByaW50ayhLRVJOX0RFQlVHIGZtdCwgYXJncykKIAorLyoKKyAqIEVhY2ggR0VORVJJQ19OT1BYIGlzIG9mIFggYnl0ZXMsIGFuZCBkZWZpbmVkIGFzIGFuIGFycmF5IG9mIGJ5dGVzCisgKiB0aGF0IGNvcnJlc3BvbmQgdG8gdGhhdCBub3AuIEdldHRpbmcgZnJvbSBvbmUgbm9wIHRvIHRoZSBuZXh0LCB3ZQorICogYWRkIHRvIHRoZSBhcnJheSB0aGUgb2Zmc2V0IHRoYXQgaXMgZXF1YWwgdG8gdGhlIHN1bSBvZiBhbGwgc2l6ZXMgb2YKKyAqIG5vcHMgcHJlY2VkaW5nIHRoZSBvbmUgd2UgYXJlIGFmdGVyLgorICoKKyAqIE5vdGU6IFRoZSBHRU5FUklDX05PUDVfQVRPTUlDIGlzIGF0IHRoZSBlbmQsIGFzIGl0IGJyZWFrcyB0aGUKKyAqIG5pY2Ugc3ltbWV0cnkgb2Ygc2l6ZXMgb2YgdGhlIHByZXZpb3VzIG5vcHMuCisgKi8KICNpZiBkZWZpbmVkKEdFTkVSSUNfTk9QMSkgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl82NCkKLS8qIFVzZSBpbmxpbmUgYXNzZW1ibHkgdG8gZGVmaW5lIHRoaXMgYmVjYXVzZSB0aGUgbm9wcyBhcmUgZGVmaW5lZAotICAgYXMgaW5saW5lIGFzc2VtYmx5IHN0cmluZ3MgaW4gdGhlIGluY2x1ZGUgZmlsZXMgYW5kIHdlIGNhbm5vdAotICAgZ2V0IHRoZW0gZWFzaWx5IGludG8gc3RyaW5ncy4gKi8KLWFzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbmludGVsbm9wczogIgotCUdFTkVSSUNfTk9QMSBHRU5FUklDX05PUDIgR0VORVJJQ19OT1AzIEdFTkVSSUNfTk9QNCBHRU5FUklDX05PUDUgR0VORVJJQ19OT1A2Ci0JR0VORVJJQ19OT1A3IEdFTkVSSUNfTk9QOAotICAgICJcdC5wcmV2aW91cyIpOwotZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW50ZWxub3BzW107Ci1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgX19pbml0Y29uc3Rfb3JfbW9kdWxlCi1pbnRlbF9ub3BzW0FTTV9OT1BfTUFYKzFdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW50ZWxub3BzW10gPQoreworCUdFTkVSSUNfTk9QMSwKKwlHRU5FUklDX05PUDIsCisJR0VORVJJQ19OT1AzLAorCUdFTkVSSUNfTk9QNCwKKwlHRU5FUklDX05PUDUsCisJR0VORVJJQ19OT1A2LAorCUdFTkVSSUNfTk9QNywKKwlHRU5FUklDX05PUDgsCisJR0VORVJJQ19OT1A1X0FUT01JQworfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICogY29uc3QgaW50ZWxfbm9wc1tBU01fTk9QX01BWCsyXSA9Cit7CiAJTlVMTCwKIAlpbnRlbG5vcHMsCiAJaW50ZWxub3BzICsgMSwKQEAgLTg3LDE3ICsxMDAsMjUgQEAKIAlpbnRlbG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSwKIAlpbnRlbG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYsCiAJaW50ZWxub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNywKKwlpbnRlbG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3ICsgOCwKIH07CiAjZW5kaWYKIAogI2lmZGVmIEs4X05PUDEKLWFzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbms4bm9wczogIgotCUs4X05PUDEgSzhfTk9QMiBLOF9OT1AzIEs4X05PUDQgSzhfTk9QNSBLOF9OT1A2Ci0JSzhfTk9QNyBLOF9OT1A4Ci0gICAgIlx0LnByZXZpb3VzIik7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBrOG5vcHNbXTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKLWs4X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrOG5vcHNbXSA9Cit7CisJSzhfTk9QMSwKKwlLOF9OT1AyLAorCUs4X05PUDMsCisJSzhfTk9QNCwKKwlLOF9OT1A1LAorCUs4X05PUDYsCisJSzhfTk9QNywKKwlLOF9OT1A4LAorCUs4X05PUDVfQVRPTUlDCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25zdCBrOF9ub3BzW0FTTV9OT1BfTUFYKzJdID0KK3sKIAlOVUxMLAogCWs4bm9wcywKIAlrOG5vcHMgKyAxLApAQCAtMTA3LDE3ICsxMjgsMjUgQEAKIAlrOG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSwKIAlrOG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYsCiAJazhub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNywKKwlrOG5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3ICsgOCwKIH07CiAjZW5kaWYKIAogI2lmIGRlZmluZWQoSzdfTk9QMSkgJiYgIWRlZmluZWQoQ09ORklHX1g4Nl82NCkKLWFzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbms3bm9wczogIgotCUs3X05PUDEgSzdfTk9QMiBLN19OT1AzIEs3X05PUDQgSzdfTk9QNSBLN19OT1A2Ci0JSzdfTk9QNyBLN19OT1A4Ci0gICAgIlx0LnByZXZpb3VzIik7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBrN25vcHNbXTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKLWs3X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBrN25vcHNbXSA9Cit7CisJSzdfTk9QMSwKKwlLN19OT1AyLAorCUs3X05PUDMsCisJSzdfTk9QNCwKKwlLN19OT1A1LAorCUs3X05PUDYsCisJSzdfTk9QNywKKwlLN19OT1A4LAorCUs3X05PUDVfQVRPTUlDCit9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25zdCBrN19ub3BzW0FTTV9OT1BfTUFYKzJdID0KK3sKIAlOVUxMLAogCWs3bm9wcywKIAlrN25vcHMgKyAxLApAQCAtMTI3LDE3ICsxNTYsMjUgQEAKIAlrN25vcHMgKyAxICsgMiArIDMgKyA0ICsgNSwKIAlrN25vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYsCiAJazdub3BzICsgMSArIDIgKyAzICsgNCArIDUgKyA2ICsgNywKKwlrN25vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3ICsgOCwKIH07CiAjZW5kaWYKIAogI2lmZGVmIFA2X05PUDEKLWFzbSgiXHQiIF9fc3RyaW5naWZ5KF9fSU5JVFJPREFUQV9PUl9NT0RVTEUpICJcbnA2bm9wczogIgotCVA2X05PUDEgUDZfTk9QMiBQNl9OT1AzIFA2X05PUDQgUDZfTk9QNSBQNl9OT1A2Ci0JUDZfTk9QNyBQNl9OT1A4Ci0gICAgIlx0LnByZXZpb3VzIik7Ci1leHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciBwNm5vcHNbXTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCBfX2luaXRjb25zdF9vcl9tb2R1bGUKLXA2X25vcHNbQVNNX05PUF9NQVgrMV0gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAgX19pbml0Y29uc3Rfb3JfbW9kdWxlIHA2bm9wc1tdID0KK3sKKwlQNl9OT1AxLAorCVA2X05PUDIsCisJUDZfTk9QMywKKwlQNl9OT1A0LAorCVA2X05PUDUsCisJUDZfTk9QNiwKKwlQNl9OT1A3LAorCVA2X05PUDgsCisJUDZfTk9QNV9BVE9NSUMKK307CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqIGNvbnN0IHA2X25vcHNbQVNNX05PUF9NQVgrMl0gPQorewogCU5VTEwsCiAJcDZub3BzLAogCXA2bm9wcyArIDEsCkBAIC0xNDcsNDcgKzE4NCw2NSBAQAogCXA2bm9wcyArIDEgKyAyICsgMyArIDQgKyA1LAogCXA2bm9wcyArIDEgKyAyICsgMyArIDQgKyA1ICsgNiwKIAlwNm5vcHMgKyAxICsgMiArIDMgKyA0ICsgNSArIDYgKyA3LAorCXA2bm9wcyArIDEgKyAyICsgMyArIDQgKyA1ICsgNiArIDcgKyA4LAogfTsKICNlbmRpZgogCisvKiBJbml0aWFsaXplIHRoZXNlIHRvIGEgc2FmZSBkZWZhdWx0ICovCiAjaWZkZWYgQ09ORklHX1g4Nl82NAorY29uc3QgdW5zaWduZWQgY2hhciAqIGNvbnN0ICppZGVhbF9ub3BzID0gcDZfbm9wczsKKyNlbHNlCitjb25zdCB1bnNpZ25lZCBjaGFyICogY29uc3QgKmlkZWFsX25vcHMgPSBpbnRlbF9ub3BzOworI2VuZGlmCiAKLWV4dGVybiBjaGFyIF9fdnN5c2NhbGxfMDsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCAqX19pbml0X29yX21vZHVsZSBmaW5kX25vcF90YWJsZSh2b2lkKQordm9pZCBfX2luaXQgYXJjaF9pbml0X2lkZWFsX25vcHModm9pZCkKIHsKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwgJiYKLQkgICAgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX05PUEwpKQotCQlyZXR1cm4gcDZfbm9wczsKLQllbHNlCi0JCXJldHVybiBrOF9ub3BzOworCXN3aXRjaCAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yKSB7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkvKgorCQkgKiBEdWUgdG8gYSBkZWNvZGVyIGltcGxlbWVudGF0aW9uIHF1aXJrLCBzb21lCisJCSAqIHNwZWNpZmljIEludGVsIENQVXMgYWN0dWFsbHkgcGVyZm9ybSBiZXR0ZXIgd2l0aAorCQkgKiB0aGUgIms4X25vcHMiIHRoYW4gd2l0aCB0aGUgU0RNLXJlY29tbWVuZGVkIE5PUHMuCisJCSAqLworCQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPj0gMHgwZiAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgIT0gMHgxYyAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgIT0gMHgyNiAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgIT0gMHgyNyAmJgorCQkgICAgYm9vdF9jcHVfZGF0YS54ODZfbW9kZWwgPCAweDMwKSB7CisJCQlpZGVhbF9ub3BzID0gazhfbm9wczsKKwkJfSBlbHNlIGlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfTk9QTCkpIHsKKwkJCSAgIGlkZWFsX25vcHMgPSBwNl9ub3BzOworCQl9IGVsc2UgeworI2lmZGVmIENPTkZJR19YODZfNjQKKwkJCWlkZWFsX25vcHMgPSBrOF9ub3BzOworI2Vsc2UKKwkJCWlkZWFsX25vcHMgPSBpbnRlbF9ub3BzOworI2VuZGlmCisJCX0KKworCWRlZmF1bHQ6CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQlpZGVhbF9ub3BzID0gazhfbm9wczsKKyNlbHNlCisJCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfSzgpKQorCQkJaWRlYWxfbm9wcyA9IGs4X25vcHM7CisJCWVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9LNykpCisJCQlpZGVhbF9ub3BzID0gazdfbm9wczsKKwkJZWxzZQorCQkJaWRlYWxfbm9wcyA9IGludGVsX25vcHM7CisjZW5kaWYKKwl9CiB9CiAKLSNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0ICpfX2luaXRfb3JfbW9kdWxlIGZpbmRfbm9wX3RhYmxlKHZvaWQpCi17Ci0JaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9LOCkpCi0JCXJldHVybiBrOF9ub3BzOwotCWVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9LNykpCi0JCXJldHVybiBrN19ub3BzOwotCWVsc2UgaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9OT1BMKSkKLQkJcmV0dXJuIHA2X25vcHM7Ci0JZWxzZQotCQlyZXR1cm4gaW50ZWxfbm9wczsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KLQogLyogVXNlIHRoaXMgdG8gYWRkIG5vcHMgdG8gYSBidWZmZXIsIHRoZW4gdGV4dF9wb2tlIHRoZSB3aG9sZSBidWZmZXIuICovCiBzdGF0aWMgdm9pZCBfX2luaXRfb3JfbW9kdWxlIGFkZF9ub3BzKHZvaWQgKmluc25zLCB1bnNpZ25lZCBpbnQgbGVuKQogewotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0ICpub3B0YWJsZSA9IGZpbmRfbm9wX3RhYmxlKCk7Ci0KIAl3aGlsZSAobGVuID4gMCkgewogCQl1bnNpZ25lZCBpbnQgbm9wbGVuID0gbGVuOwogCQlpZiAobm9wbGVuID4gQVNNX05PUF9NQVgpCiAJCQlub3BsZW4gPSBBU01fTk9QX01BWDsKLQkJbWVtY3B5KGluc25zLCBub3B0YWJsZVtub3BsZW5dLCBub3BsZW4pOworCQltZW1jcHkoaW5zbnMsIGlkZWFsX25vcHNbbm9wbGVuXSwgbm9wbGVuKTsKIAkJaW5zbnMgKz0gbm9wbGVuOwogCQlsZW4gLT0gbm9wbGVuOwogCX0KQEAgLTE5NSw2ICsyNTAsNyBAQAogCiBleHRlcm4gc3RydWN0IGFsdF9pbnN0ciBfX2FsdF9pbnN0cnVjdGlvbnNbXSwgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZFtdOwogZXh0ZXJuIHMzMiBfX3NtcF9sb2Nrc1tdLCBfX3NtcF9sb2Nrc19lbmRbXTsKK2V4dGVybiBjaGFyIF9fdnN5c2NhbGxfMDsKIHZvaWQgKnRleHRfcG9rZV9lYXJseSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOwogCiAvKiBSZXBsYWNlIGluc3RydWN0aW9ucyB3aXRoIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIHRoaXMgQ1BVIHR5cGUuCkBAIC0yMTAsNiArMjY2LDE1IEBACiAJdTggaW5zbmJ1ZltNQVhfUEFUQ0hfTEVOXTsKIAogCURQUklOVEsoIiVzOiBhbHQgdGFibGUgJXAgLT4gJXBcbiIsIF9fZnVuY19fLCBzdGFydCwgZW5kKTsKKwkvKgorCSAqIFRoZSBzY2FuIG9yZGVyIHNob3VsZCBiZSBmcm9tIHN0YXJ0IHRvIGVuZC4gQSBsYXRlciBzY2FubmVkCisJICogYWx0ZXJuYXRpdmUgY29kZSBjYW4gb3ZlcndyaXRlIGEgcHJldmlvdXMgc2Nhbm5lZCBhbHRlcm5hdGl2ZSBjb2RlLgorCSAqIFNvbWUga2VybmVsIGZ1bmN0aW9ucyAoZS5nLiBtZW1jcHksIG1lbXNldCwgZXRjKSB1c2UgdGhpcyBvcmRlciB0bworCSAqIHBhdGNoIGNvZGUuCisJICoKKwkgKiBTbyBiZSBjYXJlZnVsIGlmIHlvdSB3YW50IHRvIGNoYW5nZSB0aGUgc2NhbiBvcmRlciB0byBhbnkgb3RoZXIKKwkgKiBvcmRlci4KKwkgKi8KIAlmb3IgKGEgPSBzdGFydDsgYSA8IGVuZDsgYSsrKSB7CiAJCXU4ICppbnN0ciA9IGEtPmluc3RyOwogCQlCVUdfT04oYS0+cmVwbGFjZW1lbnRsZW4gPiBhLT5pbnN0cmxlbik7CkBAIC02NzgsMjkgKzc0MywzIEBACiAJd3JvdGVfdGV4dCA9IDA7CiAJX19zdG9wX21hY2hpbmUoc3RvcF9tYWNoaW5lX3RleHRfcG9rZSwgKHZvaWQgKikmdHBwLCBOVUxMKTsKIH0KLQotI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSB8fCBkZWZpbmVkKEhBVkVfSlVNUF9MQUJFTCkKLQotI2lmZGVmIENPTkZJR19YODZfNjQKLXVuc2lnbmVkIGNoYXIgaWRlYWxfbm9wNVs1XSA9IHsgMHg2NiwgMHg2NiwgMHg2NiwgMHg2NiwgMHg5MCB9OwotI2Vsc2UKLXVuc2lnbmVkIGNoYXIgaWRlYWxfbm9wNVs1XSA9IHsgMHgzZSwgMHg4ZCwgMHg3NCwgMHgyNiwgMHgwMCB9OwotI2VuZGlmCi0KLXZvaWQgX19pbml0IGFyY2hfaW5pdF9pZGVhbF9ub3A1KHZvaWQpCi17Ci0JLyoKLQkgKiBUaGVyZSBpcyBubyBnb29kIG5vcCBmb3IgYWxsIHg4NiBhcmNocy4gIFRoaXMgc2VsZWN0aW9uCi0JICogYWxnb3JpdGhtIHNob3VsZCBiZSB1bmlmaWVkIHdpdGggdGhlIG9uZSBpbiBmaW5kX25vcF90YWJsZSgpLAotCSAqIGJ1dCB0aGlzIHNob3VsZCBiZSBnb29kIGVub3VnaCBmb3Igbm93LgotCSAqCi0JICogRm9yIGNhc2VzIG90aGVyIHRoYW4gdGhlIG9uZXMgYmVsb3csIHVzZSB0aGUgc2FmZSAoYXMgaW4KLQkgKiBhbHdheXMgZnVuY3Rpb25hbCkgZGVmYXVsdHMgYWJvdmUuCi0JICovCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCS8qIERvbid0IHVzZSB0aGVzZSBvbiAzMiBiaXRzIGR1ZSB0byBicm9rZW4gdmlydHVhbGl6ZXJzICovCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKQotCQltZW1jcHkoaWRlYWxfbm9wNSwgcDZfbm9wc1s1XSwgNSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2dhcnRfNjQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKcmVuYW1lIHRvIGFyY2gveDg2L2tlcm5lbC9hbWRfZ2FydF82NC5jCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKaW5kZXggNTdjYTc3Ny4uODczZTdlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXRzLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KQEAgLTI1LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11LWhlbHBlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZ2FydC5oPgpAQCAtMzQsNyArMzYsNyBAQAogCiAjZGVmaW5lIENNRF9TRVRfVFlQRShjbWQsIHQpICgoY21kKS0+ZGF0YVsxXSB8PSAoKHQpIDw8IDI4KSkKIAotI2RlZmluZSBFWElUX0xPT1BfQ09VTlQgMTAwMDAwMDAKKyNkZWZpbmUgTE9PUF9USU1FT1VUCTEwMDAwMAogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhhbWRfaW9tbXVfZGV2dGFibGVfbG9jayk7CiAKQEAgLTU3LDcgKzU5LDYgQEAKIAl1MzIgZGF0YVs0XTsKIH07CiAKLXN0YXRpYyB2b2lkIHJlc2V0X2lvbW11X2NvbW1hbmRfYnVmZmVyKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9kb21haW4oc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzIyLDggKzMyMyw2IEBACiAJCWJyZWFrOwogCWNhc2UgRVZFTlRfVFlQRV9JTExfQ01EOgogCQlwcmludGsoIklMTEVHQUxfQ09NTUFORF9FUlJPUiBhZGRyZXNzPTB4JTAxNmxseF1cbiIsIGFkZHJlc3MpOwotCQlpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSB0cnVlOwotCQlyZXNldF9pb21tdV9jb21tYW5kX2J1ZmZlcihpb21tdSk7CiAJCWR1bXBfY29tbWFuZChhZGRyZXNzKTsKIAkJYnJlYWs7CiAJY2FzZSBFVkVOVF9UWVBFX0NNRF9IQVJEX0VSUjoKQEAgLTM2Nyw3ICszNjYsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CiB9CiAKLWlycXJldHVybl90IGFtZF9pb21tdV9pbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoraXJxcmV0dXJuX3QgYW1kX2lvbW11X2ludF90aHJlYWQoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKIApAQCAtMzc3LDEzMCArMzc2LDM2MCBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAoraXJxcmV0dXJuX3QgYW1kX2lvbW11X2ludF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIElSUV9XQUtFX1RIUkVBRDsKK30KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBJT01NVSBjb21tYW5kIHF1ZXVpbmcgZnVuY3Rpb25zCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qCi0gKiBXcml0ZXMgdGhlIGNvbW1hbmQgdG8gdGhlIElPTU1VcyBjb21tYW5kIGJ1ZmZlciBhbmQgaW5mb3JtcyB0aGUKLSAqIGhhcmR3YXJlIGFib3V0IHRoZSBuZXcgY29tbWFuZC4gTXVzdCBiZSBjYWxsZWQgd2l0aCBpb21tdS0+bG9jayBoZWxkLgotICovCi1zdGF0aWMgaW50IF9faW9tbXVfcXVldWVfY29tbWFuZChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgc3RydWN0IGlvbW11X2NtZCAqY21kKQorc3RhdGljIGludCB3YWl0X29uX3NlbSh2b2xhdGlsZSB1NjQgKnNlbSkKIHsKLQl1MzIgdGFpbCwgaGVhZDsKLQl1OCAqdGFyZ2V0OworCWludCBpID0gMDsKIAotCVdBUk5fT04oaW9tbXUtPmNtZF9idWZfc2l6ZSAmIENNRF9CVUZGRVJfVU5JTklUSUFMSVpFRCk7Ci0JdGFpbCA9IHJlYWRsKGlvbW11LT5tbWlvX2Jhc2UgKyBNTUlPX0NNRF9UQUlMX09GRlNFVCk7Ci0JdGFyZ2V0ID0gaW9tbXUtPmNtZF9idWYgKyB0YWlsOwotCW1lbWNweV90b2lvKHRhcmdldCwgY21kLCBzaXplb2YoKmNtZCkpOwotCXRhaWwgPSAodGFpbCArIHNpemVvZigqY21kKSkgJSBpb21tdS0+Y21kX2J1Zl9zaXplOwotCWhlYWQgPSByZWFkbChpb21tdS0+bW1pb19iYXNlICsgTU1JT19DTURfSEVBRF9PRkZTRVQpOwotCWlmICh0YWlsID09IGhlYWQpCi0JCXJldHVybiAtRU5PTUVNOwotCXdyaXRlbCh0YWlsLCBpb21tdS0+bW1pb19iYXNlICsgTU1JT19DTURfVEFJTF9PRkZTRVQpOworCXdoaWxlICgqc2VtID09IDAgJiYgaSA8IExPT1BfVElNRU9VVCkgeworCQl1ZGVsYXkoMSk7CisJCWkgKz0gMTsKKwl9CisKKwlpZiAoaSA9PSBMT09QX1RJTUVPVVQpIHsKKwkJcHJfYWxlcnQoIkFNRC1WaTogQ29tcGxldGlvbi1XYWl0IGxvb3AgdGltZWQgb3V0XG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBHZW5lcmFsIHF1ZXVpbmcgZnVuY3Rpb24gZm9yIGNvbW1hbmRzLiBUYWtlcyBpb21tdS0+bG9jayBhbmQgY2FsbHMKLSAqIF9faW9tbXVfcXVldWVfY29tbWFuZCgpLgotICovCi1zdGF0aWMgaW50IGlvbW11X3F1ZXVlX2NvbW1hbmQoc3RydWN0IGFtZF9pb21tdSAqaW9tbXUsIHN0cnVjdCBpb21tdV9jbWQgKmNtZCkKK3N0YXRpYyB2b2lkIGNvcHlfY21kX3RvX2J1ZmZlcihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwKKwkJCSAgICAgICBzdHJ1Y3QgaW9tbXVfY21kICpjbWQsCisJCQkgICAgICAgdTMyIHRhaWwpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0OworCXU4ICp0YXJnZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKLQlyZXQgPSBfX2lvbW11X3F1ZXVlX2NvbW1hbmQoaW9tbXUsIGNtZCk7Ci0JaWYgKCFyZXQpCi0JCWlvbW11LT5uZWVkX3N5bmMgPSB0cnVlOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisJdGFyZ2V0ID0gaW9tbXUtPmNtZF9idWYgKyB0YWlsOworCXRhaWwgICA9ICh0YWlsICsgc2l6ZW9mKCpjbWQpKSAlIGlvbW11LT5jbWRfYnVmX3NpemU7CiAKLQlyZXR1cm4gcmV0OworCS8qIENvcHkgY29tbWFuZCB0byBidWZmZXIgKi8KKwltZW1jcHkodGFyZ2V0LCBjbWQsIHNpemVvZigqY21kKSk7CisKKwkvKiBUZWxsIHRoZSBJT01NVSBhYm91dCBpdCAqLworCXdyaXRlbCh0YWlsLCBpb21tdS0+bW1pb19iYXNlICsgTU1JT19DTURfVEFJTF9PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9jb21wbGV0aW9uX3dhaXQoc3RydWN0IGlvbW11X2NtZCAqY21kLCB1NjQgYWRkcmVzcykKK3sKKwlXQVJOX09OKGFkZHJlc3MgJiAweDdVTEwpOworCisJbWVtc2V0KGNtZCwgMCwgc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmRhdGFbMF0gPSBsb3dlcl8zMl9iaXRzKF9fcGEoYWRkcmVzcykpIHwgQ01EX0NPTVBMX1dBSVRfU1RPUkVfTUFTSzsKKwljbWQtPmRhdGFbMV0gPSB1cHBlcl8zMl9iaXRzKF9fcGEoYWRkcmVzcykpOworCWNtZC0+ZGF0YVsyXSA9IDE7CisJQ01EX1NFVF9UWVBFKGNtZCwgQ01EX0NPTVBMX1dBSVQpOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9pbnZfZHRlKHN0cnVjdCBpb21tdV9jbWQgKmNtZCwgdTE2IGRldmlkKQoreworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisJY21kLT5kYXRhWzBdID0gZGV2aWQ7CisJQ01EX1NFVF9UWVBFKGNtZCwgQ01EX0lOVl9ERVZfRU5UUlkpOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9pbnZfaW9tbXVfcGFnZXMoc3RydWN0IGlvbW11X2NtZCAqY21kLCB1NjQgYWRkcmVzcywKKwkJCQkgIHNpemVfdCBzaXplLCB1MTYgZG9taWQsIGludCBwZGUpCit7CisJdTY0IHBhZ2VzOworCWludCBzOworCisJcGFnZXMgPSBpb21tdV9udW1fcGFnZXMoYWRkcmVzcywgc2l6ZSwgUEFHRV9TSVpFKTsKKwlzICAgICA9IDA7CisKKwlpZiAocGFnZXMgPiAxKSB7CisJCS8qCisJCSAqIElmIHdlIGhhdmUgdG8gZmx1c2ggbW9yZSB0aGFuIG9uZSBwYWdlLCBmbHVzaCBhbGwKKwkJICogVExCIGVudHJpZXMgZm9yIHRoaXMgZG9tYWluCisJCSAqLworCQlhZGRyZXNzID0gQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUzsKKwkJcyA9IDE7CisJfQorCisJYWRkcmVzcyAmPSBQQUdFX01BU0s7CisKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOworCWNtZC0+ZGF0YVsxXSB8PSBkb21pZDsKKwljbWQtPmRhdGFbMl0gID0gbG93ZXJfMzJfYml0cyhhZGRyZXNzKTsKKwljbWQtPmRhdGFbM10gID0gdXBwZXJfMzJfYml0cyhhZGRyZXNzKTsKKwlDTURfU0VUX1RZUEUoY21kLCBDTURfSU5WX0lPTU1VX1BBR0VTKTsKKwlpZiAocykgLyogc2l6ZSBiaXQgLSB3ZSBmbHVzaCBtb3JlIHRoYW4gb25lIDRrYiBwYWdlICovCisJCWNtZC0+ZGF0YVsyXSB8PSBDTURfSU5WX0lPTU1VX1BBR0VTX1NJWkVfTUFTSzsKKwlpZiAocGRlKSAvKiBQREUgYml0IC0gd2Ugd2FuJ3QgZmx1c2ggZXZlcnl0aGluZyBub3Qgb25seSB0aGUgUFRFcyAqLworCQljbWQtPmRhdGFbMl0gfD0gQ01EX0lOVl9JT01NVV9QQUdFU19QREVfTUFTSzsKK30KKworc3RhdGljIHZvaWQgYnVpbGRfaW52X2lvdGxiX3BhZ2VzKHN0cnVjdCBpb21tdV9jbWQgKmNtZCwgdTE2IGRldmlkLCBpbnQgcWRlcCwKKwkJCQkgIHU2NCBhZGRyZXNzLCBzaXplX3Qgc2l6ZSkKK3sKKwl1NjQgcGFnZXM7CisJaW50IHM7CisKKwlwYWdlcyA9IGlvbW11X251bV9wYWdlcyhhZGRyZXNzLCBzaXplLCBQQUdFX1NJWkUpOworCXMgICAgID0gMDsKKworCWlmIChwYWdlcyA+IDEpIHsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSB0byBmbHVzaCBtb3JlIHRoYW4gb25lIHBhZ2UsIGZsdXNoIGFsbAorCQkgKiBUTEIgZW50cmllcyBmb3IgdGhpcyBkb21haW4KKwkJICovCisJCWFkZHJlc3MgPSBDTURfSU5WX0lPTU1VX0FMTF9QQUdFU19BRERSRVNTOworCQlzID0gMTsKKwl9CisKKwlhZGRyZXNzICY9IFBBR0VfTUFTSzsKKworCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7CisJY21kLT5kYXRhWzBdICA9IGRldmlkOworCWNtZC0+ZGF0YVswXSB8PSAocWRlcCAmIDB4ZmYpIDw8IDI0OworCWNtZC0+ZGF0YVsxXSAgPSBkZXZpZDsKKwljbWQtPmRhdGFbMl0gID0gbG93ZXJfMzJfYml0cyhhZGRyZXNzKTsKKwljbWQtPmRhdGFbM10gID0gdXBwZXJfMzJfYml0cyhhZGRyZXNzKTsKKwlDTURfU0VUX1RZUEUoY21kLCBDTURfSU5WX0lPVExCX1BBR0VTKTsKKwlpZiAocykKKwkJY21kLT5kYXRhWzJdIHw9IENNRF9JTlZfSU9NTVVfUEFHRVNfU0laRV9NQVNLOworfQorCitzdGF0aWMgdm9pZCBidWlsZF9pbnZfYWxsKHN0cnVjdCBpb21tdV9jbWQgKmNtZCkKK3sKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOworCUNNRF9TRVRfVFlQRShjbWQsIENNRF9JTlZfQUxMKTsKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgdW50aWwgYW4gSU9NTVUgaGFzIGNvbXBsZXRlZCBhIGNvbXBsZXRpb24KLSAqIHdhaXQgY29tbWFuZAorICogV3JpdGVzIHRoZSBjb21tYW5kIHRvIHRoZSBJT01NVXMgY29tbWFuZCBidWZmZXIgYW5kIGluZm9ybXMgdGhlCisgKiBoYXJkd2FyZSBhYm91dCB0aGUgbmV3IGNvbW1hbmQuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW9tbXVfd2FpdF9mb3JfY29tcGxldGlvbihzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKK3N0YXRpYyBpbnQgaW9tbXVfcXVldWVfY29tbWFuZChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgc3RydWN0IGlvbW11X2NtZCAqY21kKQogewotCWludCByZWFkeSA9IDA7Ci0JdW5zaWduZWQgc3RhdHVzID0gMDsKLQl1bnNpZ25lZCBsb25nIGkgPSAwOworCXUzMiBsZWZ0LCB0YWlsLCBoZWFkLCBuZXh0X3RhaWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCUlOQ19TVEFUU19DT1VOVEVSKGNvbXBsX3dhaXQpOworCVdBUk5fT04oaW9tbXUtPmNtZF9idWZfc2l6ZSAmIENNRF9CVUZGRVJfVU5JTklUSUFMSVpFRCk7CiAKLQl3aGlsZSAoIXJlYWR5ICYmIChpIDwgRVhJVF9MT09QX0NPVU5UKSkgewotCQkrK2k7Ci0JCS8qIHdhaXQgZm9yIHRoZSBiaXQgdG8gYmVjb21lIG9uZSAqLwotCQlzdGF0dXMgPSByZWFkbChpb21tdS0+bW1pb19iYXNlICsgTU1JT19TVEFUVVNfT0ZGU0VUKTsKLQkJcmVhZHkgPSBzdGF0dXMgJiBNTUlPX1NUQVRVU19DT01fV0FJVF9JTlRfTUFTSzsKK2FnYWluOgorCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+bG9jaywgZmxhZ3MpOworCisJaGVhZCAgICAgID0gcmVhZGwoaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fQ01EX0hFQURfT0ZGU0VUKTsKKwl0YWlsICAgICAgPSByZWFkbChpb21tdS0+bW1pb19iYXNlICsgTU1JT19DTURfVEFJTF9PRkZTRVQpOworCW5leHRfdGFpbCA9ICh0YWlsICsgc2l6ZW9mKCpjbWQpKSAlIGlvbW11LT5jbWRfYnVmX3NpemU7CisJbGVmdCAgICAgID0gKGhlYWQgLSBuZXh0X3RhaWwpICUgaW9tbXUtPmNtZF9idWZfc2l6ZTsKKworCWlmIChsZWZ0IDw9IDIpIHsKKwkJc3RydWN0IGlvbW11X2NtZCBzeW5jX2NtZDsKKwkJdm9sYXRpbGUgdTY0IHNlbSA9IDA7CisJCWludCByZXQ7CisKKwkJYnVpbGRfY29tcGxldGlvbl93YWl0KCZzeW5jX2NtZCwgKHU2NCkmc2VtKTsKKwkJY29weV9jbWRfdG9fYnVmZmVyKGlvbW11LCAmc3luY19jbWQsIHRhaWwpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCBmbGFncyk7CisKKwkJaWYgKChyZXQgPSB3YWl0X29uX3NlbSgmc2VtKSkgIT0gMCkKKwkJCXJldHVybiByZXQ7CisKKwkJZ290byBhZ2FpbjsKIAl9CiAKLQkvKiBzZXQgYml0IGJhY2sgdG8gemVybyAqLwotCXN0YXR1cyAmPSB+TU1JT19TVEFUVVNfQ09NX1dBSVRfSU5UX01BU0s7Ci0Jd3JpdGVsKHN0YXR1cywgaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fU1RBVFVTX09GRlNFVCk7CisJY29weV9jbWRfdG9fYnVmZmVyKGlvbW11LCBjbWQsIHRhaWwpOwogCi0JaWYgKHVubGlrZWx5KGkgPT0gRVhJVF9MT09QX0NPVU5UKSkKLQkJaW9tbXUtPnJlc2V0X2luX3Byb2dyZXNzID0gdHJ1ZTsKKwkvKiBXZSBuZWVkIHRvIHN5bmMgbm93IHRvIG1ha2Ugc3VyZSBhbGwgY29tbWFuZHMgYXJlIHByb2Nlc3NlZCAqLworCWlvbW11LT5uZWVkX3N5bmMgPSB0cnVlOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOwogfQogCiAvKgogICogVGhpcyBmdW5jdGlvbiBxdWV1ZXMgYSBjb21wbGV0aW9uIHdhaXQgY29tbWFuZCBpbnRvIHRoZSBjb21tYW5kCiAgKiBidWZmZXIgb2YgYW4gSU9NTVUKICAqLwotc3RhdGljIGludCBfX2lvbW11X2NvbXBsZXRpb25fd2FpdChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKK3N0YXRpYyBpbnQgaW9tbXVfY29tcGxldGlvbl93YWl0KHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCXN0cnVjdCBpb21tdV9jbWQgY21kOworCXZvbGF0aWxlIHU2NCBzZW0gPSAwOworCWludCByZXQ7CisKKwlpZiAoIWlvbW11LT5uZWVkX3N5bmMpCisJCXJldHVybiAwOworCisJYnVpbGRfY29tcGxldGlvbl93YWl0KCZjbWQsICh1NjQpJnNlbSk7CisKKwlyZXQgPSBpb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHdhaXRfb25fc2VtKCZzZW0pOworfQorCitzdGF0aWMgaW50IGlvbW11X2ZsdXNoX2R0ZShzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwgdTE2IGRldmlkKQogewogCXN0cnVjdCBpb21tdV9jbWQgY21kOwogCi0JIG1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7Ci0JIGNtZC5kYXRhWzBdID0gQ01EX0NPTVBMX1dBSVRfSU5UX01BU0s7Ci0JIENNRF9TRVRfVFlQRSgmY21kLCBDTURfQ09NUExfV0FJVCk7CisJYnVpbGRfaW52X2R0ZSgmY21kLCBkZXZpZCk7CiAKLQkgcmV0dXJuIF9faW9tbXVfcXVldWVfY29tbWFuZChpb21tdSwgJmNtZCk7CisJcmV0dXJuIGlvbW11X3F1ZXVlX2NvbW1hbmQoaW9tbXUsICZjbWQpOworfQorCitzdGF0aWMgdm9pZCBpb21tdV9mbHVzaF9kdGVfYWxsKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCXUzMiBkZXZpZDsKKworCWZvciAoZGV2aWQgPSAwOyBkZXZpZCA8PSAweGZmZmY7ICsrZGV2aWQpCisJCWlvbW11X2ZsdXNoX2R0ZShpb21tdSwgZGV2aWQpOworCisJaW9tbXVfY29tcGxldGlvbl93YWl0KGlvbW11KTsKIH0KIAogLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIElPTU1VIGhhcwotICogY29tcGxldGVkIGV4ZWN1dGlvbiBvZiBhbGwgY29tbWFuZHMgd2Ugc2VudC4gSXQgc2VuZHMgYQotICogQ09NUExFVElPTl9XQUlUIGNvbW1hbmQgYW5kIHdhaXRzIGZvciBpdCB0byBmaW5pc2guIFRoZSBJT01NVSBpbmZvcm1zCi0gKiB1cyBhYm91dCB0aGF0IGJ5IHdyaXRpbmcgYSB2YWx1ZSB0byBhIHBoeXNpY2FsIGFkZHJlc3Mgd2UgcGFzcyB3aXRoCi0gKiB0aGUgY29tbWFuZC4KKyAqIFRoaXMgZnVuY3Rpb24gdXNlcyBoZWF2eSBsb2NraW5nIGFuZCBtYXkgZGlzYWJsZSBpcnFzIGZvciBzb21lIHRpbWUuIEJ1dAorICogdGhpcyBpcyBubyBpc3N1ZSBiZWNhdXNlIGl0IGlzIG9ubHkgY2FsbGVkIGR1cmluZyByZXN1bWUuCiAgKi8KLXN0YXRpYyBpbnQgaW9tbXVfY29tcGxldGlvbl93YWl0KHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQorc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfdGxiX2FsbChzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKIHsKLQlpbnQgcmV0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBkb21faWQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKKwlmb3IgKGRvbV9pZCA9IDA7IGRvbV9pZCA8PSAweGZmZmY7ICsrZG9tX2lkKSB7CisJCXN0cnVjdCBpb21tdV9jbWQgY21kOworCQlidWlsZF9pbnZfaW9tbXVfcGFnZXMoJmNtZCwgMCwgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUywKKwkJCQkgICAgICBkb21faWQsIDEpOworCQlpb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKKwl9CiAKLQlpZiAoIWlvbW11LT5uZWVkX3N5bmMpCi0JCWdvdG8gb3V0OwotCi0JcmV0ID0gX19pb21tdV9jb21wbGV0aW9uX3dhaXQoaW9tbXUpOwotCi0JaW9tbXUtPm5lZWRfc3luYyA9IGZhbHNlOwotCi0JaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0KLQlfX2lvbW11X3dhaXRfZm9yX2NvbXBsZXRpb24oaW9tbXUpOwotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPmxvY2ssIGZsYWdzKTsKLQotCWlmIChpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MpCi0JCXJlc2V0X2lvbW11X2NvbW1hbmRfYnVmZmVyKGlvbW11KTsKLQotCXJldHVybiAwOworCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvbW11X2ZsdXNoX2NvbXBsZXRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQorc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfYWxsKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQoreworCXN0cnVjdCBpb21tdV9jbWQgY21kOworCisJYnVpbGRfaW52X2FsbCgmY21kKTsKKworCWlvbW11X3F1ZXVlX2NvbW1hbmQoaW9tbXUsICZjbWQpOworCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7Cit9CisKK3ZvaWQgaW9tbXVfZmx1c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSkKK3sKKwlpZiAoaW9tbXVfZmVhdHVyZShpb21tdSwgRkVBVFVSRV9JQSkpIHsKKwkJaW9tbXVfZmx1c2hfYWxsKGlvbW11KTsKKwl9IGVsc2UgeworCQlpb21tdV9mbHVzaF9kdGVfYWxsKGlvbW11KTsKKwkJaW9tbXVfZmx1c2hfdGxiX2FsbChpb21tdSk7CisJfQorfQorCisvKgorICogQ29tbWFuZCBzZW5kIGZ1bmN0aW9uIGZvciBmbHVzaGluZyBvbi1kZXZpY2UgVExCCisgKi8KK3N0YXRpYyBpbnQgZGV2aWNlX2ZsdXNoX2lvdGxiKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGFkZHJlc3MsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OworCXN0cnVjdCBpb21tdV9jbWQgY21kOworCXUxNiBkZXZpZDsKKwlpbnQgcWRlcDsKKworCXFkZXAgID0gcGNpX2F0c19xdWV1ZV9kZXB0aChwZGV2KTsKKwlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKKwlpb21tdSA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKKworCWJ1aWxkX2ludl9pb3RsYl9wYWdlcygmY21kLCBkZXZpZCwgcWRlcCwgYWRkcmVzcywgc2l6ZSk7CisKKwlyZXR1cm4gaW9tbXVfcXVldWVfY29tbWFuZChpb21tdSwgJmNtZCk7Cit9CisKKy8qCisgKiBDb21tYW5kIHNlbmQgZnVuY3Rpb24gZm9yIGludmFsaWRhdGluZyBhIGRldmljZSB0YWJsZSBlbnRyeQorICovCitzdGF0aWMgaW50IGRldmljZV9mbHVzaF9kdGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhbWRfaW9tbXUgKmlvbW11OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXUxNiBkZXZpZDsKKwlpbnQgcmV0OworCisJcGRldiAgPSB0b19wY2lfZGV2KGRldik7CisJZGV2aWQgPSBnZXRfZGV2aWNlX2lkKGRldik7CisJaW9tbXUgPSBhbWRfaW9tbXVfcmxvb2t1cF90YWJsZVtkZXZpZF07CisKKwlyZXQgPSBpb21tdV9mbHVzaF9kdGUoaW9tbXUsIGRldmlkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKHBjaV9hdHNfZW5hYmxlZChwZGV2KSkKKwkJcmV0ID0gZGV2aWNlX2ZsdXNoX2lvdGxiKGRldiwgMCwgfjBVTCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVExCIGludmFsaWRhdGlvbiBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZnJvbSB0aGUgbWFwcGluZyBmdW5jdGlvbnMuCisgKiBJdCBpbnZhbGlkYXRlcyBhIHNpbmdsZSBQVEUgaWYgdGhlIHJhbmdlIHRvIGZsdXNoIGlzIHdpdGhpbiBhIHNpbmdsZQorICogcGFnZS4gT3RoZXJ3aXNlIGl0IGZsdXNoZXMgdGhlIHdob2xlIFRMQiBvZiB0aGUgSU9NTVUuCisgKi8KK3N0YXRpYyB2b2lkIF9fZG9tYWluX2ZsdXNoX3BhZ2VzKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAorCQkJCSB1NjQgYWRkcmVzcywgc2l6ZV90IHNpemUsIGludCBwZGUpCit7CisJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKKwlzdHJ1Y3QgaW9tbXVfY21kIGNtZDsKKwlpbnQgcmV0ID0gMCwgaTsKKworCWJ1aWxkX2ludl9pb21tdV9wYWdlcygmY21kLCBhZGRyZXNzLCBzaXplLCBkb21haW4tPmlkLCBwZGUpOworCisJZm9yIChpID0gMDsgaSA8IGFtZF9pb21tdXNfcHJlc2VudDsgKytpKSB7CisJCWlmICghZG9tYWluLT5kZXZfaW9tbXVbaV0pCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBEZXZpY2VzIG9mIHRoaXMgZG9tYWluIGFyZSBiZWhpbmQgdGhpcyBJT01NVQorCQkgKiBXZSBuZWVkIGEgVExCIGZsdXNoCisJCSAqLworCQlyZXQgfD0gaW9tbXVfcXVldWVfY29tbWFuZChhbWRfaW9tbXVzW2ldLCAmY21kKTsKKwl9CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldl9kYXRhLCAmZG9tYWluLT5kZXZfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2X2RhdGEtPmRldik7CisKKwkJaWYgKCFwY2lfYXRzX2VuYWJsZWQocGRldikpCisJCQljb250aW51ZTsKKworCQlyZXQgfD0gZGV2aWNlX2ZsdXNoX2lvdGxiKGRldl9kYXRhLT5kZXYsIGFkZHJlc3MsIHNpemUpOworCX0KKworCVdBUk5fT04ocmV0KTsKK30KKworc3RhdGljIHZvaWQgZG9tYWluX2ZsdXNoX3BhZ2VzKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluLAorCQkJICAgICAgIHU2NCBhZGRyZXNzLCBzaXplX3Qgc2l6ZSkKK3sKKwlfX2RvbWFpbl9mbHVzaF9wYWdlcyhkb21haW4sIGFkZHJlc3MsIHNpemUsIDApOworfQorCisvKiBGbHVzaCB0aGUgd2hvbGUgSU8vVExCIGZvciBhIGdpdmVuIHByb3RlY3Rpb24gZG9tYWluICovCitzdGF0aWMgdm9pZCBkb21haW5fZmx1c2hfdGxiKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQoreworCV9fZG9tYWluX2ZsdXNoX3BhZ2VzKGRvbWFpbiwgMCwgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUywgMCk7Cit9CisKKy8qIEZsdXNoIHRoZSB3aG9sZSBJTy9UTEIgZm9yIGEgZ2l2ZW4gcHJvdGVjdGlvbiBkb21haW4gLSBpbmNsdWRpbmcgUERFICovCitzdGF0aWMgdm9pZCBkb21haW5fZmx1c2hfdGxiX3BkZShzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKK3sKKwlfX2RvbWFpbl9mbHVzaF9wYWdlcyhkb21haW4sIDAsIENNRF9JTlZfSU9NTVVfQUxMX1BBR0VTX0FERFJFU1MsIDEpOworfQorCitzdGF0aWMgdm9pZCBkb21haW5fZmx1c2hfY29tcGxldGUoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCiB7CiAJaW50IGk7CiAKQEAgLTUxNiwxMTggKzc0NSwxMSBAQAogCX0KIH0KIAotLyoKLSAqIENvbW1hbmQgc2VuZCBmdW5jdGlvbiBmb3IgaW52YWxpZGF0aW5nIGEgZGV2aWNlIHRhYmxlIGVudHJ5Ci0gKi8KLXN0YXRpYyBpbnQgaW9tbXVfZmx1c2hfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKLQlzdHJ1Y3QgaW9tbXVfY21kIGNtZDsKLQl1MTYgZGV2aWQ7Ci0KLQlkZXZpZCA9IGdldF9kZXZpY2VfaWQoZGV2KTsKLQlpb21tdSA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKLQotCS8qIEJ1aWxkIGNvbW1hbmQgKi8KLQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwotCUNNRF9TRVRfVFlQRSgmY21kLCBDTURfSU5WX0RFVl9FTlRSWSk7Ci0JY21kLmRhdGFbMF0gPSBkZXZpZDsKLQotCXJldHVybiBpb21tdV9xdWV1ZV9jb21tYW5kKGlvbW11LCAmY21kKTsKLX0KLQotc3RhdGljIHZvaWQgX19pb21tdV9idWlsZF9pbnZfaW9tbXVfcGFnZXMoc3RydWN0IGlvbW11X2NtZCAqY21kLCB1NjQgYWRkcmVzcywKLQkJCQkJICB1MTYgZG9taWQsIGludCBwZGUsIGludCBzKQotewotCW1lbXNldChjbWQsIDAsIHNpemVvZigqY21kKSk7Ci0JYWRkcmVzcyAmPSBQQUdFX01BU0s7Ci0JQ01EX1NFVF9UWVBFKGNtZCwgQ01EX0lOVl9JT01NVV9QQUdFUyk7Ci0JY21kLT5kYXRhWzFdIHw9IGRvbWlkOwotCWNtZC0+ZGF0YVsyXSA9IGxvd2VyXzMyX2JpdHMoYWRkcmVzcyk7Ci0JY21kLT5kYXRhWzNdID0gdXBwZXJfMzJfYml0cyhhZGRyZXNzKTsKLQlpZiAocykgLyogc2l6ZSBiaXQgLSB3ZSBmbHVzaCBtb3JlIHRoYW4gb25lIDRrYiBwYWdlICovCi0JCWNtZC0+ZGF0YVsyXSB8PSBDTURfSU5WX0lPTU1VX1BBR0VTX1NJWkVfTUFTSzsKLQlpZiAocGRlKSAvKiBQREUgYml0IC0gd2Ugd2FuJ3QgZmx1c2ggZXZlcnl0aGluZyBub3Qgb25seSB0aGUgUFRFcyAqLwotCQljbWQtPmRhdGFbMl0gfD0gQ01EX0lOVl9JT01NVV9QQUdFU19QREVfTUFTSzsKLX0KLQotLyoKLSAqIEdlbmVyaWMgY29tbWFuZCBzZW5kIGZ1bmN0aW9uIGZvciBpbnZhbGlkYWluZyBUTEIgZW50cmllcwotICovCi1zdGF0aWMgaW50IGlvbW11X3F1ZXVlX2ludl9pb21tdV9wYWdlcyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSwKLQkJdTY0IGFkZHJlc3MsIHUxNiBkb21pZCwgaW50IHBkZSwgaW50IHMpCi17Ci0Jc3RydWN0IGlvbW11X2NtZCBjbWQ7Ci0JaW50IHJldDsKLQotCV9faW9tbXVfYnVpbGRfaW52X2lvbW11X3BhZ2VzKCZjbWQsIGFkZHJlc3MsIGRvbWlkLCBwZGUsIHMpOwotCi0JcmV0ID0gaW9tbXVfcXVldWVfY29tbWFuZChpb21tdSwgJmNtZCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogVExCIGludmFsaWRhdGlvbiBmdW5jdGlvbiB3aGljaCBpcyBjYWxsZWQgZnJvbSB0aGUgbWFwcGluZyBmdW5jdGlvbnMuCi0gKiBJdCBpbnZhbGlkYXRlcyBhIHNpbmdsZSBQVEUgaWYgdGhlIHJhbmdlIHRvIGZsdXNoIGlzIHdpdGhpbiBhIHNpbmdsZQotICogcGFnZS4gT3RoZXJ3aXNlIGl0IGZsdXNoZXMgdGhlIHdob2xlIFRMQiBvZiB0aGUgSU9NTVUuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW9tbXVfZmx1c2hfcGFnZXMoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCi0JCQkJdTY0IGFkZHJlc3MsIHNpemVfdCBzaXplLCBpbnQgcGRlKQotewotCWludCBzID0gMCwgaTsKLQl1bnNpZ25lZCBsb25nIHBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKGFkZHJlc3MsIHNpemUsIFBBR0VfU0laRSk7Ci0KLQlhZGRyZXNzICY9IFBBR0VfTUFTSzsKLQotCWlmIChwYWdlcyA+IDEpIHsKLQkJLyoKLQkJICogSWYgd2UgaGF2ZSB0byBmbHVzaCBtb3JlIHRoYW4gb25lIHBhZ2UsIGZsdXNoIGFsbAotCQkgKiBUTEIgZW50cmllcyBmb3IgdGhpcyBkb21haW4KLQkJICovCi0JCWFkZHJlc3MgPSBDTURfSU5WX0lPTU1VX0FMTF9QQUdFU19BRERSRVNTOwotCQlzID0gMTsKLQl9Ci0KLQotCWZvciAoaSA9IDA7IGkgPCBhbWRfaW9tbXVzX3ByZXNlbnQ7ICsraSkgewotCQlpZiAoIWRvbWFpbi0+ZGV2X2lvbW11W2ldKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogRGV2aWNlcyBvZiB0aGlzIGRvbWFpbiBhcmUgYmVoaW5kIHRoaXMgSU9NTVUKLQkJICogV2UgbmVlZCBhIFRMQiBmbHVzaAotCQkgKi8KLQkJaW9tbXVfcXVldWVfaW52X2lvbW11X3BhZ2VzKGFtZF9pb21tdXNbaV0sIGFkZHJlc3MsCi0JCQkJCSAgICBkb21haW4tPmlkLCBwZGUsIHMpOwotCX0KLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfcGFnZXMoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4sCi0JCQkgICAgIHU2NCBhZGRyZXNzLCBzaXplX3Qgc2l6ZSkKLXsKLQlfX2lvbW11X2ZsdXNoX3BhZ2VzKGRvbWFpbiwgYWRkcmVzcywgc2l6ZSwgMCk7Ci19Ci0KLS8qIEZsdXNoIHRoZSB3aG9sZSBJTy9UTEIgZm9yIGEgZ2l2ZW4gcHJvdGVjdGlvbiBkb21haW4gKi8KLXN0YXRpYyB2b2lkIGlvbW11X2ZsdXNoX3RsYihzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKLXsKLQlfX2lvbW11X2ZsdXNoX3BhZ2VzKGRvbWFpbiwgMCwgQ01EX0lOVl9JT01NVV9BTExfUEFHRVNfQUREUkVTUywgMCk7Ci19Ci0KLS8qIEZsdXNoIHRoZSB3aG9sZSBJTy9UTEIgZm9yIGEgZ2l2ZW4gcHJvdGVjdGlvbiBkb21haW4gLSBpbmNsdWRpbmcgUERFICovCi1zdGF0aWMgdm9pZCBpb21tdV9mbHVzaF90bGJfcGRlKHN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluKQotewotCV9faW9tbXVfZmx1c2hfcGFnZXMoZG9tYWluLCAwLCBDTURfSU5WX0lPTU1VX0FMTF9QQUdFU19BRERSRVNTLCAxKTsKLX0KLQogCiAvKgogICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIHRoZSBEVEVzIGZvciBhbGwgZGV2aWNlcyBpbiBkb21haW4KICAqLwotc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfZG9tYWluX2RldmljZXMoc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCitzdGF0aWMgdm9pZCBkb21haW5fZmx1c2hfZGV2aWNlcyhzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKIHsKIAlzdHJ1Y3QgaW9tbXVfZGV2X2RhdGEgKmRldl9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02MzUsNjYgKzc1NywxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2X2RhdGEsICZkb21haW4tPmRldl9saXN0LCBsaXN0KQotCQlpb21tdV9mbHVzaF9kZXZpY2UoZGV2X2RhdGEtPmRldik7CisJCWRldmljZV9mbHVzaF9kdGUoZGV2X2RhdGEtPmRldik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgaW9tbXVfZmx1c2hfYWxsX2RvbWFpbl9kZXZpY2VzKHZvaWQpCi17Ci0Jc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZhbWRfaW9tbXVfcGRfbG9jaywgZmxhZ3MpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZhbWRfaW9tbXVfcGRfbGlzdCwgbGlzdCkgewotCQlpb21tdV9mbHVzaF9kb21haW5fZGV2aWNlcyhkb21haW4pOwotCQlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9pb21tdV9wZF9sb2NrLCBmbGFncyk7Ci19Ci0KLXZvaWQgYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKHZvaWQpCi17Ci0JaW9tbXVfZmx1c2hfYWxsX2RvbWFpbl9kZXZpY2VzKCk7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHVzZXMgaGVhdnkgbG9ja2luZyBhbmQgbWF5IGRpc2FibGUgaXJxcyBmb3Igc29tZSB0aW1lLiBCdXQKLSAqIHRoaXMgaXMgbm8gaXNzdWUgYmVjYXVzZSBpdCBpcyBvbmx5IGNhbGxlZCBkdXJpbmcgcmVzdW1lLgotICovCi12b2lkIGFtZF9pb21tdV9mbHVzaF9hbGxfZG9tYWlucyh2b2lkKQotewotCXN0cnVjdCBwcm90ZWN0aW9uX2RvbWFpbiAqZG9tYWluOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1kX2lvbW11X3BkX2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmYW1kX2lvbW11X3BkX2xpc3QsIGxpc3QpIHsKLQkJc3Bpbl9sb2NrKCZkb21haW4tPmxvY2spOwotCQlpb21tdV9mbHVzaF90bGJfcGRlKGRvbWFpbik7Ci0JCWlvbW11X2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7Ci0JCXNwaW5fdW5sb2NrKCZkb21haW4tPmxvY2spOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9pb21tdV9wZF9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJlc2V0X2lvbW11X2NvbW1hbmRfYnVmZmVyKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQotewotCXByX2VycigiQU1ELVZpOiBSZXNldHRpbmcgSU9NTVUgY29tbWFuZCBidWZmZXJcbiIpOwotCi0JaWYgKGlvbW11LT5yZXNldF9pbl9wcm9ncmVzcykKLQkJcGFuaWMoIkFNRC1WaTogSUxMRUdBTF9DT01NQU5EX0VSUk9SIHdoaWxlIHJlc2V0dGluZyBjb21tYW5kIGJ1ZmZlclxuIik7Ci0KLQlhbWRfaW9tbXVfcmVzZXRfY21kX2J1ZmZlcihpb21tdSk7Ci0JYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKCk7Ci0JYW1kX2lvbW11X2ZsdXNoX2FsbF9kb21haW5zKCk7Ci0KLQlpb21tdS0+cmVzZXRfaW5fcHJvZ3Jlc3MgPSBmYWxzZTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBUaGUgZnVuY3Rpb25zIGJlbG93IGFyZSB1c2VkIHRoZSBjcmVhdGUgdGhlIHBhZ2UgdGFibGUgbWFwcGluZ3MgZm9yCkBAIC0xNDEwLDE3ICsxNDc3LDIyIEBACiAJcmV0dXJuIGRvbWFpbi0+ZmxhZ3MgJiBQRF9ETUFfT1BTX01BU0s7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kdGVfZW50cnkodTE2IGRldmlkLCBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbikKK3N0YXRpYyB2b2lkIHNldF9kdGVfZW50cnkodTE2IGRldmlkLCBzdHJ1Y3QgcHJvdGVjdGlvbl9kb21haW4gKmRvbWFpbiwgYm9vbCBhdHMpCiB7CiAJdTY0IHB0ZV9yb290ID0gdmlydF90b19waHlzKGRvbWFpbi0+cHRfcm9vdCk7CisJdTMyIGZsYWdzID0gMDsKIAogCXB0ZV9yb290IHw9IChkb21haW4tPm1vZGUgJiBERVZfRU5UUllfTU9ERV9NQVNLKQogCQkgICAgPDwgREVWX0VOVFJZX01PREVfU0hJRlQ7CiAJcHRlX3Jvb3QgfD0gSU9NTVVfUFRFX0lSIHwgSU9NTVVfUFRFX0lXIHwgSU9NTVVfUFRFX1AgfCBJT01NVV9QVEVfVFY7CiAKLQlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzJdID0gZG9tYWluLT5pZDsKLQlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzFdID0gdXBwZXJfMzJfYml0cyhwdGVfcm9vdCk7Ci0JYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVswXSA9IGxvd2VyXzMyX2JpdHMocHRlX3Jvb3QpOworCWlmIChhdHMpCisJCWZsYWdzIHw9IERURV9GTEFHX0lPVExCOworCisJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVszXSB8PSBmbGFnczsKKwlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzJdICA9IGRvbWFpbi0+aWQ7CisJYW1kX2lvbW11X2Rldl90YWJsZVtkZXZpZF0uZGF0YVsxXSAgPSB1cHBlcl8zMl9iaXRzKHB0ZV9yb290KTsKKwlhbWRfaW9tbXVfZGV2X3RhYmxlW2RldmlkXS5kYXRhWzBdICA9IGxvd2VyXzMyX2JpdHMocHRlX3Jvb3QpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhcl9kdGVfZW50cnkodTE2IGRldmlkKQpAQCAtMTQzNywzNCArMTUwOSw0MiBAQAogewogCXN0cnVjdCBpb21tdV9kZXZfZGF0YSAqZGV2X2RhdGE7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJYm9vbCBhdHMgPSBmYWxzZTsKIAl1MTYgZGV2aWQ7CiAKIAlkZXZpZCAgICA9IGdldF9kZXZpY2VfaWQoZGV2KTsKIAlpb21tdSAgICA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKIAlkZXZfZGF0YSA9IGdldF9kZXZfZGF0YShkZXYpOworCXBkZXYgICAgID0gdG9fcGNpX2RldihkZXYpOworCisJaWYgKGFtZF9pb21tdV9pb3RsYl9zdXApCisJCWF0cyA9IHBjaV9hdHNfZW5hYmxlZChwZGV2KTsKIAogCS8qIFVwZGF0ZSBkYXRhIHN0cnVjdHVyZXMgKi8KIAlkZXZfZGF0YS0+ZG9tYWluID0gZG9tYWluOwogCWxpc3RfYWRkKCZkZXZfZGF0YS0+bGlzdCwgJmRvbWFpbi0+ZGV2X2xpc3QpOwotCXNldF9kdGVfZW50cnkoZGV2aWQsIGRvbWFpbik7CisJc2V0X2R0ZV9lbnRyeShkZXZpZCwgZG9tYWluLCBhdHMpOwogCiAJLyogRG8gcmVmZXJlbmNlIGNvdW50aW5nICovCiAJZG9tYWluLT5kZXZfaW9tbXVbaW9tbXUtPmluZGV4XSArPSAxOwogCWRvbWFpbi0+ZGV2X2NudCAgICAgICAgICAgICAgICAgKz0gMTsKIAogCS8qIEZsdXNoIHRoZSBEVEUgZW50cnkgKi8KLQlpb21tdV9mbHVzaF9kZXZpY2UoZGV2KTsKKwlkZXZpY2VfZmx1c2hfZHRlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX2RldGFjaChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKIAlzdHJ1Y3QgYW1kX2lvbW11ICppb21tdTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl1MTYgZGV2aWQ7CiAKIAlkZXZpZCAgICA9IGdldF9kZXZpY2VfaWQoZGV2KTsKIAlpb21tdSAgICA9IGFtZF9pb21tdV9ybG9va3VwX3RhYmxlW2RldmlkXTsKIAlkZXZfZGF0YSA9IGdldF9kZXZfZGF0YShkZXYpOworCXBkZXYgICAgID0gdG9fcGNpX2RldihkZXYpOwogCiAJLyogZGVjcmVhc2UgcmVmZXJlbmNlIGNvdW50ZXJzICovCiAJZGV2X2RhdGEtPmRvbWFpbi0+ZGV2X2lvbW11W2lvbW11LT5pbmRleF0gLT0gMTsKQEAgLTE0NzYsNyArMTU1Niw3IEBACiAJY2xlYXJfZHRlX2VudHJ5KGRldmlkKTsKIAogCS8qIEZsdXNoIHRoZSBEVEUgZW50cnkgKi8KLQlpb21tdV9mbHVzaF9kZXZpY2UoZGV2KTsKKwlkZXZpY2VfZmx1c2hfZHRlKGRldik7CiB9CiAKIC8qCkBAIC0xNTM5LDkgKzE2MTksMTMgQEAKIHN0YXRpYyBpbnQgYXR0YWNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IHByb3RlY3Rpb25fZG9tYWluICpkb21haW4pCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCisJaWYgKGFtZF9pb21tdV9pb3RsYl9zdXApCisJCXBjaV9lbmFibGVfYXRzKHBkZXYsIFBBR0VfU0hJRlQpOworCiAJd3JpdGVfbG9ja19pcnFzYXZlKCZhbWRfaW9tbXVfZGV2dGFibGVfbG9jaywgZmxhZ3MpOwogCXJldCA9IF9fYXR0YWNoX2RldmljZShkZXYsIGRvbWFpbik7CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFtZF9pb21tdV9kZXZ0YWJsZV9sb2NrLCBmbGFncyk7CkBAIC0xNTUxLDcgKzE2MzUsNyBAQAogCSAqIGxlZnQgdGhlIGNhY2hlcyBpbiB0aGUgSU9NTVUgZGlydHkuIFNvIHdlIGhhdmUgdG8gZmx1c2gKIAkgKiBoZXJlIHRvIGV2aWN0IGFsbCBkaXJ0eSBzdHVmZi4KIAkgKi8KLQlpb21tdV9mbHVzaF90bGJfcGRlKGRvbWFpbik7CisJZG9tYWluX2ZsdXNoX3RsYl9wZGUoZG9tYWluKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xNTk4LDEyICsxNjgyLDE2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGRldGFjaF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQogeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBsb2NrIGRldmljZSB0YWJsZSAqLwogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmYW1kX2lvbW11X2RldnRhYmxlX2xvY2ssIGZsYWdzKTsKIAlfX2RldGFjaF9kZXZpY2UoZGV2KTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYW1kX2lvbW11X2RldnRhYmxlX2xvY2ssIGZsYWdzKTsKKworCWlmIChhbWRfaW9tbXVfaW90bGJfc3VwICYmIHBjaV9hdHNfZW5hYmxlZChwZGV2KSkKKwkJcGNpX2Rpc2FibGVfYXRzKHBkZXYpOwogfQogCiAvKgpAQCAtMTY5Miw3ICsxNzgwLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaW9tbXVfZmx1c2hfZGV2aWNlKGRldik7CisJZGV2aWNlX2ZsdXNoX2R0ZShkZXYpOwogCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7CiAKIG91dDoKQEAgLTE3NTMsOCArMTg0MSw5IEBACiAJc3RydWN0IGlvbW11X2Rldl9kYXRhICpkZXZfZGF0YTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2X2RhdGEsICZkb21haW4tPmRldl9saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXZfZGF0YS0+ZGV2KTsKIAkJdTE2IGRldmlkID0gZ2V0X2RldmljZV9pZChkZXZfZGF0YS0+ZGV2KTsKLQkJc2V0X2R0ZV9lbnRyeShkZXZpZCwgZG9tYWluKTsKKwkJc2V0X2R0ZV9lbnRyeShkZXZpZCwgZG9tYWluLCBwY2lfYXRzX2VuYWJsZWQocGRldikpOwogCX0KIH0KIApAQCAtMTc2NCw4ICsxODUzLDkgQEAKIAkJcmV0dXJuOwogCiAJdXBkYXRlX2RldmljZV90YWJsZShkb21haW4pOwotCWlvbW11X2ZsdXNoX2RvbWFpbl9kZXZpY2VzKGRvbWFpbik7Ci0JaW9tbXVfZmx1c2hfdGxiX3BkZShkb21haW4pOworCisJZG9tYWluX2ZsdXNoX2RldmljZXMoZG9tYWluKTsKKwlkb21haW5fZmx1c2hfdGxiX3BkZShkb21haW4pOwogCiAJZG9tYWluLT51cGRhdGVkID0gZmFsc2U7CiB9CkBAIC0xOTI0LDEwICsyMDE0LDEwIEBACiAJQUREX1NUQVRTX0NPVU5URVIoYWxsb2NlZF9pb19tZW0sIHNpemUpOwogCiAJaWYgKHVubGlrZWx5KGRtYV9kb20tPm5lZWRfZmx1c2ggJiYgIWFtZF9pb21tdV91bm1hcF9mbHVzaCkpIHsKLQkJaW9tbXVfZmx1c2hfdGxiKCZkbWFfZG9tLT5kb21haW4pOworCQlkb21haW5fZmx1c2hfdGxiKCZkbWFfZG9tLT5kb21haW4pOwogCQlkbWFfZG9tLT5uZWVkX2ZsdXNoID0gZmFsc2U7CiAJfSBlbHNlIGlmICh1bmxpa2VseShhbWRfaW9tbXVfbnBfY2FjaGUpKQotCQlpb21tdV9mbHVzaF9wYWdlcygmZG1hX2RvbS0+ZG9tYWluLCBhZGRyZXNzLCBzaXplKTsKKwkJZG9tYWluX2ZsdXNoX3BhZ2VzKCZkbWFfZG9tLT5kb21haW4sIGFkZHJlc3MsIHNpemUpOwogCiBvdXQ6CiAJcmV0dXJuIGFkZHJlc3M7CkBAIC0xOTc2LDcgKzIwNjYsNyBAQAogCWRtYV9vcHNfZnJlZV9hZGRyZXNzZXMoZG1hX2RvbSwgZG1hX2FkZHIsIHBhZ2VzKTsKIAogCWlmIChhbWRfaW9tbXVfdW5tYXBfZmx1c2ggfHwgZG1hX2RvbS0+bmVlZF9mbHVzaCkgewotCQlpb21tdV9mbHVzaF9wYWdlcygmZG1hX2RvbS0+ZG9tYWluLCBmbHVzaF9hZGRyLCBzaXplKTsKKwkJZG9tYWluX2ZsdXNoX3BhZ2VzKCZkbWFfZG9tLT5kb21haW4sIGZsdXNoX2FkZHIsIHNpemUpOwogCQlkbWFfZG9tLT5uZWVkX2ZsdXNoID0gZmFsc2U7CiAJfQogfQpAQCAtMjAxMiw3ICsyMTAyLDcgQEAKIAlpZiAoYWRkciA9PSBETUFfRVJST1JfQ09ERSkKIAkJZ290byBvdXQ7CiAKLQlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOworCWRvbWFpbl9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CkBAIC0yMDM5LDcgKzIxMjksNyBAQAogCiAJX191bm1hcF9zaW5nbGUoZG9tYWluLT5wcml2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKTsKIAotCWlvbW11X2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CisJZG9tYWluX2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKIH0KQEAgLTIxMDQsNyArMjE5NCw3IEBACiAJCQlnb3RvIHVubWFwOwogCX0KIAotCWlvbW11X2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CisJZG9tYWluX2ZsdXNoX2NvbXBsZXRlKGRvbWFpbik7CiAKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmxvY2ssIGZsYWdzKTsKQEAgLTIxNTAsNyArMjI0MCw3IEBACiAJCXMtPmRtYV9hZGRyZXNzID0gcy0+ZG1hX2xlbmd0aCA9IDA7CiAJfQogCi0JaW9tbXVfZmx1c2hfY29tcGxldGUoZG9tYWluKTsKKwlkb21haW5fZmx1c2hfY29tcGxldGUoZG9tYWluKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRvbWFpbi0+bG9jaywgZmxhZ3MpOwogfQpAQCAtMjIwMCw3ICsyMjkwLDcgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOworCWRvbWFpbl9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiAKQEAgLTIyMzIsNyArMjMyMiw3IEBACiAKIAlfX3VubWFwX3NpbmdsZShkb21haW4tPnByaXYsIGRtYV9hZGRyLCBzaXplLCBETUFfQklESVJFQ1RJT05BTCk7CiAKLQlpb21tdV9mbHVzaF9jb21wbGV0ZShkb21haW4pOworCWRvbWFpbl9mbHVzaF9jb21wbGV0ZShkb21haW4pOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZG9tYWluLT5sb2NrLCBmbGFncyk7CiAKQEAgLTI0NzYsNyArMjU2Niw3IEBACiAJaWYgKCFpb21tdSkKIAkJcmV0dXJuOwogCi0JaW9tbXVfZmx1c2hfZGV2aWNlKGRldik7CisJZGV2aWNlX2ZsdXNoX2R0ZShkZXYpOwogCWlvbW11X2NvbXBsZXRpb25fd2FpdChpb21tdSk7CiB9CiAKQEAgLTI1NDIsNyArMjYzMiw3IEBACiAJdW5tYXBfc2l6ZSA9IGlvbW11X3VubWFwX3BhZ2UoZG9tYWluLCBpb3ZhLCBwYWdlX3NpemUpOwogCW11dGV4X3VubG9jaygmZG9tYWluLT5hcGlfbG9jayk7CiAKLQlpb21tdV9mbHVzaF90bGJfcGRlKGRvbWFpbik7CisJZG9tYWluX2ZsdXNoX3RsYl9wZGUoZG9tYWluKTsKIAogCXJldHVybiBnZXRfb3JkZXIodW5tYXBfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCmluZGV4IDI0NmQ3MjcuLjkxNzljMjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXVfaW5pdC5jCkBAIC0xMzcsNiArMTM3LDcgQEAKIAogLyogSU9NTVVzIGhhdmUgYSBub24tcHJlc2VudCBjYWNoZT8gKi8KIGJvb2wgYW1kX2lvbW11X25wX2NhY2hlIF9fcmVhZF9tb3N0bHk7Citib29sIGFtZF9pb21tdV9pb3RsYl9zdXAgX19yZWFkX21vc3RseSA9IHRydWU7CiAKIC8qCiAgKiBUaGUgQUNQSSB0YWJsZSBwYXJzaW5nIGZ1bmN0aW9ucyBzZXQgdGhpcyB2YXJpYWJsZSBvbiBhbiBlcnJvcgpAQCAtMTgwLDYgKzE4MSwxMiBAQAogc3RhdGljIHUzMiBhbGlhc190YWJsZV9zaXplOwkvKiBzaXplIG9mIHRoZSBhbGlhcyB0YWJsZSAqLwogc3RhdGljIHUzMiBybG9va3VwX3RhYmxlX3NpemU7CS8qIHNpemUgaWYgdGhlIHJsb29rdXAgdGFibGUgKi8KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyBhbGwgaW50ZXJuYWwgY2FjaGVzIG9mCisgKiB0aGUgSU9NTVUgdXNlZCBieSB0aGlzIGRyaXZlci4KKyAqLworZXh0ZXJuIHZvaWQgaW9tbXVfZmx1c2hfYWxsX2NhY2hlcyhzdHJ1Y3QgYW1kX2lvbW11ICppb21tdSk7CisKIHN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfbGFzdF9kZXZpZCh1MTYgZGV2aWQpCiB7CiAJaWYgKGRldmlkID4gYW1kX2lvbW11X2xhc3RfYmRmKQpAQCAtMjkzLDkgKzMwMCwyMyBAQAogLyogRnVuY3Rpb24gdG8gZW5hYmxlIHRoZSBoYXJkd2FyZSAqLwogc3RhdGljIHZvaWQgaW9tbXVfZW5hYmxlKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewotCXByaW50ayhLRVJOX0lORk8gIkFNRC1WaTogRW5hYmxpbmcgSU9NTVUgYXQgJXMgY2FwIDB4JWh4XG4iLAorCXN0YXRpYyBjb25zdCBjaGFyICogY29uc3QgZmVhdF9zdHJbXSA9IHsKKwkJIlByZUYiLCAiUFBSIiwgIlgyQVBJQyIsICJOWCIsICJHVCIsICJbNV0iLAorCQkiSUEiLCAiR0EiLCAiSEUiLCAiUEMiLCBOVUxMCisJfTsKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0lORk8gIkFNRC1WaTogRW5hYmxpbmcgSU9NTVUgYXQgJXMgY2FwIDB4JWh4IiwKIAkgICAgICAgZGV2X25hbWUoJmlvbW11LT5kZXYtPmRldiksIGlvbW11LT5jYXBfcHRyKTsKIAorCWlmIChpb21tdS0+Y2FwICYgKDEgPDwgSU9NTVVfQ0FQX0VGUikpIHsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiIGV4dGVuZGVkIGZlYXR1cmVzOiAiKTsKKwkJZm9yIChpID0gMDsgZmVhdF9zdHJbaV07ICsraSkKKwkJCWlmIChpb21tdV9mZWF0dXJlKGlvbW11LCAoMVVMTCA8PCBpKSkpCisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICVzIiwgZmVhdF9zdHJbaV0pOworCX0KKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworCiAJaW9tbXVfZmVhdHVyZV9lbmFibGUoaW9tbXUsIENPTlRST0xfSU9NTVVfRU4pOwogfQogCkBAIC02NTEsNyArNjcyLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBpbml0X2lvbW11X2Zyb21fcGNpKHN0cnVjdCBhbWRfaW9tbXUgKmlvbW11KQogewogCWludCBjYXBfcHRyID0gaW9tbXUtPmNhcF9wdHI7Ci0JdTMyIHJhbmdlLCBtaXNjOworCXUzMiByYW5nZSwgbWlzYywgbG93LCBoaWdoOwogCWludCBpLCBqOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGlvbW11LT5kZXYsIGNhcF9wdHIgKyBNTUlPX0NBUF9IRFJfT0ZGU0VULApAQCAtNjY3LDYgKzY4OCwxNSBAQAogCQkJCQlNTUlPX0dFVF9MRChyYW5nZSkpOwogCWlvbW11LT5ldnRfbXNpX251bSA9IE1NSU9fTVNJX05VTShtaXNjKTsKIAorCWlmICghKGlvbW11LT5jYXAgJiAoMSA8PCBJT01NVV9DQVBfSU9UTEIpKSkKKwkJYW1kX2lvbW11X2lvdGxiX3N1cCA9IGZhbHNlOworCisJLyogcmVhZCBleHRlbmRlZCBmZWF0dXJlIGJpdHMgKi8KKwlsb3cgID0gcmVhZGwoaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fRVhUX0ZFQVRVUkVTKTsKKwloaWdoID0gcmVhZGwoaW9tbXUtPm1taW9fYmFzZSArIE1NSU9fRVhUX0ZFQVRVUkVTICsgNCk7CisKKwlpb21tdS0+ZmVhdHVyZXMgPSAoKHU2NCloaWdoIDw8IDMyKSB8IGxvdzsKKwogCWlmICghaXNfcmQ4OTBfaW9tbXUoaW9tbXUtPmRldikpCiAJCXJldHVybjsKIApAQCAtMTAwNCwxMCArMTAzNCwxMSBAQAogCWlmIChwY2lfZW5hYmxlX21zaShpb21tdS0+ZGV2KSkKIAkJcmV0dXJuIDE7CiAKLQlyID0gcmVxdWVzdF9pcnEoaW9tbXUtPmRldi0+aXJxLCBhbWRfaW9tbXVfaW50X2hhbmRsZXIsCi0JCQlJUlFGX1NBTVBMRV9SQU5ET00sCi0JCQkiQU1ELVZpIiwKLQkJCU5VTEwpOworCXIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpb21tdS0+ZGV2LT5pcnEsCisJCQkJIGFtZF9pb21tdV9pbnRfaGFuZGxlciwKKwkJCQkgYW1kX2lvbW11X2ludF90aHJlYWQsCisJCQkJIDAsICJBTUQtVmkiLAorCQkJCSBpb21tdS0+ZGV2KTsKIAogCWlmIChyKSB7CiAJCXBjaV9kaXNhYmxlX21zaShpb21tdS0+ZGV2KTsKQEAgLTEyNDQsNiArMTI3NSw3IEBACiAJCWlvbW11X3NldF9leGNsdXNpb25fcmFuZ2UoaW9tbXUpOwogCQlpb21tdV9pbml0X21zaShpb21tdSk7CiAJCWlvbW11X2VuYWJsZShpb21tdSk7CisJCWlvbW11X2ZsdXNoX2FsbF9jYWNoZXMoaW9tbXUpOwogCX0KIH0KIApAQCAtMTI3NCw4ICsxMzA2LDggQEAKIAkgKiB3ZSBoYXZlIHRvIGZsdXNoIGFmdGVyIHRoZSBJT01NVXMgYXJlIGVuYWJsZWQgYmVjYXVzZSBhCiAJICogZGlzYWJsZWQgSU9NTVUgd2lsbCBuZXZlciBleGVjdXRlIHRoZSBjb21tYW5kcyB3ZSBzZW5kCiAJICovCi0JYW1kX2lvbW11X2ZsdXNoX2FsbF9kZXZpY2VzKCk7Ci0JYW1kX2lvbW11X2ZsdXNoX2FsbF9kb21haW5zKCk7CisJZm9yX2VhY2hfaW9tbXUoaW9tbXUpCisJCWlvbW11X2ZsdXNoX2FsbF9jYWNoZXMoaW9tbXUpOwogfQogCiBzdGF0aWMgaW50IGFtZF9pb21tdV9zdXNwZW5kKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKaW5kZXggY2QxZmZlZC4uMjg5ZTkyOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGJfdGltZXIuYwpAQCAtMTc3LDcgKzE3Nyw2IEBACiAJLnJhdGluZwkJPSBBUEJUX0NMT0NLU09VUkNFX1JBVElORywKIAkucmVhZAkJPSBhcGJ0X3JlYWRfY2xvY2tzb3VyY2UsCiAJLm1hc2sJCT0gQVBCVF9NQVNLLAotCS5zaGlmdAkJPSBBUEJUX1NISUZULAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIAkucmVzdW1lCQk9IGFwYnRfcmVzdGFydF9jbG9ja3NvdXJjZSwKIH07CkBAIC01NDMsMTQgKzU0Miw3IEBACiAJaWYgKHQxID09IGFwYnRfcmVhZF9jbG9ja3NvdXJjZSgmY2xvY2tzb3VyY2VfYXBidCkpCiAJCXBhbmljKCJBUEJUIGNvdW50ZXIgbm90IGNvdW50aW5nLiBBUEJUIGRpc2FibGVkXG4iKTsKIAotCS8qCi0JICogaW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgQVBCVCBjbG9ja3NvdXJjZQotCSAqIGNvbnZlcnQgdGhhdCB0byBucy9jbG9jayBjeWNsZQotCSAqIG11bHQgPSAobnMvYykgKiAyXkFQQlRfU0hJRlQKLQkgKi8KLQljbG9ja3NvdXJjZV9hcGJ0Lm11bHQgPSBkaXZfc2MoTVNFQ19QRVJfU0VDLAotCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgYXBidF9mcmVxLCBBUEJUX1NISUZUKTsKLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfYXBidCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfa2h6KCZjbG9ja3NvdXJjZV9hcGJ0LCAodTMyKWFwYnRfZnJlcSoxMDAwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IGZhYmYwMWUuLmFlMTQ3MTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTE4MTIsMzAgKzE4MTIsNDEgQEAKICAqLwogdm9pZCBzbXBfZXJyb3JfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXUzMiB2LCB2MTsKKwl1MzIgdjAsIHYxOworCXUzMiBpID0gMDsKKwlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGVycm9yX2ludGVycnVwdF9yZWFzb25bXSA9IHsKKwkJIlNlbmQgQ1MgZXJyb3IiLAkJLyogQVBJQyBFcnJvciBCaXQgMCAqLworCQkiUmVjZWl2ZSBDUyBlcnJvciIsCQkvKiBBUElDIEVycm9yIEJpdCAxICovCisJCSJTZW5kIGFjY2VwdCBlcnJvciIsCQkvKiBBUElDIEVycm9yIEJpdCAyICovCisJCSJSZWNlaXZlIGFjY2VwdCBlcnJvciIsCQkvKiBBUElDIEVycm9yIEJpdCAzICovCisJCSJSZWRpcmVjdGFibGUgSVBJIiwJCS8qIEFQSUMgRXJyb3IgQml0IDQgKi8KKwkJIlNlbmQgaWxsZWdhbCB2ZWN0b3IiLAkJLyogQVBJQyBFcnJvciBCaXQgNSAqLworCQkiUmVjZWl2ZWQgaWxsZWdhbCB2ZWN0b3IiLAkvKiBBUElDIEVycm9yIEJpdCA2ICovCisJCSJJbGxlZ2FsIHJlZ2lzdGVyIGFkZHJlc3MiLAkvKiBBUElDIEVycm9yIEJpdCA3ICovCisJfTsKIAogCWV4aXRfaWRsZSgpOwogCWlycV9lbnRlcigpOwogCS8qIEZpcnN0IHRpY2tsZSB0aGUgaGFyZHdhcmUsIG9ubHkgdGhlbiByZXBvcnQgd2hhdCB3ZW50IG9uLiAtLSBSRVcgKi8KLQl2ID0gYXBpY19yZWFkKEFQSUNfRVNSKTsKKwl2MCA9IGFwaWNfcmVhZChBUElDX0VTUik7CiAJYXBpY193cml0ZShBUElDX0VTUiwgMCk7CiAJdjEgPSBhcGljX3JlYWQoQVBJQ19FU1IpOwogCWFja19BUElDX2lycSgpOwogCWF0b21pY19pbmMoJmlycV9lcnJfY291bnQpOwogCi0JLyoKLQkgKiBIZXJlIGlzIHdoYXQgdGhlIEFQSUMgZXJyb3IgYml0cyBtZWFuOgotCSAqIDA6IFNlbmQgQ1MgZXJyb3IKLQkgKiAxOiBSZWNlaXZlIENTIGVycm9yCi0JICogMjogU2VuZCBhY2NlcHQgZXJyb3IKLQkgKiAzOiBSZWNlaXZlIGFjY2VwdCBlcnJvcgotCSAqIDQ6IFJlc2VydmVkCi0JICogNTogU2VuZCBpbGxlZ2FsIHZlY3RvcgotCSAqIDY6IFJlY2VpdmVkIGlsbGVnYWwgdmVjdG9yCi0JICogNzogSWxsZWdhbCByZWdpc3RlciBhZGRyZXNzCi0JICovCi0JcHJfZGVidWcoIkFQSUMgZXJyb3Igb24gQ1BVJWQ6ICUwMngoJTAyeClcbiIsCi0JCXNtcF9wcm9jZXNzb3JfaWQoKSwgdiAsIHYxKTsKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCBLRVJOX0RFQlVHICJBUElDIGVycm9yIG9uIENQVSVkOiAlMDJ4KCUwMngpIiwKKwkJICAgIHNtcF9wcm9jZXNzb3JfaWQoKSwgdjAgLCB2MSk7CisKKwl2MSA9IHYxICYgMHhmZjsKKwl3aGlsZSAodjEpIHsKKwkJaWYgKHYxICYgMHgxKQorCQkJYXBpY19wcmludGsoQVBJQ19ERUJVRywgS0VSTl9DT05UICIgOiAlcyIsIGVycm9yX2ludGVycnVwdF9yZWFzb25baV0pOworCQlpKys7CisJCXYxID4+PSAxOworCX07CisKKwlhcGljX3ByaW50ayhBUElDX0RFQlVHLCBLRVJOX0NPTlQgIlxuIik7CisKIAlpcnFfZXhpdCgpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKaW5kZXggNjhkZjA5Yi4uNDVmZDMzZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwpAQCAtMTI4LDggKzEyOCw4IEBACiB9CiBlYXJseV9wYXJhbSgibm9hcGljIiwgcGFyc2Vfbm9hcGljKTsKIAotc3RhdGljIGludCBpb19hcGljX3NldHVwX2lycV9waW5fb25jZSh1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwKLQkJCQkgICAgICBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0ciAqYXR0cik7CitzdGF0aWMgaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbih1bnNpZ25lZCBpbnQgaXJxLCBpbnQgbm9kZSwKKwkJCQkgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmF0dHIpOwogCiAvKiBXaWxsIGJlIGNhbGxlZCBpbiBtcHBhcnNlL2FjcGkvc2ZpIGNvZGVzIGZvciBzYXZpbmcgSVJRIGluZm8gKi8KIHZvaWQgbXBfc2F2ZV9pcnEoc3RydWN0IG1wY19pbnRzcmMgKm0pCkBAIC0zNTcwLDcgKzM1NzAsNyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19IVF9JUlEgKi8KIAotaW50CitzdGF0aWMgaW50CiBpb19hcGljX3NldHVwX2lycV9waW4odW5zaWduZWQgaW50IGlycSwgaW50IG5vZGUsIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQogewogCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBhbGxvY19pcnFfYW5kX2NmZ19hdChpcnEsIG5vZGUpOwpAQCAtMzU4NSw4ICszNTg1LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLAotCQkJCSAgICAgIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQoraW50IGlvX2FwaWNfc2V0dXBfaXJxX3Bpbl9vbmNlKHVuc2lnbmVkIGludCBpcnEsIGludCBub2RlLAorCQkJICAgICAgIHN0cnVjdCBpb19hcGljX2lycV9hdHRyICphdHRyKQogewogCXVuc2lnbmVkIGludCBpZCA9IGF0dHItPmlvYXBpYywgcGluID0gYXR0ci0+aW9hcGljX3BpbjsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY191dl94LmMKaW5kZXggMzNiMTBhMC4uN2FjZDJkMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3V2X3guYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfdXZfeC5jCkBAIC0zNyw2ICszNywxMyBAQAogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxhc20veDg2X2luaXQuaD4KICNpbmNsdWRlIDxhc20vZW1lcmdlbmN5LXJlc3RhcnQuaD4KKyNpbmNsdWRlIDxhc20vbm1pLmg+CisKKy8qIEJNQyBzZXRzIGEgYml0IHRoaXMgTU1SIG5vbi16ZXJvIGJlZm9yZSBzZW5kaW5nIGFuIE5NSSAqLworI2RlZmluZSBVVkhfTk1JX01NUgkJCQlVVkhfU0NSQVRDSDUKKyNkZWZpbmUgVVZIX05NSV9NTVJfQ0xFQVIJCQkoVVZIX05NSV9NTVIgKyA4KQorI2RlZmluZSBVVl9OTUlfUEVORElOR19NQVNLCQkJKDFVTCA8PCA2MykKK0RFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIGNwdV9sYXN0X25taV9jb3VudCk7CiAKIERFRklORV9QRVJfQ1BVKGludCwgeDJhcGljX2V4dHJhX2JpdHMpOwogCkBAIC02NDIsMTggKzY0OSw0NiBAQAogICovCiBpbnQgdXZfaGFuZGxlX25taShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgcmVhc29uLCB2b2lkICpkYXRhKQogeworCXVuc2lnbmVkIGxvbmcgcmVhbF91dl9ubWk7CisJaW50IGJpZDsKKwogCWlmIChyZWFzb24gIT0gRElFX05NSVVOS05PV04pCiAJCXJldHVybiBOT1RJRllfT0s7CiAKIAlpZiAoaW5fY3Jhc2hfa2V4ZWMpCiAJCS8qIGRvIG5vdGhpbmcgaWYgZW50ZXJpbmcgdGhlIGNyYXNoIGtlcm5lbCAqLwogCQlyZXR1cm4gTk9USUZZX09LOworCiAJLyoKLQkgKiBVc2UgYSBsb2NrIHNvIG9ubHkgb25lIGNwdSBwcmludHMgYXQgYSB0aW1lCi0JICogdG8gcHJldmVudCBpbnRlcm1peGVkIG91dHB1dC4KKwkgKiBFYWNoIGJsYWRlIGhhcyBhbiBNTVIgdGhhdCBpbmRpY2F0ZXMgd2hlbiBhbiBOTUkgaGFzIGJlZW4gc2VudAorCSAqIHRvIGNwdXMgb24gdGhlIGJsYWRlLiBJZiBhbiBOTUkgaXMgZGV0ZWN0ZWQsIGF0b21pY2FsbHkKKwkgKiBjbGVhciB0aGUgTU1SIGFuZCB1cGRhdGUgYSBwZXItYmxhZGUgTk1JIGNvdW50IHVzZWQgdG8KKwkgKiBjYXVzZSBlYWNoIGNwdSBvbiB0aGUgYmxhZGUgdG8gbm90aWNlIGEgbmV3IE5NSS4KKwkgKi8KKwliaWQgPSB1dl9udW1hX2JsYWRlX2lkKCk7CisJcmVhbF91dl9ubWkgPSAodXZfcmVhZF9sb2NhbF9tbXIoVVZIX05NSV9NTVIpICYgVVZfTk1JX1BFTkRJTkdfTUFTSyk7CisKKwlpZiAodW5saWtlbHkocmVhbF91dl9ubWkpKSB7CisJCXNwaW5fbG9jaygmdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9sb2NrKTsKKwkJcmVhbF91dl9ubWkgPSAodXZfcmVhZF9sb2NhbF9tbXIoVVZIX05NSV9NTVIpICYgVVZfTk1JX1BFTkRJTkdfTUFTSyk7CisJCWlmIChyZWFsX3V2X25taSkgeworCQkJdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9jb3VudCsrOworCQkJdXZfd3JpdGVfbG9jYWxfbW1yKFVWSF9OTUlfTU1SX0NMRUFSLCBVVl9OTUlfUEVORElOR19NQVNLKTsKKwkJfQorCQlzcGluX3VubG9jaygmdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9sb2NrKTsKKwl9CisKKwlpZiAobGlrZWx5KF9fZ2V0X2NwdV92YXIoY3B1X2xhc3Rfbm1pX2NvdW50KSA9PSB1dl9ibGFkZV9pbmZvW2JpZF0ubm1pX2NvdW50KSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJX19nZXRfY3B1X3ZhcihjcHVfbGFzdF9ubWlfY291bnQpID0gdXZfYmxhZGVfaW5mb1tiaWRdLm5taV9jb3VudDsKKworCS8qCisJICogVXNlIGEgbG9jayBzbyBvbmx5IG9uZSBjcHUgcHJpbnRzIGF0IGEgdGltZS4KKwkgKiBUaGlzIHByZXZlbnRzIGludGVybWl4ZWQgb3V0cHV0LgogCSAqLwogCXNwaW5fbG9jaygmdXZfbm1pX2xvY2spOwotCXByX2luZm8oIk5NSSBzdGFjayBkdW1wIGNwdSAldTpcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJcHJfaW5mbygiVVYgTk1JIHN0YWNrIGR1bXAgY3B1ICV1OlxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAlkdW1wX3N0YWNrKCk7CiAJc3Bpbl91bmxvY2soJnV2X25taV9sb2NrKTsKIApAQCAtNjYxLDcgKzY5Niw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgdXZfZHVtcF9zdGFja19ubWlfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwJPSB1dl9oYW5kbGVfbm1pCisJLm5vdGlmaWVyX2NhbGwJPSB1dl9oYW5kbGVfbm1pLAorCS5wcmlvcml0eSA9IE5NSV9MT0NBTF9MT1dfUFJJT1IgLSAxLAogfTsKIAogdm9pZCB1dl9yZWdpc3Rlcl9ubWlfbm90aWZpZXIodm9pZCkKQEAgLTcyMCw4ICs3NTYsOSBAQAogCXByaW50ayhLRVJOX0RFQlVHICJVVjogRm91bmQgJWQgYmxhZGVzXG4iLCB1dl9udW1fcG9zc2libGVfYmxhZGVzKCkpOwogCiAJYnl0ZXMgPSBzaXplb2Yoc3RydWN0IHV2X2JsYWRlX2luZm8pICogdXZfbnVtX3Bvc3NpYmxlX2JsYWRlcygpOwotCXV2X2JsYWRlX2luZm8gPSBrbWFsbG9jKGJ5dGVzLCBHRlBfS0VSTkVMKTsKKwl1dl9ibGFkZV9pbmZvID0ga3phbGxvYyhieXRlcywgR0ZQX0tFUk5FTCk7CiAJQlVHX09OKCF1dl9ibGFkZV9pbmZvKTsKKwogCWZvciAoYmxhZGUgPSAwOyBibGFkZSA8IHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsgYmxhZGUrKykKIAkJdXZfYmxhZGVfaW5mb1tibGFkZV0ubWVtb3J5X25pZCA9IC0xOwogCkBAIC03NDcsNiArNzg0LDcgQEAKIAkJCXV2X2JsYWRlX2luZm9bYmxhZGVdLnBub2RlID0gcG5vZGU7CiAJCQl1dl9ibGFkZV9pbmZvW2JsYWRlXS5ucl9wb3NzaWJsZV9jcHVzID0gMDsKIAkJCXV2X2JsYWRlX2luZm9bYmxhZGVdLm5yX29ubGluZV9jcHVzID0gMDsKKwkJCXNwaW5fbG9ja19pbml0KCZ1dl9ibGFkZV9pbmZvW2JsYWRlXS5ubWlfbG9jayk7CiAJCQltYXhfcG5vZGUgPSBtYXgocG5vZGUsIG1heF9wbm9kZSk7CiAJCQlibGFkZSsrOwogCQl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKaW5kZXggMGI0YmU0My4uM2JmYTAyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwpAQCAtMjI4LDYgKzIyOCw3IEBACiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3lzY29yZV9vcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTIzNyw3ICsxMjM4LDcgQEAKIAlkcG1fc3VzcGVuZF9ub2lycShQTVNHX1NVU1BFTkQpOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOworCXN5c2NvcmVfc3VzcGVuZCgpOwogCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCkBAIC0xMjU1LDcgKzEyNTYsNyBAQAogCQlhcG1fZXJyb3IoInN1c3BlbmQiLCBlcnIpOwogCWVyciA9IChlcnIgPT0gQVBNX1NVQ0NFU1MpID8gMCA6IC1FSU87CiAKLQlzeXNkZXZfcmVzdW1lKCk7CisJc3lzY29yZV9yZXN1bWUoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAlkcG1fcmVzdW1lX25vaXJxKFBNU0dfUkVTVU1FKTsKQEAgLTEyNzksNyArMTI4MCw3IEBACiAJZHBtX3N1c3BlbmRfbm9pcnEoUE1TR19TVVNQRU5EKTsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3lzZGV2X3N1c3BlbmQoUE1TR19TVVNQRU5EKTsKKwlzeXNjb3JlX3N1c3BlbmQoKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAllcnIgPSBzZXRfc3lzdGVtX3Bvd2VyX3N0YXRlKEFQTV9TVEFURV9TVEFOREJZKTsKQEAgLTEyODcsNyArMTI4OCw3IEBACiAJCWFwbV9lcnJvcigic3RhbmRieSIsIGVycik7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCXN5c2Rldl9yZXN1bWUoKTsKKwlzeXNjb3JlX3Jlc3VtZSgpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAogCWRwbV9yZXN1bWVfbm9pcnEoUE1TR19SRVNVTUUpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKaW5kZXggM2YwZWJlNC4uNjA0Mjk4MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC0zMCw3ICszMCw2IEBACiAKIG9iai0kKENPTkZJR19YODZfTUNFKQkJCSs9IG1jaGVjay8KIG9iai0kKENPTkZJR19NVFJSKQkJCSs9IG10cnIvCi1vYmotJChDT05GSUdfQ1BVX0ZSRVEpCQkJKz0gY3B1ZnJlcS8KIAogb2JqLSQoQ09ORklHX1g4Nl9MT0NBTF9BUElDKQkJKz0gcGVyZmN0ci13YXRjaGRvZy5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCmluZGV4IDM1MzJkM2IuLjZmOWQxZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwpAQCAtNjEzLDcgKzYxMyw3IEBACiAjZW5kaWYKIAogCS8qIEFzIGEgcnVsZSBwcm9jZXNzb3JzIGhhdmUgQVBJQyB0aW1lciBydW5uaW5nIGluIGRlZXAgQyBzdGF0ZXMgKi8KLQlpZiAoYy0+eDg2ID49IDB4ZiAmJiAhY3B1X2hhc19hbWRfZXJyYXR1bShhbWRfZXJyYXR1bV80MDApKQorCWlmIChjLT54ODYgPiAweGYgJiYgIWNwdV9oYXNfYW1kX2VycmF0dW0oYW1kX2VycmF0dW1fNDAwKSkKIAkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfQVJBVCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKaW5kZXggZTJjZWQwMC4uMTczZjNhMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCkBAIC01NjUsOCArNTY1LDcgQEAKIAogCQljcHVpZF9jb3VudCgweDAwMDAwMDA3LCAwLCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKIAotCQlpZiAoZWF4ID4gMCkKLQkJCWMtPng4Nl9jYXBhYmlsaXR5WzldID0gZWJ4OworCQljLT54ODZfY2FwYWJpbGl0eVs5XSA9IGVieDsKIAl9CiAKIAkvKiBBTUQtZGVmaW5lZCBmbGFnczogbGV2ZWwgMHg4MDAwMDAwMSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZDU0YmY2Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMgTGluayBvcmRlciBtYXR0ZXJzLiBLOCBpcyBwcmVmZXJyZWQgdG8gQUNQSSBiZWNhdXNlIG9mIGZpcm13YXJlIGJ1Z3MgaW4gZWFybHkKLSMgSzggc3lzdGVtcy4gQUNQSSBpcyBwcmVmZXJyZWQgdG8gYWxsIG90aGVyIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuCi0jIHNwZWVkc3RlcC0qIGlzIHByZWZlcnJlZCBvdmVyIHA0LWNsb2NrbW9kLgotCi1vYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s4KQkJKz0gcG93ZXJub3ctazgubyBtcGVyZi5vCi1vYmotJChDT05GSUdfWDg2X0FDUElfQ1BVRlJFUSkJCSs9IGFjcGktY3B1ZnJlcS5vIG1wZXJmLm8KLW9iai0kKENPTkZJR19YODZfUENDX0NQVUZSRVEpCQkrPSBwY2MtY3B1ZnJlcS5vCi1vYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s2KQkJKz0gcG93ZXJub3ctazYubwotb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LNykJCSs9IHBvd2Vybm93LWs3Lm8KLW9iai0kKENPTkZJR19YODZfTE9OR0hBVUwpCQkrPSBsb25naGF1bC5vCi1vYmotJChDT05GSUdfWDg2X0VfUE9XRVJTQVZFUikJCSs9IGVfcG93ZXJzYXZlci5vCi1vYmotJChDT05GSUdfRUxBTl9DUFVGUkVRKQkJKz0gZWxhbmZyZXEubwotb2JqLSQoQ09ORklHX1NDNTIwX0NQVUZSRVEpCQkrPSBzYzUyMF9mcmVxLm8KLW9iai0kKENPTkZJR19YODZfTE9OR1JVTikJCSs9IGxvbmdydW4ubyAgCi1vYmotJChDT05GSUdfWDg2X0dYX1NVU1BNT0QpCQkrPSBneC1zdXNwbW9kLm8KLW9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0lDSCkJCSs9IHNwZWVkc3RlcC1pY2gubwotb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfTElCKQkJKz0gc3BlZWRzdGVwLWxpYi5vCi1vYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9TTUkpCQkrPSBzcGVlZHN0ZXAtc21pLm8KLW9iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0NFTlRSSU5PKQkrPSBzcGVlZHN0ZXAtY2VudHJpbm8ubwotb2JqLSQoQ09ORklHX1g4Nl9QNF9DTE9DS01PRCkJCSs9IHA0LWNsb2NrbW9kLm8KLW9iai0kKENPTkZJR19YODZfQ1BVRlJFUV9ORk9SQ0UyKQkrPSBjcHVmcmVxLW5mb3JjZTIubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IGRmODZiYzguLjFlZGY1YmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKQEAgLTI5LDEwICsyOSwxMCBAQAogCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgZWFybHlfaW5pdF9pbnRlbChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CisJdTY0IG1pc2NfZW5hYmxlOworCiAJLyogVW5tYXNrIENQVUlEIGxldmVscyBpZiBtYXNrZWQ6ICovCiAJaWYgKGMtPng4NiA+IDYgfHwgKGMtPng4NiA9PSA2ICYmIGMtPng4Nl9tb2RlbCA+PSAweGQpKSB7Ci0JCXU2NCBtaXNjX2VuYWJsZTsKLQogCQlyZG1zcmwoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIG1pc2NfZW5hYmxlKTsKIAogCQlpZiAobWlzY19lbmFibGUgJiBNU1JfSUEzMl9NSVNDX0VOQUJMRV9MSU1JVF9DUFVJRCkgewpAQCAtMTE4LDggKzExOCw2IEBACiAJICogKG1vZGVsIDIpIHdpdGggdGhlIHNhbWUgcHJvYmxlbS4KIAkgKi8KIAlpZiAoYy0+eDg2ID09IDE1KSB7Ci0JCXU2NCBtaXNjX2VuYWJsZTsKLQogCQlyZG1zcmwoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIG1pc2NfZW5hYmxlKTsKIAogCQlpZiAobWlzY19lbmFibGUgJiBNU1JfSUEzMl9NSVNDX0VOQUJMRV9GQVNUX1NUUklORykgewpAQCAtMTMwLDYgKzEyOCwxOSBAQAogCQl9CiAJfQogI2VuZGlmCisKKwkvKgorCSAqIElmIGZhc3Qgc3RyaW5nIGlzIG5vdCBlbmFibGVkIGluIElBMzJfTUlTQ19FTkFCTEUgZm9yIGFueSByZWFzb24sCisJICogY2xlYXIgdGhlIGZhc3Qgc3RyaW5nIGFuZCBlbmhhbmNlZCBmYXN0IHN0cmluZyBDUFUgY2FwYWJpbGl0aWVzLgorCSAqLworCWlmIChjLT54ODYgPiA2IHx8IChjLT54ODYgPT0gNiAmJiBjLT54ODZfbW9kZWwgPj0gMHhkKSkgeworCQlyZG1zcmwoTVNSX0lBMzJfTUlTQ19FTkFCTEUsIG1pc2NfZW5hYmxlKTsKKwkJaWYgKCEobWlzY19lbmFibGUgJiBNU1JfSUEzMl9NSVNDX0VOQUJMRV9GQVNUX1NUUklORykpIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGVkIGZhc3Qgc3RyaW5nIG9wZXJhdGlvbnNcbiIpOworCQkJc2V0dXBfY2xlYXJfY3B1X2NhcChYODZfRkVBVFVSRV9SRVBfR09PRCk7CisJCQlzZXR1cF9jbGVhcl9jcHVfY2FwKFg4Nl9GRUFUVVJFX0VSTVMpOworCQl9CisJfQogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpAQCAtNDAwLDEyICs0MTEsMTAgQEAKIAogCQlzd2l0Y2ggKGMtPng4Nl9tb2RlbCkgewogCQljYXNlIDU6Ci0JCQlpZiAoYy0+eDg2X21hc2sgPT0gMCkgewotCQkJCWlmIChsMiA9PSAwKQotCQkJCQlwID0gIkNlbGVyb24gKENvdmluZ3RvbikiOwotCQkJCWVsc2UgaWYgKGwyID09IDI1NikKLQkJCQkJcCA9ICJNb2JpbGUgUGVudGl1bSBJSSAoRGl4b24pIjsKLQkJCX0KKwkJCWlmIChsMiA9PSAwKQorCQkJCXAgPSAiQ2VsZXJvbiAoQ292aW5ndG9uKSI7CisJCQllbHNlIGlmIChsMiA9PSAyNTYpCisJCQkJcCA9ICJNb2JpbGUgUGVudGl1bSBJSSAoRGl4b24pIjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgNjoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IDFjZTFhZjIuLmMxMDVjNTMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtMzI3LDcgKzMyNyw2IEBACiAJbDMtPnN1YmNhY2hlc1syXSA9IHNjMiA9ICEodmFsICYgQklUKDgpKSAgKyAhKHZhbCAmIEJJVCg5KSk7CiAJbDMtPnN1YmNhY2hlc1szXSA9IHNjMyA9ICEodmFsICYgQklUKDEyKSkgKyAhKHZhbCAmIEJJVCgxMykpOwogCi0JbDMtPmluZGljZXMgPSAobWF4KG1heChtYXgoc2MwLCBzYzEpLCBzYzIpLCBzYzMpIDw8IDEwKSAtIDE7CiAJbDMtPmluZGljZXMgPSAobWF4KG1heDMoc2MwLCBzYzEsIHNjMiksIHNjMykgPDwgMTApIC0gMTsKIH0KIApAQCAtNDU0LDI3ICs0NTMsMTYgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotI2RlZmluZSBTVUJDQUNIRV9NQVNLCSgzVUwgPDwgMjApCi0jZGVmaW5lIFNVQkNBQ0hFX0lOREVYCTB4ZmZmCi0KLQkvKgotCSAqIGNoZWNrIHdoZXRoZXIgdGhpcyBzbG90IGlzIGFscmVhZHkgdXNlZCBvcgotCSAqIHRoZSBpbmRleCBpcyBhbHJlYWR5IGRpc2FibGVkCi0JICovCisJLyogIGNoZWNrIGlmIEBzbG90IGlzIGFscmVhZHkgdXNlZCBvciB0aGUgaW5kZXggaXMgYWxyZWFkeSBkaXNhYmxlZCAqLwogCXJldCA9IGFtZF9nZXRfbDNfZGlzYWJsZV9zbG90KGwzLCBzbG90KTsKIAlpZiAocmV0ID49IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLyoKLQkgKiBjaGVjayB3aGV0aGVyIHRoZSBvdGhlciBzbG90IGhhcyBkaXNhYmxlZCB0aGUKLQkgKiBzYW1lIGluZGV4IGFscmVhZHkKLQkgKi8KLQlpZiAoaW5kZXggPT0gYW1kX2dldF9sM19kaXNhYmxlX3Nsb3QobDMsICFzbG90KSkKKwlpZiAoaW5kZXggPiBsMy0+aW5kaWNlcykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBkbyBub3QgYWxsb3cgd3JpdGVzIG91dHNpZGUgb2YgYWxsb3dlZCBiaXRzICovCi0JaWYgKChpbmRleCAmIH4oU1VCQ0FDSEVfTUFTSyB8IFNVQkNBQ0hFX0lOREVYKSkgfHwKLQkgICAgKChpbmRleCAmIFNVQkNBQ0hFX0lOREVYKSA+IGwzLT5pbmRpY2VzKSkKKwkvKiBjaGVjayB3aGV0aGVyIHRoZSBvdGhlciBzbG90IGhhcyBkaXNhYmxlZCB0aGUgc2FtZSBpbmRleCBhbHJlYWR5ICovCisJaWYgKGluZGV4ID09IGFtZF9nZXRfbDNfZGlzYWJsZV9zbG90KGwzLCAhc2xvdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJYW1kX2wzX2Rpc2FibGVfaW5kZXgobDMsIGNwdSwgc2xvdCwgaW5kZXgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwppbmRleCAzMzg1ZWEyLi5mZjFhZTliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYwpAQCAtMTA1LDIwICsxMDUsNiBAQAogQVRPTUlDX05PVElGSUVSX0hFQUQoeDg2X21jZV9kZWNvZGVyX2NoYWluKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHg4Nl9tY2VfZGVjb2Rlcl9jaGFpbik7CiAKLXN0YXRpYyBpbnQgZGVmYXVsdF9kZWNvZGVfbWNlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJICAgICAgIHZvaWQgKmRhdGEpCi17Ci0JcHJfZW1lcmcoSFdfRVJSICJObyBodW1hbiByZWFkYWJsZSBNQ0UgZGVjb2Rpbmcgc3VwcG9ydCBvbiB0aGlzIENQVSB0eXBlLlxuIik7Ci0JcHJfZW1lcmcoSFdfRVJSICJSdW4gdGhlIG1lc3NhZ2UgdGhyb3VnaCAnbWNlbG9nIC0tYXNjaWknIHRvIGRlY29kZS5cbiIpOwotCi0JcmV0dXJuIE5PVElGWV9TVE9QOwotfQotCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIG1jZV9kZWNfbmIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBkZWZhdWx0X2RlY29kZV9tY2UsCi0JLnByaW9yaXR5ICAgICAgPSAtMSwKLX07Ci0KIC8qIE1DQSBiYW5rcyBwb2xsZWQgYnkgdGhlIHBlcmlvZCBwb2xsaW5nIHRpbWVyIGZvciBjb3JyZWN0ZWQgZXZlbnRzICovCiBERUZJTkVfUEVSX0NQVShtY2VfYmFua3NfdCwgbWNlX3BvbGxfYmFua3MpID0gewogCVswIC4uLiBCSVRTX1RPX0xPTkdTKE1BWF9OUl9CQU5LUyktMV0gPSB+MFVMCkBAIC0yMTIsNiArMTk4LDggQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfbWNlKHN0cnVjdCBtY2UgKm0pCiB7CisJaW50IHJldCA9IDA7CisKIAlwcl9lbWVyZyhIV19FUlIgIkNQVSAlZDogTWFjaGluZSBDaGVjayBFeGNlcHRpb246ICVMeCBCYW5rICVkOiAlMDE2THhcbiIsCiAJICAgICAgIG0tPmV4dGNwdSwgbS0+bWNnc3RhdHVzLCBtLT5iYW5rLCBtLT5zdGF0dXMpOwogCkBAIC0yMzksNyArMjI3LDExIEBACiAJICogUHJpbnQgb3V0IGh1bWFuLXJlYWRhYmxlIGRldGFpbHMgYWJvdXQgdGhlIE1DRSBlcnJvciwKIAkgKiAoaWYgdGhlIENQVSBoYXMgYW4gaW1wbGVtZW50YXRpb24gZm9yIHRoYXQpCiAJICovCi0JYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgMCwgbSk7CisJcmV0ID0gYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgMCwgbSk7CisJaWYgKHJldCA9PSBOT1RJRllfU1RPUCkKKwkJcmV0dXJuOworCisJcHJfZW1lcmdfcmF0ZWxpbWl0ZWQoSFdfRVJSICJSdW4gdGhlIGFib3ZlIHRocm91Z2ggJ21jZWxvZyAtLWFzY2lpJ1xuIik7CiB9CiAKICNkZWZpbmUgUEFOSUNfVElNRU9VVCA1IC8qIDUgc2Vjb25kcyAqLwpAQCAtNTkwLDcgKzU4Miw2IEBACiAJCWlmICghKGZsYWdzICYgTUNQX0RPTlRMT0cpICYmICFtY2VfZG9udF9sb2dfY2UpIHsKIAkJCW1jZV9sb2coJm0pOwogCQkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgMCwgJm0pOwotCQkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogCQl9CiAKIAkJLyoKQEAgLTE3MjIsOCArMTcxMyw2IEBACiAKIGludCBfX2luaXQgbWNoZWNrX2luaXQodm9pZCkKIHsKLQlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJng4Nl9tY2VfZGVjb2Rlcl9jaGFpbiwgJm1jZV9kZWNfbmIpOwotCiAJbWNoZWNrX2ludGVsX3RoZXJtX2luaXQoKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCmluZGV4IDE2N2Y5N2IuLmJiMGFkYWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKQEAgLTUwOSw2ICs1MDksNyBAQAogb3V0X2ZyZWU6CiAJaWYgKGIpIHsKIAkJa29iamVjdF9wdXQoJmItPmtvYmopOworCQlsaXN0X2RlbCgmYi0+bWlzY2opOwogCQlrZnJlZShiKTsKIAl9CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aGVybV90aHJvdC5jCmluZGV4IDZmOGM1ZTkuLmY1MjA4ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RoZXJtX3Rocm90LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svdGhlcm1fdGhyb3QuYwpAQCAtMTg3LDggKzE4Nyw2IEBACiAJCQkJdGhpc19jcHUsCiAJCQkJbGV2ZWwgPT0gQ09SRV9MRVZFTCA/ICJDb3JlIiA6ICJQYWNrYWdlIiwKIAkJCQlzdGF0ZS0+Y291bnQpOwotCi0JCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKIAkJcmV0dXJuIDE7CiAJfQogCWlmIChvbGRfZXZlbnQpIHsKQEAgLTM5Myw3ICszOTEsNiBAQAogewogCXByaW50ayhLRVJOX0VSUiAiQ1BVJWQ6IFVuZXhwZWN0ZWQgTFZUIHRoZXJtYWwgaW50ZXJydXB0IVxuIiwKIAkJCXNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOwogfQogCiBzdGF0aWMgdm9pZCAoKnNtcF90aGVybWFsX3ZlY3Rvcikodm9pZCkgPSB1bmV4cGVjdGVkX3RoZXJtYWxfaW50ZXJydXB0OwpAQCAtNDQ2LDE4ICs0NDMsMjAgQEAKIAkgKi8KIAlyZG1zcihNU1JfSUEzMl9NSVNDX0VOQUJMRSwgbCwgaCk7CiAKKwloID0gbHZ0dGhtcl9pbml0OwogCS8qCiAJICogVGhlIGluaXRpYWwgdmFsdWUgb2YgdGhlcm1hbCBMVlQgZW50cmllcyBvbiBhbGwgQVBzIGFsd2F5cyByZWFkcwogCSAqIDB4MTAwMDAgYmVjYXVzZSBBUHMgYXJlIHdva2VuIHVwIGJ5IEJTUCBpc3N1aW5nIElOSVQtU0lQSS1TSVBJCiAJICogc2VxdWVuY2UgdG8gdGhlbSBhbmQgTFZUIHJlZ2lzdGVycyBhcmUgcmVzZXQgdG8gMHMgZXhjZXB0IGZvcgogCSAqIHRoZSBtYXNrIGJpdHMgd2hpY2ggYXJlIHNldCB0byAxcyB3aGVuIEFQcyByZWNlaXZlIElOSVQgSVBJLgotCSAqIEFsd2F5cyByZXN0b3JlIHRoZSB2YWx1ZSB0aGF0IEJJT1MgaGFzIHByb2dyYW1tZWQgb24gQVAgYmFzZWQgb24KLQkgKiBCU1AncyBpbmZvIHdlIHNhdmVkIHNpbmNlIEJJT1MgaXMgYWx3YXlzIHNldHRpbmcgdGhlIHNhbWUgdmFsdWUKLQkgKiBmb3IgYWxsIHRocmVhZHMvY29yZXMKKwkgKiBJZiBCSU9TIHRha2VzIG92ZXIgdGhlIHRoZXJtYWwgaW50ZXJydXB0IGFuZCBzZXRzIGl0cyBpbnRlcnJ1cHQKKwkgKiBkZWxpdmVyeSBtb2RlIHRvIFNNSSAobm90IGZpeGVkKSwgaXQgcmVzdG9yZXMgdGhlIHZhbHVlIHRoYXQgdGhlCisJICogQklPUyBoYXMgcHJvZ3JhbW1lZCBvbiBBUCBiYXNlZCBvbiBCU1AncyBpbmZvIHdlIHNhdmVkIHNpbmNlIEJJT1MKKwkgKiBpcyBhbHdheXMgc2V0dGluZyB0aGUgc2FtZSB2YWx1ZSBmb3IgYWxsIHRocmVhZHMvY29yZXMuCiAJICovCi0JYXBpY193cml0ZShBUElDX0xWVFRITVIsIGx2dHRobXJfaW5pdCk7CisJaWYgKChoICYgQVBJQ19ETV9GSVhFRF9NQVNLKSAhPSBBUElDX0RNX0ZJWEVEKQorCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgbHZ0dGhtcl9pbml0KTsKIAotCWggPSBsdnR0aG1yX2luaXQ7CiAKIAlpZiAoKGwgJiBNU1JfSUEzMl9NSVNDX0VOQUJMRV9UTTEpICYmIChoICYgQVBJQ19ETV9TTUkpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jCmluZGV4IGVlZDM2NzNhLi4zYTAzMzhiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnQuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGFzbS9ubWkuaD4KICNpbmNsdWRlIDxhc20vY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS5oPgogCiAjaWYgMAogI3VuZGVmIHdybXNybApAQCAtMzYzLDEyICszNjQsMTggQEAKIAlyZXR1cm4gbmV3X3Jhd19jb3VudDsKIH0KIAotLyogdXNpbmcgWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFIHRvIGxhdGVyIGltcGxlbWVudCBBTFRFUk5BVElWRSgpIGhlcmUgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHg4Nl9wbXVfYWRkcl9vZmZzZXQoaW50IGluZGV4KQogewotCWlmIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfUEVSRkNUUl9DT1JFKSkKLQkJcmV0dXJuIGluZGV4IDw8IDE7Ci0JcmV0dXJuIGluZGV4OworCWludCBvZmZzZXQ7CisKKwkvKiBvZmZzZXQgPSBYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUgPyBpbmRleCA8PCAxIDogaW5kZXggKi8KKwlhbHRlcm5hdGl2ZV9pbyhBU01fTk9QMiwKKwkJICAgICAgICJzaGxsICQxLCAlJWVheCIsCisJCSAgICAgICBYODZfRkVBVFVSRV9QRVJGQ1RSX0NPUkUsCisJCSAgICAgICAiPWEiIChvZmZzZXQpLAorCQkgICAgICAgImEiICAoaW5kZXgpKTsKKworCXJldHVybiBvZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHg4Nl9wbXVfY29uZmlnX2FkZHIoaW50IGluZGV4KQpAQCAtNTg2LDggKzU5MywxMiBAQAogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAorCS8qCisJICogRG8gbm90IGFsbG93IGNvbmZpZzEgKGV4dGVuZGVkIHJlZ2lzdGVycykgdG8gcHJvcGFnYXRlLAorCSAqIHRoZXJlJ3Mgbm8gc2FuZSB1c2VyLXNwYWNlIGdlbmVyYWxpemF0aW9uIHlldDoKKwkgKi8KIAlpZiAoYXR0ci0+dHlwZSA9PSBQRVJGX1RZUEVfUkFXKQotCQlyZXR1cm4geDg2X3BtdV9leHRyYV9yZWdzKGV2ZW50LT5hdHRyLmNvbmZpZywgZXZlbnQpOworCQlyZXR1cm4gMDsKIAogCWlmIChhdHRyLT50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSkKIAkJcmV0dXJuIHNldF9leHRfaHdfYXR0cihod2MsIGV2ZW50KTsKQEAgLTYwOSw4ICs2MjAsOCBAQAogCS8qCiAJICogQnJhbmNoIHRyYWNpbmc6CiAJICovCi0JaWYgKChhdHRyLT5jb25maWcgPT0gUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TKSAmJgotCSAgICAoaHdjLT5zYW1wbGVfcGVyaW9kID09IDEpKSB7CisJaWYgKGF0dHItPmNvbmZpZyA9PSBQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMgJiYKKwkgICAgIWF0dHItPmZyZXEgJiYgaHdjLT5zYW1wbGVfcGVyaW9kID09IDEpIHsKIAkJLyogQlRTIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBhcmNoaXRlY3R1cmUuICovCiAJCWlmICgheDg2X3BtdS5idHNfYWN0aXZlKQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtMTI4NCw2ICsxMjk1LDE2IEBACiAKIAljcHVjID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CiAKKwkvKgorCSAqIFNvbWUgY2hpcHNldHMgbmVlZCB0byB1bm1hc2sgdGhlIExWVFBDIGluIGEgcGFydGljdWxhciBzcG90CisJICogaW5zaWRlIHRoZSBubWkgaGFuZGxlci4gIEFzIGEgcmVzdWx0LCB0aGUgdW5tYXNraW5nIHdhcyBwdXNoZWQKKwkgKiBpbnRvIGFsbCB0aGUgbm1pIGhhbmRsZXJzLgorCSAqCisJICogVGhpcyBnZW5lcmljIGhhbmRsZXIgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW55IGlzc3VlcyB3aGVyZSB0aGUKKwkgKiB1bm1hc2tpbmcgb2NjdXJzIHNvIGl0IHdhcyBsZWZ0IGF0IHRoZSB0b3AuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7CisKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IHg4Nl9wbXUubnVtX2NvdW50ZXJzOyBpZHgrKykgewogCQlpZiAoIXRlc3RfYml0KGlkeCwgY3B1Yy0+YWN0aXZlX21hc2spKSB7CiAJCQkvKgpAQCAtMTM3MCw4ICsxMzkxLDYgQEAKIAkJcmV0dXJuIE5PVElGWV9ET05FOwogCX0KIAotCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOwotCiAJaGFuZGxlZCA9IHg4Nl9wbXUuaGFuZGxlX2lycShhcmdzLT5yZWdzKTsKIAlpZiAoIWhhbmRsZWQpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTE3NTQsMTcgKzE3NzMsNiBAQAogICogY2FsbGNoYWluIHN1cHBvcnQKICAqLwogCi1zdGF0aWMgdm9pZAotYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sKHZvaWQgKmRhdGEsIGNoYXIgKm1zZywgdW5zaWduZWQgbG9uZyBzeW1ib2wpCi17Ci0JLyogSWdub3JlIHdhcm5pbmdzICovCi19Ci0KLXN0YXRpYyB2b2lkIGJhY2t0cmFjZV93YXJuaW5nKHZvaWQgKmRhdGEsIGNoYXIgKm1zZykKLXsKLQkvKiBJZ25vcmUgd2FybmluZ3MgKi8KLX0KLQogc3RhdGljIGludCBiYWNrdHJhY2Vfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKIHsKIAlyZXR1cm4gMDsKQEAgLTE3NzgsOCArMTc4Niw2IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgYmFja3RyYWNlX29wcyA9IHsKLQkud2FybmluZwkJPSBiYWNrdHJhY2Vfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wJCT0gYmFja3RyYWNlX3dhcm5pbmdfc3ltYm9sLAogCS5zdGFjawkJCT0gYmFja3RyYWNlX3N0YWNrLAogCS5hZGRyZXNzCQk9IGJhY2t0cmFjZV9hZGRyZXNzLAogCS53YWxrX3N0YWNrCQk9IHByaW50X2NvbnRleHRfc3RhY2tfYnAsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfYW1kLmMKaW5kZXggNDYxZjYyYi4uZmUyOWMxZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9hbWQuYwpAQCAtOCw3ICs4LDcgQEAKICBbIEMoTDFEKSBdID0gewogCVsgQyhPUF9SRUFEKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDA0MCwgLyogRGF0YSBDYWNoZSBBY2Nlc3NlcyAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAwNDEsIC8qIERhdGEgQ2FjaGUgTWlzc2VzICAgICAgICAgICovCisJCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMTQxLCAvKiBEYXRhIENhY2hlIE1pc3NlcyAgICAgICAgICAqLwogCX0sCiAJWyBDKE9QX1dSSVRFKSBdID0gewogCQlbIEMoUkVTVUxUX0FDQ0VTUykgXSA9IDB4MDE0MiwgLyogRGF0YSBDYWNoZSBSZWZpbGxzIDpzeXN0ZW0gKi8KQEAgLTk2LDEyICs5NiwxNCBAQAogICovCiBzdGF0aWMgY29uc3QgdTY0IGFtZF9wZXJmbW9uX2V2ZW50X21hcFtdID0KIHsKLSAgW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10JCT0gMHgwMDc2LAotICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQk9IDB4MDBjMCwKLSAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFU10JPSAweDAwODAsCi0gIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10JCT0gMHgwMDgxLAotICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQk9IDB4MDBjMiwKLSAgW1BFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFU10JCT0gMHgwMGMzLAorICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJCT0gMHgwMDc2LAorICBbUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlNdCQkJPSAweDAwYzAsCisgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFRkVSRU5DRVNdCQk9IDB4MDA4MCwKKyAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUlTU0VTXQkJCT0gMHgwMDgxLAorICBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TXQkJPSAweDAwYzIsCisgIFtQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVNdCQkJPSAweDAwYzMsCisgIFtQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0ZST05URU5EXQk9IDB4MDBkMCwgLyogIkRlY29kZXIgZW1wdHkiIGV2ZW50ICovCisgIFtQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0JBQ0tFTkRdCT0gMHgwMGQxLCAvKiAiRGlzcGF0Y2ggc3RhbGxzIiBldmVudCAqLwogfTsKIAogc3RhdGljIHU2NCBhbWRfcG11X2V2ZW50X21hcChpbnQgaHdfZXZlbnQpCkBAIC00MjcsNyArNDI5LDkgQEAKICAqCiAgKiBFeGNlcHRpb25zOgogICoKKyAqIDB4MDAwCUZQCVBFUkZfQ1RMWzNdLCBQRVJGX0NUTFs1OjNdICgqKQogICogMHgwMDMJRlAJUEVSRl9DVExbM10KKyAqIDB4MDA0CUZQCVBFUkZfQ1RMWzNdLCBQRVJGX0NUTFs1OjNdICgqKQogICogMHgwMEIJRlAJUEVSRl9DVExbM10KICAqIDB4MDBECUZQCVBFUkZfQ1RMWzNdCiAgKiAweDAyMwlERQlQRVJGX0NUTFsyOjBdCkBAIC00NDgsNiArNDUyLDggQEAKICAqIDB4MERGCUxTCVBFUkZfQ1RMWzU6MF0KICAqIDB4MUQ2CUVYCVBFUkZfQ1RMWzU6MF0KICAqIDB4MUQ4CUVYCVBFUkZfQ1RMWzU6MF0KKyAqCisgKiAoKikgZGVwZW5kaW5nIG9uIHRoZSB1bWFzayBhbGwgRlBVIGNvdW50ZXJzIG1heSBiZSB1c2VkCiAgKi8KIAogc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGFtZF9mMTVfUE1DMCAgPSBFVkVOVF9DT05TVFJBSU5UKDAsIDB4MDEsIDApOwpAQCAtNDYwLDE4ICs0NjYsMjggQEAKIHN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCAqCiBhbWRfZ2V0X2V2ZW50X2NvbnN0cmFpbnRzX2YxNWgoc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWMsIHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKIHsKLQl1bnNpZ25lZCBpbnQgZXZlbnRfY29kZSA9IGFtZF9nZXRfZXZlbnRfY29kZSgmZXZlbnQtPmh3KTsKKwlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKKwl1bnNpZ25lZCBpbnQgZXZlbnRfY29kZSA9IGFtZF9nZXRfZXZlbnRfY29kZShod2MpOwogCiAJc3dpdGNoIChldmVudF9jb2RlICYgQU1EX0VWRU5UX1RZUEVfTUFTSykgewogCWNhc2UgQU1EX0VWRU5UX0ZQOgogCQlzd2l0Y2ggKGV2ZW50X2NvZGUpIHsKKwkJY2FzZSAweDAwMDoKKwkJCWlmICghKGh3Yy0+Y29uZmlnICYgMHgwMDAwRjAwMFVMTCkpCisJCQkJYnJlYWs7CisJCQlpZiAoIShod2MtPmNvbmZpZyAmIDB4MDAwMDBGMDBVTEwpKQorCQkJCWJyZWFrOworCQkJcmV0dXJuICZhbWRfZjE1X1BNQzM7CisJCWNhc2UgMHgwMDQ6CisJCQlpZiAoaHdlaWdodF9sb25nKGh3Yy0+Y29uZmlnICYgQVJDSF9QRVJGTU9OX0VWRU5UU0VMX1VNQVNLKSA8PSAxKQorCQkJCWJyZWFrOworCQkJcmV0dXJuICZhbWRfZjE1X1BNQzM7CiAJCWNhc2UgMHgwMDM6CiAJCWNhc2UgMHgwMEI6CiAJCWNhc2UgMHgwMEQ6CiAJCQlyZXR1cm4gJmFtZF9mMTVfUE1DMzsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAmYW1kX2YxNV9QTUM1MzsKIAkJfQorCQlyZXR1cm4gJmFtZF9mMTVfUE1DNTM7CiAJY2FzZSBBTURfRVZFTlRfTFM6CiAJY2FzZSBBTURfRVZFTlRfREM6CiAJY2FzZSBBTURfRVZFTlRfRVhfTFM6CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCmluZGV4IDhmYzJiMmMuLjQxMTc4YzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9pbnRlbC5jCkBAIC0yNSw3ICsyNSw3IEBACiAvKgogICogSW50ZWwgUGVyZk1vbiwgdXNlZCBvbiBDb3JlIGFuZCBsYXRlci4KICAqLwotc3RhdGljIGNvbnN0IHU2NCBpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtdID0KK3N0YXRpYyB1NjQgaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbUEVSRl9DT1VOVF9IV19NQVhdIF9fcmVhZF9tb3N0bHkgPQogewogICBbUEVSRl9DT1VOVF9IV19DUFVfQ1lDTEVTXQkJPSAweDAwM2MsCiAgIFtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10JCT0gMHgwMGMwLApAQCAtMzYsNyArMzYsNyBAQAogICBbUEVSRl9DT1VOVF9IV19CVVNfQ1lDTEVTXQkJPSAweDAxM2MsCiB9OwogCi1zdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfY29yZV9ldmVudF9jb25zdHJhaW50c1tdID0KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9jb3JlX2V2ZW50X2NvbnN0cmFpbnRzW10gX19yZWFkX21vc3RseSA9CiB7CiAJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweDExLCAweDIpLCAvKiBGUF9BU1NJU1QgKi8KIAlJTlRFTF9FVkVOVF9DT05TVFJBSU5UKDB4MTIsIDB4MiksIC8qIE1VTCAqLwpAQCAtNDcsNyArNDcsNyBAQAogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCi1zdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfY29yZTJfZXZlbnRfY29uc3RyYWludHNbXSA9CitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfY29yZTJfZXZlbnRfY29uc3RyYWludHNbXSBfX3JlYWRfbW9zdGx5ID0KIHsKIAlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMCksIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KIAlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4MDAzYywgMSksIC8qIENQVV9DTEtfVU5IQUxURUQuQ09SRSAqLwpAQCAtNzAsNyArNzAsNyBAQAogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCi1zdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfbmVoYWxlbV9ldmVudF9jb25zdHJhaW50c1tdID0KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9uZWhhbGVtX2V2ZW50X2NvbnN0cmFpbnRzW10gX19yZWFkX21vc3RseSA9CiB7CiAJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDAwYzAsIDApLCAvKiBJTlNUX1JFVElSRUQuQU5ZICovCiAJRklYRURfRVZFTlRfQ09OU1RSQUlOVCgweDAwM2MsIDEpLCAvKiBDUFVfQ0xLX1VOSEFMVEVELkNPUkUgKi8KQEAgLTg2LDE5ICs4NiwxOSBAQAogCUVWRU5UX0NPTlNUUkFJTlRfRU5ECiB9OwogCi1zdGF0aWMgc3RydWN0IGV4dHJhX3JlZyBpbnRlbF9uZWhhbGVtX2V4dHJhX3JlZ3NbXSA9CitzdGF0aWMgc3RydWN0IGV4dHJhX3JlZyBpbnRlbF9uZWhhbGVtX2V4dHJhX3JlZ3NbXSBfX3JlYWRfbW9zdGx5ID0KIHsKIAlJTlRFTF9FVkVOVF9FWFRSQV9SRUcoMHhiNywgTVNSX09GRkNPUkVfUlNQXzAsIDB4ZmZmZiksCiAJRVZFTlRfRVhUUkFfRU5ECiB9OwogCi1zdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfbmVoYWxlbV9wZXJjb3JlX2NvbnN0cmFpbnRzW10gPQorc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX25laGFsZW1fcGVyY29yZV9jb25zdHJhaW50c1tdIF9fcmVhZF9tb3N0bHkgPQogewogCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhiNywgMCksCiAJRVZFTlRfQ09OU1RSQUlOVF9FTkQKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF93ZXN0bWVyZV9ldmVudF9jb25zdHJhaW50c1tdID0KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF93ZXN0bWVyZV9ldmVudF9jb25zdHJhaW50c1tdIF9fcmVhZF9tb3N0bHkgPQogewogCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgwMGMwLCAwKSwgLyogSU5TVF9SRVRJUkVELkFOWSAqLwogCUZJWEVEX0VWRU5UX0NPTlNUUkFJTlQoMHgwMDNjLCAxKSwgLyogQ1BVX0NMS19VTkhBTFRFRC5DT1JFICovCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlFVkVOVF9DT05TVFJBSU5UX0VORAogfTsKIAotc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3NuYl9ldmVudF9jb25zdHJhaW50c1tdID0KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9zbmJfZXZlbnRfY29uc3RyYWludHNbXSBfX3JlYWRfbW9zdGx5ID0KIHsKIAlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMCksIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KIAlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4MDAzYywgMSksIC8qIENQVV9DTEtfVU5IQUxURUQuQ09SRSAqLwpAQCAtMTIzLDIxICsxMjMsMjEgQEAKIAlFVkVOVF9DT05TVFJBSU5UX0VORAogfTsKIAotc3RhdGljIHN0cnVjdCBleHRyYV9yZWcgaW50ZWxfd2VzdG1lcmVfZXh0cmFfcmVnc1tdID0KK3N0YXRpYyBzdHJ1Y3QgZXh0cmFfcmVnIGludGVsX3dlc3RtZXJlX2V4dHJhX3JlZ3NbXSBfX3JlYWRfbW9zdGx5ID0KIHsKIAlJTlRFTF9FVkVOVF9FWFRSQV9SRUcoMHhiNywgTVNSX09GRkNPUkVfUlNQXzAsIDB4ZmZmZiksCiAJSU5URUxfRVZFTlRfRVhUUkFfUkVHKDB4YmIsIE1TUl9PRkZDT1JFX1JTUF8xLCAweGZmZmYpLAogCUVWRU5UX0VYVFJBX0VORAogfTsKIAotc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX3dlc3RtZXJlX3BlcmNvcmVfY29uc3RyYWludHNbXSA9CitzdGF0aWMgc3RydWN0IGV2ZW50X2NvbnN0cmFpbnQgaW50ZWxfd2VzdG1lcmVfcGVyY29yZV9jb25zdHJhaW50c1tdIF9fcmVhZF9tb3N0bHkgPQogewogCUlOVEVMX0VWRU5UX0NPTlNUUkFJTlQoMHhiNywgMCksCiAJSU5URUxfRVZFTlRfQ09OU1RSQUlOVCgweGJiLCAwKSwKIAlFVkVOVF9DT05TVFJBSU5UX0VORAogfTsKIAotc3RhdGljIHN0cnVjdCBldmVudF9jb25zdHJhaW50IGludGVsX2dlbl9ldmVudF9jb25zdHJhaW50c1tdID0KK3N0YXRpYyBzdHJ1Y3QgZXZlbnRfY29uc3RyYWludCBpbnRlbF9nZW5fZXZlbnRfY29uc3RyYWludHNbXSBfX3JlYWRfbW9zdGx5ID0KIHsKIAlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4MDBjMCwgMCksIC8qIElOU1RfUkVUSVJFRC5BTlkgKi8KIAlGSVhFRF9FVkVOVF9DT05TVFJBSU5UKDB4MDAzYywgMSksIC8qIENQVV9DTEtfVU5IQUxURUQuQ09SRSAqLwpAQCAtMTg0LDI2ICsxODQsMjMgQEAKIAl9LAogIH0sCiAgWyBDKExMICApIF0gPSB7Ci0JLyoKLQkgKiBUQkQ6IE5lZWQgT2ZmLWNvcmUgUmVzcG9uc2UgUGVyZm9ybWFuY2UgTW9uaXRvcmluZyBzdXBwb3J0Ci0JICovCiAJWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5BTllfREFUQS5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9EQVRBLkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuQU5ZX0RBVEEuQU5ZX0xMQ19NSVNTICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWJiLAorCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9EQVRBLkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8wLkFOWV9SRk8uTE9DQUxfQ0FDSEUgKi8KKwkJLyogT0ZGQ09SRV9SRVNQT05TRS5BTllfUkZPLkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuQU5ZX1JGTy5BTllfTExDX01JU1MgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYmIsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX1JGTy5BTllfTExDX01JU1MgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYjcsCiAJfSwKIAlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5QUkVGRVRDSC5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLlBSRUZFVENILkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuUFJFRkVUQ0guQU5ZX0xMQ19NSVNTICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWJiLAorCQkvKiBPRkZDT1JFX1JFU1BPTlNFLlBSRUZFVENILkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogIH0sCiAgWyBDKERUTEIpIF0gPSB7CkBAIC0yODUsMjYgKzI4MiwyNiBAQAogIH0sCiAgWyBDKExMICApIF0gPSB7CiAJWyBDKE9QX1JFQUQpIF0gPSB7Ci0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5BTllfREFUQS5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9EQVRBLkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuQU5ZX0RBVEEuQU5ZX0xMQ19NSVNTICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWJiLAorCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9EQVRBLkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogCS8qCiAJICogVXNlIFJGTywgbm90IFdSSVRFQkFDSywgYmVjYXVzZSBhIHdyaXRlIG1pc3Mgd291bGQgdHlwaWNhbGx5IG9jY3VyCiAJICogb24gUkZPLgogCSAqLwogCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJLyogT0ZGQ09SRV9SRVNQT05TRV8xLkFOWV9SRk8uTE9DQUxfQ0FDSEUgKi8KLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYmIsCi0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5BTllfUkZPLkFOWV9MTENfTUlTUyAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLkFOWV9SRk8uTE9DQUxfQ0FDSEUgKi8KKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxYjcsCisJCS8qIE9GRkNPUkVfUkVTUE9OU0UuQU5ZX1JGTy5BTllfTExDX01JU1MgKi8KIAkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxYjcsCiAJfSwKIAlbIEMoT1BfUFJFRkVUQ0gpIF0gPSB7Ci0JCS8qIE9GRkNPUkVfUkVTUE9OU0VfMC5QUkVGRVRDSC5MT0NBTF9DQUNIRSAqLworCQkvKiBPRkZDT1JFX1JFU1BPTlNFLlBSRUZFVENILkxPQ0FMX0NBQ0hFICovCiAJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gMHgwMWI3LAotCQkvKiBPRkZDT1JFX1JFU1BPTlNFXzEuUFJFRkVUQ0guQU5ZX0xMQ19NSVNTICovCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gMHgwMWJiLAorCQkvKiBPRkZDT1JFX1JFU1BPTlNFLlBSRUZFVENILkFOWV9MTENfTUlTUyAqLworCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IDB4MDFiNywKIAl9LAogIH0sCiAgWyBDKERUTEIpIF0gPSB7CkBAIC0zNTIsMTYgKzM0OSwzNiBAQAogfTsKIAogLyoKLSAqIE9GRkNPUkVfUkVTUE9OU0UgTVNSIGJpdHMgKHN1YnNldCksIFNlZSBJQTMyIFNETSBWb2wgMyAzMC42LjEuMworICogTmVoYWxlbS9XZXN0bWVyZSBNU1JfT0ZGQ09SRV9SRVNQT05TRSBiaXRzOworICogU2VlIElBMzIgU0RNIFZvbCAzQiAzMC42LjEuMwogICovCiAKLSNkZWZpbmUgRE1ORF9EQVRBX1JEICAgICAoMSA8PCAwKQotI2RlZmluZSBETU5EX1JGTyAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIERNTkRfV0IgICAgICAgICAgKDEgPDwgMykKLSNkZWZpbmUgUEZfREFUQV9SRCAgICAgICAoMSA8PCA0KQotI2RlZmluZSBQRl9EQVRBX1JGTyAgICAgICgxIDw8IDUpCi0jZGVmaW5lIFJFU1BfVU5DT1JFX0hJVCAgKDEgPDwgOCkKLSNkZWZpbmUgUkVTUF9NSVNTICAgICAgICAoMHhmNjAwKSAvKiBub24gdW5jb3JlIGhpdCAqLworI2RlZmluZSBOSE1fRE1ORF9EQVRBX1JECSgxIDw8IDApCisjZGVmaW5lIE5ITV9ETU5EX1JGTwkJKDEgPDwgMSkKKyNkZWZpbmUgTkhNX0RNTkRfSUZFVENICQkoMSA8PCAyKQorI2RlZmluZSBOSE1fRE1ORF9XQgkJKDEgPDwgMykKKyNkZWZpbmUgTkhNX1BGX0RBVEFfUkQJCSgxIDw8IDQpCisjZGVmaW5lIE5ITV9QRl9EQVRBX1JGTwkJKDEgPDwgNSkKKyNkZWZpbmUgTkhNX1BGX0lGRVRDSAkJKDEgPDwgNikKKyNkZWZpbmUgTkhNX09GRkNPUkVfT1RIRVIJKDEgPDwgNykKKyNkZWZpbmUgTkhNX1VOQ09SRV9ISVQJCSgxIDw8IDgpCisjZGVmaW5lIE5ITV9PVEhFUl9DT1JFX0hJVF9TTlAJKDEgPDwgOSkKKyNkZWZpbmUgTkhNX09USEVSX0NPUkVfSElUTQkoMSA8PCAxMCkKKyAgICAgICAgCQkJLyogcmVzZXJ2ZWQgKi8KKyNkZWZpbmUgTkhNX1JFTU9URV9DQUNIRV9GV0QJKDEgPDwgMTIpCisjZGVmaW5lIE5ITV9SRU1PVEVfRFJBTQkJKDEgPDwgMTMpCisjZGVmaW5lIE5ITV9MT0NBTF9EUkFNCQkoMSA8PCAxNCkKKyNkZWZpbmUgTkhNX05PTl9EUkFNCQkoMSA8PCAxNSkKKworI2RlZmluZSBOSE1fQUxMX0RSQU0JCShOSE1fUkVNT1RFX0RSQU18TkhNX0xPQ0FMX0RSQU0pCisKKyNkZWZpbmUgTkhNX0RNTkRfUkVBRAkJKE5ITV9ETU5EX0RBVEFfUkQpCisjZGVmaW5lIE5ITV9ETU5EX1dSSVRFCQkoTkhNX0RNTkRfUkZPfE5ITV9ETU5EX1dCKQorI2RlZmluZSBOSE1fRE1ORF9QUkVGRVRDSAkoTkhNX1BGX0RBVEFfUkR8TkhNX1BGX0RBVEFfUkZPKQorCisjZGVmaW5lIE5ITV9MM19ISVQJKE5ITV9VTkNPUkVfSElUfE5ITV9PVEhFUl9DT1JFX0hJVF9TTlB8TkhNX09USEVSX0NPUkVfSElUTSkKKyNkZWZpbmUgTkhNX0wzX01JU1MJKE5ITV9OT05fRFJBTXxOSE1fQUxMX0RSQU18TkhNX1JFTU9URV9DQUNIRV9GV0QpCisjZGVmaW5lIE5ITV9MM19BQ0NFU1MJKE5ITV9MM19ISVR8TkhNX0wzX01JU1MpCiAKIHN0YXRpYyBfX2luaXRjb25zdCBjb25zdCB1NjQgbmVoYWxlbV9od19jYWNoZV9leHRyYV9yZWdzCiAJCQkJW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQpAQCAtMzcwLDE2ICszODcsMTYgQEAKIHsKICBbIEMoTEwgICkgXSA9IHsKIAlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBETU5EX0RBVEFfUkR8UkVTUF9VTkNPUkVfSElULAotCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IERNTkRfREFUQV9SRHxSRVNQX01JU1MsCisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gTkhNX0RNTkRfUkVBRHxOSE1fTDNfQUNDRVNTLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IE5ITV9ETU5EX1JFQUR8TkhNX0wzX01JU1MsCiAJfSwKIAlbIEMoT1BfV1JJVEUpIF0gPSB7Ci0JCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gRE1ORF9SRk98RE1ORF9XQnxSRVNQX1VOQ09SRV9ISVQsCi0JCVsgQyhSRVNVTFRfTUlTUykgICBdID0gRE1ORF9SRk98RE1ORF9XQnxSRVNQX01JU1MsCisJCVsgQyhSRVNVTFRfQUNDRVNTKSBdID0gTkhNX0RNTkRfV1JJVEV8TkhNX0wzX0FDQ0VTUywKKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBOSE1fRE1ORF9XUklURXxOSE1fTDNfTUlTUywKIAl9LAogCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBQRl9EQVRBX1JEfFBGX0RBVEFfUkZPfFJFU1BfVU5DT1JFX0hJVCwKLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSBQRl9EQVRBX1JEfFBGX0RBVEFfUkZPfFJFU1BfTUlTUywKKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSBOSE1fRE1ORF9QUkVGRVRDSHxOSE1fTDNfQUNDRVNTLAorCQlbIEMoUkVTVUxUX01JU1MpICAgXSA9IE5ITV9ETU5EX1BSRUZFVENIfE5ITV9MM19NSVNTLAogCX0sCiAgfQogfTsKQEAgLTM5MSwxMiArNDA4LDEyIEBACiB7CiAgWyBDKEwxRCkgXSA9IHsKIAlbIEMoT1BfUkVBRCkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDAsIC8qIEwxRF9DQUNIRV9MRC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDAsIC8qIEwxRF9DQUNIRV9MRC5JX1NUQVRFICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxMGIsIC8qIE1FTV9JTlNUX1JFVElSRUQuTE9BRFMgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNTEsIC8qIEwxRC5SRVBMICAgICAgICAgICAgICAgICAgICAgKi8KIAl9LAogCVsgQyhPUF9XUklURSkgXSA9IHsKLQkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDBmNDEsIC8qIEwxRF9DQUNIRV9TVC5NRVNJICAgICAgICAgICAgKi8KLQkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAxNDEsIC8qIEwxRF9DQUNIRV9TVC5JX1NUQVRFICAgICAgICAgKi8KKwkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAyMGIsIC8qIE1FTV9JTlNUX1JFVFVSRUQuU1RPUkVTICAgICAgKi8KKwkJWyBDKFJFU1VMVF9NSVNTKSAgIF0gPSAweDAyNTEsIC8qIEwxRC5NX1JFUEwgICAgICAgICAgICAgICAgICAgKi8KIAl9LAogCVsgQyhPUF9QUkVGRVRDSCkgXSA9IHsKIAkJWyBDKFJFU1VMVF9BQ0NFU1MpIF0gPSAweDAxNGUsIC8qIEwxRF9QUkVGRVRDSC5SRVFVRVNUUyAgICAgICAgKi8KQEAgLTkzMyw2ICs5NTAsMTYgQEAKIAogCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIAorCS8qCisJICogU29tZSBjaGlwc2V0cyBuZWVkIHRvIHVubWFzayB0aGUgTFZUUEMgaW4gYSBwYXJ0aWN1bGFyIHNwb3QKKwkgKiBpbnNpZGUgdGhlIG5taSBoYW5kbGVyLiAgQXMgYSByZXN1bHQsIHRoZSB1bm1hc2tpbmcgd2FzIHB1c2hlZAorCSAqIGludG8gYWxsIHRoZSBubWkgaGFuZGxlcnMuCisJICoKKwkgKiBUaGlzIGhhbmRsZXIgZG9lc24ndCBzZWVtIHRvIGhhdmUgYW55IGlzc3VlcyB3aXRoIHRoZSB1bm1hc2tpbmcKKwkgKiBzbyBpdCB3YXMgbGVmdCBhdCB0aGUgdG9wLgorCSAqLworCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgQVBJQ19ETV9OTUkpOworCiAJaW50ZWxfcG11X2Rpc2FibGVfYWxsKCk7CiAJaGFuZGxlZCA9IGludGVsX3BtdV9kcmFpbl9idHNfYnVmZmVyKCk7CiAJc3RhdHVzID0gaW50ZWxfcG11X2dldF9zdGF0dXMoKTsKQEAgLTk5OCw2ICsxMDI1LDkgQEAKIAlzdHJ1Y3QgaHdfcGVyZl9ldmVudCAqaHdjID0gJmV2ZW50LT5odzsKIAl1bnNpZ25lZCBpbnQgaHdfZXZlbnQsIGJ0c19ldmVudDsKIAorCWlmIChldmVudC0+YXR0ci5mcmVxKQorCQlyZXR1cm4gTlVMTDsKKwogCWh3X2V2ZW50ID0gaHdjLT5jb25maWcgJiBJTlRFTF9BUkNIX0VWRU5UX01BU0s7CiAJYnRzX2V2ZW50ID0geDg2X3BtdS5ldmVudF9tYXAoUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TKTsKIApAQCAtMTMwNSw3ICsxMzM1LDcgQEAKIAkgKiBBSjEwNiBjb3VsZCBwb3NzaWJseSBiZSB3b3JrZWQgYXJvdW5kIGJ5IG5vdCBhbGxvd2luZyBMQlIKIAkgKiAgICAgICB1c2FnZSBmcm9tIFBFQlMsIGluY2x1ZGluZyB0aGUgZml4dXAuCiAJICogQUo2OCAgY291bGQgcG9zc2libHkgYmUgd29ya2VkIGFyb3VuZCBieSBhbHdheXMgcHJvZ3JhbW1pbmcKLQkgKiAJIGEgcGVic19ldmVudF9yZXNldFswXSB2YWx1ZSBhbmQgY29waW5nIHdpdGggdGhlIGxvc3QgZXZlbnRzLgorCSAqCSBhIHBlYnNfZXZlbnRfcmVzZXRbMF0gdmFsdWUgYW5kIGNvcGluZyB3aXRoIHRoZSBsb3N0IGV2ZW50cy4KIAkgKgogCSAqIEJ1dCB0YWtlbiB0b2dldGhlciBpdCBtaWdodCBqdXN0IG1ha2Ugc2Vuc2UgdG8gbm90IGVuYWJsZSBQRUJTIG9uCiAJICogdGhlc2UgY2hpcHMuCkBAIC0xNDA5LDYgKzE0MzksMjMgQEAKIAkJeDg2X3BtdS5wZXJjb3JlX2NvbnN0cmFpbnRzID0gaW50ZWxfbmVoYWxlbV9wZXJjb3JlX2NvbnN0cmFpbnRzOwogCQl4ODZfcG11LmVuYWJsZV9hbGwgPSBpbnRlbF9wbXVfbmhtX2VuYWJsZV9hbGw7CiAJCXg4Nl9wbXUuZXh0cmFfcmVncyA9IGludGVsX25laGFsZW1fZXh0cmFfcmVnczsKKworCQkvKiBVT1BTX0lTU1VFRC5TVEFMTEVEX0NZQ0xFUyAqLworCQlpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0ZST05URU5EXSA9IDB4MTgwMDEwZTsKKwkJLyogVU9QU19FWEVDVVRFRC5DT1JFX0FDVElWRV9DWUNMRVMsYz0xLGk9MSAqLworCQlpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0JBQ0tFTkRdID0gMHgxODAzZmIxOworCisJCWlmIChlYnggJiAweDQwKSB7CisJCQkvKgorCQkJICogRXJyYXR1bSBBQUo4MCBkZXRlY3RlZCwgd2Ugd29yayBpdCBhcm91bmQgYnkgdXNpbmcKKwkJCSAqIHRoZSBCUl9NSVNQX0VYRUMuQU5ZIGV2ZW50LiBUaGlzIHdpbGwgb3Zlci1jb3VudAorCQkJICogYnJhbmNoLW1pc3NlcywgYnV0IGl0J3Mgc3RpbGwgbXVjaCBiZXR0ZXIgdGhhbiB0aGUKKwkJCSAqIGFyY2hpdGVjdHVyYWwgZXZlbnQgd2hpY2ggaXMgb2Z0ZW4gY29tcGxldGVseSBib2d1czoKKwkJCSAqLworCQkJaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXSA9IDB4N2Y4OTsKKworCQkJcHJfY29udCgiZXJyYXR1bSBBQUo4MCB3b3JrZWQgYXJvdW5kLCAiKTsKKwkJfQogCQlwcl9jb250KCJOZWhhbGVtIGV2ZW50cywgIik7CiAJCWJyZWFrOwogCkBAIC0xNDI1LDYgKzE0NzIsNyBAQAogCiAJY2FzZSAzNzogLyogMzIgbm0gbmVoYWxlbSwgIkNsYXJrZGFsZSIgKi8KIAljYXNlIDQ0OiAvKiAzMiBubSBuZWhhbGVtLCAiR3VsZnRvd24iICovCisJY2FzZSA0NzogLyogMzIgbm0gWGVvbiBFNyAqLwogCQltZW1jcHkoaHdfY2FjaGVfZXZlbnRfaWRzLCB3ZXN0bWVyZV9od19jYWNoZV9ldmVudF9pZHMsCiAJCSAgICAgICBzaXplb2YoaHdfY2FjaGVfZXZlbnRfaWRzKSk7CiAJCW1lbWNweShod19jYWNoZV9leHRyYV9yZWdzLCBuZWhhbGVtX2h3X2NhY2hlX2V4dHJhX3JlZ3MsCkBAIC0xNDM3LDYgKzE0ODUsMTIgQEAKIAkJeDg2X3BtdS5lbmFibGVfYWxsID0gaW50ZWxfcG11X25obV9lbmFibGVfYWxsOwogCQl4ODZfcG11LnBlYnNfY29uc3RyYWludHMgPSBpbnRlbF93ZXN0bWVyZV9wZWJzX2V2ZW50X2NvbnN0cmFpbnRzOwogCQl4ODZfcG11LmV4dHJhX3JlZ3MgPSBpbnRlbF93ZXN0bWVyZV9leHRyYV9yZWdzOworCisJCS8qIFVPUFNfSVNTVUVELlNUQUxMRURfQ1lDTEVTICovCisJCWludGVsX3BlcmZtb25fZXZlbnRfbWFwW1BFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfRlJPTlRFTkRdID0gMHgxODAwMTBlOworCQkvKiBVT1BTX0VYRUNVVEVELkNPUkVfQUNUSVZFX0NZQ0xFUyxjPTEsaT0xICovCisJCWludGVsX3BlcmZtb25fZXZlbnRfbWFwW1BFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORF0gPSAweDE4MDNmYjE7CisKIAkJcHJfY29udCgiV2VzdG1lcmUgZXZlbnRzLCAiKTsKIAkJYnJlYWs7CiAKQEAgLTE0NDgsNiArMTUwMiwxMiBAQAogCiAJCXg4Nl9wbXUuZXZlbnRfY29uc3RyYWludHMgPSBpbnRlbF9zbmJfZXZlbnRfY29uc3RyYWludHM7CiAJCXg4Nl9wbXUucGVic19jb25zdHJhaW50cyA9IGludGVsX3NuYl9wZWJzX2V2ZW50czsKKworCQkvKiBVT1BTX0lTU1VFRC5BTlksYz0xLGk9MSB0byBjb3VudCBzdGFsbCBjeWNsZXMgKi8KKwkJaW50ZWxfcGVyZm1vbl9ldmVudF9tYXBbUEVSRl9DT1VOVF9IV19TVEFMTEVEX0NZQ0xFU19GUk9OVEVORF0gPSAweDE4MDAxMGU7CisJCS8qIFVPUFNfRElTUEFUQ0hFRC5USFJFQUQsYz0xLGk9MSB0byBjb3VudCBzdGFsbCBjeWNsZXMqLworCQlpbnRlbF9wZXJmbW9uX2V2ZW50X21hcFtQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0JBQ0tFTkRdID0gMHgxODAwMWIxOworCiAJCXByX2NvbnQoIlNhbmR5QnJpZGdlIGV2ZW50cywgIik7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfcDQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCmluZGV4IGMyNTIwZTEuLmVhZDU4NGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudF9wNC5jCkBAIC00NjgsNyArNDY4LDcgQEAKIAkJLm9wY29kZQkJPSBQNF9PUENPREUoUDRfRVZFTlRfTUlTUFJFRF9CUkFOQ0hfUkVUSVJFRCksCiAJCS5lc2NyX21zcgk9IHsgTVNSX1A0X0NSVV9FU0NSMCwgTVNSX1A0X0NSVV9FU0NSMSB9LAogCQkuZXNjcl9lbWFzawk9Ci0JCVA0X0VTQ1JfRU1BU0tfQklUKFA0X0VWRU5UX01JU1BSRURfQlJBTkNIX1JFVElSRUQsIE5CT0dVUyksCisJCQlQNF9FU0NSX0VNQVNLX0JJVChQNF9FVkVOVF9NSVNQUkVEX0JSQU5DSF9SRVRJUkVELCBOQk9HVVMpLAogCQkuY250cgkJPSB7IHsxMiwgMTMsIDE2fSwgezE0LCAxNSwgMTd9IH0sCiAJfSwKIAlbUDRfRVZFTlRfWDg3X0FTU0lTVF0gPSB7CkBAIC05MTIsOCArOTEyLDcgQEAKIAlpbnQgaWR4LCBoYW5kbGVkID0gMDsKIAl1NjQgdmFsOwogCi0JZGF0YS5hZGRyID0gMDsKLQlkYXRhLnJhdyA9IE5VTEw7CisJcGVyZl9zYW1wbGVfZGF0YV9pbml0KCZkYXRhLCAwKTsKIAogCWNwdWMgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKIApAQCAtOTQ3LDE0ICs5NDYsMjMgQEAKIAkJaWYgKCF4ODZfcGVyZl9ldmVudF9zZXRfcGVyaW9kKGV2ZW50KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgMSwgJmRhdGEsIHJlZ3MpKQotCQkJcDRfcG11X2Rpc2FibGVfZXZlbnQoZXZlbnQpOworCQkJeDg2X3BtdV9zdG9wKGV2ZW50LCAwKTsKIAl9CiAKLQlpZiAoaGFuZGxlZCkgewotCQkvKiBwNCBxdWlyazogdW5tYXNrIGl0IGFnYWluICovCi0JCWFwaWNfd3JpdGUoQVBJQ19MVlRQQywgYXBpY19yZWFkKEFQSUNfTFZUUEMpICYgfkFQSUNfTFZUX01BU0tFRCk7CisJaWYgKGhhbmRsZWQpCiAJCWluY19pcnFfc3RhdChhcGljX3BlcmZfaXJxcyk7Ci0JfQorCisJLyoKKwkgKiBXaGVuIGRlYWxpbmcgd2l0aCB0aGUgdW5tYXNraW5nIG9mIHRoZSBMVlRQQyBvbiBQNCBwZXJmIGh3LCBpdCBoYXMKKwkgKiBiZWVuIG9ic2VydmVkIHRoYXQgdGhlIE9WRiBiaXQgZmxhZyBoYXMgdG8gYmUgY2xlYXJlZCBmaXJzdCBfYmVmb3JlXworCSAqIHRoZSBMVlRQQyBjYW4gYmUgdW5tYXNrZWQuCisJICoKKwkgKiBUaGUgcmVhc29uIGlzIHRoZSBOTUkgbGluZSB3aWxsIGNvbnRpbnVlIHRvIGJlIGFzc2VydGVkIHdoaWxlIHRoZSBPVkYKKwkgKiBiaXQgaXMgc2V0LiAgVGhpcyBjYXVzZXMgYSBzZWNvbmQgTk1JIHRvIGdlbmVyYXRlIGlmIHRoZSBMVlRQQyBpcworCSAqIHVubWFza2VkIGJlZm9yZSB0aGUgT1ZGIGJpdCBpcyBjbGVhcmVkLCBsZWFkaW5nIHRvIHVua25vd24gTk1JCisJICogbWVzc2FnZXMuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVFBDLCBBUElDX0RNX05NSSk7CiAKIAlyZXR1cm4gaGFuZGxlZDsKIH0KQEAgLTExODgsNyArMTE5Niw3IEBACiB7CiAJdW5zaWduZWQgaW50IGxvdywgaGlnaDsKIAotCS8qIElmIHdlIGdldCBzdHJpcHBlZCAtLSBpbmRleGlnIGZhaWxzICovCisJLyogSWYgd2UgZ2V0IHN0cmlwcGVkIC0tIGluZGV4aW5nIGZhaWxzICovCiAJQlVJTERfQlVHX09OKEFSQ0hfUDRfTUFYX0NDQ1IgPiBYODZfUE1DX01BWF9HRU5FUklDKTsKIAogCXJkbXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsb3csIGhpZ2gpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYyBiL2FyY2gveDg2L2tlcm5lbC9kZXZpY2V0cmVlLmMKaW5kZXggNzA2YTlmYi4uZTkwZjA4NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2RldmljZXRyZWUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZGV2aWNldHJlZS5jCkBAIC0zOTEsNyArMzkxLDcgQEAKIAogCXNldF9pb19hcGljX2lycV9hdHRyKCZhdHRyLCBpZHgsIGxpbmUsIGl0LT50cmlnZ2VyLCBpdC0+cG9sYXJpdHkpOwogCi0JcmV0dXJuIGlvX2FwaWNfc2V0dXBfaXJxX3Bpbigqb3V0X2h3aXJxLCBjcHVfdG9fbm9kZSgwKSwgJmF0dHIpOworCXJldHVybiBpb19hcGljX3NldHVwX2lycV9waW5fb25jZSgqb3V0X2h3aXJxLCBjcHVfdG9fbm9kZSgwKSwgJmF0dHIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgaW9hcGljX2FkZF9vZm5vZGUoc3RydWN0IGRldmljZV9ub2RlICpucCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYyBiL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYwppbmRleCBlMmEzZjA2Li5mNDc4ZmY2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCkBAIC0xMzUsMjAgKzEzNSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwcmludF9jb250ZXh0X3N0YWNrX2JwKTsKIAotCi1zdGF0aWMgdm9pZAotcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wodm9pZCAqZGF0YSwgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIHN5bWJvbCkKLXsKLQlwcmludGsoZGF0YSk7Ci0JcHJpbnRfc3ltYm9sKG1zZywgc3ltYm9sKTsKLQlwcmludGsoIlxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkIHByaW50X3RyYWNlX3dhcm5pbmcodm9pZCAqZGF0YSwgY2hhciAqbXNnKQotewotCXByaW50aygiJXMlc1xuIiwgKGNoYXIgKilkYXRhLCBtc2cpOwotfQotCiBzdGF0aWMgaW50IHByaW50X3RyYWNlX3N0YWNrKHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUpCiB7CiAJcHJpbnRrKCIlcyA8JXM+ICIsIChjaGFyICopZGF0YSwgbmFtZSk7CkBAIC0xNjYsOCArMTUyLDYgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBwcmludF90cmFjZV9vcHMgPSB7Ci0JLndhcm5pbmcJCT0gcHJpbnRfdHJhY2Vfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wJCT0gcHJpbnRfdHJhY2Vfd2FybmluZ19zeW1ib2wsCiAJLnN0YWNrCQkJPSBwcmludF90cmFjZV9zdGFjaywKIAkuYWRkcmVzcwkJPSBwcmludF90cmFjZV9hZGRyZXNzLAogCS53YWxrX3N0YWNrCQk9IHByaW50X2NvbnRleHRfc3RhY2ssCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggYTkzNzQyYS4uMGJhMTVhNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMjYwLDkgKzI2MCw5IEBACiAJcmV0dXJuIG1vZF9jb2RlX3N0YXR1czsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGNoYXIgKmZ0cmFjZV9ub3BfcmVwbGFjZSh2b2lkKQorc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZ0cmFjZV9ub3BfcmVwbGFjZSh2b2lkKQogewotCXJldHVybiBpZGVhbF9ub3A1OworCXJldHVybiBpZGVhbF9ub3BzW05PUF9BVE9NSUM1XTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hwZXQuYyBiL2FyY2gveDg2L2tlcm5lbC9ocGV0LmMKaW5kZXggYmZlOGY3Mi4uNjc4MTc2NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaHBldC5jCkBAIC0yMTcsNyArMjE3LDcgQEAKIC8qCiAgKiBDb21tb24gaHBldCBpbmZvCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhwZXRfcGVyaW9kOworc3RhdGljIHVuc2lnbmVkIGxvbmcgaHBldF9mcmVxOwogCiBzdGF0aWMgdm9pZCBocGV0X2xlZ2FjeV9zZXRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKIAkJCSAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKQEAgLTIzMiw3ICsyMzIsNiBAQAogCS5mZWF0dXJlcwk9IENMT0NLX0VWVF9GRUFUX1BFUklPRElDIHwgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKIAkuc2V0X21vZGUJPSBocGV0X2xlZ2FjeV9zZXRfbW9kZSwKIAkuc2V0X25leHRfZXZlbnQgPSBocGV0X2xlZ2FjeV9uZXh0X2V2ZW50LAotCS5zaGlmdAkJPSAzMiwKIAkuaXJxCQk9IDAsCiAJLnJhdGluZwkJPSA1MCwKIH07CkBAIC0yOTAsMjggKzI4OSwxMiBAQAogCWhwZXRfZW5hYmxlX2xlZ2FjeV9pbnQoKTsKIAogCS8qCi0JICogVGhlIG11bHQgZmFjdG9yIGlzIGRlZmluZWQgYXMgKGluY2x1ZGUvbGludXgvY2xvY2tjaGlwcy5oKQotCSAqICBtdWx0LzJec2hpZnQgPSBjeWMvbnMgKGluIGNvbnRyYXN0IHRvIG5zL2N5YyBpbiBjbG9ja3NvdXJjZS5oKQotCSAqIGhwZXRfcGVyaW9kIGlzIGluIHVuaXRzIG9mIGZlbXRvc2Vjb25kcyAocGVyIGN5Y2xlKSwgc28KLQkgKiAgbXVsdC8yXnNoaWZ0ID0gY3ljL25zID0gMTBeNi9ocGV0X3BlcmlvZAotCSAqICBtdWx0ID0gKDEwXjYgKiAyXnNoaWZ0KS9ocGV0X3BlcmlvZAotCSAqICBtdWx0ID0gKEZTRUNfUEVSX05TRUMgPDwgaHBldF9jbG9ja2V2ZW50LnNoaWZ0KS9ocGV0X3BlcmlvZAotCSAqLwotCWhwZXRfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKCh1bnNpZ25lZCBsb25nKSBGU0VDX1BFUl9OU0VDLAotCQkJCSAgICAgIGhwZXRfcGVyaW9kLCBocGV0X2Nsb2NrZXZlbnQuc2hpZnQpOwotCS8qIENhbGN1bGF0ZSB0aGUgbWluIC8gbWF4IGRlbHRhICovCi0JaHBldF9jbG9ja2V2ZW50Lm1heF9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHg3RkZGRkZGRiwKLQkJCQkJCQkgICAmaHBldF9jbG9ja2V2ZW50KTsKLQkvKiBTZXR1cCBtaW5pbXVtIHJlcHJvZ3JhbW1pbmcgZGVsdGEuICovCi0JaHBldF9jbG9ja2V2ZW50Lm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoSFBFVF9NSU5fUFJPR19ERUxUQSwKLQkJCQkJCQkgICAmaHBldF9jbG9ja2V2ZW50KTsKLQotCS8qCiAJICogU3RhcnQgaHBldCB3aXRoIHRoZSBib290IGNwdSBtYXNrIGFuZCBtYWtlIGl0CiAJICogZ2xvYmFsIGFmdGVyIHRoZSBJT19BUElDIGhhcyBiZWVuIGluaXRpYWxpemVkLgogCSAqLwogCWhwZXRfY2xvY2tldmVudC5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmaHBldF9jbG9ja2V2ZW50KTsKKwljbG9ja2V2ZW50c19jb25maWdfYW5kX3JlZ2lzdGVyKCZocGV0X2Nsb2NrZXZlbnQsIGhwZXRfZnJlcSwKKwkJCQkJSFBFVF9NSU5fUFJPR19ERUxUQSwgMHg3RkZGRkZGRik7CiAJZ2xvYmFsX2Nsb2NrX2V2ZW50ID0gJmhwZXRfY2xvY2tldmVudDsKIAlwcmludGsoS0VSTl9ERUJVRyAiaHBldCBjbG9ja2V2ZW50IHJlZ2lzdGVyZWRcbiIpOwogfQpAQCAtNTQ5LDcgKzUzMiw2IEBACiBzdGF0aWMgdm9pZCBpbml0X29uZV9ocGV0X21zaV9jbG9ja2V2ZW50KHN0cnVjdCBocGV0X2RldiAqaGRldiwgaW50IGNwdSkKIHsKIAlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQgPSAmaGRldi0+ZXZ0OwotCXVpbnQ2NF90IGhwZXRfZnJlcTsKIAogCVdBUk5fT04oY3B1ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJaWYgKCEoaGRldi0+ZmxhZ3MgJiBIUEVUX0RFVl9WQUxJRCkpCkBAIC01NzEsMjQgKzU1MywxMCBAQAogCiAJZXZ0LT5zZXRfbW9kZSA9IGhwZXRfbXNpX3NldF9tb2RlOwogCWV2dC0+c2V0X25leHRfZXZlbnQgPSBocGV0X21zaV9uZXh0X2V2ZW50OwotCWV2dC0+c2hpZnQgPSAzMjsKLQotCS8qCi0JICogVGhlIHBlcmlvZCBpcyBhIGZlbXRvIHNlY29uZHMgdmFsdWUuIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZQotCSAqIHNjYWxlZCBtYXRoIG11bHRpcGxpY2F0aW9uIGZhY3RvciBmb3IgbmFub3NlY29uZCB0byBocGV0IHRpY2sKLQkgKiBjb252ZXJzaW9uLgotCSAqLwotCWhwZXRfZnJlcSA9IEZTRUNfUEVSX1NFQzsKLQlkb19kaXYoaHBldF9mcmVxLCBocGV0X3BlcmlvZCk7Ci0JZXZ0LT5tdWx0ID0gZGl2X3NjKCh1bnNpZ25lZCBsb25nKSBocGV0X2ZyZXEsCi0JCQkJICAgICAgTlNFQ19QRVJfU0VDLCBldnQtPnNoaWZ0KTsKLQkvKiBDYWxjdWxhdGUgdGhlIG1heCBkZWx0YSAqLwotCWV2dC0+bWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDdGRkZGRkZGLCBldnQpOwotCS8qIDUgdXNlYyBtaW5pbXVtIHJlcHJvZ3JhbW1pbmcgZGVsdGEuICovCi0JZXZ0LT5taW5fZGVsdGFfbnMgPSA1MDAwOwotCiAJZXZ0LT5jcHVtYXNrID0gY3B1bWFza19vZihoZGV2LT5jcHUpOwotCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShldnQpOworCisJY2xvY2tldmVudHNfY29uZmlnX2FuZF9yZWdpc3RlcihldnQsIGhwZXRfZnJlcSwgSFBFVF9NSU5fUFJPR19ERUxUQSwKKwkJCQkJMHg3RkZGRkZGRik7CiB9CiAKICNpZmRlZiBDT05GSUdfSFBFVApAQCAtNzkyLDcgKzc2MCw2IEBACiBzdGF0aWMgaW50IGhwZXRfY2xvY2tzb3VyY2VfcmVnaXN0ZXIodm9pZCkKIHsKIAl1NjQgc3RhcnQsIG5vdzsKLQl1NjQgaHBldF9mcmVxOwogCWN5Y2xlX3QgdDE7CiAKIAkvKiBTdGFydCB0aGUgY291bnRlciAqLwpAQCAtODE5LDI0ICs3ODYsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKgotCSAqIFRoZSBkZWZpbml0aW9uIG9mIG11bHQgaXMgKGluY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaCkKLQkgKiBtdWx0LzJec2hpZnQgPSBucy9jeWMgYW5kIGhwZXRfcGVyaW9kIGlzIGluIHVuaXRzIG9mIGZzZWMvY3ljCi0JICogc28gd2UgZmlyc3QgbmVlZCB0byBjb252ZXJ0IGhwZXRfcGVyaW9kIHRvIG5zL2N5YyB1bml0czoKLQkgKiAgbXVsdC8yXnNoaWZ0ID0gbnMvY3ljID0gaHBldF9wZXJpb2QvMTBeNgotCSAqICBtdWx0ID0gKGhwZXRfcGVyaW9kICogMl5zaGlmdCkvMTBeNgotCSAqICBtdWx0ID0gKGhwZXRfcGVyaW9kIDw8IHNoaWZ0KS9GU0VDX1BFUl9OU0VDCi0JICovCi0KLQkvKiBOZWVkIHRvIGNvbnZlcnQgaHBldF9wZXJpb2QgKGZzZWMvY3ljKSB0byBjeWMvc2VjOgotCSAqCi0JICogY3ljL3NlYyA9IEZTRUNfUEVSX1NFQy9ocGV0X3BlcmlvZChmc2VjL2N5YykKLQkgKiBjeWMvc2VjID0gKEZTRUNfUEVSX05TRUMgKiBOU0VDX1BFUl9TRUMpL2hwZXRfcGVyaW9kCi0JICovCi0JaHBldF9mcmVxID0gRlNFQ19QRVJfU0VDOwotCWRvX2RpdihocGV0X2ZyZXEsIGhwZXRfcGVyaW9kKTsKIAljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfaHBldCwgKHUzMilocGV0X2ZyZXEpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg0NSw3ICs3OTUsOSBAQAogICovCiBpbnQgX19pbml0IGhwZXRfZW5hYmxlKHZvaWQpCiB7CisJdW5zaWduZWQgbG9uZyBocGV0X3BlcmlvZDsKIAl1bnNpZ25lZCBpbnQgaWQ7CisJdTY0IGZyZXE7CiAJaW50IGk7CiAKIAlpZiAoIWlzX2hwZXRfY2FwYWJsZSgpKQpAQCAtODg0LDYgKzgzNiwxNCBAQAogCQlnb3RvIG91dF9ub2hwZXQ7CiAKIAkvKgorCSAqIFRoZSBwZXJpb2QgaXMgYSBmZW10byBzZWNvbmRzIHZhbHVlLiBDb252ZXJ0IGl0IHRvIGEKKwkgKiBmcmVxdWVuY3kuCisJICovCisJZnJlcSA9IEZTRUNfUEVSX1NFQzsKKwlkb19kaXYoZnJlcSwgaHBldF9wZXJpb2QpOworCWhwZXRfZnJlcSA9IGZyZXE7CisKKwkvKgogCSAqIFJlYWQgdGhlIEhQRVQgSUQgcmVnaXN0ZXIgdG8gcmV0cmlldmUgdGhlIElSUSByb3V0aW5nCiAJICogaW5mb3JtYXRpb24gYW5kIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pODI1My5jIGIvYXJjaC94ODYva2VybmVsL2k4MjUzLmMKaW5kZXggMmRmZDMxNS4uZmI2NmRjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2k4MjUzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2k4MjUzLmMKQEAgLTkzLDcgKzkzLDYgQEAKIAkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCiAJLnNldF9tb2RlCT0gaW5pdF9waXRfdGltZXIsCiAJLnNldF9uZXh0X2V2ZW50ID0gcGl0X25leHRfZXZlbnQsCi0JLnNoaWZ0CQk9IDMyLAogCS5pcnEJCT0gMCwKIH07CiAKQEAgLTEwOCw5MCArMTA3LDEyIEBACiAJICogSU9fQVBJQyBoYXMgYmVlbiBpbml0aWFsaXplZC4KIAkgKi8KIAlwaXRfY2UuY3B1bWFzayA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlwaXRfY2UubXVsdCA9IGRpdl9zYyhDTE9DS19USUNLX1JBVEUsIE5TRUNfUEVSX1NFQywgcGl0X2NlLnNoaWZ0KTsKLQlwaXRfY2UubWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDdGRkYsICZwaXRfY2UpOwotCXBpdF9jZS5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4RiwgJnBpdF9jZSk7CiAKLQljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJnBpdF9jZSk7CisJY2xvY2tldmVudHNfY29uZmlnX2FuZF9yZWdpc3RlcigmcGl0X2NlLCBDTE9DS19USUNLX1JBVEUsIDB4RiwgMHg3RkZGKTsKIAlnbG9iYWxfY2xvY2tfZXZlbnQgPSAmcGl0X2NlOwogfQogCiAjaWZuZGVmIENPTkZJR19YODZfNjQKLS8qCi0gKiBTaW5jZSB0aGUgUElUIG92ZXJmbG93cyBldmVyeSB0aWNrLCBpdHMgbm90IHZlcnkgdXNlZnVsCi0gKiB0byBqdXN0IHJlYWQgYnkgaXRzZWxmLiBTbyB1c2UgamlmZmllcyB0byBlbXVsYXRlIGEgZnJlZQotICogcnVubmluZyBjb3VudGVyOgotICovCi1zdGF0aWMgY3ljbGVfdCBwaXRfcmVhZChzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzKQotewotCXN0YXRpYyBpbnQgb2xkX2NvdW50OwotCXN0YXRpYyB1MzIgb2xkX2ppZnM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgY291bnQ7Ci0JdTMyIGppZnM7Ci0KLQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjUzX2xvY2ssIGZsYWdzKTsKLQkvKgotCSAqIEFsdGhvdWdoIG91ciBjYWxsZXIgbWF5IGhhdmUgdGhlIHJlYWQgc2lkZSBvZiB4dGltZV9sb2NrLAotCSAqIHRoaXMgaXMgbm93IGEgc2VxbG9jaywgYW5kIHdlIGFyZSBjaGVhdGluZyBpbiB0aGlzIHJvdXRpbmUKLQkgKiBieSBoYXZpbmcgc2lkZSBlZmZlY3RzIG9uIHN0YXRlIHRoYXQgd2UgY2Fubm90IHVuZG8gaWYKLQkgKiB0aGVyZSBpcyBhIGNvbGxpc2lvbiBvbiB0aGUgc2VxbG9jayBhbmQgb3VyIGNhbGxlciBoYXMgdG8KLQkgKiByZXRyeS4gIChOYW1lbHksIG9sZF9qaWZzIGFuZCBvbGRfY291bnQuKSAgU28gd2UgbXVzdCB0cmVhdAotCSAqIGppZmZpZXMgYXMgdm9sYXRpbGUgZGVzcGl0ZSB0aGUgbG9jay4gIFdlIHJlYWQgamlmZmllcwotCSAqIGJlZm9yZSBsYXRjaGluZyB0aGUgdGltZXIgY291bnQgdG8gZ3VhcmFudGVlIHRoYXQgYWx0aG91Z2gKLQkgKiB0aGUgamlmZmllcyB2YWx1ZSBtaWdodCBiZSBvbGRlciB0aGFuIHRoZSBjb3VudCAodGhhdCBpcywKLQkgKiB0aGUgY291bnRlciBtYXkgdW5kZXJmbG93IGJldHdlZW4gdGhlIGxhc3QgcG9pbnQgd2hlcmUKLQkgKiBqaWZmaWVzIHdhcyBpbmNyZW1lbnRlZCBhbmQgdGhlIHBvaW50IHdoZXJlIHdlIGxhdGNoIHRoZQotCSAqIGNvdW50KSwgaXQgY2Fubm90IGJlIG5ld2VyLgotCSAqLwotCWppZnMgPSBqaWZmaWVzOwotCW91dGJfcGl0KDB4MDAsIFBJVF9NT0RFKTsJLyogbGF0Y2ggdGhlIGNvdW50IEFTQVAgKi8KLQljb3VudCA9IGluYl9waXQoUElUX0NIMCk7CS8qIHJlYWQgdGhlIGxhdGNoZWQgY291bnQgKi8KLQljb3VudCB8PSBpbmJfcGl0KFBJVF9DSDApIDw8IDg7Ci0KLQkvKiBWSUE2ODZhIHRlc3QgY29kZS4uLiByZXNldCB0aGUgbGF0Y2ggaWYgY291bnQgPiBtYXggKyAxICovCi0JaWYgKGNvdW50ID4gTEFUQ0gpIHsKLQkJb3V0Yl9waXQoMHgzNCwgUElUX01PREUpOwotCQlvdXRiX3BpdChMQVRDSCAmIDB4ZmYsIFBJVF9DSDApOwotCQlvdXRiX3BpdChMQVRDSCA+PiA4LCBQSVRfQ0gwKTsKLQkJY291bnQgPSBMQVRDSCAtIDE7Ci0JfQotCi0JLyoKLQkgKiBJdCdzIHBvc3NpYmxlIGZvciBjb3VudCB0byBhcHBlYXIgdG8gZ28gdGhlIHdyb25nIHdheSBmb3IgYQotCSAqIGNvdXBsZSBvZiByZWFzb25zOgotCSAqCi0JICogIDEuIFRoZSB0aW1lciBjb3VudGVyIHVuZGVyZmxvd3MsIGJ1dCB3ZSBoYXZlbid0IGhhbmRsZWQgdGhlCi0JICogICAgIHJlc3VsdGluZyBpbnRlcnJ1cHQgYW5kIGluY3JlbWVudGVkIGppZmZpZXMgeWV0LgotCSAqICAyLiBIYXJkd2FyZSBwcm9ibGVtIHdpdGggdGhlIHRpbWVyLCBub3QgZ2l2aW5nIHVzIGNvbnRpbnVvdXMgdGltZSwKLQkgKiAgICAgdGhlIGNvdW50ZXIgZG9lcyBzbWFsbCAianVtcHMiIHVwd2FyZHMgb24gc29tZSBQZW50aXVtIHN5c3RlbXMsCi0JICogICAgIChzZWUgYyd0IDk1LzEwIHBhZ2UgMzM1IGZvciBOZXB0dW4gYnVnLikKLQkgKgotCSAqIFByZXZpb3VzIGF0dGVtcHRzIHRvIGhhbmRsZSB0aGVzZSBjYXNlcyBpbnRlbGxpZ2VudGx5IHdlcmUKLQkgKiBidWdneSwgc28gd2UganVzdCBkbyB0aGUgc2ltcGxlIHRoaW5nIG5vdy4KLQkgKi8KLQlpZiAoY291bnQgPiBvbGRfY291bnQgJiYgamlmcyA9PSBvbGRfamlmcykKLQkJY291bnQgPSBvbGRfY291bnQ7Ci0KLQlvbGRfY291bnQgPSBjb3VudDsKLQlvbGRfamlmcyA9IGppZnM7Ci0KLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTNfbG9jaywgZmxhZ3MpOwotCi0JY291bnQgPSAoTEFUQ0ggLSAxKSAtIGNvdW50OwotCi0JcmV0dXJuIChjeWNsZV90KShqaWZzICogTEFUQ0gpICsgY291bnQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgcGl0X2NzID0gewotCS5uYW1lCQk9ICJwaXQiLAotCS5yYXRpbmcJCT0gMTEwLAotCS5yZWFkCQk9IHBpdF9yZWFkLAotCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAotCS5tdWx0CQk9IDAsCi0JLnNoaWZ0CQk9IDIwLAotfTsKLQogc3RhdGljIGludCBfX2luaXQgaW5pdF9waXRfY2xvY2tzb3VyY2Uodm9pZCkKIHsKIAkgLyoKQEAgLTIwNSwxMCArMTI2LDcgQEAKIAkgICAgcGl0X2NlLm1vZGUgIT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUMpCiAJCXJldHVybiAwOwogCi0JcGl0X2NzLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KENMT0NLX1RJQ0tfUkFURSwgcGl0X2NzLnNoaWZ0KTsKLQotCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3RlcigmcGl0X2NzKTsKKwlyZXR1cm4gY2xvY2tzb3VyY2VfaTgyNTNfaW5pdCgpOwogfQogYXJjaF9pbml0Y2FsbChpbml0X3BpdF9jbG9ja3NvdXJjZSk7Ci0KICNlbmRpZiAvKiAhQ09ORklHX1g4Nl82NCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycS5jIGIvYXJjaC94ODYva2VybmVsL2lycS5jCmluZGV4IDFjYjBiOWYuLjZjMDgwMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKQEAgLTI0OSw3ICsyNDksNyBAQAogCiAJCWRhdGEgPSBpcnFfZGVzY19nZXRfaXJxX2RhdGEoZGVzYyk7CiAJCWFmZmluaXR5ID0gZGF0YS0+YWZmaW5pdHk7Ci0JCWlmICghaXJxX2hhc19hY3Rpb24oaXJxKSB8fAorCQlpZiAoIWlycV9oYXNfYWN0aW9uKGlycSkgfHwgaXJxZF9pc19wZXJfY3B1KGRhdGEpIHx8CiAJCSAgICBjcHVtYXNrX3N1YnNldChhZmZpbml0eSwgY3B1X29ubGluZV9tYXNrKSkgewogCQkJcmF3X3NwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIAkJCWNvbnRpbnVlOwpAQCAtMjc2LDcgKzI3Niw4IEBACiAJCWVsc2UgaWYgKCEod2FybmVkKyspKQogCQkJc2V0X2FmZmluaXR5ID0gMDsKIAotCQlpZiAoIWlycWRfY2FuX21vdmVfaW5fcHJvY2Vzc19jb250ZXh0KGRhdGEpICYmIGNoaXAtPmlycV91bm1hc2spCisJCWlmICghaXJxZF9jYW5fbW92ZV9pbl9wcm9jZXNzX2NvbnRleHQoZGF0YSkgJiYKKwkJICAgICFpcnFkX2lycV9kaXNhYmxlZChkYXRhKSAmJiBjaGlwLT5pcnFfdW5tYXNrKQogCQkJY2hpcC0+aXJxX3VubWFzayhkYXRhKTsKIAogCQlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2p1bXBfbGFiZWwuYyBiL2FyY2gveDg2L2tlcm5lbC9qdW1wX2xhYmVsLmMKaW5kZXggOTYxYjZiMy4uM2ZlZTM0NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2p1bXBfbGFiZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvanVtcF9sYWJlbC5jCkBAIC0zNCw3ICszNCw3IEBACiAJCWNvZGUub2Zmc2V0ID0gZW50cnktPnRhcmdldCAtCiAJCQkJKGVudHJ5LT5jb2RlICsgSlVNUF9MQUJFTF9OT1BfU0laRSk7CiAJfSBlbHNlCi0JCW1lbWNweSgmY29kZSwgaWRlYWxfbm9wNSwgSlVNUF9MQUJFTF9OT1BfU0laRSk7CisJCW1lbWNweSgmY29kZSwgaWRlYWxfbm9wc1tOT1BfQVRPTUlDNV0sIEpVTVBfTEFCRUxfTk9QX1NJWkUpOwogCWdldF9vbmxpbmVfY3B1cygpOwogCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCXRleHRfcG9rZV9zbXAoKHZvaWQgKillbnRyeS0+Y29kZSwgJmNvZGUsIEpVTVBfTEFCRUxfTk9QX1NJWkUpOwpAQCAtNDQsNyArNDQsOCBAQAogCiB2b2lkIGFyY2hfanVtcF9sYWJlbF90ZXh0X3Bva2VfZWFybHkoanVtcF9sYWJlbF90IGFkZHIpCiB7Ci0JdGV4dF9wb2tlX2Vhcmx5KCh2b2lkICopYWRkciwgaWRlYWxfbm9wNSwgSlVNUF9MQUJFTF9OT1BfU0laRSk7CisJdGV4dF9wb2tlX2Vhcmx5KCh2b2lkICopYWRkciwgaWRlYWxfbm9wc1tOT1BfQVRPTUlDNV0sCisJCQlKVU1QX0xBQkVMX05PUF9TSVpFKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwppbmRleCBjOTY5ZmQ5Li5mMWE2MjQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKQEAgLTExODMsMTIgKzExODMsMTMgQEAKIAkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBUaGlzIGlzIHBvc3NpYmxlIGlmIG9wIGlzIHVuZGVyIGRlbGF5ZWQgdW5vcHRpbWl6aW5nICovCiAJaWYgKGtwcm9iZV9kaXNhYmxlZCgmb3AtPmtwKSkKIAkJcmV0dXJuOwogCi0JcHJlZW1wdF9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWlmIChrcHJvYmVfcnVubmluZygpKSB7CiAJCWtwcm9iZXNfaW5jX25taXNzZWRfY291bnQoJm9wLT5rcCk7CiAJfSBlbHNlIHsKQEAgLTEyMDcsNyArMTIwOCw3IEBACiAJCW9wdF9wcmVfaGFuZGxlcigmb3AtPmtwLCByZWdzKTsKIAkJX190aGlzX2NwdV93cml0ZShjdXJyZW50X2twcm9iZSwgTlVMTCk7CiAJfQotCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgX19rcHJvYmVzIGNvcHlfb3B0aW1pemVkX2luc3RydWN0aW9ucyh1OCAqZGVzdCwgdTggKnNyYykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm1jbG9jay5jIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKaW5kZXggZjk4ZDNlYS4uNjM4OWE2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bWNsb2NrLmMKQEAgLTI2LDggKzI2LDYgQEAKICNpbmNsdWRlIDxhc20veDg2X2luaXQuaD4KICNpbmNsdWRlIDxhc20vcmVib290Lmg+CiAKLSNkZWZpbmUgS1ZNX1NDQUxFIDIyCi0KIHN0YXRpYyBpbnQga3ZtY2xvY2sgPSAxOwogc3RhdGljIGludCBtc3Jfa3ZtX3N5c3RlbV90aW1lID0gTVNSX0tWTV9TWVNURU1fVElNRTsKIHN0YXRpYyBpbnQgbXNyX2t2bV93YWxsX2Nsb2NrID0gTVNSX0tWTV9XQUxMX0NMT0NLOwpAQCAtMTIwLDggKzExOCw2IEBACiAJLnJlYWQgPSBrdm1fY2xvY2tfZ2V0X2N5Y2xlcywKIAkucmF0aW5nID0gNDAwLAogCS5tYXNrID0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCi0JLm11bHQgPSAxIDw8IEtWTV9TQ0FMRSwKLQkuc2hpZnQgPSBLVk1fU0NBTEUsCiAJLmZsYWdzID0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC0yMDMsNyArMTk5LDcgQEAKIAltYWNoaW5lX29wcy5jcmFzaF9zaHV0ZG93biAgPSBrdm1fY3Jhc2hfc2h1dGRvd247CiAjZW5kaWYKIAlrdm1fZ2V0X3ByZXNldF9scGooKTsKLQljbG9ja3NvdXJjZV9yZWdpc3Rlcigma3ZtX2Nsb2NrKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigma3ZtX2Nsb2NrLCBOU0VDX1BFUl9TRUMpOwogCXB2X2luZm8ucGFyYXZpcnRfZW5hYmxlZCA9IDE7CiAJcHZfaW5mby5uYW1lID0gIktWTSI7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gveDg2L2tlcm5lbC9tb2R1bGUuYwppbmRleCBhYjIzZjFhLi41MmYyNTZmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbW9kdWxlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21vZHVsZS5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYnVnLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDVhNTMyY2UuLmVmNTk4MTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYwpAQCAtNzE4LDE0ICs3MTgsMTIgQEAKIHN0YXRpYyBpbnQKIGNoZWNrX3Nsb3QodW5zaWduZWQgbG9uZyBtcGNfbmV3X3BoeXMsIHVuc2lnbmVkIGxvbmcgbXBjX25ld19sZW5ndGgsIGludCBjb3VudCkKIHsKLQlpbnQgcmV0ID0gMDsKLQogCWlmICghbXBjX25ld19waHlzIHx8IGNvdW50IDw9IG1wY19uZXdfbGVuZ3RoKSB7CiAJCVdBUk4oMSwgInVwZGF0ZV9tcHRhYmxlOiBObyBzcGFyZSBzbG90cyAobGVuZ3RoOiAleClcbiIsIGNvdW50KTsKIAkJcmV0dXJuIC0xOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIDA7CiB9CiAjZWxzZSAvKiBDT05GSUdfWDg2X0lPX0FQSUMgKi8KIHN0YXRpYwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1pb21tdV90YWJsZS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1pb21tdV90YWJsZS5jCmluZGV4IDU1ZDc0NWUuLjM1Y2NmNzUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktaW9tbXVfdGFibGUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWlvbW11X3RhYmxlLmMKQEAgLTUwLDIwICs1MCwxNCBAQAogCQkJCXN0cnVjdCBpb21tdV90YWJsZV9lbnRyeSAqZmluaXNoKQogewogCXN0cnVjdCBpb21tdV90YWJsZV9lbnRyeSAqcCwgKnEsICp4OwotCWNoYXIgc3ltX3BbS1NZTV9TWU1CT0xfTEVOXTsKLQljaGFyIHN5bV9xW0tTWU1fU1lNQk9MX0xFTl07CiAKIAkvKiBTaW1wbGUgY3ljbGljIGRlcGVuZGVuY3kgY2hlY2tlci4gKi8KIAlmb3IgKHAgPSBzdGFydDsgcCA8IGZpbmlzaDsgcCsrKSB7CiAJCXEgPSBmaW5kX2RlcGVuZGVudHNfb2Yoc3RhcnQsIGZpbmlzaCwgcCk7CiAJCXggPSBmaW5kX2RlcGVuZGVudHNfb2Yoc3RhcnQsIGZpbmlzaCwgcSk7CiAJCWlmIChwID09IHgpIHsKLQkJCXNwcmludF9zeW1ib2woc3ltX3AsICh1bnNpZ25lZCBsb25nKXAtPmRldGVjdCk7Ci0JCQlzcHJpbnRfc3ltYm9sKHN5bV9xLCAodW5zaWduZWQgbG9uZylxLT5kZXRlY3QpOwotCi0JCQlwcmludGsoS0VSTl9FUlIgIkNZQ0xJQyBERVBFTkRFTkNZIEZPVU5EISAlcyBkZXBlbmRzIiBcCi0JCQkJCSIgb24gJXMgYW5kIHZpY2UtdmVyc2EuIEJSRUFLSU5HIElULlxuIiwKLQkJCQkJc3ltX3AsIHN5bV9xKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiQ1lDTElDIERFUEVOREVOQ1kgRk9VTkQhICVwUyBkZXBlbmRzIG9uICVwUyBhbmQgdmljZS12ZXJzYS4gQlJFQUtJTkcgSVQuXG4iLAorCQkJICAgICAgIHAtPmRldGVjdCwgcS0+ZGV0ZWN0KTsKIAkJCS8qIEhlYXZ5IGhhbmRlZCB3YXkuLiovCiAJCQl4LT5kZXBlbmQgPSAwOwogCQl9CkBAIC03MiwxMiArNjYsOCBAQAogCWZvciAocCA9IHN0YXJ0OyBwIDwgZmluaXNoOyBwKyspIHsKIAkJcSA9IGZpbmRfZGVwZW5kZW50c19vZihwLCBmaW5pc2gsIHApOwogCQlpZiAocSAmJiBxID4gcCkgewotCQkJc3ByaW50X3N5bWJvbChzeW1fcCwgKHVuc2lnbmVkIGxvbmcpcC0+ZGV0ZWN0KTsKLQkJCXNwcmludF9zeW1ib2woc3ltX3EsICh1bnNpZ25lZCBsb25nKXEtPmRldGVjdCk7Ci0KLQkJCXByaW50ayhLRVJOX0VSUiAiRVhFQ1VUSU9OIE9SREVSIElOVkFMSUQhICVzICJcCi0JCQkJCSJzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSAlcyFcbiIsCi0JCQkJCXN5bV9wLCBzeW1fcSk7CisJCQlwcmludGsoS0VSTl9FUlIgIkVYRUNVVElPTiBPUkRFUiBJTlZBTElEISAlcFMgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgJXBTIVxuIiwKKwkJCSAgICAgICBwLT5kZXRlY3QsIHEtPmRldGVjdCk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNDU4OTJkYy4uZjY1ZTViNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwpAQCAtNjA4LDYgKzYwOCw5IEBACiAJdW5zaWduZWQgbGVuLCB0eXBlOwogCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKIAorCWlmIChwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKHRzaykgPCAwKQorCQlyZXR1cm4gLUVTUkNIOworCiAJZGF0YSAmPSB+RFJfQ09OVFJPTF9SRVNFUlZFRDsKIAlvbGRfZHI3ID0gcHRyYWNlX2dldF9kcjcodGhyZWFkLT5wdHJhY2VfYnBzKTsKIHJlc3RvcmU6CkBAIC02NTUsNiArNjU4LDkgQEAKIAkJfQogCQlnb3RvIHJlc3RvcmU7CiAJfQorCisJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOworCiAJcmV0dXJuICgob3JpZ19yZXQgPCAwKSA/IG9yaWdfcmV0IDogcmMpOwogfQogCkBAIC02NjgsMTAgKzY3NCwxNyBAQAogCiAJaWYgKG4gPCBIQlBfTlVNKSB7CiAJCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKKworCQlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyh0c2spIDwgMCkKKwkJCXJldHVybiAtRVNSQ0g7CisKIAkJYnAgPSB0aHJlYWQtPnB0cmFjZV9icHNbbl07CiAJCWlmICghYnApCi0JCQlyZXR1cm4gMDsKLQkJdmFsID0gYnAtPmh3LmluZm8uYWRkcmVzczsKKwkJCXZhbCA9IDA7CisJCWVsc2UKKwkJCXZhbCA9IGJwLT5ody5pbmZvLmFkZHJlc3M7CisKKwkJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOwogCX0gZWxzZSBpZiAobiA9PSA2KSB7CiAJCXZhbCA9IHRocmVhZC0+ZGVidWdyZWc2OwogCSB9IGVsc2UgaWYgKG4gPT0gNykgewpAQCAtNjg2LDYgKzY5OSwxMCBAQAogCXN0cnVjdCBwZXJmX2V2ZW50ICpicDsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZ0c2stPnRocmVhZDsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGF0dHI7CisJaW50IGVyciA9IDA7CisKKwlpZiAocHRyYWNlX2dldF9icmVha3BvaW50cyh0c2spIDwgMCkKKwkJcmV0dXJuIC1FU1JDSDsKIAogCWlmICghdC0+cHRyYWNlX2Jwc1tucl0pIHsKIAkJcHRyYWNlX2JyZWFrcG9pbnRfaW5pdCgmYXR0cik7CkBAIC03MDksMjQgKzcyNiwyMyBAQAogCQkgKiB3cml0aW5nIGZvciB0aGUgdXNlci4gQW5kIGFueXdheSB0aGlzIGlzIHRoZSBwcmV2aW91cwogCQkgKiBiZWhhdmlvdXIuCiAJCSAqLwotCQlpZiAoSVNfRVJSKGJwKSkKLQkJCXJldHVybiBQVFJfRVJSKGJwKTsKKwkJaWYgKElTX0VSUihicCkpIHsKKwkJCWVyciA9IFBUUl9FUlIoYnApOworCQkJZ290byBwdXQ7CisJCX0KIAogCQl0LT5wdHJhY2VfYnBzW25yXSA9IGJwOwogCX0gZWxzZSB7Ci0JCWludCBlcnI7Ci0KIAkJYnAgPSB0LT5wdHJhY2VfYnBzW25yXTsKIAogCQlhdHRyID0gYnAtPmF0dHI7CiAJCWF0dHIuYnBfYWRkciA9IGFkZHI7CiAJCWVyciA9IG1vZGlmeV91c2VyX2h3X2JyZWFrcG9pbnQoYnAsICZhdHRyKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7CiAJfQogCi0KLQlyZXR1cm4gMDsKK3B1dDoKKwlwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHRzayk7CisJcmV0dXJuIGVycjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3RfMzIuUwppbmRleCAyOTA5MmIzLi4xZDVjNDZkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290XzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdF8zMi5TCkBAIC0yMSwyNiArMjEsMjYgQEAKIAkvKiBHZXQgb3VyIG93biByZWxvY2F0ZWQgYWRkcmVzcyAqLwogCWNhbGwJMWYKIDE6CXBvcGwJJWVieAotCXN1YmwJJDFiLCAlZWJ4CisJc3VibAkkKDFiIC0gcl9iYXNlKSwgJWVieAogCiAJLyogQ29tcHV0ZSB0aGUgZXF1aXZhbGVudCByZWFsLW1vZGUgc2VnbWVudCAqLwogCW1vdmwJJWVieCwgJWVjeAogCXNocmwJJDQsICVlY3gKIAkKIAkvKiBQYXRjaCBwb3N0LXJlYWwtbW9kZSBzZWdtZW50IGp1bXAgKi8KLQltb3Z3CWRpc3BhdGNoX3RhYmxlKCVlYngsJWVheCwyKSwlYXgKLQltb3Z3CSVheCwgMTAxZiglZWJ4KQotCW1vdncJJWN4LCAxMDJmKCVlYngpCisJbW92dwkoZGlzcGF0Y2hfdGFibGUgLSByX2Jhc2UpKCVlYngsJWVheCwyKSwlYXgKKwltb3Z3CSVheCwgKDEwMWYgLSByX2Jhc2UpKCVlYngpCisJbW92dwklY3gsICgxMDJmIC0gcl9iYXNlKSglZWJ4KQogCiAJLyogU2V0IHVwIHRoZSBJRFQgZm9yIHJlYWwgbW9kZS4gKi8KLQlsaWR0bAltYWNoaW5lX3JlYWxfcmVzdGFydF9pZHQoJWVieCkKKwlsaWR0bAkobWFjaGluZV9yZWFsX3Jlc3RhcnRfaWR0IC0gcl9iYXNlKSglZWJ4KQogCiAJLyoKIAkgKiBTZXQgdXAgYSBHRFQgZnJvbSB3aGljaCB3ZSBjYW4gbG9hZCBzZWdtZW50IGRlc2NyaXB0b3JzIGZvciByZWFsCiAJICogbW9kZS4gIFRoZSBHRFQgaXMgbm90IHVzZWQgaW4gcmVhbCBtb2RlOyBpdCBpcyBqdXN0IG5lZWRlZCBoZXJlIHRvCiAJICogcHJlcGFyZSB0aGUgZGVzY3JpcHRvcnMuCiAJICovCi0JbGdkdGwJbWFjaGluZV9yZWFsX3Jlc3RhcnRfZ2R0KCVlYngpCisJbGdkdGwJKG1hY2hpbmVfcmVhbF9yZXN0YXJ0X2dkdCAtIHJfYmFzZSkoJWVieCkKIAogCS8qCiAJICogTG9hZCB0aGUgZGF0YSBzZWdtZW50IHJlZ2lzdGVycyB3aXRoIDE2LWJpdCBjb21wYXRpYmxlIHZhbHVlcwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwppbmRleCA0YmU5YjM5Li5jMzA1MGFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtNjkxLDggKzY5MSw2IEBACiAKIHZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogCW1lbWNweSgmYm9vdF9jcHVfZGF0YSwgJm5ld19jcHVfZGF0YSwgc2l6ZW9mKG5ld19jcHVfZGF0YSkpOwogCXZpc3dzX2Vhcmx5X2RldGVjdCgpOwpAQCAtMTA0MSw5ICsxMDM5LDcgQEAKIAogCW1jaGVja19pbml0KCk7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JYXJjaF9pbml0X2lkZWFsX25vcDUoKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJYXJjaF9pbml0X2lkZWFsX25vcHMoKTsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXAuYwppbmRleCA1MTNkZWFjLi4wMTNlN2ViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcC5jCkBAIC0xOTQsMTQgKzE5NCwxMyBAQAogfQogCiAvKgotICogUmVzY2hlZHVsZSBjYWxsIGJhY2suIE5vdGhpbmcgdG8gZG8sCi0gKiBhbGwgdGhlIHdvcmsgaXMgZG9uZSBhdXRvbWF0aWNhbGx5IHdoZW4KLSAqIHdlIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQuCisgKiBSZXNjaGVkdWxlIGNhbGwgYmFjay4KICAqLwogdm9pZCBzbXBfcmVzY2hlZHVsZV9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJYWNrX0FQSUNfaXJxKCk7CiAJaW5jX2lycV9zdGF0KGlycV9yZXNjaGVkX2NvdW50KTsKKwlzY2hlZHVsZXJfaXBpKCk7CiAJLyoKIAkgKiBLVk0gdXNlcyB0aGlzIGludGVycnVwdCB0byBmb3JjZSBhIGNwdSBvdXQgb2YgZ3Vlc3QgbW9kZQogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggOGVkODkwOC4uYzI4NzFkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0zMTIsMjYgKzMxMiw2IEBACiAJCWlkZW50aWZ5X3NlY29uZGFyeV9jcHUoYyk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBjaGVja19jcHVfc2libGluZ3Nfb25fc2FtZV9ub2RlKGludCBjcHUxLCBpbnQgY3B1MikKLXsKLQlpbnQgbm9kZTEgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUxKTsKLQlpbnQgbm9kZTIgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUyKTsKLQotCS8qCi0JICogT3VyIENQVSBzY2hlZHVsZXIgYXNzdW1lcyBhbGwgbG9naWNhbCBjcHVzIGluIHRoZSBzYW1lIHBoeXNpY2FsIGNwdQotCSAqIHNoYXJlIHRoZSBzYW1lIG5vZGUuIEJ1dCwgYnVnZ3kgQUNQSSBvciBOVU1BIGVtdWxhdGlvbiBtaWdodCBhc3NpZ24KLQkgKiB0aGVtIHRvIGRpZmZlcmVudCBub2RlLiBGaXggaXQuCi0JICovCi0JaWYgKG5vZGUxICE9IG5vZGUyKSB7Ci0JCXByX3dhcm5pbmcoIkNQVSAlZCBpbiBub2RlICVkIGFuZCBDUFUgJWQgaW4gbm9kZSAlZCBhcmUgaW4gdGhlIHNhbWUgcGh5c2ljYWwgQ1BVLiBmb3JjaW5nIHNhbWUgbm9kZSAlZFxuIiwKLQkJCSAgIGNwdTEsIG5vZGUxLCBjcHUyLCBub2RlMiwgbm9kZTIpOwotCi0JCW51bWFfcmVtb3ZlX2NwdShjcHUxKTsKLQkJbnVtYV9zZXRfbm9kZShjcHUxLCBub2RlMik7Ci0JCW51bWFfYWRkX2NwdShjcHUxKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBsaW5rX3RocmVhZF9zaWJsaW5ncyhpbnQgY3B1MSwgaW50IGNwdTIpCiB7CiAJY3B1bWFza19zZXRfY3B1KGNwdTEsIGNwdV9zaWJsaW5nX21hc2soY3B1MikpOwpAQCAtMzQwLDcgKzMyMCw2IEBACiAJY3B1bWFza19zZXRfY3B1KGNwdTIsIGNwdV9jb3JlX21hc2soY3B1MSkpOwogCWNwdW1hc2tfc2V0X2NwdShjcHUxLCBjcHVfbGxjX3NoYXJlZF9tYXNrKGNwdTIpKTsKIAljcHVtYXNrX3NldF9jcHUoY3B1MiwgY3B1X2xsY19zaGFyZWRfbWFzayhjcHUxKSk7Ci0JY2hlY2tfY3B1X3NpYmxpbmdzX29uX3NhbWVfbm9kZShjcHUxLCBjcHUyKTsKIH0KIAogCkBAIC0zODIsMTIgKzM2MSwxMCBAQAogCQkgICAgcGVyX2NwdShjcHVfbGxjX2lkLCBjcHUpID09IHBlcl9jcHUoY3B1X2xsY19pZCwgaSkpIHsKIAkJCWNwdW1hc2tfc2V0X2NwdShpLCBjcHVfbGxjX3NoYXJlZF9tYXNrKGNwdSkpOwogCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgY3B1X2xsY19zaGFyZWRfbWFzayhpKSk7Ci0JCQljaGVja19jcHVfc2libGluZ3Nfb25fc2FtZV9ub2RlKGNwdSwgaSk7CiAJCX0KIAkJaWYgKGMtPnBoeXNfcHJvY19pZCA9PSBjcHVfZGF0YShpKS5waHlzX3Byb2NfaWQpIHsKIAkJCWNwdW1hc2tfc2V0X2NwdShpLCBjcHVfY29yZV9tYXNrKGNwdSkpOwogCQkJY3B1bWFza19zZXRfY3B1KGNwdSwgY3B1X2NvcmVfbWFzayhpKSk7Ci0JCQljaGVja19jcHVfc2libGluZ3Nfb25fc2FtZV9ub2RlKGNwdSwgaSk7CiAJCQkvKgogCQkJICogIERvZXMgdGhpcyBuZXcgY3B1IGJyaW5ndXAgYSBuZXcgY29yZT8KIAkJCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9zdGFja3RyYWNlLmMKaW5kZXggNjUxNTczMy4uNTVkOWJjMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N0YWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3RhY2t0cmFjZS5jCkBAIC05LDE1ICs5LDYgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KIAotc3RhdGljIHZvaWQgc2F2ZV9zdGFja193YXJuaW5nKHZvaWQgKmRhdGEsIGNoYXIgKm1zZykKLXsKLX0KLQotc3RhdGljIHZvaWQKLXNhdmVfc3RhY2tfd2FybmluZ19zeW1ib2wodm9pZCAqZGF0YSwgY2hhciAqbXNnLCB1bnNpZ25lZCBsb25nIHN5bWJvbCkKLXsKLX0KLQogc3RhdGljIGludCBzYXZlX3N0YWNrX3N0YWNrKHZvaWQgKmRhdGEsIGNoYXIgKm5hbWUpCiB7CiAJcmV0dXJuIDA7CkBAIC01MywxNiArNDQsMTIgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdGFja3RyYWNlX29wcyBzYXZlX3N0YWNrX29wcyA9IHsKLQkud2FybmluZwk9IHNhdmVfc3RhY2tfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wJPSBzYXZlX3N0YWNrX3dhcm5pbmdfc3ltYm9sLAogCS5zdGFjawkJPSBzYXZlX3N0YWNrX3N0YWNrLAogCS5hZGRyZXNzCT0gc2F2ZV9zdGFja19hZGRyZXNzLAogCS53YWxrX3N0YWNrCT0gcHJpbnRfY29udGV4dF9zdGFjaywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RhY2t0cmFjZV9vcHMgc2F2ZV9zdGFja19vcHNfbm9zY2hlZCA9IHsKLQkud2FybmluZwk9IHNhdmVfc3RhY2tfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wJPSBzYXZlX3N0YWNrX3dhcm5pbmdfc3ltYm9sLAogCS5zdGFjawkJPSBzYXZlX3N0YWNrX3N0YWNrLAogCS5hZGRyZXNzCT0gc2F2ZV9zdGFja19hZGRyZXNzX25vc2NoZWQsCiAJLndhbGtfc3RhY2sJPSBwcmludF9jb250ZXh0X3N0YWNrLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3g4Nl9pbml0LmMgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwppbmRleCBjMTE1MTRlLi43NWVmNGIxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYwpAQCAtNjEsNiArNjEsMTAgQEAKIAkJLmJhbm5lcgkJCT0gZGVmYXVsdF9iYW5uZXIsCiAJfSwKIAorCS5tYXBwaW5nID0geworCQkucGFnZXRhYmxlX3Jlc2VydmUJCT0gbmF0aXZlX3BhZ2V0YWJsZV9yZXNlcnZlLAorCX0sCisKIAkucGFnaW5nID0gewogCQkucGFnZXRhYmxlX3NldHVwX3N0YXJ0CT0gbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9zdGFydCwKIAkJLnBhZ2V0YWJsZV9zZXR1cF9kb25lCT0gbmF0aXZlX3BhZ2V0YWJsZV9zZXR1cF9kb25lLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKaW5kZXggMWNkNjA4OS4uZTE5MWMwOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYworKysgYi9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCkBAIC03LDcgKzcsNyBAQAogICoga2VybmVsIGFuZCBpbnNlcnQgYSBtb2R1bGUgKGxnLmtvKSB3aGljaCBhbGxvd3MgdXMgdG8gcnVuIG90aGVyIExpbnV4CiAgKiBrZXJuZWxzIHRoZSBzYW1lIHdheSB3ZSdkIHJ1biBwcm9jZXNzZXMuICBXZSBjYWxsIHRoZSBmaXJzdCBrZXJuZWwgdGhlIEhvc3QsCiAgKiBhbmQgdGhlIG90aGVycyB0aGUgR3Vlc3RzLiAgVGhlIHByb2dyYW0gd2hpY2ggc2V0cyB1cCBhbmQgY29uZmlndXJlcyBHdWVzdHMKLSAqIChzdWNoIGFzIHRoZSBleGFtcGxlIGluIERvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC5jKSBpcyBjYWxsZWQgdGhlCisgKiAoc3VjaCBhcyB0aGUgZXhhbXBsZSBpbiBEb2N1bWVudGF0aW9uL3ZpcnR1YWwvbGd1ZXN0L2xndWVzdC5jKSBpcyBjYWxsZWQgdGhlCiAgKiBMYXVuY2hlci4KICAqCiAgKiBTZWNvbmRseSwgd2Ugb25seSBydW4gc3BlY2lhbGx5IG1vZGlmaWVkIEd1ZXN0cywgbm90IG5vcm1hbCBrZXJuZWxzOiBzZXR0aW5nCkBAIC05MTMsOCArOTEzLDYgQEAKIAkucmF0aW5nCQk9IDIwMCwKIAkucmVhZAkJPSBsZ3Vlc3RfY2xvY2tfcmVhZCwKIAkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDY0KSwKLQkubXVsdAkJPSAxIDw8IDIyLAotCS5zaGlmdAkJPSAyMiwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC05OTcsNyArOTk1LDcgQEAKIAkvKiBTZXQgdXAgdGhlIHRpbWVyIGludGVycnVwdCAoMCkgdG8gZ28gdG8gb3VyIHNpbXBsZSB0aW1lciByb3V0aW5lICovCiAJaXJxX3NldF9oYW5kbGVyKDAsIGxndWVzdF90aW1lX2lycSk7CiAKLQljbG9ja3NvdXJjZV9yZWdpc3RlcigmbGd1ZXN0X2Nsb2NrKTsKKwljbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmbGd1ZXN0X2Nsb2NrLCBOU0VDX1BFUl9TRUMpOwogCiAJLyogV2UgY2FuJ3Qgc2V0IGNwdW1hc2sgaW4gdGhlIGluaXRpYWxpemVyOiBkYW1uIEMgbGltaXRhdGlvbnMhICBTZXQgaXQKIAkgKiBoZXJlIGFuZCByZWdpc3RlciBvdXIgdGltZXIgZGV2aWNlLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL2NsZWFyX3BhZ2VfNjQuUyBiL2FyY2gveDg2L2xpYi9jbGVhcl9wYWdlXzY0LlMKaW5kZXggYWE0MzI2Yi4uZjIxNDVjZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbGliL2NsZWFyX3BhZ2VfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvY2xlYXJfcGFnZV82NC5TCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLWFzbS5oPgogCiAvKgogICogWmVybyBhIHBhZ2UuIAkKQEAgLTE0LDYgKzE1LDE1IEBACiAJQ0ZJX0VORFBST0MKIEVORFBST0MoY2xlYXJfcGFnZV9jKQogCitFTlRSWShjbGVhcl9wYWdlX2NfZSkKKwlDRklfU1RBUlRQUk9DCisJbW92bCAkNDA5NiwlZWN4CisJeG9ybCAlZWF4LCVlYXgKKwlyZXAgc3Rvc2IKKwlyZXQKKwlDRklfRU5EUFJPQworRU5EUFJPQyhjbGVhcl9wYWdlX2NfZSkKKwogRU5UUlkoY2xlYXJfcGFnZSkKIAlDRklfU1RBUlRQUk9DCiAJeG9ybCAgICVlYXgsJWVheApAQCAtMzgsMjEgKzQ4LDI2IEBACiAuTGNsZWFyX3BhZ2VfZW5kOgogRU5EUFJPQyhjbGVhcl9wYWdlKQogCi0JLyogU29tZSBDUFVzIHJ1biBmYXN0ZXIgdXNpbmcgdGhlIHN0cmluZyBpbnN0cnVjdGlvbnMuCi0JICAgSXQgaXMgYWxzbyBhIGxvdCBzaW1wbGVyLiBVc2UgdGhpcyB3aGVuIHBvc3NpYmxlICovCisJLyoKKwkgKiBTb21lIENQVXMgc3VwcG9ydCBlbmhhbmNlZCBSRVAgTU9WU0IvU1RPU0IgaW5zdHJ1Y3Rpb25zLgorCSAqIEl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGlzIHdoZW4gcG9zc2libGUuCisJICogSWYgZW5oYW5jZWQgUkVQIE1PVlNCL1NUT1NCIGlzIG5vdCBhdmFpbGFibGUsIHRyeSB0byB1c2UgZmFzdCBzdHJpbmcuCisJICogT3RoZXJ3aXNlLCB1c2Ugb3JpZ2luYWwgZnVuY3Rpb24uCisJICoKKwkgKi8KIAogI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+CiAKIAkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsImF4IgogMToJLmJ5dGUgMHhlYgkJCQkJLyogam1wIDxkaXNwOD4gKi8KIAkuYnl0ZSAoY2xlYXJfcGFnZV9jIC0gY2xlYXJfcGFnZSkgLSAoMmYgLSAxYikJLyogb2Zmc2V0ICovCi0yOgorMjoJLmJ5dGUgMHhlYgkJCQkJLyogam1wIDxkaXNwOD4gKi8KKwkuYnl0ZSAoY2xlYXJfcGFnZV9jX2UgLSBjbGVhcl9wYWdlKSAtICgzZiAtIDJiKQkvKiBvZmZzZXQgKi8KKzM6CiAJLnByZXZpb3VzCiAJLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywiYSIKLQkuYWxpZ24gOAotCS5xdWFkIGNsZWFyX3BhZ2UKLQkucXVhZCAxYgotCS53b3JkIFg4Nl9GRUFUVVJFX1JFUF9HT09ECi0JLmJ5dGUgLkxjbGVhcl9wYWdlX2VuZCAtIGNsZWFyX3BhZ2UKLQkuYnl0ZSAyYiAtIDFiCisJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgY2xlYXJfcGFnZSwxYixYODZfRkVBVFVSRV9SRVBfR09PRCxcCisJCQkgICAgIC5MY2xlYXJfcGFnZV9lbmQtY2xlYXJfcGFnZSwgMmItMWIKKwlhbHRpbnN0cnVjdGlvbl9lbnRyeSBjbGVhcl9wYWdlLDJiLFg4Nl9GRUFUVVJFX0VSTVMsICAgXAorCQkJICAgICAuTGNsZWFyX3BhZ2VfZW5kLWNsZWFyX3BhZ2UsM2ItMmIKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUyBiL2FyY2gveDg2L2xpYi9jb3B5X3VzZXJfNjQuUwppbmRleCA5OWU0ODI2Li4wMjQ4NDAyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvY29weV91c2VyXzY0LlMKKysrIGIvYXJjaC94ODYvbGliL2NvcHlfdXNlcl82NC5TCkBAIC0xNSwyMyArMTUsMzAgQEAKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS1hc20uaD4KIAotCS5tYWNybyBBTFRFUk5BVElWRV9KVU1QIGZlYXR1cmUsb3JpZyxhbHQKKy8qCisgKiBCeSBwbGFjaW5nIGZlYXR1cmUyIGFmdGVyIGZlYXR1cmUxIGluIGFsdGluc3RydWN0aW9ucyBzZWN0aW9uLCB3ZSBsb2dpY2FsbHkKKyAqIGltcGxlbWVudDoKKyAqIElmIENQVSBoYXMgZmVhdHVyZTIsIGptcCB0byBhbHQyIGlzIHVzZWQKKyAqIGVsc2UgaWYgQ1BVIGhhcyBmZWF0dXJlMSwgam1wIHRvIGFsdDEgaXMgdXNlZAorICogZWxzZSBqbXAgdG8gb3JpZyBpcyB1c2VkLgorICovCisJLm1hY3JvIEFMVEVSTkFUSVZFX0pVTVAgZmVhdHVyZTEsZmVhdHVyZTIsb3JpZyxhbHQxLGFsdDIKIDA6CiAJLmJ5dGUgMHhlOQkvKiAzMmJpdCBqdW1wICovCiAJLmxvbmcgXG9yaWctMWYJLyogYnkgZGVmYXVsdCBqdW1wIHRvIG9yaWcgKi8KIDE6CiAJLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCJheCIKIDI6CS5ieXRlIDB4ZTkJCQkvKiBuZWFyIGp1bXAgd2l0aCAzMmJpdCBpbW1lZGlhdGUgKi8KLQkubG9uZyBcYWx0LTFiIC8qIG9mZnNldCAqLyAgIC8qIG9yIGFsdGVybmF0aXZlbHkgdG8gYWx0ICovCisJLmxvbmcgXGFsdDEtMWIgLyogb2Zmc2V0ICovICAgLyogb3IgYWx0ZXJuYXRpdmVseSB0byBhbHQxICovCiszOgkuYnl0ZSAweGU5CQkJLyogbmVhciBqdW1wIHdpdGggMzJiaXQgaW1tZWRpYXRlICovCisJLmxvbmcgXGFsdDItMWIgLyogb2Zmc2V0ICovICAgLyogb3IgYWx0ZXJuYXRpdmVseSB0byBhbHQyICovCiAJLnByZXZpb3VzCisKIAkuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCJhIgotCS5hbGlnbiA4Ci0JLnF1YWQgIDBiCi0JLnF1YWQgIDJiCi0JLndvcmQgIFxmZWF0dXJlCQkJLyogd2hlbiBmZWF0dXJlIGlzIHNldCAqLwotCS5ieXRlICA1Ci0JLmJ5dGUgIDUKKwlhbHRpbnN0cnVjdGlvbl9lbnRyeSAwYiwyYixcZmVhdHVyZTEsNSw1CisJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgMGIsM2IsXGZlYXR1cmUyLDUsNQogCS5wcmV2aW91cwogCS5lbmRtCiAKQEAgLTcyLDggKzc5LDEwIEBACiAJYWRkcSAlcmR4LCVyY3gKIAlqYyBiYWRfdG9fdXNlcgogCWNtcHEgVElfYWRkcl9saW1pdCglcmF4KSwlcmN4Ci0JamFlIGJhZF90b191c2VyCi0JQUxURVJOQVRJVkVfSlVNUCBYODZfRkVBVFVSRV9SRVBfR09PRCxjb3B5X3VzZXJfZ2VuZXJpY191bnJvbGxlZCxjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcKKwlqYSBiYWRfdG9fdXNlcgorCUFMVEVSTkFUSVZFX0pVTVAgWDg2X0ZFQVRVUkVfUkVQX0dPT0QsWDg2X0ZFQVRVUkVfRVJNUywJXAorCQljb3B5X3VzZXJfZ2VuZXJpY191bnJvbGxlZCxjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcsCVwKKwkJY29weV91c2VyX2VuaGFuY2VkX2Zhc3Rfc3RyaW5nCiAJQ0ZJX0VORFBST0MKIEVORFBST0MoX2NvcHlfdG9fdXNlcikKIApAQCAtODUsOCArOTQsMTAgQEAKIAlhZGRxICVyZHgsJXJjeAogCWpjIGJhZF9mcm9tX3VzZXIKIAljbXBxIFRJX2FkZHJfbGltaXQoJXJheCksJXJjeAotCWphZSBiYWRfZnJvbV91c2VyCi0JQUxURVJOQVRJVkVfSlVNUCBYODZfRkVBVFVSRV9SRVBfR09PRCxjb3B5X3VzZXJfZ2VuZXJpY191bnJvbGxlZCxjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcKKwlqYSBiYWRfZnJvbV91c2VyCisJQUxURVJOQVRJVkVfSlVNUCBYODZfRkVBVFVSRV9SRVBfR09PRCxYODZfRkVBVFVSRV9FUk1TLAlcCisJCWNvcHlfdXNlcl9nZW5lcmljX3Vucm9sbGVkLGNvcHlfdXNlcl9nZW5lcmljX3N0cmluZywJXAorCQljb3B5X3VzZXJfZW5oYW5jZWRfZmFzdF9zdHJpbmcKIAlDRklfRU5EUFJPQwogRU5EUFJPQyhfY29weV9mcm9tX3VzZXIpCiAKQEAgLTI1NSwzICsyNjYsMzcgQEAKIAkucHJldmlvdXMKIAlDRklfRU5EUFJPQwogRU5EUFJPQyhjb3B5X3VzZXJfZ2VuZXJpY19zdHJpbmcpCisKKy8qCisgKiBTb21lIENQVXMgYXJlIGFkZGluZyBlbmhhbmNlZCBSRVAgTU9WU0IvU1RPU0IgaW5zdHJ1Y3Rpb25zLgorICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgZW5oYW5jZWQgUkVQIE1PVlNCL1NUT1NCIGlmIGl0J3MgZW5hYmxlZC4KKyAqCisgKiBJbnB1dDoKKyAqIHJkaSBkZXN0aW5hdGlvbgorICogcnNpIHNvdXJjZQorICogcmR4IGNvdW50CisgKgorICogT3V0cHV0OgorICogZWF4IHVuY29waWVkIGJ5dGVzIG9yIDAgaWYgc3VjY2Vzc2Z1bC4KKyAqLworRU5UUlkoY29weV91c2VyX2VuaGFuY2VkX2Zhc3Rfc3RyaW5nKQorCUNGSV9TVEFSVFBST0MKKwlhbmRsICVlZHgsJWVkeAorCWp6IDJmCisJbW92bCAlZWR4LCVlY3gKKzE6CXJlcAorCW1vdnNiCisyOgl4b3JsICVlYXgsJWVheAorCXJldAorCisJLnNlY3Rpb24gLmZpeHVwLCJheCIKKzEyOgltb3ZsICVlY3gsJWVkeAkJLyogZWN4IGlzIHplcm9yZXN0IGFsc28gKi8KKwlqbXAgY29weV91c2VyX2hhbmRsZV90YWlsCisJLnByZXZpb3VzCisKKwkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgorCS5hbGlnbiA4CisJLnF1YWQgMWIsMTJiCisJLnByZXZpb3VzCisJQ0ZJX0VORFBST0MKK0VORFBST0MoY29weV91c2VyX2VuaGFuY2VkX2Zhc3Rfc3RyaW5nKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21lbWNweV82NC5TIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCmluZGV4IDc1ZWY2MWUuLmVmYmYyYTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKQEAgLTQsNiArNCw3IEBACiAKICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUtYXNtLmg+CiAKIC8qCiAgKiBtZW1jcHkgLSBDb3B5IGEgbWVtb3J5IGJsb2NrLgpAQCAtMzcsNiArMzgsMjMgQEAKIC5MbWVtY3B5X2U6CiAJLnByZXZpb3VzCiAKKy8qCisgKiBtZW1jcHlfY19lKCkgLSBlbmhhbmNlZCBmYXN0IHN0cmluZyBtZW1jcHkuIFRoaXMgaXMgZmFzdGVyIGFuZCBzaW1wbGVyIHRoYW4KKyAqIG1lbWNweV9jLiBVc2UgbWVtY3B5X2NfZSB3aGVuIHBvc3NpYmxlLgorICoKKyAqIFRoaXMgZ2V0cyBwYXRjaGVkIG92ZXIgdGhlIHVucm9sbGVkIHZhcmlhbnQgKGJlbG93KSB2aWEgdGhlCisgKiBhbHRlcm5hdGl2ZSBpbnN0cnVjdGlvbnMgZnJhbWV3b3JrOgorICovCisJLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiLCBAcHJvZ2JpdHMKKy5MbWVtY3B5X2NfZToKKwltb3ZxICVyZGksICVyYXgKKworCW1vdmwgJWVkeCwgJWVjeAorCXJlcCBtb3ZzYgorCXJldAorLkxtZW1jcHlfZV9lOgorCS5wcmV2aW91cworCiBFTlRSWShfX21lbWNweSkKIEVOVFJZKG1lbWNweSkKIAlDRklfU1RBUlRQUk9DCkBAIC00OSw3ICs2Nyw3IEBACiAJamIgLkxoYW5kbGVfdGFpbAogCiAJLyoKLQkgKiBXZSBjaGVjayB3aGV0aGVyIG1lbW9yeSBmYWxzZSBkZXBlbmRlY2UgY291bGQgb2NjdXIsCisJICogV2UgY2hlY2sgd2hldGhlciBtZW1vcnkgZmFsc2UgZGVwZW5kZW5jZSBjb3VsZCBvY2N1ciwKIAkgKiB0aGVuIGp1bXAgdG8gY29ycmVzcG9uZGluZyBjb3B5IG1vZGUuCiAJICovCiAJY21wICAlZGlsLCAlc2lsCkBAIC0xNzEsMjEgKzE4OSwyMiBAQAogRU5EUFJPQyhfX21lbWNweSkKIAogCS8qCi0JICogU29tZSBDUFVzIHJ1biBmYXN0ZXIgdXNpbmcgdGhlIHN0cmluZyBjb3B5IGluc3RydWN0aW9ucy4KLQkgKiBJdCBpcyBhbHNvIGEgbG90IHNpbXBsZXIuIFVzZSB0aGlzIHdoZW4gcG9zc2libGU6Ci0JICovCi0KLQkuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCAiYSIKLQkuYWxpZ24gOAotCS5xdWFkIG1lbWNweQotCS5xdWFkIC5MbWVtY3B5X2MKLQkud29yZCBYODZfRkVBVFVSRV9SRVBfR09PRAotCi0JLyoKKwkgKiBTb21lIENQVXMgYXJlIGFkZGluZyBlbmhhbmNlZCBSRVAgTU9WU0IvU1RPU0IgZmVhdHVyZQorCSAqIElmIHRoZSBmZWF0dXJlIGlzIHN1cHBvcnRlZCwgbWVtY3B5X2NfZSgpIGlzIHRoZSBmaXJzdCBjaG9pY2UuCisJICogSWYgZW5oYW5jZWQgcmVwIG1vdnNiIGNvcHkgaXMgbm90IGF2YWlsYWJsZSwgdXNlIGZhc3Qgc3RyaW5nIGNvcHkKKwkgKiBtZW1jcHlfYygpIHdoZW4gcG9zc2libGUuIFRoaXMgaXMgZmFzdGVyIGFuZCBjb2RlIGlzIHNpbXBsZXIgdGhhbgorCSAqIG9yaWdpbmFsIG1lbWNweSgpLgorCSAqIE90aGVyd2lzZSwgb3JpZ2luYWwgbWVtY3B5KCkgaXMgdXNlZC4KKwkgKiBJbiAuYWx0aW5zdHJ1Y3Rpb25zIHNlY3Rpb24sIEVSTVMgZmVhdHVyZSBpcyBwbGFjZWQgYWZ0ZXIgUkVHX0dPT0QKKyAgICAgICAgICogZmVhdHVyZSB0byBpbXBsZW1lbnQgdGhlIHJpZ2h0IHBhdGNoIG9yZGVyLgorCSAqCiAJICogUmVwbGFjZSBvbmx5IGJlZ2lubmluZywgbWVtY3B5IGlzIHVzZWQgdG8gYXBwbHkgYWx0ZXJuYXRpdmVzLAogCSAqIHNvIGl0IGlzIHNpbGx5IHRvIG92ZXJ3cml0ZSBpdHNlbGYgd2l0aCBub3BzIC0gcmVib290IGlzIHRoZQogCSAqIG9ubHkgb3V0Y29tZS4uLgogCSAqLwotCS5ieXRlIC5MbWVtY3B5X2UgLSAuTG1lbWNweV9jCi0JLmJ5dGUgLkxtZW1jcHlfZSAtIC5MbWVtY3B5X2MKKwkuc2VjdGlvbiAuYWx0aW5zdHJ1Y3Rpb25zLCAiYSIKKwlhbHRpbnN0cnVjdGlvbl9lbnRyeSBtZW1jcHksLkxtZW1jcHlfYyxYODZfRkVBVFVSRV9SRVBfR09PRCxcCisJCQkgICAgIC5MbWVtY3B5X2UtLkxtZW1jcHlfYywuTG1lbWNweV9lLS5MbWVtY3B5X2MKKwlhbHRpbnN0cnVjdGlvbl9lbnRyeSBtZW1jcHksLkxtZW1jcHlfY19lLFg4Nl9GRUFUVVJFX0VSTVMsIFwKKwkJCSAgICAgLkxtZW1jcHlfZV9lLS5MbWVtY3B5X2NfZSwuTG1lbWNweV9lX2UtLkxtZW1jcHlfY19lCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9saWIvbWVtbW92ZV82NC5TIGIvYXJjaC94ODYvbGliL21lbW1vdmVfNjQuUwppbmRleCAwZWNiODQzLi5kMGVjOWMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbWVtbW92ZV82NC5TCisrKyBiL2FyY2gveDg2L2xpYi9tZW1tb3ZlXzY0LlMKQEAgLTgsNiArOCw3IEBACiAjZGVmaW5lIF9TVFJJTkdfQwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CisjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KIAogI3VuZGVmIG1lbW1vdmUKIApAQCAtMjQsNiArMjUsNyBAQAogICovCiBFTlRSWShtZW1tb3ZlKQogCUNGSV9TVEFSVFBST0MKKwogCS8qIEhhbmRsZSBtb3JlIDMyYnl0ZXMgaW4gbG9vcCAqLwogCW1vdiAlcmRpLCAlcmF4CiAJY21wICQweDIwLCAlcmR4CkBAIC0zMSw4ICszMywxMyBAQAogCiAJLyogRGVjaWRlIGZvcndhcmQvYmFja3dhcmQgY29weSBtb2RlICovCiAJY21wICVyZGksICVyc2kKLQlqYgkyZgorCWpnZSAuTG1lbW1vdmVfYmVnaW5fZm9yd2FyZAorCW1vdiAlcnNpLCAlcjgKKwlhZGQgJXJkeCwgJXI4CisJY21wICVyZGksICVyOAorCWpnIDJmCiAKKy5MbWVtbW92ZV9iZWdpbl9mb3J3YXJkOgogCS8qCiAJICogbW92c3EgaW5zdHJ1Y3Rpb24gaGF2ZSBtYW55IHN0YXJ0dXAgbGF0ZW5jeQogCSAqIHNvIHdlIGhhbmRsZSBzbWFsbCBzaXplIGJ5IGdlbmVyYWwgcmVnaXN0ZXIuCkBAIC03OCw2ICs4NSw4IEBACiAJcmVwIG1vdnNxCiAJbW92cSAlcjExLCAoJXIxMCkKIAlqbXAgMTNmCisuTG1lbW1vdmVfZW5kX2ZvcndhcmQ6CisKIAkvKgogCSAqIEhhbmRsZSBkYXRhIGJhY2t3YXJkIGJ5IG1vdnNxLgogCSAqLwpAQCAtMTk0LDQgKzIwMywyMiBAQAogMTM6CiAJcmV0cQogCUNGSV9FTkRQUk9DCisKKwkuc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsImF4IgorLkxtZW1tb3ZlX2JlZ2luX2ZvcndhcmRfZWZzOgorCS8qIEZvcndhcmQgbW92aW5nIGRhdGEuICovCisJbW92cSAlcmR4LCAlcmN4CisJcmVwIG1vdnNiCisJcmV0cQorLkxtZW1tb3ZlX2VuZF9mb3J3YXJkX2VmczoKKwkucHJldmlvdXMKKworCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsImEiCisJLmFsaWduIDgKKwkucXVhZCAuTG1lbW1vdmVfYmVnaW5fZm9yd2FyZAorCS5xdWFkIC5MbWVtbW92ZV9iZWdpbl9mb3J3YXJkX2VmcworCS53b3JkIFg4Nl9GRUFUVVJFX0VSTVMKKwkuYnl0ZSAuTG1lbW1vdmVfZW5kX2ZvcndhcmQtLkxtZW1tb3ZlX2JlZ2luX2ZvcndhcmQKKwkuYnl0ZSAuTG1lbW1vdmVfZW5kX2ZvcndhcmRfZWZzLS5MbWVtbW92ZV9iZWdpbl9mb3J3YXJkX2VmcworCS5wcmV2aW91cwogRU5EUFJPQyhtZW1tb3ZlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbGliL21lbXNldF82NC5TIGIvYXJjaC94ODYvbGliL21lbXNldF82NC5TCmluZGV4IDA5ZDM0NDIuLjc5YmQ0NTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2xpYi9tZW1zZXRfNjQuUworKysgYi9hcmNoL3g4Ni9saWIvbWVtc2V0XzY0LlMKQEAgLTIsOSArMiwxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGFzbS9kd2FyZjIuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPGFzbS9hbHRlcm5hdGl2ZS1hc20uaD4KIAogLyoKLSAqIElTTyBDIG1lbXNldCAtIHNldCBhIG1lbW9yeSBibG9jayB0byBhIGJ5dGUgdmFsdWUuCisgKiBJU08gQyBtZW1zZXQgLSBzZXQgYSBtZW1vcnkgYmxvY2sgdG8gYSBieXRlIHZhbHVlLiBUaGlzIGZ1bmN0aW9uIHVzZXMgZmFzdAorICogc3RyaW5nIHRvIGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UgdGhhbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uIFRoZSBjb2RlIGlzCisgKiBzaW1wbGVyIGFuZCBzaG9ydGVyIHRoYW4gdGhlIG9yaWduYWwgZnVuY3Rpb24gYXMgd2VsbC4KICAqCQogICogcmRpICAgZGVzdGluYXRpb24KICAqIHJzaSAgIHZhbHVlIChjaGFyKSAKQEAgLTMxLDYgKzM1LDI4IEBACiAuTG1lbXNldF9lOgogCS5wcmV2aW91cwogCisvKgorICogSVNPIEMgbWVtc2V0IC0gc2V0IGEgbWVtb3J5IGJsb2NrIHRvIGEgYnl0ZSB2YWx1ZS4gVGhpcyBmdW5jdGlvbiB1c2VzCisgKiBlbmhhbmNlZCByZXAgc3Rvc2IgdG8gb3ZlcnJpZGUgdGhlIGZhc3Qgc3RyaW5nIGZ1bmN0aW9uLgorICogVGhlIGNvZGUgaXMgc2ltcGxlciBhbmQgc2hvcnRlciB0aGFuIHRoZSBmYXN0IHN0cmluZyBmdW5jdGlvbiBhcyB3ZWxsLgorICoKKyAqIHJkaSAgIGRlc3RpbmF0aW9uCisgKiByc2kgICB2YWx1ZSAoY2hhcikKKyAqIHJkeCAgIGNvdW50IChieXRlcykKKyAqCisgKiByYXggICBvcmlnaW5hbCBkZXN0aW5hdGlvbgorICovCisJLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiLCBAcHJvZ2JpdHMKKy5MbWVtc2V0X2NfZToKKwltb3ZxICVyZGksJXI5CisJbW92YiAlc2lsLCVhbAorCW1vdmwgJWVkeCwlZWN4CisJcmVwIHN0b3NiCisJbW92cSAlcjksJXJheAorCXJldAorLkxtZW1zZXRfZV9lOgorCS5wcmV2aW91cworCiBFTlRSWShtZW1zZXQpCiBFTlRSWShfX21lbXNldCkKIAlDRklfU1RBUlRQUk9DCkBAIC0xMTIsMTYgKzEzOCwyMCBAQAogRU5EUFJPQyhtZW1zZXQpCiBFTkRQUk9DKF9fbWVtc2V0KQogCi0JLyogU29tZSBDUFVzIHJ1biBmYXN0ZXIgdXNpbmcgdGhlIHN0cmluZyBpbnN0cnVjdGlvbnMuCi0JICAgSXQgaXMgYWxzbyBhIGxvdCBzaW1wbGVyLiBVc2UgdGhpcyB3aGVuIHBvc3NpYmxlICovCi0KLSNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgotCisJLyogU29tZSBDUFVzIHN1cHBvcnQgZW5oYW5jZWQgUkVQIE1PVlNCL1NUT1NCIGZlYXR1cmUuCisJICogSXQgaXMgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgd2hlbiBwb3NzaWJsZS4KKwkgKgorCSAqIElmIGVuaGFuY2VkIFJFUCBNT1ZTQi9TVE9TQiBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUsIHVzZSBmYXN0IHN0cmluZworCSAqIGluc3RydWN0aW9ucy4KKwkgKgorCSAqIE90aGVyd2lzZSwgdXNlIG9yaWdpbmFsIG1lbXNldCBmdW5jdGlvbi4KKwkgKgorCSAqIEluIC5hbHRpbnN0cnVjdGlvbnMgc2VjdGlvbiwgRVJNUyBmZWF0dXJlIGlzIHBsYWNlZCBhZnRlciBSRUdfR09PRAorICAgICAgICAgKiBmZWF0dXJlIHRvIGltcGxlbWVudCB0aGUgcmlnaHQgcGF0Y2ggb3JkZXIuCisJICovCiAJLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywiYSIKLQkuYWxpZ24gOAotCS5xdWFkIG1lbXNldAotCS5xdWFkIC5MbWVtc2V0X2MKLQkud29yZCBYODZfRkVBVFVSRV9SRVBfR09PRAotCS5ieXRlIC5MZmluYWwgLSBtZW1zZXQKLQkuYnl0ZSAuTG1lbXNldF9lIC0gLkxtZW1zZXRfYworCWFsdGluc3RydWN0aW9uX2VudHJ5IG1lbXNldCwuTG1lbXNldF9jLFg4Nl9GRUFUVVJFX1JFUF9HT09ELFwKKwkJCSAgICAgLkxmaW5hbC1tZW1zZXQsLkxtZW1zZXRfZS0uTG1lbXNldF9jCisJYWx0aW5zdHJ1Y3Rpb25fZW50cnkgbWVtc2V0LC5MbWVtc2V0X2NfZSxYODZfRkVBVFVSRV9FUk1TLCBcCisJCQkgICAgIC5MZmluYWwtbWVtc2V0LC5MbWVtc2V0X2VfZS0uTG1lbXNldF9jX2UKIAkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXQuYyBiL2FyY2gveDg2L21tL2luaXQuYwppbmRleCAyODZkMjg5Li4zN2I4YjBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdC5jCkBAIC04MSw2ICs4MSwxMSBAQAogCQllbmQsIHBndF9idWZfc3RhcnQgPDwgUEFHRV9TSElGVCwgcGd0X2J1Zl90b3AgPDwgUEFHRV9TSElGVCk7CiB9CiAKK3ZvaWQgX19pbml0IG5hdGl2ZV9wYWdldGFibGVfcmVzZXJ2ZSh1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJbWVtYmxvY2tfeDg2X3Jlc2VydmVfcmFuZ2Uoc3RhcnQsIGVuZCwgIlBHVEFCTEUiKTsKK30KKwogc3RydWN0IG1hcF9yYW5nZSB7CiAJdW5zaWduZWQgbG9uZyBzdGFydDsKIAl1bnNpZ25lZCBsb25nIGVuZDsKQEAgLTI3Miw5ICsyNzcsMjQgQEAKIAogCV9fZmx1c2hfdGxiX2FsbCgpOwogCisJLyoKKwkgKiBSZXNlcnZlIHRoZSBrZXJuZWwgcGFnZXRhYmxlIHBhZ2VzIHdlIHVzZWQgKHBndF9idWZfc3RhcnQgLQorCSAqIHBndF9idWZfZW5kKSBhbmQgZnJlZSB0aGUgb3RoZXIgb25lcyAocGd0X2J1Zl9lbmQgLSBwZ3RfYnVmX3RvcCkKKwkgKiBzbyB0aGF0IHRoZXkgY2FuIGJlIHJldXNlZCBmb3Igb3RoZXIgcHVycG9zZXMuCisJICoKKwkgKiBPbiBuYXRpdmUgaXQganVzdCBtZWFucyBjYWxsaW5nIG1lbWJsb2NrX3g4Nl9yZXNlcnZlX3JhbmdlLCBvbiBYZW4gaXQKKwkgKiBhbHNvIG1lYW5zIG1hcmtpbmcgUlcgdGhlIHBhZ2V0YWJsZSBwYWdlcyB0aGF0IHdlIGFsbG9jYXRlZCBiZWZvcmUKKwkgKiBidXQgdGhhdCBoYXZlbid0IGJlZW4gdXNlZC4KKwkgKgorCSAqIEluIGZhY3Qgb24geGVuIHdlIG1hcmsgUk8gdGhlIHdob2xlIHJhbmdlIHBndF9idWZfc3RhcnQgLQorCSAqIHBndF9idWZfdG9wLCBiZWNhdXNlIHdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQgd2hlbgorCSAqIGluaXRfbWVtb3J5X21hcHBpbmcgcmVhY2hlcyB0aGUgcGFnZXRhYmxlIHBhZ2VzIGFyZWEsIGl0IG1hcHMKKwkgKiBSTyBhbGwgdGhlIHBhZ2V0YWJsZSBwYWdlcywgaW5jbHVkaW5nIHRoZSBvbmVzIHRoYXQgYXJlIGJleW9uZAorCSAqIHBndF9idWZfZW5kIGF0IHRoYXQgdGltZS4KKwkgKi8KIAlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgcGd0X2J1Zl9lbmQgPiBwZ3RfYnVmX3N0YXJ0KQotCQltZW1ibG9ja194ODZfcmVzZXJ2ZV9yYW5nZShwZ3RfYnVmX3N0YXJ0IDw8IFBBR0VfU0hJRlQsCi0JCQkJIHBndF9idWZfZW5kIDw8IFBBR0VfU0hJRlQsICJQR1RBQkxFIik7CisJCXg4Nl9pbml0Lm1hcHBpbmcucGFnZXRhYmxlX3Jlc2VydmUoUEZOX1BIWVMocGd0X2J1Zl9zdGFydCksCisJCQkJUEZOX1BIWVMocGd0X2J1Zl9lbmQpKTsKIAogCWlmICghYWZ0ZXJfYm9vdG1lbSkKIAkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWEuYyBiL2FyY2gveDg2L21tL251bWEuYwppbmRleCA5NTU5ZDM2Li43NDUyNThkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9udW1hLmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYS5jCkBAIC0yMTMsNTMgKzIxMyw0OCBAQAogCXJldHVybiBwZXJfY3B1KHg4Nl9jcHVfdG9fbm9kZV9tYXAsIGNwdSk7CiB9CiAKLXN0cnVjdCBjcHVtYXNrIF9fY3B1aW5pdCAqZGVidWdfY3B1bWFza19zZXRfY3B1KGludCBjcHUsIGludCBlbmFibGUpCit2b2lkIGRlYnVnX2NwdW1hc2tfc2V0X2NwdShpbnQgY3B1LCBpbnQgbm9kZSwgYm9vbCBlbmFibGUpCiB7Ci0JaW50IG5vZGUgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwogCXN0cnVjdCBjcHVtYXNrICptYXNrOwogCWNoYXIgYnVmWzY0XTsKIAogCWlmIChub2RlID09IE5VTUFfTk9fTk9ERSkgewogCQkvKiBlYXJseV9jcHVfdG9fbm9kZSgpIGFscmVhZHkgZW1pdHMgYSB3YXJuaW5nIGFuZCB0cmFjZSAqLwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuOwogCX0KIAltYXNrID0gbm9kZV90b19jcHVtYXNrX21hcFtub2RlXTsKIAlpZiAoIW1hc2spIHsKIAkJcHJfZXJyKCJub2RlX3RvX2NwdW1hc2tfbWFwWyVpXSBOVUxMXG4iLCBub2RlKTsKIAkJZHVtcF9zdGFjaygpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQljcHVsaXN0X3NjbnByaW50ZihidWYsIHNpemVvZihidWYpLCBtYXNrKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXMgY3B1ICVkIG5vZGUgJWQ6IG1hc2sgbm93ICVzXG4iLAotCQllbmFibGUgPyAibnVtYV9hZGRfY3B1IiA6ICJudW1hX3JlbW92ZV9jcHUiLAotCQljcHUsIG5vZGUsIGJ1Zik7Ci0JcmV0dXJuIG1hc2s7Ci19Ci0KLSMgaWZuZGVmIENPTkZJR19OVU1BX0VNVQotc3RhdGljIHZvaWQgX19jcHVpbml0IG51bWFfc2V0X2NwdW1hc2soaW50IGNwdSwgaW50IGVuYWJsZSkKLXsKLQlzdHJ1Y3QgY3B1bWFzayAqbWFzazsKLQotCW1hc2sgPSBkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBlbmFibGUpOwotCWlmICghbWFzaykKIAkJcmV0dXJuOworCX0KIAogCWlmIChlbmFibGUpCiAJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1hc2spOwogCWVsc2UKIAkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCBtYXNrKTsKKworCWNwdWxpc3Rfc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIG1hc2spOworCXByaW50ayhLRVJOX0RFQlVHICIlcyBjcHUgJWQgbm9kZSAlZDogbWFzayBub3cgJXNcbiIsCisJCWVuYWJsZSA/ICJudW1hX2FkZF9jcHUiIDogIm51bWFfcmVtb3ZlX2NwdSIsCisJCWNwdSwgbm9kZSwgYnVmKTsKKwlyZXR1cm47Cit9CisKKyMgaWZuZGVmIENPTkZJR19OVU1BX0VNVQorc3RhdGljIHZvaWQgX19jcHVpbml0IG51bWFfc2V0X2NwdW1hc2soaW50IGNwdSwgYm9vbCBlbmFibGUpCit7CisJZGVidWdfY3B1bWFza19zZXRfY3B1KGNwdSwgZWFybHlfY3B1X3RvX25vZGUoY3B1KSwgZW5hYmxlKTsKIH0KIAogdm9pZCBfX2NwdWluaXQgbnVtYV9hZGRfY3B1KGludCBjcHUpCiB7Ci0JbnVtYV9zZXRfY3B1bWFzayhjcHUsIDEpOworCW51bWFfc2V0X2NwdW1hc2soY3B1LCB0cnVlKTsKIH0KIAogdm9pZCBfX2NwdWluaXQgbnVtYV9yZW1vdmVfY3B1KGludCBjcHUpCiB7Ci0JbnVtYV9zZXRfY3B1bWFzayhjcHUsIDApOworCW51bWFfc2V0X2NwdW1hc2soY3B1LCBmYWxzZSk7CiB9CiAjIGVuZGlmCS8qICFDT05GSUdfTlVNQV9FTVUgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IGU4YzAwY2MuLjg1YjUyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTMwNiw3ICszMDYsNyBAQAogCQliaS0+ZW5kID0gbWluKGJpLT5lbmQsIGhpZ2gpOwogCiAJCS8qIGFuZCB0aGVyZSdzIG5vIGVtcHR5IGJsb2NrICovCi0JCWlmIChiaS0+c3RhcnQgPT0gYmktPmVuZCkgeworCQlpZiAoYmktPnN0YXJ0ID49IGJpLT5lbmQpIHsKIAkJCW51bWFfcmVtb3ZlX21lbWJsa19mcm9tKGktLSwgbWkpOwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL251bWFfZW11bGF0aW9uLmMgYi9hcmNoL3g4Ni9tbS9udW1hX2VtdWxhdGlvbi5jCmluZGV4IGFkMDkxZTQuLmRlODRjYzEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfZW11bGF0aW9uLmMKKysrIGIvYXJjaC94ODYvbW0vbnVtYV9lbXVsYXRpb24uYwpAQCAtNDU0LDEwICs0NTQsOSBAQAogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG5vZGVfdG9fY3B1bWFza19tYXBbaV0pOwogfQogI2Vsc2UJLyogIUNPTkZJR19ERUJVR19QRVJfQ1BVX01BUFMgKi8KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBudW1hX3NldF9jcHVtYXNrKGludCBjcHUsIGludCBlbmFibGUpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgbnVtYV9zZXRfY3B1bWFzayhpbnQgY3B1LCBib29sIGVuYWJsZSkKIHsKLQlzdHJ1Y3QgY3B1bWFzayAqbWFzazsKLQlpbnQgbmlkLCBwaHlzbmlkLCBpOworCWludCBuaWQsIHBoeXNuaWQ7CiAKIAluaWQgPSBlYXJseV9jcHVfdG9fbm9kZShjcHUpOwogCWlmIChuaWQgPT0gTlVNQV9OT19OT0RFKSB7CkBAIC00NjcsMjggKzQ2NiwyMSBAQAogCiAJcGh5c25pZCA9IGVtdV9uaWRfdG9fcGh5c1tuaWRdOwogCi0JZm9yX2VhY2hfb25saW5lX25vZGUoaSkgeworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewogCQlpZiAoZW11X25pZF90b19waHlzW25pZF0gIT0gcGh5c25pZCkKIAkJCWNvbnRpbnVlOwogCi0JCW1hc2sgPSBkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBlbmFibGUpOwotCQlpZiAoIW1hc2spCi0JCQlyZXR1cm47Ci0KLQkJaWYgKGVuYWJsZSkKLQkJCWNwdW1hc2tfc2V0X2NwdShjcHUsIG1hc2spOwotCQllbHNlCi0JCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIG1hc2spOworCQlkZWJ1Z19jcHVtYXNrX3NldF9jcHUoY3B1LCBuaWQsIGVuYWJsZSk7CiAJfQogfQogCiB2b2lkIF9fY3B1aW5pdCBudW1hX2FkZF9jcHUoaW50IGNwdSkKIHsKLQludW1hX3NldF9jcHVtYXNrKGNwdSwgMSk7CisJbnVtYV9zZXRfY3B1bWFzayhjcHUsIHRydWUpOwogfQogCiB2b2lkIF9fY3B1aW5pdCBudW1hX3JlbW92ZV9jcHUoaW50IGNwdSkKIHsKLQludW1hX3NldF9jcHVtYXNrKGNwdSwgMCk7CisJbnVtYV9zZXRfY3B1bWFzayhjcHUsIGZhbHNlKTsKIH0KICNlbmRpZgkvKiAhQ09ORklHX0RFQlVHX1BFUl9DUFVfTUFQUyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvb3Byb2ZpbGUvYmFja3RyYWNlLmMgYi9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYwppbmRleCAyZDQ5ZDRlLi5hNWI2NGFiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYworKysgYi9hcmNoL3g4Ni9vcHJvZmlsZS9iYWNrdHJhY2UuYwpAQCAtMTYsMTcgKzE2LDYgQEAKICNpbmNsdWRlIDxhc20vc3RhY2t0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogCi1zdGF0aWMgdm9pZCBiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wodm9pZCAqZGF0YSwgY2hhciAqbXNnLAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzeW1ib2wpCi17Ci0JLyogSWdub3JlIHdhcm5pbmdzICovCi19Ci0KLXN0YXRpYyB2b2lkIGJhY2t0cmFjZV93YXJuaW5nKHZvaWQgKmRhdGEsIGNoYXIgKm1zZykKLXsKLQkvKiBJZ25vcmUgd2FybmluZ3MgKi8KLX0KLQogc3RhdGljIGludCBiYWNrdHJhY2Vfc3RhY2sodm9pZCAqZGF0YSwgY2hhciAqbmFtZSkKIHsKIAkvKiBZZXMsIHdlIHdhbnQgYWxsIHN0YWNrcyAqLwpAQCAtNDIsOCArMzEsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHN0YWNrdHJhY2Vfb3BzIGJhY2t0cmFjZV9vcHMgPSB7Ci0JLndhcm5pbmcJPSBiYWNrdHJhY2Vfd2FybmluZywKLQkud2FybmluZ19zeW1ib2wJPSBiYWNrdHJhY2Vfd2FybmluZ19zeW1ib2wsCiAJLnN0YWNrCQk9IGJhY2t0cmFjZV9zdGFjaywKIAkuYWRkcmVzcwk9IGJhY2t0cmFjZV9hZGRyZXNzLAogCS53YWxrX3N0YWNrCT0gcHJpbnRfY29udGV4dF9zdGFjaywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS94ZW4uYyBiL2FyY2gveDg2L3BjaS94ZW4uYwppbmRleCBlMzdiNDA3Li44MjE0NzI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kveGVuLmMKKysrIGIvYXJjaC94ODYvcGNpL3hlbi5jCkBAIC0xMDgsNyArMTA4LDggQEAKIAkJfQogCQlpcnEgPSB4ZW5fYmluZF9waXJxX21zaV90b19pcnEoZGV2LCBtc2lkZXNjLCBwaXJxLCAwLAogCQkJCQkgICAgICAgKHR5cGUgPT0gUENJX0NBUF9JRF9NU0lYKSA/Ci0JCQkJCSAgICAgICAibXNpLXgiIDogIm1zaSIpOworCQkJCQkgICAgICAgIm1zaS14IiA6ICJtc2kiLAorCQkJCQkgICAgICAgRE9NSURfU0VMRik7CiAJCWlmIChpcnEgPCAwKQogCQkJZ290byBlcnJvcjsKIAkJZGV2X2RiZygmZGV2LT5kZXYsCkBAIC0xNDgsNyArMTQ5LDggQEAKIAkJaXJxID0geGVuX2JpbmRfcGlycV9tc2lfdG9faXJxKGRldiwgbXNpZGVzYywgdltpXSwgMCwKIAkJCQkJICAgICAgICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCkgPwogCQkJCQkgICAgICAgInBjaWZyb250LW1zaS14IiA6Ci0JCQkJCSAgICAgICAicGNpZnJvbnQtbXNpIik7CisJCQkJCSAgICAgICAicGNpZnJvbnQtbXNpIiwKKwkJCQkJCURPTUlEX1NFTEYpOwogCQlpZiAoaXJxIDwgMCkKIAkJCWdvdG8gZnJlZTsKIAkJaSsrOwpAQCAtMTkwLDkgKzE5MiwxNiBAQAogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtc2lkZXNjLCAmZGV2LT5tc2lfbGlzdCwgbGlzdCkgewogCQlzdHJ1Y3QgcGh5c2Rldl9tYXBfcGlycSBtYXBfaXJxOworCQlkb21pZF90IGRvbWlkOworCisJCWRvbWlkID0gcmV0ID0geGVuX2ZpbmRfZGV2aWNlX2RvbWFpbl9vd25lcihkZXYpOworCQkvKiBOLkIuIENhc3RpbmcgaW50J3MgLUVOT0RFViB0byB1aW50MTZfdCByZXN1bHRzIGluIDB4RkZFRCwKKwkJICogaGVuY2UgY2hlY2sgcmV0IHZhbHVlIGZvciA8IDAuICovCisJCWlmIChyZXQgPCAwKQorCQkJZG9taWQgPSBET01JRF9TRUxGOwogCiAJCW1lbXNldCgmbWFwX2lycSwgMCwgc2l6ZW9mKG1hcF9pcnEpKTsKLQkJbWFwX2lycS5kb21pZCA9IERPTUlEX1NFTEY7CisJCW1hcF9pcnEuZG9taWQgPSBkb21pZDsKIAkJbWFwX2lycS50eXBlID0gTUFQX1BJUlFfVFlQRV9NU0k7CiAJCW1hcF9pcnEuaW5kZXggPSAtMTsKIAkJbWFwX2lycS5waXJxID0gLTE7CkBAIC0yMTUsMTQgKzIyNCwxNiBAQAogCiAJCXJldCA9IEhZUEVSVklTT1JfcGh5c2Rldl9vcChQSFlTREVWT1BfbWFwX3BpcnEsICZtYXBfaXJxKTsKIAkJaWYgKHJldCkgewotCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAieGVuIG1hcCBpcnEgZmFpbGVkICVkXG4iLCByZXQpOworCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAieGVuIG1hcCBpcnEgZmFpbGVkICVkIGZvciAlZCBkb21haW5cbiIsCisJCQkJIHJldCwgZG9taWQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAogCQlyZXQgPSB4ZW5fYmluZF9waXJxX21zaV90b19pcnEoZGV2LCBtc2lkZXNjLAogCQkJCQkgICAgICAgbWFwX2lycS5waXJxLCBtYXBfaXJxLmluZGV4LAogCQkJCQkgICAgICAgKHR5cGUgPT0gUENJX0NBUF9JRF9NU0lYKSA/Ci0JCQkJCSAgICAgICAibXNpLXgiIDogIm1zaSIpOworCQkJCQkgICAgICAgIm1zaS14IiA6ICJtc2kiLAorCQkJCQkJZG9taWQpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTQ2MSwzICs0NzIsNzggQEAKIAl9CiB9CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19YRU5fRE9NMAorc3RydWN0IHhlbl9kZXZpY2VfZG9tYWluX293bmVyIHsKKwlkb21pZF90IGRvbWFpbjsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGV2X2RvbWFpbl9saXN0X3NwaW5sb2NrKTsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGRldl9kb21haW5fbGlzdCA9IExJU1RfSEVBRF9JTklUKGRldl9kb21haW5fbGlzdCk7CisKK3N0YXRpYyBzdHJ1Y3QgeGVuX2RldmljZV9kb21haW5fb3duZXIgKmZpbmRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJc3RydWN0IHhlbl9kZXZpY2VfZG9tYWluX293bmVyICpvd25lcjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkob3duZXIsICZkZXZfZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJaWYgKG93bmVyLT5kZXYgPT0gZGV2KQorCQkJcmV0dXJuIG93bmVyOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHhlbl9maW5kX2RldmljZV9kb21haW5fb3duZXIoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgeGVuX2RldmljZV9kb21haW5fb3duZXIgKm93bmVyOworCWludCBkb21haW4gPSAtRU5PREVWOworCisJc3Bpbl9sb2NrKCZkZXZfZG9tYWluX2xpc3Rfc3BpbmxvY2spOworCW93bmVyID0gZmluZF9kZXZpY2UoZGV2KTsKKwlpZiAob3duZXIpCisJCWRvbWFpbiA9IG93bmVyLT5kb21haW47CisJc3Bpbl91bmxvY2soJmRldl9kb21haW5fbGlzdF9zcGlubG9jayk7CisJcmV0dXJuIGRvbWFpbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbl9maW5kX2RldmljZV9kb21haW5fb3duZXIpOworCitpbnQgeGVuX3JlZ2lzdGVyX2RldmljZV9kb21haW5fb3duZXIoc3RydWN0IHBjaV9kZXYgKmRldiwgdWludDE2X3QgZG9tYWluKQoreworCXN0cnVjdCB4ZW5fZGV2aWNlX2RvbWFpbl9vd25lciAqb3duZXI7CisKKwlvd25lciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB4ZW5fZGV2aWNlX2RvbWFpbl9vd25lciksIEdGUF9LRVJORUwpOworCWlmICghb3duZXIpCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrKCZkZXZfZG9tYWluX2xpc3Rfc3BpbmxvY2spOworCWlmIChmaW5kX2RldmljZShkZXYpKSB7CisJCXNwaW5fdW5sb2NrKCZkZXZfZG9tYWluX2xpc3Rfc3BpbmxvY2spOworCQlrZnJlZShvd25lcik7CisJCXJldHVybiAtRUVYSVNUOworCX0KKwlvd25lci0+ZG9tYWluID0gZG9tYWluOworCW93bmVyLT5kZXYgPSBkZXY7CisJbGlzdF9hZGRfdGFpbCgmb3duZXItPmxpc3QsICZkZXZfZG9tYWluX2xpc3QpOworCXNwaW5fdW5sb2NrKCZkZXZfZG9tYWluX2xpc3Rfc3BpbmxvY2spOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3JlZ2lzdGVyX2RldmljZV9kb21haW5fb3duZXIpOworCitpbnQgeGVuX3VucmVnaXN0ZXJfZGV2aWNlX2RvbWFpbl9vd25lcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCB4ZW5fZGV2aWNlX2RvbWFpbl9vd25lciAqb3duZXI7CisKKwlzcGluX2xvY2soJmRldl9kb21haW5fbGlzdF9zcGlubG9jayk7CisJb3duZXIgPSBmaW5kX2RldmljZShkZXYpOworCWlmICghb3duZXIpIHsKKwkJc3Bpbl91bmxvY2soJmRldl9kb21haW5fbGlzdF9zcGlubG9jayk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlsaXN0X2RlbCgmb3duZXItPmxpc3QpOworCXNwaW5fdW5sb2NrKCZkZXZfZG9tYWluX2xpc3Rfc3BpbmxvY2spOworCWtmcmVlKG93bmVyKTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHhlbl91bnJlZ2lzdGVyX2RldmljZV9kb21haW5fb3duZXIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS9jZTQxMDAvZmFsY29uZmFsbHMuZHRzIGIvYXJjaC94ODYvcGxhdGZvcm0vY2U0MTAwL2ZhbGNvbmZhbGxzLmR0cwppbmRleCAyZDZkMjI2Li5lNzBiZTM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9jZTQxMDAvZmFsY29uZmFsbHMuZHRzCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL2NlNDEwMC9mYWxjb25mYWxscy5kdHMKQEAgLTM0Nyw3ICszNDcsNyBAQAogCQkJCQkJICAgInBjaWNsYXNzMGMwMyI7CiAKIAkJCQkJcmVnID0gPDB4MTY4MDAgMHgwIDB4MCAweDAgMHgwPjsKLQkJCQkJaW50ZXJydXB0cyA9IDwyMiAzPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMiAxPjsKIAkJCQl9OwogCiAJCQkJdXNiQGQsMSB7CkBAIC0zNTcsNyArMzU3LDcgQEAKIAkJCQkJCSAgICJwY2ljbGFzczBjMDMiOwogCiAJCQkJCXJlZyA9IDwweDE2OTAwIDB4MCAweDAgMHgwIDB4MD47Ci0JCQkJCWludGVycnVwdHMgPSA8MjIgMz47CisJCQkJCWludGVycnVwdHMgPSA8MjIgMT47CiAJCQkJfTsKIAogCQkJCXNhdGFAZSwwIHsKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQkJCQkJICAgInBjaWNsYXNzMDEwNiI7CiAKIAkJCQkJcmVnID0gPDB4MTcwMDAgMHgwIDB4MCAweDAgMHgwPjsKLQkJCQkJaW50ZXJydXB0cyA9IDwyMyAzPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMyAxPjsKIAkJCQl9OwogCiAJCQkJZmxhc2hAZiwwIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYyBiL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmkuYwppbmRleCAwZmUyN2Q3Li5iMzBhYTI2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpLmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaS5jCkBAIC0xNDUsMTcgKzE0NSw2IEBACiAJCSAgICAgICBkYXRhX3NpemUsIGRhdGEpOwogfQogCi1zdGF0aWMgZWZpX3N0YXR1c190IHZpcnRfZWZpX3NldF92aXJ0dWFsX2FkZHJlc3NfbWFwKAotCXVuc2lnbmVkIGxvbmcgbWVtb3J5X21hcF9zaXplLAotCXVuc2lnbmVkIGxvbmcgZGVzY3JpcHRvcl9zaXplLAotCXUzMiBkZXNjcmlwdG9yX3ZlcnNpb24sCi0JZWZpX21lbW9yeV9kZXNjX3QgKnZpcnR1YWxfbWFwKQotewotCXJldHVybiBlZmlfY2FsbF92aXJ0NChzZXRfdmlydHVhbF9hZGRyZXNzX21hcCwKLQkJCSAgICAgIG1lbW9yeV9tYXBfc2l6ZSwgZGVzY3JpcHRvcl9zaXplLAotCQkJICAgICAgZGVzY3JpcHRvcl92ZXJzaW9uLCB2aXJ0dWFsX21hcCk7Ci19Ci0KIHN0YXRpYyBlZmlfc3RhdHVzX3QgX19pbml0IHBoeXNfZWZpX3NldF92aXJ0dWFsX2FkZHJlc3NfbWFwKAogCXVuc2lnbmVkIGxvbmcgbWVtb3J5X21hcF9zaXplLAogCXVuc2lnbmVkIGxvbmcgZGVzY3JpcHRvcl9zaXplLApAQCAtNDY4LDExICs0NTcsMjUgQEAKICNlbmRpZgogfQogCit2b2lkIF9faW5pdCBlZmlfc2V0X2V4ZWN1dGFibGUoZWZpX21lbW9yeV9kZXNjX3QgKm1kLCBib29sIGV4ZWN1dGFibGUpCit7CisJdTY0IGFkZHIsIG5wYWdlczsKKworCWFkZHIgPSBtZC0+dmlydF9hZGRyOworCW5wYWdlcyA9IG1kLT5udW1fcGFnZXM7CisKKwltZW1yYW5nZV9lZmlfdG9fbmF0aXZlKCZhZGRyLCAmbnBhZ2VzKTsKKworCWlmIChleGVjdXRhYmxlKQorCQlzZXRfbWVtb3J5X3goYWRkciwgbnBhZ2VzKTsKKwllbHNlCisJCXNldF9tZW1vcnlfbngoYWRkciwgbnBhZ2VzKTsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IHJ1bnRpbWVfY29kZV9wYWdlX21rZXhlYyh2b2lkKQogewogCWVmaV9tZW1vcnlfZGVzY190ICptZDsKIAl2b2lkICpwOwotCXU2NCBhZGRyLCBucGFnZXM7CiAKIAkvKiBNYWtlIEVGSSBydW50aW1lIHNlcnZpY2UgY29kZSBhcmVhIGV4ZWN1dGFibGUgKi8KIAlmb3IgKHAgPSBtZW1tYXAubWFwOyBwIDwgbWVtbWFwLm1hcF9lbmQ7IHAgKz0gbWVtbWFwLmRlc2Nfc2l6ZSkgewpAQCAtNDgxLDEwICs0ODQsNyBAQAogCQlpZiAobWQtPnR5cGUgIT0gRUZJX1JVTlRJTUVfU0VSVklDRVNfQ09ERSkKIAkJCWNvbnRpbnVlOwogCi0JCWFkZHIgPSBtZC0+dmlydF9hZGRyOwotCQlucGFnZXMgPSBtZC0+bnVtX3BhZ2VzOwotCQltZW1yYW5nZV9lZmlfdG9fbmF0aXZlKCZhZGRyLCAmbnBhZ2VzKTsKLQkJc2V0X21lbW9yeV94KGFkZHIsIG5wYWdlcyk7CisJCWVmaV9zZXRfZXhlY3V0YWJsZShtZCwgdHJ1ZSk7CiAJfQogfQogCkBAIC00OTgsMTMgKzQ5OCw0MiBAQAogICovCiB2b2lkIF9faW5pdCBlZmlfZW50ZXJfdmlydHVhbF9tb2RlKHZvaWQpCiB7Ci0JZWZpX21lbW9yeV9kZXNjX3QgKm1kOworCWVmaV9tZW1vcnlfZGVzY190ICptZCwgKnByZXZfbWQgPSBOVUxMOwogCWVmaV9zdGF0dXNfdCBzdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBzaXplOwogCXU2NCBlbmQsIHN5c3RhYiwgYWRkciwgbnBhZ2VzLCBlbmRfcGZuOwotCXZvaWQgKnAsICp2YTsKKwl2b2lkICpwLCAqdmEsICpuZXdfbWVtbWFwID0gTlVMTDsKKwlpbnQgY291bnQgPSAwOwogCiAJZWZpLnN5c3RhYiA9IE5VTEw7CisKKwkvKiBNZXJnZSBjb250aWd1b3VzIHJlZ2lvbnMgb2YgdGhlIHNhbWUgdHlwZSBhbmQgYXR0cmlidXRlICovCisJZm9yIChwID0gbWVtbWFwLm1hcDsgcCA8IG1lbW1hcC5tYXBfZW5kOyBwICs9IG1lbW1hcC5kZXNjX3NpemUpIHsKKwkJdTY0IHByZXZfc2l6ZTsKKwkJbWQgPSBwOworCisJCWlmICghcHJldl9tZCkgeworCQkJcHJldl9tZCA9IG1kOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocHJldl9tZC0+dHlwZSAhPSBtZC0+dHlwZSB8fAorCQkgICAgcHJldl9tZC0+YXR0cmlidXRlICE9IG1kLT5hdHRyaWJ1dGUpIHsKKwkJCXByZXZfbWQgPSBtZDsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcHJldl9zaXplID0gcHJldl9tZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUOworCisJCWlmIChtZC0+cGh5c19hZGRyID09IChwcmV2X21kLT5waHlzX2FkZHIgKyBwcmV2X3NpemUpKSB7CisJCQlwcmV2X21kLT5udW1fcGFnZXMgKz0gbWQtPm51bV9wYWdlczsKKwkJCW1kLT50eXBlID0gRUZJX1JFU0VSVkVEX1RZUEU7CisJCQltZC0+YXR0cmlidXRlID0gMDsKKwkJCWNvbnRpbnVlOworCQl9CisJCXByZXZfbWQgPSBtZDsKKwl9CisKIAlmb3IgKHAgPSBtZW1tYXAubWFwOyBwIDwgbWVtbWFwLm1hcF9lbmQ7IHAgKz0gbWVtbWFwLmRlc2Nfc2l6ZSkgewogCQltZCA9IHA7CiAJCWlmICghKG1kLT5hdHRyaWJ1dGUgJiBFRklfTUVNT1JZX1JVTlRJTUUpKQpAQCAtNTQxLDE1ICs1NzAsMjEgQEAKIAkJCXN5c3RhYiArPSBtZC0+dmlydF9hZGRyIC0gbWQtPnBoeXNfYWRkcjsKIAkJCWVmaS5zeXN0YWIgPSAoZWZpX3N5c3RlbV90YWJsZV90ICopICh1bnNpZ25lZCBsb25nKSBzeXN0YWI7CiAJCX0KKwkJbmV3X21lbW1hcCA9IGtyZWFsbG9jKG5ld19tZW1tYXAsCisJCQkJICAgICAgKGNvdW50ICsgMSkgKiBtZW1tYXAuZGVzY19zaXplLAorCQkJCSAgICAgIEdGUF9LRVJORUwpOworCQltZW1jcHkobmV3X21lbW1hcCArIChjb3VudCAqIG1lbW1hcC5kZXNjX3NpemUpLCBtZCwKKwkJICAgICAgIG1lbW1hcC5kZXNjX3NpemUpOworCQljb3VudCsrOwogCX0KIAogCUJVR19PTighZWZpLnN5c3RhYik7CiAKIAlzdGF0dXMgPSBwaHlzX2VmaV9zZXRfdmlydHVhbF9hZGRyZXNzX21hcCgKLQkJbWVtbWFwLmRlc2Nfc2l6ZSAqIG1lbW1hcC5ucl9tYXAsCisJCW1lbW1hcC5kZXNjX3NpemUgKiBjb3VudCwKIAkJbWVtbWFwLmRlc2Nfc2l6ZSwKIAkJbWVtbWFwLmRlc2NfdmVyc2lvbiwKLQkJbWVtbWFwLnBoeXNfbWFwKTsKKwkJKGVmaV9tZW1vcnlfZGVzY190ICopX19wYShuZXdfbWVtbWFwKSk7CiAKIAlpZiAoc3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7CiAJCXByaW50ayhLRVJOX0FMRVJUICJVbmFibGUgdG8gc3dpdGNoIEVGSSBpbnRvIHZpcnR1YWwgbW9kZSAiCkBAIC01NzIsMTEgKzYwNywxMiBAQAogCWVmaS5zZXRfdmFyaWFibGUgPSB2aXJ0X2VmaV9zZXRfdmFyaWFibGU7CiAJZWZpLmdldF9uZXh0X2hpZ2hfbW9ub19jb3VudCA9IHZpcnRfZWZpX2dldF9uZXh0X2hpZ2hfbW9ub19jb3VudDsKIAllZmkucmVzZXRfc3lzdGVtID0gdmlydF9lZmlfcmVzZXRfc3lzdGVtOwotCWVmaS5zZXRfdmlydHVhbF9hZGRyZXNzX21hcCA9IHZpcnRfZWZpX3NldF92aXJ0dWFsX2FkZHJlc3NfbWFwOworCWVmaS5zZXRfdmlydHVhbF9hZGRyZXNzX21hcCA9IE5VTEw7CiAJaWYgKF9fc3VwcG9ydGVkX3B0ZV9tYXNrICYgX1BBR0VfTlgpCiAJCXJ1bnRpbWVfY29kZV9wYWdlX21rZXhlYygpOwogCWVhcmx5X2lvdW5tYXAobWVtbWFwLm1hcCwgbWVtbWFwLm5yX21hcCAqIG1lbW1hcC5kZXNjX3NpemUpOwogCW1lbW1hcC5tYXAgPSBOVUxMOworCWtmcmVlKG5ld19tZW1tYXApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jIGIvYXJjaC94ODYvcGxhdGZvcm0vZWZpL2VmaV82NC5jCmluZGV4IGFjMDYyMWEuLjI2NDk0MjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL2VmaS9lZmlfNjQuYworKysgYi9hcmNoL3g4Ni9wbGF0Zm9ybS9lZmkvZWZpXzY0LmMKQEAgLTQxLDIyICs0MSw3IEBACiBzdGF0aWMgcGdkX3Qgc2F2ZV9wZ2QgX19pbml0ZGF0YTsKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVmaV9mbGFncyBfX2luaXRkYXRhOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfbWFwcGluZ19zZXRfZXhlYyh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLAotCQkJCQkgIGludCBleGVjdXRhYmxlKQotewotCXVuc2lnbmVkIGxvbmcgbnVtX3BhZ2VzOwotCi0Jc3RhcnQgJj0gUE1EX01BU0s7Ci0JZW5kID0gKGVuZCArIFBNRF9TSVpFIC0gMSkgJiBQTURfTUFTSzsKLQludW1fcGFnZXMgPSAoZW5kIC0gc3RhcnQpID4+IFBBR0VfU0hJRlQ7Ci0JaWYgKGV4ZWN1dGFibGUpCi0JCXNldF9tZW1vcnlfeCgodW5zaWduZWQgbG9uZylfX3ZhKHN0YXJ0KSwgbnVtX3BhZ2VzKTsKLQllbHNlCi0JCXNldF9tZW1vcnlfbngoKHVuc2lnbmVkIGxvbmcpX192YShzdGFydCksIG51bV9wYWdlcyk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9ydW50aW1lX2NvZGVfbWFwcGluZ19zZXRfZXhlYyhpbnQgZXhlY3V0YWJsZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9jb2RlX21hcHBpbmdfc2V0X2V4ZWMoaW50IGV4ZWN1dGFibGUpCiB7CiAJZWZpX21lbW9yeV9kZXNjX3QgKm1kOwogCXZvaWQgKnA7CkBAIC02NywxMSArNTIsOCBAQAogCS8qIE1ha2UgRUZJIHJ1bnRpbWUgc2VydmljZSBjb2RlIGFyZWEgZXhlY3V0YWJsZSAqLwogCWZvciAocCA9IG1lbW1hcC5tYXA7IHAgPCBtZW1tYXAubWFwX2VuZDsgcCArPSBtZW1tYXAuZGVzY19zaXplKSB7CiAJCW1kID0gcDsKLQkJaWYgKG1kLT50eXBlID09IEVGSV9SVU5USU1FX1NFUlZJQ0VTX0NPREUpIHsKLQkJCXVuc2lnbmVkIGxvbmcgZW5kOwotCQkJZW5kID0gbWQtPnBoeXNfYWRkciArIChtZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUKTsKLQkJCWVhcmx5X21hcHBpbmdfc2V0X2V4ZWMobWQtPnBoeXNfYWRkciwgZW5kLCBleGVjdXRhYmxlKTsKLQkJfQorCQlpZiAobWQtPnR5cGUgPT0gRUZJX1JVTlRJTUVfU0VSVklDRVNfQ09ERSkKKwkJCWVmaV9zZXRfZXhlY3V0YWJsZShtZCwgZXhlY3V0YWJsZSk7CiAJfQogfQogCkBAIC03OSw3ICs2MSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB2YWRkcmVzczsKIAotCWVhcmx5X3J1bnRpbWVfY29kZV9tYXBwaW5nX3NldF9leGVjKDEpOworCWVhcmx5X2NvZGVfbWFwcGluZ19zZXRfZXhlYygxKTsKIAlsb2NhbF9pcnFfc2F2ZShlZmlfZmxhZ3MpOwogCXZhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpX192YSgweDBVTCk7CiAJc2F2ZV9wZ2QgPSAqcGdkX29mZnNldF9rKDB4MFVMKTsKQEAgLTk1LDcgKzc3LDcgQEAKIAlzZXRfcGdkKHBnZF9vZmZzZXRfaygweDBVTCksIHNhdmVfcGdkKTsKIAlfX2ZsdXNoX3RsYl9hbGwoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShlZmlfZmxhZ3MpOwotCWVhcmx5X3J1bnRpbWVfY29kZV9tYXBwaW5nX3NldF9leGVjKDApOworCWVhcmx5X2NvZGVfbWFwcGluZ19zZXRfZXhlYygwKTsKIH0KIAogdm9pZCBfX2lvbWVtICpfX2luaXQgZWZpX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKQEAgLTEwNyw4ICs4OSwxMCBAQAogCQlyZXR1cm4gaW9yZW1hcChwaHlzX2FkZHIsIHNpemUpOwogCiAJbGFzdF9tYXBfcGZuID0gaW5pdF9tZW1vcnlfbWFwcGluZyhwaHlzX2FkZHIsIHBoeXNfYWRkciArIHNpemUpOwotCWlmICgobGFzdF9tYXBfcGZuIDw8IFBBR0VfU0hJRlQpIDwgcGh5c19hZGRyICsgc2l6ZSkKLQkJcmV0dXJuIE5VTEw7CisJaWYgKChsYXN0X21hcF9wZm4gPDwgUEFHRV9TSElGVCkgPCBwaHlzX2FkZHIgKyBzaXplKSB7CisJCXVuc2lnbmVkIGxvbmcgdG9wID0gbGFzdF9tYXBfcGZuIDw8IFBBR0VfU0hJRlQ7CisJCWVmaV9pb3JlbWFwKHRvcCwgc2l6ZSAtICh0b3AgLSBwaHlzX2FkZHIpLCB0eXBlKTsKKwl9CiAKIAlyZXR1cm4gKHZvaWQgX19pb21lbSAqKV9fdmEocGh5c19hZGRyKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BsYXRmb3JtL21yc3QvbXJzdC5jIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9tcnN0LmMKaW5kZXggMjc1ZGJjMS4uNzAwMGU3NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9tcnN0LmMKKysrIGIvYXJjaC94ODYvcGxhdGZvcm0vbXJzdC9tcnN0LmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIF9faW5pdCBtcnN0X3RpbWVfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IG1yc3RfdGltZV9pbml0KHZvaWQpCiB7CiAJc2ZpX3RhYmxlX3BhcnNlKFNGSV9TSUdfTVRNUiwgTlVMTCwgTlVMTCwgc2ZpX3BhcnNlX210bXIpOwogCXN3aXRjaCAobXJzdF90aW1lcl9vcHRpb25zKSB7CkBAIC0yMTYsNyArMjE2LDcgQEAKIAlhcGJ0X3RpbWVfaW5pdCgpOwogfQogCi12b2lkIF9fY3B1aW5pdCBtcnN0X2FyY2hfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBtcnN0X2FyY2hfc2V0dXAodm9pZCkKIHsKIAlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gNiAmJiBib290X2NwdV9kYXRhLng4Nl9tb2RlbCA9PSAweDI3KQogCQlfX21yc3RfY3B1X2NoaXAgPSBNUlNUX0NQVV9DSElQX1BFTldFTEw7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS91di90bGJfdXYuYyBiL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jCmluZGV4IDdjYjY0MjQuLmM1OGUwZWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL3V2L3RsYl91di5jCkBAIC02OTksMTYgKzY5OSwxNyBAQAogCQkJCQkgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgdmEsIHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JaW50IHRjcHU7Ci0JaW50IHV2aHViOwogCWludCBsb2NhbHMgPSAwOwogCWludCByZW1vdGVzID0gMDsKIAlpbnQgaHVicyA9IDA7CisJaW50IHRjcHU7CisJaW50IHRwbm9kZTsKIAlzdHJ1Y3QgYmF1X2Rlc2MgKmJhdV9kZXNjOwogCXN0cnVjdCBjcHVtYXNrICpmbHVzaF9tYXNrOwogCXN0cnVjdCBwdGNfc3RhdHMgKnN0YXQ7CiAJc3RydWN0IGJhdV9jb250cm9sICpiY3A7CiAJc3RydWN0IGJhdV9jb250cm9sICp0YmNwOworCXN0cnVjdCBodWJfYW5kX3Bub2RlICpocHA7CiAKIAkvKiBrZXJuZWwgd2FzIGJvb3RlZCAnbm9iYXUnICovCiAJaWYgKG5vYmF1KQpAQCAtNzUwLDExICs3NTEsMTggQEAKIAliYXVfZGVzYyArPSBVVl9JVEVNU19QRVJfREVTQ1JJUFRPUiAqIGJjcC0+dXZodWJfY3B1OwogCWJhdV91dmh1YnNfY2xlYXIoJmJhdV9kZXNjLT5kaXN0cmlidXRpb24sIFVWX0RJU1RSSUJVVElPTl9TSVpFKTsKIAotCS8qIGNwdSBzdGF0aXN0aWNzICovCiAJZm9yX2VhY2hfY3B1KHRjcHUsIGZsdXNoX21hc2spIHsKLQkJdXZodWIgPSB1dl9jcHVfdG9fYmxhZGVfaWQodGNwdSk7Ci0JCWJhdV91dmh1Yl9zZXQodXZodWIsICZiYXVfZGVzYy0+ZGlzdHJpYnV0aW9uKTsKLQkJaWYgKHV2aHViID09IGJjcC0+dXZodWIpCisJCS8qCisJCSAqIFRoZSBkaXN0cmlidXRpb24gdmVjdG9yIGlzIGEgYml0IG1hcCBvZiBwbm9kZXMsIHJlbGF0aXZlCisJCSAqIHRvIHRoZSBwYXJ0aXRpb24gYmFzZSBwbm9kZSAoYW5kIHRoZSBwYXJ0aXRpb24gYmFzZSBuYXNpZAorCQkgKiBpbiB0aGUgaGVhZGVyKS4KKwkJICogVHJhbnNsYXRlIGNwdSB0byBwbm9kZSBhbmQgaHViIHVzaW5nIGFuIGFycmF5IHN0b3JlZAorCQkgKiBpbiBsb2NhbCBtZW1vcnkuCisJCSAqLworCQlocHAgPSAmYmNwLT5zb2NrZXRfbWFzdGVyLT50YXJnZXRfaHViX2FuZF9wbm9kZVt0Y3B1XTsKKwkJdHBub2RlID0gaHBwLT5wbm9kZSAtIGJjcC0+cGFydGl0aW9uX2Jhc2VfcG5vZGU7CisJCWJhdV91dmh1Yl9zZXQodHBub2RlLCAmYmF1X2Rlc2MtPmRpc3RyaWJ1dGlvbik7CisJCWlmIChocHAtPnV2aHViID09IGJjcC0+dXZodWIpCiAJCQlsb2NhbHMrKzsKIAkJZWxzZQogCQkJcmVtb3RlcysrOwpAQCAtODU1LDcgKzg2Myw3IEBACiAgKiBhbiBpbnRlcnJ1cHQsIGJ1dCBjYXVzZXMgYW4gZXJyb3IgbWVzc2FnZSB0byBiZSByZXR1cm5lZCB0bwogICogdGhlIHNlbmRlci4KICAqLwotc3RhdGljIHZvaWQgdXZfZW5hYmxlX3RpbWVvdXRzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgdXZfZW5hYmxlX3RpbWVvdXRzKHZvaWQpCiB7CiAJaW50IHV2aHViOwogCWludCBudXZodWJzOwpAQCAtMTMyNiwxMCArMTMzNCwxMCBAQAogfQogCiAvKgotICogaW5pdGlhbGl6ZSB0aGUgc2VuZGluZyBzaWRlJ3Mgc2VuZGluZyBidWZmZXJzCisgKiBJbml0aWFsaXplIHRoZSBzZW5kaW5nIHNpZGUncyBzZW5kaW5nIGJ1ZmZlcnMuCiAgKi8KIHN0YXRpYyB2b2lkCi11dl9hY3RpdmF0aW9uX2Rlc2NyaXB0b3JfaW5pdChpbnQgbm9kZSwgaW50IHBub2RlKQordXZfYWN0aXZhdGlvbl9kZXNjcmlwdG9yX2luaXQoaW50IG5vZGUsIGludCBwbm9kZSwgaW50IGJhc2VfcG5vZGUpCiB7CiAJaW50IGk7CiAJaW50IGNwdTsKQEAgLTEzNTIsMTEgKzEzNjAsMTEgQEAKIAluID0gcGEgPj4gdXZfbnNoaWZ0OwogCW0gPSBwYSAmIHV2X21tYXNrOwogCisJLyogdGhlIDE0LWJpdCBwbm9kZSAqLwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0xCX0JBVV9TQl9ERVNDUklQVE9SX0JBU0UsCiAJCQkgICAgICAobiA8PCBVVl9ERVNDX0JBU0VfUE5PREVfU0hJRlQgfCBtKSk7Ci0KIAkvKgotCSAqIGluaXRpYWxpemluZyBhbGwgOCAoVVZfSVRFTVNfUEVSX0RFU0NSSVBUT1IpIGRlc2NyaXB0b3JzIGZvciBlYWNoCisJICogSW5pdGlhbGl6aW5nIGFsbCA4IChVVl9JVEVNU19QRVJfREVTQ1JJUFRPUikgZGVzY3JpcHRvcnMgZm9yIGVhY2gKIAkgKiBjcHUgZXZlbiB0aG91Z2ggd2Ugb25seSB1c2UgdGhlIGZpcnN0IG9uZTsgb25lIGRlc2NyaXB0b3IgY2FuCiAJICogZGVzY3JpYmUgYSBicm9hZGNhc3QgdG8gMjU2IHV2IGh1YnMuCiAJICovCkBAIC0xMzY1LDEyICsxMzczLDEzIEBACiAJCW1lbXNldChiZDIsIDAsIHNpemVvZihzdHJ1Y3QgYmF1X2Rlc2MpKTsKIAkJYmQyLT5oZWFkZXIuc3dfYWNrX2ZsYWcgPSAxOwogCQkvKgotCQkgKiBiYXNlX2Rlc3Rfbm9kZWlkIGlzIHRoZSBuYXNpZCBvZiB0aGUgZmlyc3QgdXZodWIKLQkJICogaW4gdGhlIHBhcnRpdGlvbi4gVGhlIGJpdCBtYXAgd2lsbCBpbmRpY2F0ZSB1dmh1YiBudW1iZXJzLAotCQkgKiB3aGljaCBhcmUgMC1OIGluIGEgcGFydGl0aW9uLiBQbm9kZXMgYXJlIHVuaXF1ZSBzeXN0ZW0td2lkZS4KKwkJICogVGhlIGJhc2VfZGVzdF9uYXNpZCBzZXQgaW4gdGhlIG1lc3NhZ2UgaGVhZGVyIGlzIHRoZSBuYXNpZAorCQkgKiBvZiB0aGUgZmlyc3QgdXZodWIgaW4gdGhlIHBhcnRpdGlvbi4gVGhlIGJpdCBtYXAgd2lsbAorCQkgKiBpbmRpY2F0ZSBkZXN0aW5hdGlvbiBwbm9kZSBudW1iZXJzIHJlbGF0aXZlIHRvIHRoYXQgYmFzZS4KKwkJICogVGhleSBtYXkgbm90IGJlIGNvbnNlY3V0aXZlIGlmIG5hc2lkIHN0cmlkaW5nIGlzIGJlaW5nIHVzZWQuCiAJCSAqLwotCQliZDItPmhlYWRlci5iYXNlX2Rlc3Rfbm9kZWlkID0gVVZfUE5PREVfVE9fTkFTSUQodXZfcGFydGl0aW9uX2Jhc2VfcG5vZGUpOwotCQliZDItPmhlYWRlci5kZXN0X3N1Ym5vZGVpZCA9IDB4MTA7IC8qIHRoZSBMQiAqLworCQliZDItPmhlYWRlci5iYXNlX2Rlc3RfbmFzaWQgPSBVVl9QTk9ERV9UT19OQVNJRChiYXNlX3Bub2RlKTsKKwkJYmQyLT5oZWFkZXIuZGVzdF9zdWJub2RlaWQgPSBVVl9MQl9TVUJOT0RFSUQ7CiAJCWJkMi0+aGVhZGVyLmNvbW1hbmQgPSBVVl9ORVRfRU5EUE9JTlRfSU5URDsKIAkJYmQyLT5oZWFkZXIuaW50X2JvdGggPSAxOwogCQkvKgpAQCAtMTQ0Miw3ICsxNDUxLDcgQEAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBvZiBlYWNoIFVWIGh1YidzIHN0cnVjdHVyZXMKICAqLwotc3RhdGljIHZvaWQgX19pbml0IHV2X2luaXRfdXZodWIoaW50IHV2aHViLCBpbnQgdmVjdG9yKQorc3RhdGljIHZvaWQgX19pbml0IHV2X2luaXRfdXZodWIoaW50IHV2aHViLCBpbnQgdmVjdG9yLCBpbnQgYmFzZV9wbm9kZSkKIHsKIAlpbnQgbm9kZTsKIAlpbnQgcG5vZGU7CkBAIC0xNDUwLDExICsxNDU5LDExIEBACiAKIAlub2RlID0gdXZodWJfdG9fZmlyc3Rfbm9kZSh1dmh1Yik7CiAJcG5vZGUgPSB1dl9ibGFkZV90b19wbm9kZSh1dmh1Yik7Ci0JdXZfYWN0aXZhdGlvbl9kZXNjcmlwdG9yX2luaXQobm9kZSwgcG5vZGUpOworCXV2X2FjdGl2YXRpb25fZGVzY3JpcHRvcl9pbml0KG5vZGUsIHBub2RlLCBiYXNlX3Bub2RlKTsKIAl1dl9wYXlsb2FkX3F1ZXVlX2luaXQobm9kZSwgcG5vZGUpOwogCS8qCi0JICogdGhlIGJlbG93IGluaXRpYWxpemF0aW9uIGNhbid0IGJlIGluIGZpcm13YXJlIGJlY2F1c2UgdGhlCi0JICogbWVzc2FnaW5nIElSUSB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIE9TCisJICogVGhlIGJlbG93IGluaXRpYWxpemF0aW9uIGNhbid0IGJlIGluIGZpcm13YXJlIGJlY2F1c2UgdGhlCisJICogbWVzc2FnaW5nIElSUSB3aWxsIGJlIGRldGVybWluZWQgYnkgdGhlIE9TLgogCSAqLwogCWFwaWNpZCA9IHV2aHViX3RvX2ZpcnN0X2FwaWNpZCh1dmh1YikgfCB1dl9hcGljaWRfaGliaXRzOwogCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0JBVV9EQVRBX0NPTkZJRywKQEAgLTE0OTEsMTAgKzE1MDAsMTEgQEAKIC8qCiAgKiBpbml0aWFsaXplIHRoZSBiYXVfY29udHJvbCBzdHJ1Y3R1cmUgZm9yIGVhY2ggY3B1CiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IHV2X2luaXRfcGVyX2NwdShpbnQgbnV2aHVicykKK3N0YXRpYyBpbnQgX19pbml0IHV2X2luaXRfcGVyX2NwdShpbnQgbnV2aHVicywgaW50IGJhc2VfcGFydF9wbm9kZSkKIHsKIAlpbnQgaTsKIAlpbnQgY3B1OworCWludCB0Y3B1OwogCWludCBwbm9kZTsKIAlpbnQgdXZodWI7CiAJaW50IGhhdmVfaG1hc3RlcjsKQEAgLTE1MjgsNiArMTUzOCwxNSBAQAogCQliY3AgPSAmcGVyX2NwdShiYXVfY29udHJvbCwgY3B1KTsKIAkJbWVtc2V0KGJjcCwgMCwgc2l6ZW9mKHN0cnVjdCBiYXVfY29udHJvbCkpOwogCQlwbm9kZSA9IHV2X2NwdV9odWJfaW5mbyhjcHUpLT5wbm9kZTsKKwkJaWYgKChwbm9kZSAtIGJhc2VfcGFydF9wbm9kZSkgPj0gVVZfRElTVFJJQlVUSU9OX1NJWkUpIHsKKwkJCXByaW50ayhLRVJOX0VNRVJHCisJCQkJImNwdSAlZCBwbm9kZSAlZC0lZCBiZXlvbmQgJWQ7IEJBVSBkaXNhYmxlZFxuIiwKKwkJCQljcHUsIHBub2RlLCBiYXNlX3BhcnRfcG5vZGUsCisJCQkJVVZfRElTVFJJQlVUSU9OX1NJWkUpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJYmNwLT5vc25vZGUgPSBjcHVfdG9fbm9kZShjcHUpOworCQliY3AtPnBhcnRpdGlvbl9iYXNlX3Bub2RlID0gdXZfcGFydGl0aW9uX2Jhc2VfcG5vZGU7CiAJCXV2aHViID0gdXZfY3B1X2h1Yl9pbmZvKGNwdSktPm51bWFfYmxhZGVfaWQ7CiAJCSoodXZodWJfbWFzayArICh1dmh1Yi84KSkgfD0gKDEgPDwgKHV2aHViJTgpKTsKIAkJYmRwID0gJnV2aHViX2Rlc2NzW3V2aHViXTsKQEAgLTE1MzYsNyArMTU1NSw3IEBACiAJCWJkcC0+cG5vZGUgPSBwbm9kZTsKIAkJLyoga2x1ZGdlOiAnYXNzdW1pbmcnIG9uZSBub2RlIHBlciBzb2NrZXQsIGFuZCBhc3N1bWluZyB0aGF0CiAJCSAgIGRpc2FibGluZyBhIHNvY2tldCBqdXN0IGxlYXZlcyBhIGdhcCBpbiBub2RlIG51bWJlcnMgKi8KLQkJc29ja2V0ID0gKGNwdV90b19ub2RlKGNwdSkgJiAxKTsKKwkJc29ja2V0ID0gYmNwLT5vc25vZGUgJiAxOwogCQliZHAtPnNvY2tldF9tYXNrIHw9ICgxIDw8IHNvY2tldCk7CiAJCXNkcCA9ICZiZHAtPnNvY2tldFtzb2NrZXRdOwogCQlzZHAtPmNwdV9udW1iZXJbc2RwLT5udW1fY3B1c10gPSBjcHU7CkBAIC0xNTg1LDYgKzE2MDQsMjAgQEAKIG5leHRzb2NrZXQ6CiAJCQlzb2NrZXQrKzsKIAkJCXNvY2tldF9tYXNrID0gKHNvY2tldF9tYXNrID4+IDEpOworCQkJLyogZWFjaCBzb2NrZXQgZ2V0cyBhIGxvY2FsIGFycmF5IG9mIHBub2Rlcy9odWJzICovCisJCQliY3AgPSBzbWFzdGVyOworCQkJYmNwLT50YXJnZXRfaHViX2FuZF9wbm9kZSA9IGttYWxsb2Nfbm9kZSgKKwkJCQlzaXplb2Yoc3RydWN0IGh1Yl9hbmRfcG5vZGUpICoKKwkJCQludW1fcG9zc2libGVfY3B1cygpLCBHRlBfS0VSTkVMLCBiY3AtPm9zbm9kZSk7CisJCQltZW1zZXQoYmNwLT50YXJnZXRfaHViX2FuZF9wbm9kZSwgMCwKKwkJCQlzaXplb2Yoc3RydWN0IGh1Yl9hbmRfcG5vZGUpICoKKwkJCQludW1fcG9zc2libGVfY3B1cygpKTsKKwkJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KHRjcHUpIHsKKwkJCQliY3AtPnRhcmdldF9odWJfYW5kX3Bub2RlW3RjcHVdLnBub2RlID0KKwkJCQkJdXZfY3B1X2h1Yl9pbmZvKHRjcHUpLT5wbm9kZTsKKwkJCQliY3AtPnRhcmdldF9odWJfYW5kX3Bub2RlW3RjcHVdLnV2aHViID0KKwkJCQkJdXZfY3B1X2h1Yl9pbmZvKHRjcHUpLT5udW1hX2JsYWRlX2lkOworCQkJfQogCQl9CiAJfQogCWtmcmVlKHV2aHViX2Rlc2NzKTsKQEAgLTE2MzcsMjEgKzE2NzAsMjIgQEAKIAlzcGluX2xvY2tfaW5pdCgmZGlzYWJsZV9sb2NrKTsKIAljb25nZXN0ZWRfY3ljbGVzID0gbWljcm9zZWNfMl9jeWNsZXMoY29uZ2VzdGVkX3Jlc3BvbnNlX3VzKTsKIAotCWlmICh1dl9pbml0X3Blcl9jcHUobnV2aHVicykpIHsKKwl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSA9IDB4N2ZmZmZmZmY7CisJZm9yICh1dmh1YiA9IDA7IHV2aHViIDwgbnV2aHViczsgdXZodWIrKykgeworCQlpZiAodXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyh1dmh1YikgJiYKKwkJCSh1dl9ibGFkZV90b19wbm9kZSh1dmh1YikgPCB1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSkpCisJCQl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKTsKKwl9CisKKwlpZiAodXZfaW5pdF9wZXJfY3B1KG51dmh1YnMsIHV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlKSkgewogCQlub2JhdSA9IDE7CiAJCXJldHVybiAwOwogCX0KIAotCXV2X3BhcnRpdGlvbl9iYXNlX3Bub2RlID0gMHg3ZmZmZmZmZjsKLQlmb3IgKHV2aHViID0gMDsgdXZodWIgPCBudXZodWJzOyB1dmh1YisrKQotCQlpZiAodXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyh1dmh1YikgJiYKLQkJCSh1dl9ibGFkZV90b19wbm9kZSh1dmh1YikgPCB1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSkpCi0JCQl1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSA9IHV2X2JsYWRlX3RvX3Bub2RlKHV2aHViKTsKLQogCXZlY3RvciA9IFVWX0JBVV9NRVNTQUdFOwogCWZvcl9lYWNoX3Bvc3NpYmxlX2JsYWRlKHV2aHViKQogCQlpZiAodXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyh1dmh1YikpCi0JCQl1dl9pbml0X3V2aHViKHV2aHViLCB2ZWN0b3IpOworCQkJdXZfaW5pdF91dmh1Yih1dmh1YiwgdmVjdG9yLCB1dl9wYXJ0aXRpb25fYmFzZV9wbm9kZSk7CiAKIAl1dl9lbmFibGVfdGltZW91dHMoKTsKIAlhbGxvY19pbnRyX2dhdGUodmVjdG9yLCB1dl9iYXVfbWVzc2FnZV9pbnRyMSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl90aW1lLmMgYi9hcmNoL3g4Ni9wbGF0Zm9ybS91di91dl90aW1lLmMKaW5kZXggOWRhZjVkMS4uMGViOTAxOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGxhdGZvcm0vdXYvdXZfdGltZS5jCisrKyBiL2FyY2gveDg2L3BsYXRmb3JtL3V2L3V2X3RpbWUuYwpAQCAtNDAsNyArNDAsNiBAQAogCS5yYXRpbmcJCT0gNDAwLAogCS5yZWFkCQk9IHV2X3JlYWRfcnRjLAogCS5tYXNrCQk9IChjeWNsZV90KVVWSF9SVENfUkVBTF9USU1FX0NMT0NLX01BU0ssCi0JLnNoaWZ0CQk9IDEwLAogCS5mbGFncwkJPSBDTE9DS19TT1VSQ0VfSVNfQ09OVElOVU9VUywKIH07CiAKQEAgLTM3MiwxNCArMzcxLDExIEBACiAJaWYgKCFpc191dl9zeXN0ZW0oKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQljbG9ja3NvdXJjZV91di5tdWx0ID0gY2xvY2tzb3VyY2VfaHoybXVsdChzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQsCi0JCQkJY2xvY2tzb3VyY2VfdXYuc2hpZnQpOwotCiAJLyogSWYgc2luZ2xlIGJsYWRlLCBwcmVmZXIgdHNjICovCiAJaWYgKHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKSA9PSAxKQogCQljbG9ja3NvdXJjZV91di5yYXRpbmcgPSAyNTA7CiAKLQlyYyA9IGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV91dik7CisJcmMgPSBjbG9ja3NvdXJjZV9yZWdpc3Rlcl9oeigmY2xvY2tzb3VyY2VfdXYsIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CiAJaWYgKHJjKQogCQlwcmludGsoS0VSTl9JTkZPICJVViBSVEMgY2xvY2tzb3VyY2UgZmFpbGVkIHJjICVkXG4iLCByYyk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCmluZGV4IGUzYzZhMDYuLmRkN2I4OGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTIzNSw3ICsyMzUsNyBAQAogCSpkeCAmPSBtYXNrZWR4OwogfQogCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX2luaXRfY3B1aWRfbWFzayh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9pbml0X2NwdWlkX21hc2sodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgYXgsIGJ4LCBjeCwgZHg7CiAJdW5zaWduZWQgaW50IHhzYXZlX21hc2s7CkBAIC00MDAsNyArNDAwLDcgQEAKIC8qCiAgKiBsb2FkX2dkdCBmb3IgZWFybHkgYm9vdCwgd2hlbiB0aGUgZ2R0IGlzIG9ubHkgbWFwcGVkIG9uY2UKICAqLwotc3RhdGljIF9faW5pdCB2b2lkIHhlbl9sb2FkX2dkdF9ib290KGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqZHRyKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9sb2FkX2dkdF9ib290KGNvbnN0IHN0cnVjdCBkZXNjX3B0ciAqZHRyKQogewogCXVuc2lnbmVkIGxvbmcgdmEgPSBkdHItPmFkZHJlc3M7CiAJdW5zaWduZWQgaW50IHNpemUgPSBkdHItPnNpemUgKyAxOwpAQCAtNjYyLDcgKzY2Miw3IEBACiAgKiBWZXJzaW9uIG9mIHdyaXRlX2dkdF9lbnRyeSBmb3IgdXNlIGF0IGVhcmx5IGJvb3QtdGltZSBuZWVkZWQgdG8KICAqIHVwZGF0ZSBhbiBlbnRyeSBhcyBzaW1wbHkgYXMgcG9zc2libGUuCiAgKi8KLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fd3JpdGVfZ2R0X2VudHJ5X2Jvb3Qoc3RydWN0IGRlc2Nfc3RydWN0ICpkdCwgaW50IGVudHJ5LAorc3RhdGljIHZvaWQgX19pbml0IHhlbl93cml0ZV9nZHRfZW50cnlfYm9vdChzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmR0LCBpbnQgZW50cnksCiAJCQkJCSAgICBjb25zdCB2b2lkICpkZXNjLCBpbnQgdHlwZSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKQEAgLTkzMywxOCArOTMzLDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pbmZvIHhlbl9pbmZvIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2luZm8geGVuX2luZm8gX19pbml0Y29uc3QgPSB7CiAJLnBhcmF2aXJ0X2VuYWJsZWQgPSAxLAogCS5zaGFyZWRfa2VybmVsX3BtZCA9IDAsCiAKIAkubmFtZSA9ICJYZW4iLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pbml0X29wcyB4ZW5faW5pdF9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaW5pdF9vcHMgeGVuX2luaXRfb3BzIF9faW5pdGNvbnN0ID0gewogCS5wYXRjaCA9IHhlbl9wYXRjaCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfY3B1X29wcyB4ZW5fY3B1X29wcyBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9jcHVfb3BzIHhlbl9jcHVfb3BzIF9faW5pdGNvbnN0ID0gewogCS5jcHVpZCA9IHhlbl9jcHVpZCwKIAogCS5zZXRfZGVidWdyZWcgPSB4ZW5fc2V0X2RlYnVncmVnLApAQCAtMTAwNCw3ICsxMDA0LDcgQEAKIAkuZW5kX2NvbnRleHRfc3dpdGNoID0geGVuX2VuZF9jb250ZXh0X3N3aXRjaCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfYXBpY19vcHMgeGVuX2FwaWNfb3BzIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2X2FwaWNfb3BzIHhlbl9hcGljX29wcyBfX2luaXRjb25zdCA9IHsKICNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKIAkuc3RhcnR1cF9pcGlfaG9vayA9IHBhcmF2aXJ0X25vcCwKICNlbmRpZgpAQCAtMTA1NSw3ICsxMDU1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBtYWNoaW5lX29wcyBfX2luaXRkYXRhIHhlbl9tYWNoaW5lX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbWFjaGluZV9vcHMgeGVuX21hY2hpbmVfb3BzIF9faW5pdGNvbnN0ID0gewogCS5yZXN0YXJ0ID0geGVuX3Jlc3RhcnQsCiAJLmhhbHQgPSB4ZW5fbWFjaGluZV9oYWx0LAogCS5wb3dlcl9vZmYgPSB4ZW5fbWFjaGluZV9oYWx0LApAQCAtMTMzMiw3ICsxMzMyLDcgQEAKIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgeGVuX2h2bV9jcHVfbm90aWZpZXIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHhlbl9odm1fY3B1X25vdGlmaWVyIF9fY3B1aW5pdGRhdGEgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSB4ZW5faHZtX2NwdV9ub3RpZnksCiB9OwogCkBAIC0xMzgxLDcgKzEzODEsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGVuX2h2bV9uZWVkX2xhcGljKTsKIAotY29uc3QgX19yZWZjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbl9odm0gPSB7Citjb25zdCBzdHJ1Y3QgaHlwZXJ2aXNvcl94ODYgeDg2X2h5cGVyX3hlbl9odm0gX19yZWZjb25zdCA9IHsKIAkubmFtZQkJCT0gIlhlbiBIVk0iLAogCS5kZXRlY3QJCQk9IHhlbl9odm1fcGxhdGZvcm0sCiAJLmluaXRfcGxhdGZvcm0JCT0geGVuX2h2bV9ndWVzdF9pbml0LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2lycS5jIGIvYXJjaC94ODYveGVuL2lycS5jCmluZGV4IDZhNmZlODkuLjhiYmI0NjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9pcnEuYworKysgYi9hcmNoL3g4Ni94ZW4vaXJxLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCQl4ZW5fc2FmZV9oYWx0KCk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfaXJxX29wcyB4ZW5faXJxX29wcyBfX2luaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdl9pcnFfb3BzIHhlbl9pcnFfb3BzIF9faW5pdGNvbnN0ID0gewogCS5zYXZlX2ZsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3NhdmVfZmwpLAogCS5yZXN0b3JlX2ZsID0gUFZfQ0FMTEVFX1NBVkUoeGVuX3Jlc3RvcmVfZmwpLAogCS5pcnFfZGlzYWJsZSA9IFBWX0NBTExFRV9TQVZFKHhlbl9pcnFfZGlzYWJsZSksCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11LmMgYi9hcmNoL3g4Ni94ZW4vbW11LmMKaW5kZXggYTk5MWI1Ny4uMDJkNzUyNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL21tdS5jCisrKyBiL2FyY2gveDg2L3hlbi9tbXUuYwpAQCAtMTA1NCw3ICsxMDU0LDcgQEAKICAqIHRoYXQncyBiZWZvcmUgd2UgaGF2ZSBwYWdlIHN0cnVjdHVyZXMgdG8gc3RvcmUgdGhlIGJpdHMuICBTbyBkbyBhbGwKICAqIHRoZSBib29rLWtlZXBpbmcgbm93LgogICovCi1zdGF0aWMgX19pbml0IGludCB4ZW5fbWFya19waW5uZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBwYWdlICpwYWdlLAorc3RhdGljIGludCBfX2luaXQgeGVuX21hcmtfcGlubmVkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgIGVudW0gcHRfbGV2ZWwgbGV2ZWwpCiB7CiAJU2V0UGFnZVBpbm5lZChwYWdlKTsKQEAgLTExODcsNyArMTE4Nyw3IEBACiAKIAlhY3RpdmVfbW0gPSBwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuYWN0aXZlX21tKTsKIAotCWlmIChhY3RpdmVfbW0gPT0gbW0pCisJaWYgKGFjdGl2ZV9tbSA9PSBtbSAmJiBwZXJjcHVfcmVhZChjcHVfdGxic3RhdGUuc3RhdGUpICE9IFRMQlNUQVRFX09LKQogCQlsZWF2ZV9tbShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCiAJLyogSWYgdGhpcyBjcHUgc3RpbGwgaGFzIGEgc3RhbGUgY3IzIHJlZmVyZW5jZSwgdGhlbiBtYWtlIHN1cmUKQEAgLTEyNzEsMTMgKzEyNzEsMjcgQEAKIAlzcGluX3VubG9jaygmbW0tPnBhZ2VfdGFibGVfbG9jayk7CiB9CiAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcGFnZXRhYmxlX3NldHVwX3N0YXJ0KHBnZF90ICpiYXNlKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9wYWdldGFibGVfc2V0dXBfc3RhcnQocGdkX3QgKmJhc2UpCiB7CiB9CiAKK3N0YXRpYyBfX2luaXQgdm9pZCB4ZW5fbWFwcGluZ19wYWdldGFibGVfcmVzZXJ2ZSh1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJLyogcmVzZXJ2ZSB0aGUgcmFuZ2UgdXNlZCAqLworCW5hdGl2ZV9wYWdldGFibGVfcmVzZXJ2ZShzdGFydCwgZW5kKTsKKworCS8qIHNldCBhcyBSVyB0aGUgcmVzdCAqLworCXByaW50ayhLRVJOX0RFQlVHICJ4ZW46IHNldHRpbmcgUlcgdGhlIHJhbmdlICVsbHggLSAlbGx4XG4iLCBlbmQsCisJCQlQRk5fUEhZUyhwZ3RfYnVmX3RvcCkpOworCXdoaWxlIChlbmQgPCBQRk5fUEhZUyhwZ3RfYnVmX3RvcCkpIHsKKwkJbWFrZV9sb3dtZW1fcGFnZV9yZWFkd3JpdGUoX192YShlbmQpKTsKKwkJZW5kICs9IFBBR0VfU0laRTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIHhlbl9wb3N0X2FsbG9jYXRvcl9pbml0KHZvaWQpOwogCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3BhZ2V0YWJsZV9zZXR1cF9kb25lKHBnZF90ICpiYXNlKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9wYWdldGFibGVfc2V0dXBfZG9uZShwZ2RfdCAqYmFzZSkKIHsKIAl4ZW5fc2V0dXBfc2hhcmVkX2luZm8oKTsKIAl4ZW5fcG9zdF9hbGxvY2F0b3JfaW5pdCgpOwpAQCAtMTQ3MywxNiArMTQ4NywyMCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBfX2luaXQgcHRlX3QgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKLQogI2lmZGVmIENPTkZJR19YODZfMzIKK3N0YXRpYyBwdGVfdCBfX2luaXQgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKIAkvKiBJZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHB0ZSwgdGhlbiBkb24ndCBhbGxvdyBfUEFHRV9SVyB0byBiZSBzZXQgKi8KIAlpZiAocHRlX3ZhbF9tYSgqcHRlcCkgJiBfUEFHRV9QUkVTRU5UKQogCQlwdGUgPSBfX3B0ZV9tYSgoKHB0ZV92YWxfbWEoKnB0ZXApICYgX1BBR0VfUlcpIHwgfl9QQUdFX1JXKSAmCiAJCQkgICAgICAgcHRlX3ZhbF9tYShwdGUpKTsKLSNlbmRpZgorCisJcmV0dXJuIHB0ZTsKK30KKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KK3N0YXRpYyBwdGVfdCBfX2luaXQgbWFza19yd19wdGUocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKIAogCS8qCiAJICogSWYgdGhlIG5ldyBwZm4gaXMgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkCkBAIC0xNDkxLDE2ICsxNTA5LDE3IEBACiAJICogaXQgaXMgUk8uCiAJICovCiAJaWYgKCgoIWlzX2Vhcmx5X2lvcmVtYXBfcHRlcChwdGVwKSAmJgotCQkJcGZuID49IHBndF9idWZfc3RhcnQgJiYgcGZuIDwgcGd0X2J1Zl9lbmQpKSB8fAorCQkJcGZuID49IHBndF9idWZfc3RhcnQgJiYgcGZuIDwgcGd0X2J1Zl90b3ApKSB8fAogCQkJKGlzX2Vhcmx5X2lvcmVtYXBfcHRlcChwdGVwKSAmJiBwZm4gIT0gKHBndF9idWZfZW5kIC0gMSkpKQogCQlwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7CiAKIAlyZXR1cm4gcHRlOwogfQorI2VuZGlmIC8qIENPTkZJR19YODZfNjQgKi8KIAogLyogSW5pdC10aW1lIHNldF9wdGUgd2hpbGUgY29uc3RydWN0aW5nIGluaXRpYWwgcGFnZXRhYmxlcywgd2hpY2gKICAgIGRvZXNuJ3QgYWxsb3cgUk8gcGFnZXRhYmxlIHBhZ2VzIHRvIGJlIHJlbWFwcGVkIFJXICovCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3NldF9wdGVfaW5pdChwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9zZXRfcHRlX2luaXQocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKIHsKIAlwdGUgPSBtYXNrX3J3X3B0ZShwdGVwLCBwdGUpOwogCkBAIC0xNTE4LDcgKzE1MzcsNyBAQAogCiAvKiBFYXJseSBpbiBib290LCB3aGlsZSBzZXR0aW5nIHVwIHRoZSBpbml0aWFsIHBhZ2V0YWJsZSwgYXNzdW1lCiAgICBldmVyeXRoaW5nIGlzIHBpbm5lZC4gKi8KLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fYWxsb2NfcHRlX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9hbGxvY19wdGVfaW5pdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAjaWZkZWYgQ09ORklHX0ZMQVRNRU0KIAlCVUdfT04obWVtX21hcCk7CS8qIHNob3VsZCBvbmx5IGJlIHVzZWQgZWFybHkgKi8KQEAgLTE1MjgsNyArMTU0Nyw3IEBACiB9CiAKIC8qIFVzZWQgZm9yIHBtZCBhbmQgcHVkICovCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX2FsbG9jX3BtZF9pbml0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHBmbikKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fYWxsb2NfcG1kX2luaXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgcGZuKQogewogI2lmZGVmIENPTkZJR19GTEFUTUVNCiAJQlVHX09OKG1lbV9tYXApOwkvKiBzaG91bGQgb25seSBiZSB1c2VkIGVhcmx5ICovCkBAIC0xNTM4LDEzICsxNTU3LDEzIEBACiAKIC8qIEVhcmx5IHJlbGVhc2VfcHRlIGFzc3VtZXMgdGhhdCBhbGwgcHRzIGFyZSBwaW5uZWQsIHNpbmNlIHRoZXJlJ3MKICAgIG9ubHkgaW5pdF9tbSBhbmQgYW55dGhpbmcgYXR0YWNoZWQgdG8gdGhhdCBpcyBwaW5uZWQuICovCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3JlbGVhc2VfcHRlX2luaXQodW5zaWduZWQgbG9uZyBwZm4pCitzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3JlbGVhc2VfcHRlX2luaXQodW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJcGluX3BhZ2V0YWJsZV9wZm4oTU1VRVhUX1VOUElOX1RBQkxFLCBwZm4pOwogCW1ha2VfbG93bWVtX3BhZ2VfcmVhZHdyaXRlKF9fdmEoUEZOX1BIWVMocGZuKSkpOwogfQogCi1zdGF0aWMgX19pbml0IHZvaWQgeGVuX3JlbGVhc2VfcG1kX2luaXQodW5zaWduZWQgbG9uZyBwZm4pCitzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3JlbGVhc2VfcG1kX2luaXQodW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJbWFrZV9sb3dtZW1fcGFnZV9yZWFkd3JpdGUoX192YShQRk5fUEhZUyhwZm4pKSk7CiB9CkBAIC0xNjcwLDcgKzE2ODksNyBAQAogCQlCVUcoKTsKIH0KIAotc3RhdGljIF9faW5pdCB2b2lkIHhlbl9tYXBfaWRlbnRpdHlfZWFybHkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBtYXhfcGZuKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9tYXBfaWRlbnRpdHlfZWFybHkocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBtYXhfcGZuKQogewogCXVuc2lnbmVkIHBtZGlkeCwgcHRlaWR4OwogCXVuc2lnbmVkIGlkZW50X3B0ZTsKQEAgLTE3NTMsNyArMTc3Miw3IEBACiAgKiBvZiB0aGUgcGh5c2ljYWwgbWFwcGluZyBvbmNlIHNvbWUgc29ydCBvZiBhbGxvY2F0b3IgaGFzIGJlZW4gc2V0CiAgKiB1cC4KICAqLwotX19pbml0IHBnZF90ICp4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLAorcGdkX3QgKiBfX2luaXQgeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgbWF4X3BmbikKIHsKIAlwdWRfdCAqbDM7CkBAIC0xODI0LDcgKzE4NDMsNyBAQAogc3RhdGljIFJFU0VSVkVfQlJLX0FSUkFZKHBtZF90LCBpbml0aWFsX2tlcm5lbF9wbWQsIFBUUlNfUEVSX1BNRCk7CiBzdGF0aWMgUkVTRVJWRV9CUktfQVJSQVkocG1kX3QsIHN3YXBwZXJfa2VybmVsX3BtZCwgUFRSU19QRVJfUE1EKTsKIAotc3RhdGljIF9faW5pdCB2b2lkIHhlbl93cml0ZV9jcjNfaW5pdCh1bnNpZ25lZCBsb25nIGNyMykKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5fd3JpdGVfY3IzX2luaXQodW5zaWduZWQgbG9uZyBjcjMpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm4gPSBQRk5fRE9XTihfX3BhKHN3YXBwZXJfcGdfZGlyKSk7CiAKQEAgLTE4NjEsNyArMTg4MCw3IEBACiAJcHZfbW11X29wcy53cml0ZV9jcjMgPSAmeGVuX3dyaXRlX2NyMzsKIH0KIAotX19pbml0IHBnZF90ICp4ZW5fc2V0dXBfa2VybmVsX3BhZ2V0YWJsZShwZ2RfdCAqcGdkLAorcGdkX3QgKiBfX2luaXQgeGVuX3NldHVwX2tlcm5lbF9wYWdldGFibGUocGdkX3QgKnBnZCwKIAkJCQkJIHVuc2lnbmVkIGxvbmcgbWF4X3BmbikKIHsKIAlwbWRfdCAqa2VybmVsX3BtZDsKQEAgLTE5NjcsNyArMTk4Niw3IEBACiAjZW5kaWYKIH0KIAotX19pbml0IHZvaWQgeGVuX2lkZW50X21hcF9JU0Eodm9pZCkKK3ZvaWQgX19pbml0IHhlbl9pZGVudF9tYXBfSVNBKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBwYTsKIApAQCAtMTk5MCw3ICsyMDA5LDcgQEAKIAl4ZW5fZmx1c2hfdGxiKCk7CiB9CiAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fcG9zdF9hbGxvY2F0b3JfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9wb3N0X2FsbG9jYXRvcl9pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX1hFTl9ERUJVRwogCXB2X21tdV9vcHMubWFrZV9wdGUgPSBQVl9DQUxMRUVfU0FWRSh4ZW5fbWFrZV9wdGVfZGVidWcpOwpAQCAtMjAyNyw3ICsyMDQ2LDcgQEAKIAlwcmVlbXB0X2VuYWJsZSgpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2X21tdV9vcHMgeGVuX21tdV9vcHMgX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfbW11X29wcyB4ZW5fbW11X29wcyBfX2luaXRjb25zdCA9IHsKIAkucmVhZF9jcjIgPSB4ZW5fcmVhZF9jcjIsCiAJLndyaXRlX2NyMiA9IHhlbl93cml0ZV9jcjIsCiAKQEAgLTIxMDAsNiArMjExOSw3IEBACiAKIHZvaWQgX19pbml0IHhlbl9pbml0X21tdV9vcHModm9pZCkKIHsKKwl4ODZfaW5pdC5tYXBwaW5nLnBhZ2V0YWJsZV9yZXNlcnZlID0geGVuX21hcHBpbmdfcGFnZXRhYmxlX3Jlc2VydmU7CiAJeDg2X2luaXQucGFnaW5nLnBhZ2V0YWJsZV9zZXR1cF9zdGFydCA9IHhlbl9wYWdldGFibGVfc2V0dXBfc3RhcnQ7CiAJeDg2X2luaXQucGFnaW5nLnBhZ2V0YWJsZV9zZXR1cF9kb25lID0geGVuX3BhZ2V0YWJsZV9zZXR1cF9kb25lOwogCXB2X21tdV9vcHMgPSB4ZW5fbW11X29wczsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9wMm0uYyBiL2FyY2gveDg2L3hlbi9wMm0uYwppbmRleCAxNDFlYjBkLi41OGVmZWI5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vcDJtLmMKKysrIGIvYXJjaC94ODYveGVuL3AybS5jCkBAIC01MjIsMTEgKzUyMiwyMCBAQAogCS8qIEJvdW5kYXJ5IGNyb3NzLW92ZXIgZm9yIHRoZSBlZGdlczogKi8KIAlpZiAoaWR4KSB7CiAJCXVuc2lnbmVkIGxvbmcgKnAybSA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQl1bnNpZ25lZCBsb25nICptaWRfbWZuX3A7CiAKIAkJcDJtX2luaXQocDJtKTsKIAogCQlwMm1fdG9wW3RvcGlkeF1bbWlkaWR4XSA9IHAybTsKIAorCQkvKiBGb3Igc2F2ZS9yZXN0b3JlIHdlIG5lZWQgdG8gTUZOIG9mIHRoZSBQMk0gc2F2ZWQgKi8KKwkJCisJCW1pZF9tZm5fcCA9IHAybV90b3BfbWZuX3BbdG9waWR4XTsKKwkJV0FSTihtaWRfbWZuX3BbbWlkaWR4XSAhPSB2aXJ0X3RvX21mbihwMm1fbWlzc2luZyksCisJCQkiUDJNX1RPUF9QWyVkXVslZF0gIT0gTUZOIG9mIHAybV9taXNzaW5nIVxuIiwKKwkJCXRvcGlkeCwgbWlkaWR4KTsKKwkJbWlkX21mbl9wW21pZGlkeF0gPSB2aXJ0X3RvX21mbihwMm0pOworCiAJfQogCXJldHVybiBpZHggIT0gMDsKIH0KQEAgLTU0OSwxMiArNTU4LDI5IEBACiAJCXBmbiArPSBQMk1fTUlEX1BFUl9QQUdFICogUDJNX1BFUl9QQUdFKQogCXsKIAkJdW5zaWduZWQgdG9waWR4ID0gcDJtX3RvcF9pbmRleChwZm4pOwotCQlpZiAocDJtX3RvcFt0b3BpZHhdID09IHAybV9taWRfbWlzc2luZykgewotCQkJdW5zaWduZWQgbG9uZyAqKm1pZCA9IGV4dGVuZF9icmsoUEFHRV9TSVpFLCBQQUdFX1NJWkUpOworCQl1bnNpZ25lZCBsb25nICptaWRfbWZuX3A7CisJCXVuc2lnbmVkIGxvbmcgKiptaWQ7CisKKwkJbWlkID0gcDJtX3RvcFt0b3BpZHhdOworCQltaWRfbWZuX3AgPSBwMm1fdG9wX21mbl9wW3RvcGlkeF07CisJCWlmIChtaWQgPT0gcDJtX21pZF9taXNzaW5nKSB7CisJCQltaWQgPSBleHRlbmRfYnJrKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKIAogCQkJcDJtX21pZF9pbml0KG1pZCk7CiAKIAkJCXAybV90b3BbdG9waWR4XSA9IG1pZDsKKworCQkJQlVHX09OKG1pZF9tZm5fcCAhPSBwMm1fbWlkX21pc3NpbmdfbWZuKTsKKwkJfQorCQkvKiBBbmQgdGhlIHNhdmUvcmVzdG9yZSBQMk0gdGFibGVzLi4gKi8KKwkJaWYgKG1pZF9tZm5fcCA9PSBwMm1fbWlkX21pc3NpbmdfbWZuKSB7CisJCQltaWRfbWZuX3AgPSBleHRlbmRfYnJrKFBBR0VfU0laRSwgUEFHRV9TSVpFKTsKKwkJCXAybV9taWRfbWZuX2luaXQobWlkX21mbl9wKTsKKworCQkJcDJtX3RvcF9tZm5fcFt0b3BpZHhdID0gbWlkX21mbl9wOworCQkJcDJtX3RvcF9tZm5bdG9waWR4XSA9IHZpcnRfdG9fbWZuKG1pZF9tZm5fcCk7CisJCQkvKiBOb3RlOiB3ZSBkb24ndCBzZXQgbWlkX21mbl9wW21pZGl4XSBoZXJlLAorCQkgCSAqIGxvb2sgaW4gX19lYXJseV9hbGxvY19wMm0gKi8KIAkJfQogCX0KIApAQCAtNjUwLDcgKzY3Niw3IEBACiB9CiAKIC8qIEFkZCBhbiBNRk4gb3ZlcnJpZGUgZm9yIGEgcGFydGljdWxhciBwYWdlICovCi1pbnQgbTJwX2FkZF9vdmVycmlkZSh1bnNpZ25lZCBsb25nIG1mbiwgc3RydWN0IHBhZ2UgKnBhZ2UpCitpbnQgbTJwX2FkZF9vdmVycmlkZSh1bnNpZ25lZCBsb25nIG1mbiwgc3RydWN0IHBhZ2UgKnBhZ2UsIGJvb2wgY2xlYXJfcHRlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBwZm47CkBAIC02NjIsNyArNjg4LDYgQEAKIAlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CiAJCWFkZHJlc3MgPSAodW5zaWduZWQgbG9uZylfX3ZhKHBmbiA8PCBQQUdFX1NISUZUKTsKIAkJcHRlcCA9IGxvb2t1cF9hZGRyZXNzKGFkZHJlc3MsICZsZXZlbCk7Ci0KIAkJaWYgKFdBUk4ocHRlcCA9PSBOVUxMIHx8IGxldmVsICE9IFBHX0xFVkVMXzRLLAogCQkJCQkibTJwX2FkZF9vdmVycmlkZTogcGZuICVseCBub3QgbWFwcGVkIiwgcGZuKSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtNjc0LDE4ICs2OTksMTcgQEAKIAlpZiAodW5saWtlbHkoIXNldF9waHlzX3RvX21hY2hpbmUocGZuLCBGT1JFSUdOX0ZSQU1FKG1mbikpKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKQorCWlmIChjbGVhcl9wdGUgJiYgIVBhZ2VIaWdoTWVtKHBhZ2UpKQogCQkvKiBKdXN0IHphcCBvbGQgbWFwcGluZyBmb3Igbm93ICovCiAJCXB0ZV9jbGVhcigmaW5pdF9tbSwgYWRkcmVzcywgcHRlcCk7Ci0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbTJwX292ZXJyaWRlX2xvY2ssIGZsYWdzKTsKIAlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAgJm0ycF9vdmVycmlkZXNbbWZuX2hhc2gobWZuKV0pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0ycF9vdmVycmlkZV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KLQotaW50IG0ycF9yZW1vdmVfb3ZlcnJpZGUoc3RydWN0IHBhZ2UgKnBhZ2UpCitFWFBPUlRfU1lNQk9MX0dQTChtMnBfYWRkX292ZXJyaWRlKTsKK2ludCBtMnBfcmVtb3ZlX292ZXJyaWRlKHN0cnVjdCBwYWdlICpwYWdlLCBib29sIGNsZWFyX3B0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbWZuOwpAQCAtNzEzLDcgKzczNyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbTJwX292ZXJyaWRlX2xvY2ssIGZsYWdzKTsKIAlzZXRfcGh5c190b19tYWNoaW5lKHBmbiwgcGFnZS0+aW5kZXgpOwogCi0JaWYgKCFQYWdlSGlnaE1lbShwYWdlKSkKKwlpZiAoY2xlYXJfcHRlICYmICFQYWdlSGlnaE1lbShwYWdlKSkKIAkJc2V0X3B0ZV9hdCgmaW5pdF9tbSwgYWRkcmVzcywgcHRlcCwKIAkJCQlwZm5fcHRlKHBmbiwgUEFHRV9LRVJORUwpKTsKIAkJLyogTm8gdGxiIGZsdXNoIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBjYWxsZXIgYWxyZWFkeQpAQCAtNzIxLDYgKzc0NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG0ycF9yZW1vdmVfb3ZlcnJpZGUpOwogCiBzdHJ1Y3QgcGFnZSAqbTJwX2ZpbmRfb3ZlcnJpZGUodW5zaWduZWQgbG9uZyBtZm4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc2V0dXAuYyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCmluZGV4IGZhMDI2OWEuLmJlMWE0NjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zZXR1cC5jCisrKyBiL2FyY2gveDg2L3hlbi9zZXR1cC5jCkBAIC01MCw3ICs1MCw3IEBACiAgKi8KICNkZWZpbmUgRVhUUkFfTUVNX1JBVElPCQkoMTApCiAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fYWRkX2V4dHJhX21lbSh1bnNpZ25lZCBsb25nIHBhZ2VzKQorc3RhdGljIHZvaWQgX19pbml0IHhlbl9hZGRfZXh0cmFfbWVtKHVuc2lnbmVkIGxvbmcgcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBwZm47CiAKQEAgLTE2Niw3ICsxNjYsNyBAQAogCQlpZiAobGFzdCA+IGVuZCkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChlbnRyeS0+dHlwZSA9PSBFODIwX1JBTSkgeworCQlpZiAoKGVudHJ5LT50eXBlID09IEU4MjBfUkFNKSB8fCAoZW50cnktPnR5cGUgPT0gRTgyMF9VTlVTQUJMRSkpIHsKIAkJCWlmIChzdGFydCA+IHN0YXJ0X3BjaSkKIAkJCQlpZGVudGl0eSArPSBzZXRfcGh5c19yYW5nZV9pZGVudGl0eSgKIAkJCQkJCVBGTl9VUChzdGFydF9wY2kpLCBQRk5fRE9XTihzdGFydCkpOwpAQCAtMjI3LDcgKzIyNywxMSBAQAogCiAJbWVtY3B5KG1hcF9yYXcsIG1hcCwgc2l6ZW9mKG1hcCkpOwogCWU4MjAubnJfbWFwID0gMDsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJeGVuX2V4dHJhX21lbV9zdGFydCA9IG1lbV9lbmQ7CisjZWxzZQorCXhlbl9leHRyYV9tZW1fc3RhcnQgPSBtYXgoKDFVTEwgPDwgMzIpLCBtZW1fZW5kKTsKKyNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBtZW1tYXAubnJfZW50cmllczsgaSsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBlbmQ7CiAKQEAgLTMzNiw3ICszNDAsNyBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBfX2NwdWluaXQgaW50IHJlZ2lzdGVyX2NhbGxiYWNrKHVuc2lnbmVkIHR5cGUsIGNvbnN0IHZvaWQgKmZ1bmMpCitzdGF0aWMgaW50IF9fY3B1aW5pdCByZWdpc3Rlcl9jYWxsYmFjayh1bnNpZ25lZCB0eXBlLCBjb25zdCB2b2lkICpmdW5jKQogewogCXN0cnVjdCBjYWxsYmFja19yZWdpc3RlciBjYWxsYmFjayA9IHsKIAkJLnR5cGUgPSB0eXBlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL3NtcC5jIGIvYXJjaC94ODYveGVuL3NtcC5jCmluZGV4IDMwNjEyNDQuLjQxMDM4YzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zbXAuYworKysgYi9hcmNoL3g4Ni94ZW4vc21wLmMKQEAgLTQ2LDE4ICs0NiwxNyBAQAogc3RhdGljIGlycXJldHVybl90IHhlbl9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKIAogLyoKLSAqIFJlc2NoZWR1bGUgY2FsbCBiYWNrLiBOb3RoaW5nIHRvIGRvLAotICogYWxsIHRoZSB3b3JrIGlzIGRvbmUgYXV0b21hdGljYWxseSB3aGVuCi0gKiB3ZSByZXR1cm4gZnJvbSB0aGUgaW50ZXJydXB0LgorICogUmVzY2hlZHVsZSBjYWxsIGJhY2suCiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCB4ZW5fcmVzY2hlZHVsZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCWluY19pcnFfc3RhdChpcnFfcmVzY2hlZF9jb3VudCk7CisJc2NoZWR1bGVyX2lwaSgpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgX19jcHVpbml0IHZvaWQgY3B1X2JyaW5ndXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCBjcHVfYnJpbmd1cCh2b2lkKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKQEAgLTg1LDcgKzg0LDcgQEAKIAl3bWIoKTsJCQkvKiBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBvdXQgKi8KIH0KIAotc3RhdGljIF9fY3B1aW5pdCB2b2lkIGNwdV9icmluZ3VwX2FuZF9pZGxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgY3B1X2JyaW5ndXBfYW5kX2lkbGUodm9pZCkKIHsKIAljcHVfYnJpbmd1cCgpOwogCWNwdV9pZGxlKCk7CkBAIC0yNDIsNyArMjQxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBfX2NwdWluaXQgaW50CitzdGF0aWMgaW50IF9fY3B1aW5pdAogY3B1X2luaXRpYWxpemVfY29udGV4dCh1bnNpZ25lZCBpbnQgY3B1LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmlkbGUpCiB7CiAJc3RydWN0IHZjcHVfZ3Vlc3RfY29udGV4dCAqY3R4dDsKQEAgLTQ4Niw3ICs0ODUsNyBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBzbXBfb3BzIHhlbl9zbXBfb3BzIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNtcF9vcHMgeGVuX3NtcF9vcHMgX19pbml0Y29uc3QgPSB7CiAJLnNtcF9wcmVwYXJlX2Jvb3RfY3B1ID0geGVuX3NtcF9wcmVwYXJlX2Jvb3RfY3B1LAogCS5zbXBfcHJlcGFyZV9jcHVzID0geGVuX3NtcF9wcmVwYXJlX2NwdXMsCiAJLnNtcF9jcHVzX2RvbmUgPSB4ZW5fc21wX2NwdXNfZG9uZSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi90aW1lLmMgYi9hcmNoL3g4Ni94ZW4vdGltZS5jCmluZGV4IDJlMmQzNzAuLjUxNThjNTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi90aW1lLmMKKysrIGIvYXJjaC94ODYveGVuL3RpbWUuYwpAQCAtMjYsOCArMjYsNiBAQAogCiAjaW5jbHVkZSAieGVuLW9wcy5oIgogCi0jZGVmaW5lIFhFTl9TSElGVCAyMgotCiAvKiBYZW4gbWF5IGZpcmUgYSB0aW1lciB1cCB0byB0aGlzIG1hbnkgbnMgZWFybHkgKi8KICNkZWZpbmUgVElNRVJfU0xPUAkxMDAwMDAKICNkZWZpbmUgTlNfUEVSX1RJQ0sJKDEwMDAwMDAwMDBMTCAvIEhaKQpAQCAtMjExLDggKzIwOSw2IEBACiAJLnJhdGluZyA9IDQwMCwKIAkucmVhZCA9IHhlbl9jbG9ja3NvdXJjZV9nZXRfY3ljbGVzLAogCS5tYXNrID0gfjAsCi0JLm11bHQgPSAxPDxYRU5fU0hJRlQsCQkvKiB0aW1lIGRpcmVjdGx5IGluIG5hbm9zZWNvbmRzICovCi0JLnNoaWZ0ID0gWEVOX1NISUZULAogCS5mbGFncyA9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIApAQCAtNDM5LDE2ICs0MzUsMTYgQEAKIAl9CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZfdGltZV9vcHMgeGVuX3RpbWVfb3BzIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2X3RpbWVfb3BzIHhlbl90aW1lX29wcyBfX2luaXRjb25zdCA9IHsKIAkuc2NoZWRfY2xvY2sgPSB4ZW5fY2xvY2tzb3VyY2VfcmVhZCwKIH07CiAKLXN0YXRpYyBfX2luaXQgdm9pZCB4ZW5fdGltZV9pbml0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3RpbWVfaW5pdCh2b2lkKQogewogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJc3RydWN0IHRpbWVzcGVjIHRwOwogCi0JY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJnhlbl9jbG9ja3NvdXJjZSk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJnhlbl9jbG9ja3NvdXJjZSwgTlNFQ19QRVJfU0VDKTsKIAogCWlmIChIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX3N0b3BfcGVyaW9kaWNfdGltZXIsIGNwdSwgTlVMTCkgPT0gMCkgewogCQkvKiBTdWNjZXNzZnVsbHkgdHVybmVkIG9mZiAxMDBIeiB0aWNrLCBzbyB3ZSBoYXZlIHRoZQpAQCAtNDY4LDcgKzQ2NCw3IEBACiAJeGVuX3NldHVwX2NwdV9jbG9ja2V2ZW50cygpOwogfQogCi1fX2luaXQgdm9pZCB4ZW5faW5pdF90aW1lX29wcyh2b2lkKQordm9pZCBfX2luaXQgeGVuX2luaXRfdGltZV9vcHModm9pZCkKIHsKIAlwdl90aW1lX29wcyA9IHhlbl90aW1lX29wczsKIApAQCAtNDkwLDcgKzQ4Niw3IEBACiAJeGVuX3NldHVwX2NwdV9jbG9ja2V2ZW50cygpOwogfQogCi1fX2luaXQgdm9pZCB4ZW5faHZtX2luaXRfdGltZV9vcHModm9pZCkKK3ZvaWQgX19pbml0IHhlbl9odm1faW5pdF90aW1lX29wcyh2b2lkKQogewogCS8qIHZlY3RvciBjYWxsYmFjayBpcyBuZWVkZWQgb3RoZXJ3aXNlIHdlIGNhbm5vdCByZWNlaXZlIGludGVycnVwdHMKIAkgKiBvbiBjcHUgPiAwIGFuZCBhdCB0aGlzIHBvaW50IHdlIGRvbid0IGtub3cgaG93IG1hbnkgY3B1cyBhcmUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi94ZW4tb3BzLmggYi9hcmNoL3g4Ni94ZW4veGVuLW9wcy5oCmluZGV4IDMxMTJmNTUuLjk3ZGZkYzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi94ZW4tb3BzLmgKKysrIGIvYXJjaC94ODYveGVuL3hlbi1vcHMuaApAQCAtNzQsNyArNzQsNyBAQAogCiAjaWZkZWYgQ09ORklHX1BBUkFWSVJUX1NQSU5MT0NLUwogdm9pZCBfX2luaXQgeGVuX2luaXRfc3BpbmxvY2tzKHZvaWQpOwotX19jcHVpbml0IHZvaWQgeGVuX2luaXRfbG9ja19jcHUoaW50IGNwdSk7Cit2b2lkIF9fY3B1aW5pdCB4ZW5faW5pdF9sb2NrX2NwdShpbnQgY3B1KTsKIHZvaWQgeGVuX3VuaW5pdF9sb2NrX2NwdShpbnQgY3B1KTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgeGVuX2luaXRfc3BpbmxvY2tzKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvaXJxLmMKaW5kZXggZDc3MDg5ZC4uNDM0MGVlMCAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL2lycS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9pcnEuYwpAQCAtNjQsNDcgKzY0LDQxIEBACiAKIGludCBhcmNoX3Nob3dfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIGludCBwcmVjKQogewotCWludCBqOwotCi0Jc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiTk1JIik7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIG5taV9jb3VudChqKSk7Ci0Jc2VxX3B1dGMocCwgJ1xuJyk7CiAJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiRVJSIik7CiAJc2VxX3ByaW50ZihwLCAiJTEwdVxuIiwgYXRvbWljX3JlYWQoJmlycV9lcnJfY291bnQpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgeHRlbnNhX2lycV9tYXNrKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJY2FjaGVkX2lycV9tYXNrICY9IH4oMSA8PCBkLT5pcnEpOwogCXNldF9zciAoY2FjaGVkX2lycV9tYXNrLCBJTlRFTkFCTEUpOwogfQogCi1zdGF0aWMgdm9pZCB4dGVuc2FfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2NoaXAgKmQpCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJY2FjaGVkX2lycV9tYXNrIHw9IDEgPDwgZC0+aXJxOwogCXNldF9zciAoY2FjaGVkX2lycV9tYXNrLCBJTlRFTkFCTEUpOwogfQogCi1zdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2VuYWJsZShzdHJ1Y3QgaXJxX2NoaXAgKmQpCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2VuYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJdmFyaWFudF9pcnFfZW5hYmxlKGQtPmlycSk7CiAJeHRlbnNhX2lycV91bm1hc2soZC0+aXJxKTsKIH0KIAotc3RhdGljIHZvaWQgeHRlbnNhX2lycV9kaXNhYmxlKHN0cnVjdCBpcnFfY2hpcCAqZCkKK3N0YXRpYyB2b2lkIHh0ZW5zYV9pcnFfZGlzYWJsZShzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJeHRlbnNhX2lycV9tYXNrKGQtPmlycSk7CiAJdmFyaWFudF9pcnFfZGlzYWJsZShkLT5pcnEpOwogfQogCi1zdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2FjayhzdHJ1Y3QgaXJxX2NoaXAgKmQpCitzdGF0aWMgdm9pZCB4dGVuc2FfaXJxX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc2V0X3NyKDEgPDwgZC0+aXJxLCBJTlRDTEVBUik7CiB9CiAKLXN0YXRpYyBpbnQgeHRlbnNhX2lycV9yZXRyaWdnZXIoc3RydWN0IGlycV9jaGlwICpkKQorc3RhdGljIGludCB4dGVuc2FfaXJxX3JldHJpZ2dlcihzdHJ1Y3QgaXJxX2RhdGEgKmQpCiB7CiAJc2V0X3NyICgxIDw8IGQtPmlycSwgSU5UU0VUKTsKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuYyBiL2Jsb2NrL2Jsay1jZ3JvdXAuYwppbmRleCBmMDYwNWFiLi40NzFmZGNjIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY2dyb3VwLmMKKysrIGIvYmxvY2svYmxrLWNncm91cC5jCkBAIC0xMTQsNiArMTE0LDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBfdG9fYmxraW9fY2dyb3VwKTsKIAorc3RydWN0IGJsa2lvX2Nncm91cCAqdGFza19ibGtpb19jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0YXNrX3N1YnN5c19zdGF0ZSh0c2ssIGJsa2lvX3N1YnN5c19pZCksCisJCQkgICAgc3RydWN0IGJsa2lvX2Nncm91cCwgY3NzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHRhc2tfYmxraW9fY2dyb3VwKTsKKwogc3RhdGljIGlubGluZSB2b2lkCiBibGtpb191cGRhdGVfZ3JvdXBfd2VpZ2h0KHN0cnVjdCBibGtpb19ncm91cCAqYmxrZywgdW5zaWduZWQgaW50IHdlaWdodCkKIHsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1jZ3JvdXAuaCBiL2Jsb2NrL2Jsay1jZ3JvdXAuaAppbmRleCAxMDkxOWZhLi5jNzc0OTMwIDEwMDY0NAotLS0gYS9ibG9jay9ibGstY2dyb3VwLmgKKysrIGIvYmxvY2svYmxrLWNncm91cC5oCkBAIC0yOTEsNiArMjkxLDcgQEAKICNpZiBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQX01PRFVMRSkKIGV4dGVybiBzdHJ1Y3QgYmxraW9fY2dyb3VwIGJsa2lvX3Jvb3RfY2dyb3VwOwogZXh0ZXJuIHN0cnVjdCBibGtpb19jZ3JvdXAgKmNncm91cF90b19ibGtpb19jZ3JvdXAoc3RydWN0IGNncm91cCAqY2dyb3VwKTsKK2V4dGVybiBzdHJ1Y3QgYmxraW9fY2dyb3VwICp0YXNrX2Jsa2lvX2Nncm91cChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiBleHRlcm4gdm9pZCBibGtpb2NnX2FkZF9ibGtpb19ncm91cChzdHJ1Y3QgYmxraW9fY2dyb3VwICpibGtjZywKIAlzdHJ1Y3QgYmxraW9fZ3JvdXAgKmJsa2csIHZvaWQgKmtleSwgZGV2X3QgZGV2LAogCWVudW0gYmxraW9fcG9saWN5X2lkIHBsaWQpOwpAQCAtMzE0LDYgKzMxNSw4IEBACiBzdHJ1Y3QgY2dyb3VwOwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYmxraW9fY2dyb3VwICoKIGNncm91cF90b19ibGtpb19jZ3JvdXAoc3RydWN0IGNncm91cCAqY2dyb3VwKSB7IHJldHVybiBOVUxMOyB9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtpb19jZ3JvdXAgKgordGFza19ibGtpb19jZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgcmV0dXJuIE5VTEw7IH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJsa2lvY2dfYWRkX2Jsa2lvX2dyb3VwKHN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnLAogCQlzdHJ1Y3QgYmxraW9fZ3JvdXAgKmJsa2csIHZvaWQgKmtleSwgZGV2X3QgZGV2LApkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNvcmUuYyBiL2Jsb2NrL2Jsay1jb3JlLmMKaW5kZXggNzhiN2IwYy4uM2ZlMDBhMSAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNvcmUuYworKysgYi9ibG9jay9ibGstY29yZS5jCkBAIC0yMDQsNyArMjA0LDcgQEAKIAogCXEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJlcXVlc3RfcXVldWUsIGRlbGF5X3dvcmsud29yayk7CiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOworCV9fYmxrX3J1bl9xdWV1ZShxKTsKIAlzcGluX3VubG9ja19pcnEocS0+cXVldWVfbG9jayk7CiB9CiAKQEAgLTIyMCw3ICsyMjAsOCBAQAogICovCiB2b2lkIGJsa19kZWxheV9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5zaWduZWQgbG9uZyBtc2VjcykKIHsKLQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnEtPmRlbGF5X3dvcmssIG1zZWNzX3RvX2ppZmZpZXMobXNlY3MpKTsKKwlxdWV1ZV9kZWxheWVkX3dvcmsoa2Jsb2NrZF93b3JrcXVldWUsICZxLT5kZWxheV93b3JrLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMobXNlY3MpKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX2RlbGF5X3F1ZXVlKTsKIApAQCAtMjM4LDcgKzIzOSw3IEBACiAJV0FSTl9PTighaXJxc19kaXNhYmxlZCgpKTsKIAogCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19TVE9QUEVELCBxKTsKLQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOworCV9fYmxrX3J1bl9xdWV1ZShxKTsKIH0KIEVYUE9SVF9TWU1CT0woYmxrX3N0YXJ0X3F1ZXVlKTsKIApAQCAtMjkxLDMxICsyOTIsMzggQEAKIC8qKgogICogX19ibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQogICogQHE6CVRoZSBxdWV1ZSB0byBydW4KLSAqIEBmb3JjZV9rYmxvY2tkOiBEb24ndCBydW4gQHEtPnJlcXVlc3RfZm4gZGlyZWN0bHkuICBVc2Uga2Jsb2NrZC4KICAqCiAgKiBEZXNjcmlwdGlvbjoKICAqICAgIFNlZSBAYmxrX3J1bl9xdWV1ZS4gVGhpcyB2YXJpYW50IG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHF1ZXVlIGxvY2sKICAqICAgIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCi0gKgogICovCi12b2lkIF9fYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgYm9vbCBmb3JjZV9rYmxvY2tkKQordm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpCiB7CiAJaWYgKHVubGlrZWx5KGJsa19xdWV1ZV9zdG9wcGVkKHEpKSkKIAkJcmV0dXJuOwogCi0JLyoKLQkgKiBPbmx5IHJlY3Vyc2Ugb25jZSB0byBhdm9pZCBvdmVycnVubmluZyB0aGUgc3RhY2ssIGxldCB0aGUgdW5wbHVnCi0JICogaGFuZGxpbmcgcmVpbnZva2UgdGhlIGhhbmRsZXIgc2hvcnRseSBpZiB3ZSBhbHJlYWR5IGdvdCB0aGVyZS4KLQkgKi8KLQlpZiAoIWZvcmNlX2tibG9ja2QgJiYgIXF1ZXVlX2ZsYWdfdGVzdF9hbmRfc2V0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgcSkpIHsKLQkJcS0+cmVxdWVzdF9mbihxKTsKLQkJcXVldWVfZmxhZ19jbGVhcihRVUVVRV9GTEFHX1JFRU5URVIsIHEpOwotCX0gZWxzZQotCQlxdWV1ZV9kZWxheWVkX3dvcmsoa2Jsb2NrZF93b3JrcXVldWUsICZxLT5kZWxheV93b3JrLCAwKTsKKwlxLT5yZXF1ZXN0X2ZuKHEpOwogfQogRVhQT1JUX1NZTUJPTChfX2Jsa19ydW5fcXVldWUpOwogCiAvKioKKyAqIGJsa19ydW5fcXVldWVfYXN5bmMgLSBydW4gYSBzaW5nbGUgZGV2aWNlIHF1ZXVlIGluIHdvcmtxdWV1ZSBjb250ZXh0CisgKiBAcToJVGhlIHF1ZXVlIHRvIHJ1bgorICoKKyAqIERlc2NyaXB0aW9uOgorICogICAgVGVsbHMga2Jsb2NrZCB0byBwZXJmb3JtIHRoZSBlcXVpdmFsZW50IG9mIEBibGtfcnVuX3F1ZXVlIG9uIGJlaGFsZgorICogICAgb2YgdXMuCisgKi8KK3ZvaWQgYmxrX3J1bl9xdWV1ZV9hc3luYyhzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKK3sKKwlpZiAobGlrZWx5KCFibGtfcXVldWVfc3RvcHBlZChxKSkpIHsKKwkJX19jYW5jZWxfZGVsYXllZF93b3JrKCZxLT5kZWxheV93b3JrKTsKKwkJcXVldWVfZGVsYXllZF93b3JrKGtibG9ja2Rfd29ya3F1ZXVlLCAmcS0+ZGVsYXlfd29yaywgMCk7CisJfQorfQorRVhQT1JUX1NZTUJPTChibGtfcnVuX3F1ZXVlX2FzeW5jKTsKKworLyoqCiAgKiBibGtfcnVuX3F1ZXVlIC0gcnVuIGEgc2luZ2xlIGRldmljZSBxdWV1ZQogICogQHE6IFRoZSBxdWV1ZSB0byBydW4KICAqCkBAIC0zMjgsNyArMzM2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwotCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CisJX19ibGtfcnVuX3F1ZXVlKHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChibGtfcnVuX3F1ZXVlKTsKQEAgLTk3Nyw3ICs5ODUsNyBAQAogCQlibGtfcXVldWVfZW5kX3RhZyhxLCBycSk7CiAKIAlhZGRfYWNjdF9yZXF1ZXN0KHEsIHJxLCB3aGVyZSk7Ci0JX19ibGtfcnVuX3F1ZXVlKHEsIGZhbHNlKTsKKwlfX2Jsa19ydW5fcXVldWUocSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGJsa19pbnNlcnRfcmVxdWVzdCk7CkBAIC0xMzIxLDcgKzEzMjksNyBAQAogCX0gZWxzZSB7CiAJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAJCWFkZF9hY2N0X3JlcXVlc3QocSwgcmVxLCB3aGVyZSk7Ci0JCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShxKTsKIG91dF91bmxvY2s6CiAJCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAl9CkBAIC0yNjM4LDYgKzI2NDYsNyBAQAogCiAJcGx1Zy0+bWFnaWMgPSBQTFVHX01BR0lDOwogCUlOSVRfTElTVF9IRUFEKCZwbHVnLT5saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmcGx1Zy0+Y2JfbGlzdCk7CiAJcGx1Zy0+c2hvdWxkX3NvcnQgPSAwOwogCiAJLyoKQEAgLTI2NzAsMTIgKzI2NzksNDEgQEAKICAqLwogc3RhdGljIHZvaWQgcXVldWVfdW5wbHVnZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCB1bnNpZ25lZCBpbnQgZGVwdGgsCiAJCQkgICAgYm9vbCBmcm9tX3NjaGVkdWxlKQorCV9fcmVsZWFzZXMocS0+cXVldWVfbG9jaykKIHsKIAl0cmFjZV9ibG9ja191bnBsdWcocSwgZGVwdGgsICFmcm9tX3NjaGVkdWxlKTsKLQlfX2Jsa19ydW5fcXVldWUocSwgZnJvbV9zY2hlZHVsZSk7CiAKLQlpZiAocS0+dW5wbHVnZ2VkX2ZuKQotCQlxLT51bnBsdWdnZWRfZm4ocSk7CisJLyoKKwkgKiBJZiB3ZSBhcmUgcHVudGluZyB0aGlzIHRvIGtibG9ja2QsIHRoZW4gd2UgY2FuIHNhZmVseSBkcm9wCisJICogdGhlIHF1ZXVlX2xvY2sgYmVmb3JlIHdha2luZyBrYmxvY2tkICh3aGljaCBuZWVkcyB0byB0YWtlCisJICogdGhpcyBsb2NrKS4KKwkgKi8KKwlpZiAoZnJvbV9zY2hlZHVsZSkgeworCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKKwkJYmxrX3J1bl9xdWV1ZV9hc3luYyhxKTsKKwl9IGVsc2UgeworCQlfX2Jsa19ydW5fcXVldWUocSk7CisJCXNwaW5fdW5sb2NrKHEtPnF1ZXVlX2xvY2spOworCX0KKworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9wbHVnX2NhbGxiYWNrcyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcpCit7CisJTElTVF9IRUFEKGNhbGxiYWNrcyk7CisKKwlpZiAobGlzdF9lbXB0eSgmcGx1Zy0+Y2JfbGlzdCkpCisJCXJldHVybjsKKworCWxpc3Rfc3BsaWNlX2luaXQoJnBsdWctPmNiX2xpc3QsICZjYWxsYmFja3MpOworCisJd2hpbGUgKCFsaXN0X2VtcHR5KCZjYWxsYmFja3MpKSB7CisJCXN0cnVjdCBibGtfcGx1Z19jYiAqY2IgPSBsaXN0X2ZpcnN0X2VudHJ5KCZjYWxsYmFja3MsCisJCQkJCQkJICBzdHJ1Y3QgYmxrX3BsdWdfY2IsCisJCQkJCQkJICBsaXN0KTsKKwkJbGlzdF9kZWwoJmNiLT5saXN0KTsKKwkJY2ItPmNhbGxiYWNrKGNiKTsKKwl9CiB9CiAKIHZvaWQgYmxrX2ZsdXNoX3BsdWdfbGlzdChzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcsIGJvb2wgZnJvbV9zY2hlZHVsZSkKQEAgLTI2ODgsNiArMjcyNiw3IEBACiAKIAlCVUdfT04ocGx1Zy0+bWFnaWMgIT0gUExVR19NQUdJQyk7CiAKKwlmbHVzaF9wbHVnX2NhbGxiYWNrcyhwbHVnKTsKIAlpZiAobGlzdF9lbXB0eSgmcGx1Zy0+bGlzdCkpCiAJCXJldHVybjsKIApAQCAtMjcxMiwxMCArMjc1MSwxMSBAQAogCQlCVUdfT04oIShycS0+Y21kX2ZsYWdzICYgUkVRX09OX1BMVUcpKTsKIAkJQlVHX09OKCFycS0+cSk7CiAJCWlmIChycS0+cSAhPSBxKSB7Ci0JCQlpZiAocSkgeworCQkJLyoKKwkJCSAqIFRoaXMgZHJvcHMgdGhlIHF1ZXVlIGxvY2sKKwkJCSAqLworCQkJaWYgKHEpCiAJCQkJcXVldWVfdW5wbHVnZ2VkKHEsIGRlcHRoLCBmcm9tX3NjaGVkdWxlKTsKLQkJCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKLQkJCX0KIAkJCXEgPSBycS0+cTsKIAkJCWRlcHRoID0gMDsKIAkJCXNwaW5fbG9jayhxLT5xdWV1ZV9sb2NrKTsKQEAgLTI3MzMsMTQgKzI3NzMsMTQgQEAKIAkJZGVwdGgrKzsKIAl9CiAKLQlpZiAocSkgeworCS8qCisJICogVGhpcyBkcm9wcyB0aGUgcXVldWUgbG9jaworCSAqLworCWlmIChxKQogCQlxdWV1ZV91bnBsdWdnZWQocSwgZGVwdGgsIGZyb21fc2NoZWR1bGUpOwotCQlzcGluX3VubG9jayhxLT5xdWV1ZV9sb2NrKTsKLQl9CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9Ci1FWFBPUlRfU1lNQk9MKGJsa19mbHVzaF9wbHVnX2xpc3QpOwogCiB2b2lkIGJsa19maW5pc2hfcGx1ZyhzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcpCiB7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstZXhlYy5jIGIvYmxvY2svYmxrLWV4ZWMuYwppbmRleCA3NDgyYjdmLi44MWUzMTgxIDEwMDY0NAotLS0gYS9ibG9jay9ibGstZXhlYy5jCisrKyBiL2Jsb2NrL2Jsay1leGVjLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAlfX2Vsdl9hZGRfcmVxdWVzdChxLCBycSwgd2hlcmUpOwotCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CisJX19ibGtfcnVuX3F1ZXVlKHEpOwogCS8qIHRoZSBxdWV1ZSBpcyBzdG9wcGVkIHNvIGl0IHdvbid0IGJlIHBsdWdnZWQrdW5wbHVnZ2VkICovCiAJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9QTV9SRVNVTUUpCiAJCXEtPnJlcXVlc3RfZm4ocSk7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstZmx1c2guYyBiL2Jsb2NrL2Jsay1mbHVzaC5jCmluZGV4IGViYTRhMjcuLjZjOWI1ZTE4IDEwMDY0NAotLS0gYS9ibG9jay9ibGstZmx1c2guYworKysgYi9ibG9jay9ibGstZmx1c2guYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAJICogcmVxdWVzdF9mbiBtYXkgY29uZnVzZSB0aGUgZHJpdmVyLiAgQWx3YXlzIHVzZSBrYmxvY2tkLgogCSAqLwogCWlmIChxdWV1ZWQpCi0JCV9fYmxrX3J1bl9xdWV1ZShxLCB0cnVlKTsKKwkJYmxrX3J1bl9xdWV1ZV9hc3luYyhxKTsKIH0KIAogLyoqCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkgKiB0aGUgY29tbWVudCBpbiBmbHVzaF9lbmRfaW8oKS4KIAkgKi8KIAlpZiAoYmxrX2ZsdXNoX2NvbXBsZXRlX3NlcShycSwgUkVRX0ZTRVFfREFUQSwgZXJyb3IpKQotCQlfX2Jsa19ydW5fcXVldWUocSwgdHJ1ZSk7CisJCWJsa19ydW5fcXVldWVfYXN5bmMocSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXNldHRpbmdzLmMgYi9ibG9jay9ibGstc2V0dGluZ3MuYwppbmRleCBlYjk0OTA0Li4xZmE3NjkyIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc2V0dGluZ3MuYworKysgYi9ibG9jay9ibGstc2V0dGluZ3MuYwpAQCAtNzkwLDIyICs3OTAsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYmxrX3F1ZXVlX2ZsdXNoKTsKIAotLyoqCi0gKiBibGtfcXVldWVfdW5wbHVnZ2VkIC0gcmVnaXN0ZXIgYSBjYWxsYmFjayBmb3IgYW4gdW5wbHVnIGV2ZW50Ci0gKiBAcToJCXRoZSByZXF1ZXN0IHF1ZXVlIGZvciB0aGUgZGV2aWNlCi0gKiBAZm46CQl0aGUgZnVuY3Rpb24gdG8gY2FsbAotICoKLSAqIFNvbWUgc3RhY2tlZCBkcml2ZXJzIG1heSBuZWVkIHRvIGtub3cgd2hlbiBJTyBpcyBkaXNwYXRjaGVkIG9uIGFuCi0gKiB1bnBsdWcgZXZlbnQuIEJ5IHJlZ2lzdHJlcmluZyBhIGNhbGxiYWNrIGhlcmUsIHRoZXkgd2lsbCBiZSBub3RpZmllZAotICogd2hlbiBzb21lb25lIGZsdXNoZXMgdGhlaXIgb24tc3RhY2sgcXVldWUgcGx1Zy4gVGhlIGZ1bmN0aW9uIHdpbGwgYmUKLSAqIGNhbGxlZCB3aXRoIHRoZSBxdWV1ZSBsb2NrIGhlbGQuCi0gKi8KLXZvaWQgYmxrX3F1ZXVlX3VucGx1Z2dlZChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgdW5wbHVnZ2VkX2ZuICpmbikKLXsKLQlxLT51bnBsdWdnZWRfZm4gPSBmbjsKLX0KLUVYUE9SVF9TWU1CT0woYmxrX3F1ZXVlX3VucGx1Z2dlZCk7Ci0KIHN0YXRpYyBpbnQgX19pbml0IGJsa19zZXR0aW5nc19pbml0KHZvaWQpCiB7CiAJYmxrX21heF9sb3dfcGZuID0gbWF4X2xvd19wZm4gLSAxOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLXN5c2ZzLmMgYi9ibG9jay9ibGstc3lzZnMuYwppbmRleCA2ZDczNTEyLi5iZDIzNjMxIDEwMDY0NAotLS0gYS9ibG9jay9ibGstc3lzZnMuYworKysgYi9ibG9jay9ibGstc3lzZnMuYwpAQCAtNjYsMTQgKzY2LDE0IEBACiAKIAlpZiAocmwtPmNvdW50W0JMS19SV19TWU5DXSA+PSBxLT5ucl9yZXF1ZXN0cykgewogCQlibGtfc2V0X3F1ZXVlX2Z1bGwocSwgQkxLX1JXX1NZTkMpOwotCX0gZWxzZSBpZiAocmwtPmNvdW50W0JMS19SV19TWU5DXSsxIDw9IHEtPm5yX3JlcXVlc3RzKSB7CisJfSBlbHNlIHsKIAkJYmxrX2NsZWFyX3F1ZXVlX2Z1bGwocSwgQkxLX1JXX1NZTkMpOwogCQl3YWtlX3VwKCZybC0+d2FpdFtCTEtfUldfU1lOQ10pOwogCX0KIAogCWlmIChybC0+Y291bnRbQkxLX1JXX0FTWU5DXSA+PSBxLT5ucl9yZXF1ZXN0cykgewogCQlibGtfc2V0X3F1ZXVlX2Z1bGwocSwgQkxLX1JXX0FTWU5DKTsKLQl9IGVsc2UgaWYgKHJsLT5jb3VudFtCTEtfUldfQVNZTkNdKzEgPD0gcS0+bnJfcmVxdWVzdHMpIHsKKwl9IGVsc2UgewogCQlibGtfY2xlYXJfcXVldWVfZnVsbChxLCBCTEtfUldfQVNZTkMpOwogCQl3YWtlX3VwKCZybC0+d2FpdFtCTEtfUldfQVNZTkNdKTsKIAl9CkBAIC01MDgsOCArNTA4LDEwIEBACiAJCXJldHVybiByZXQ7CiAKIAlyZXQgPSBrb2JqZWN0X2FkZCgmcS0+a29iaiwga29iamVjdF9nZXQoJmRldi0+a29iaiksICIlcyIsICJxdWV1ZSIpOwotCWlmIChyZXQgPCAwKQorCWlmIChyZXQgPCAwKSB7CisJCWJsa190cmFjZV9yZW1vdmVfc3lzZnMoZGV2KTsKIAkJcmV0dXJuIHJldDsKKwl9CiAKIAlrb2JqZWN0X3VldmVudCgmcS0+a29iaiwgS09CSl9BREQpOwogCmRpZmYgLS1naXQgYS9ibG9jay9ibGstdGhyb3R0bGUuYyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCmluZGV4IDA0NzVhMjIuLjI1MmE4MWEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay10aHJvdHRsZS5jCisrKyBiL2Jsb2NrL2Jsay10aHJvdHRsZS5jCkBAIC0xNjAsOSArMTYwLDggQEAKIH0KIAogc3RhdGljIHN0cnVjdCB0aHJvdGxfZ3JwICogdGhyb3RsX2ZpbmRfYWxsb2NfdGcoc3RydWN0IHRocm90bF9kYXRhICp0ZCwKLQkJCXN0cnVjdCBjZ3JvdXAgKmNncm91cCkKKwkJCXN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnKQogewotCXN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnID0gY2dyb3VwX3RvX2Jsa2lvX2Nncm91cChjZ3JvdXApOwogCXN0cnVjdCB0aHJvdGxfZ3JwICp0ZyA9IE5VTEw7CiAJdm9pZCAqa2V5ID0gdGQ7CiAJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJkaSA9ICZ0ZC0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm87CkBAIC0yMjksMTIgKzIyOCwxMiBAQAogCiBzdGF0aWMgc3RydWN0IHRocm90bF9ncnAgKiB0aHJvdGxfZ2V0X3RnKHN0cnVjdCB0aHJvdGxfZGF0YSAqdGQpCiB7Ci0Jc3RydWN0IGNncm91cCAqY2dyb3VwOwogCXN0cnVjdCB0aHJvdGxfZ3JwICp0ZyA9IE5VTEw7CisJc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2c7CiAKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JY2dyb3VwID0gdGFza19jZ3JvdXAoY3VycmVudCwgYmxraW9fc3Vic3lzX2lkKTsKLQl0ZyA9IHRocm90bF9maW5kX2FsbG9jX3RnKHRkLCBjZ3JvdXApOworCWJsa2NnID0gdGFza19ibGtpb19jZ3JvdXAoY3VycmVudCk7CisJdGcgPSB0aHJvdGxfZmluZF9hbGxvY190Zyh0ZCwgYmxrY2cpOwogCWlmICghdGcpCiAJCXRnID0gJnRkLT5yb290X3RnOwogCXJjdV9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEvYmxvY2svY2ZxLWlvc2NoZWQuYyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKaW5kZXggM2JlODgxZS4uYWI3YTllNiAxMDA2NDQKLS0tIGEvYmxvY2svY2ZxLWlvc2NoZWQuYworKysgYi9ibG9jay9jZnEtaW9zY2hlZC5jCkBAIC0xMDE0LDEwICsxMDE0LDkgQEAKIAljZnFnLT5uZWVkc191cGRhdGUgPSB0cnVlOwogfQogCi1zdGF0aWMgc3RydWN0IGNmcV9ncm91cCAqCi1jZnFfZmluZF9hbGxvY19jZnFnKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNncm91cCAqY2dyb3VwLCBpbnQgY3JlYXRlKQorc3RhdGljIHN0cnVjdCBjZnFfZ3JvdXAgKiBjZnFfZmluZF9hbGxvY19jZnFnKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwKKwkJc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2csIGludCBjcmVhdGUpCiB7Ci0Jc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2cgPSBjZ3JvdXBfdG9fYmxraW9fY2dyb3VwKGNncm91cCk7CiAJc3RydWN0IGNmcV9ncm91cCAqY2ZxZyA9IE5VTEw7CiAJdm9pZCAqa2V5ID0gY2ZxZDsKIAlpbnQgaSwgajsKQEAgLTEwNzksMTIgKzEwNzgsMTIgQEAKICAqLwogc3RhdGljIHN0cnVjdCBjZnFfZ3JvdXAgKmNmcV9nZXRfY2ZxZyhzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIGludCBjcmVhdGUpCiB7Ci0Jc3RydWN0IGNncm91cCAqY2dyb3VwOworCXN0cnVjdCBibGtpb19jZ3JvdXAgKmJsa2NnOwogCXN0cnVjdCBjZnFfZ3JvdXAgKmNmcWcgPSBOVUxMOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWNncm91cCA9IHRhc2tfY2dyb3VwKGN1cnJlbnQsIGJsa2lvX3N1YnN5c19pZCk7Ci0JY2ZxZyA9IGNmcV9maW5kX2FsbG9jX2NmcWcoY2ZxZCwgY2dyb3VwLCBjcmVhdGUpOworCWJsa2NnID0gdGFza19ibGtpb19jZ3JvdXAoY3VycmVudCk7CisJY2ZxZyA9IGNmcV9maW5kX2FsbG9jX2NmcWcoY2ZxZCwgYmxrY2csIGNyZWF0ZSk7CiAJaWYgKCFjZnFnICYmIGNyZWF0ZSkKIAkJY2ZxZyA9ICZjZnFkLT5yb290X2dyb3VwOwogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMjU4MiwyOCArMjU4MSwyMCBAQAogfQogCiAvKgotICogTXVzdCBhbHdheXMgYmUgY2FsbGVkIHdpdGggdGhlIHJjdV9yZWFkX2xvY2soKSBoZWxkCi0gKi8KLXN0YXRpYyB2b2lkCi1fX2NhbGxfZm9yX2VhY2hfY2ljKHN0cnVjdCBpb19jb250ZXh0ICppb2MsCi0JCSAgICB2b2lkICgqZnVuYykoc3RydWN0IGlvX2NvbnRleHQgKiwgc3RydWN0IGNmcV9pb19jb250ZXh0ICopKQotewotCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNpYywgbiwgJmlvYy0+Y2ljX2xpc3QsIGNpY19saXN0KQotCQlmdW5jKGlvYywgY2ljKTsKLX0KLQotLyoKICAqIENhbGwgZnVuYyBmb3IgZWFjaCBjaWMgYXR0YWNoZWQgdG8gdGhpcyBpb2MuCiAgKi8KIHN0YXRpYyB2b2lkCiBjYWxsX2Zvcl9lYWNoX2NpYyhzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLAogCQkgIHZvaWQgKCpmdW5jKShzdHJ1Y3QgaW9fY29udGV4dCAqLCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKikpCiB7CisJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JX19jYWxsX2Zvcl9lYWNoX2NpYyhpb2MsIGZ1bmMpOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGNpYywgbiwgJmlvYy0+Y2ljX2xpc3QsIGNpY19saXN0KQorCQlmdW5jKGlvYywgY2ljKTsKKwogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCkBAIC0yNjY0LDcgKzI2NTUsNyBAQAogCSAqIHNob3VsZCBiZSBvayB0byBpdGVyYXRlIG92ZXIgdGhlIGtub3duIGxpc3QsIHdlIHdpbGwgc2VlIGFsbCBjaWMncwogCSAqIHNpbmNlIG5vIG5ldyBvbmVzIGFyZSBhZGRlZC4KIAkgKi8KLQlfX2NhbGxfZm9yX2VhY2hfY2ljKGlvYywgY2ljX2ZyZWVfZnVuYyk7CisJY2FsbF9mb3JfZWFjaF9jaWMoaW9jLCBjaWNfZnJlZV9mdW5jKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZxX3B1dF9jb29wZXJhdG9yKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCkBAIC0zMzY4LDcgKzMzNTksNyBAQAogCQkJICAgIGNmcWQtPmJ1c3lfcXVldWVzID4gMSkgewogCQkJCWNmcV9kZWxfdGltZXIoY2ZxZCwgY2ZxcSk7CiAJCQkJY2ZxX2NsZWFyX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpOwotCQkJCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSwgZmFsc2UpOworCQkJCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSk7CiAJCQl9IGVsc2UgewogCQkJCWNmcV9ibGtpb2NnX3VwZGF0ZV9pZGxlX3RpbWVfc3RhdHMoCiAJCQkJCQkmY2ZxcS0+Y2ZxZy0+YmxrZyk7CkBAIC0zMzgzLDcgKzMzNzQsNyBAQAogCQkgKiB0aGlzIG5ldyBxdWV1ZSBpcyBSVCBhbmQgdGhlIGN1cnJlbnQgb25lIGlzIEJFCiAJCSAqLwogCQljZnFfcHJlZW1wdF9xdWV1ZShjZnFkLCBjZnFxKTsKLQkJX19ibGtfcnVuX3F1ZXVlKGNmcWQtPnF1ZXVlLCBmYWxzZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSk7CiAJfQogfQogCkBAIC0zNzQzLDcgKzM3MzQsNyBAQAogCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxID0gY2ZxZC0+cXVldWU7CiAKIAlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwotCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSwgZmFsc2UpOworCV9fYmxrX3J1bl9xdWV1ZShjZnFkLT5xdWV1ZSk7CiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9ibG9jay9lbGV2YXRvci5jIGIvYmxvY2svZWxldmF0b3IuYwppbmRleCAwY2RiNGU3Li40NWNhMWUzIDEwMDY0NAotLS0gYS9ibG9jay9lbGV2YXRvci5jCisrKyBiL2Jsb2NrL2VsZXZhdG9yLmMKQEAgLTY0Miw3ICs2NDIsNyBAQAogCSAqLwogCWVsdl9kcmFpbl9lbGV2YXRvcihxKTsKIAl3aGlsZSAocS0+cnEuZWx2cHJpdikgewotCQlfX2Jsa19ydW5fcXVldWUocSwgZmFsc2UpOworCQlfX2Jsa19ydW5fcXVldWUocSk7CiAJCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAkJbXNsZWVwKDEwKTsKIAkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKQEAgLTY3MSw3ICs2NzEsOCBAQAogCQkJcS0+Ym91bmRhcnlfcnEgPSBycTsKIAkJfQogCX0gZWxzZSBpZiAoIShycS0+Y21kX2ZsYWdzICYgUkVRX0VMVlBSSVYpICYmCi0JCSAgICB3aGVyZSA9PSBFTEVWQVRPUl9JTlNFUlRfU09SVCkKKwkJICAgICh3aGVyZSA9PSBFTEVWQVRPUl9JTlNFUlRfU09SVCB8fAorCQkgICAgIHdoZXJlID09IEVMRVZBVE9SX0lOU0VSVF9TT1JUX01FUkdFKSkKIAkJd2hlcmUgPSBFTEVWQVRPUl9JTlNFUlRfQkFDSzsKIAogCXN3aXRjaCAod2hlcmUpIHsKQEAgLTY5NSw3ICs2OTYsNyBAQAogCQkgKiAgIHdpdGggYW55dGhpbmcuICBUaGVyZSdzIG5vIHBvaW50IGluIGRlbGF5aW5nIHF1ZXVlCiAJCSAqICAgcHJvY2Vzc2luZy4KIAkJICovCi0JCV9fYmxrX3J1bl9xdWV1ZShxLCBmYWxzZSk7CisJCV9fYmxrX3J1bl9xdWV1ZShxKTsKIAkJYnJlYWs7CiAKIAljYXNlIEVMRVZBVE9SX0lOU0VSVF9TT1JUX01FUkdFOgpkaWZmIC0tZ2l0IGEvYmxvY2svZ2VuaGQuYyBiL2Jsb2NrL2dlbmhkLmMKaW5kZXggYjM2NGJkMC4uMmRkOTg4NyAxMDA2NDQKLS0tIGEvYmxvY2svZ2VuaGQuYworKysgYi9ibG9jay9nZW5oZC5jCkBAIC0xNTg4LDkgKzE1ODgsMTMgQEAKIAogCXNwaW5fdW5sb2NrX2lycSgmZXYtPmxvY2spOwogCi0JLyogdGVsbCB1c2VybGFuZCBhYm91dCBuZXcgZXZlbnRzICovCisJLyoKKwkgKiBUZWxsIHVzZXJsYW5kIGFib3V0IG5ldyBldmVudHMuICBPbmx5IHRoZSBldmVudHMgbGlzdGVkIGluCisJICogQGRpc2stPmV2ZW50cyBhcmUgcmVwb3J0ZWQuICBVbmxpc3RlZCBldmVudHMgYXJlIHByb2Nlc3NlZCB0aGUKKwkgKiBzYW1lIGludGVybmFsbHkgYnV0IG5ldmVyIGdldCByZXBvcnRlZCB0byB1c2VybGFuZC4KKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkaXNrX3VldmVudHMpOyBpKyspCi0JCWlmIChldmVudHMgJiAoMSA8PCBpKSkKKwkJaWYgKGV2ZW50cyAmIGRpc2stPmV2ZW50cyAmICgxIDw8IGkpKQogCQkJZW52cFtucl9ldmVudHMrK10gPSBkaXNrX3VldmVudHNbaV07CiAKIAlpZiAobnJfZXZlbnRzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDE3N2M3ZDEuLjU1N2E0NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTExOSw0ICsxMTksNyBAQAogc291cmNlICJkcml2ZXJzL2Nsay9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvaHdzcGlubG9jay9LY29uZmlnIgorCitzb3VyY2UgImRyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZyIKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9wZXJmbGliLmMgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwppbmRleCAzYTczYTkzLi44NWIzMjM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYworKysgYi9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYwpAQCAtNDksMTAgKzQ5LDYgQEAKIAogc3RhdGljIERFRklORV9NVVRFWChwZXJmb3JtYW5jZV9tdXRleCk7CiAKLS8qIFVzZSBjcHVmcmVxIGRlYnVnIGxheWVyIGZvciBfUFBDIGNoYW5nZXMuICovCi0jZGVmaW5lIGNwdWZyZXFfcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19DT1JFLCBcCi0JCQkJCQkiY3B1ZnJlcS1jb3JlIiwgbXNnKQotCiAvKgogICogX1BQQyBzdXBwb3J0IGlzIGltcGxlbWVudGVkIGFzIGEgQ1BVZnJlcSBwb2xpY3kgbm90aWZpZXI6CiAgKiBUaGlzIG1lYW5zIGVhY2ggdGltZSBhIENQVWZyZXEgZHJpdmVyIHJlZ2lzdGVyZWQgYWxzbyB3aXRoCkBAIC0xNDUsNyArMTQxLDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JY3B1ZnJlcV9wcmludGsoIkNQVSAlZDogX1BQQyBpcyAlZCAtIGZyZXF1ZW5jeSAlcyBsaW1pdGVkXG4iLCBwci0+aWQsCisJcHJfZGVidWcoIkNQVSAlZDogX1BQQyBpcyAlZCAtIGZyZXF1ZW5jeSAlcyBsaW1pdGVkXG4iLCBwci0+aWQsCiAJCSAgICAgICAoaW50KXBwYywgcHBjID8gIiIgOiAibm90Iik7CiAKIAlwci0+cGVyZm9ybWFuY2VfcGxhdGZvcm1fbGltaXQgPSAoaW50KXBwYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zY2FuLmMgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCmluZGV4IGIxMzZjOWMuLjQ0OWM1NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zY2FuLmMKKysrIGIvZHJpdmVycy9hY3BpL3NjYW4uYwpAQCAtOTQzLDYgKzk0MywxMCBAQAogCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKIAkJZGV2aWNlLT5mbGFncy5sb2NrYWJsZSA9IDE7CiAKKwkvKiBQb3dlciByZXNvdXJjZXMgY2Fubm90IGJlIHBvd2VyIG1hbmFnZWFibGUuICovCisJaWYgKGRldmljZS0+ZGV2aWNlX3R5cGUgPT0gQUNQSV9CVVNfVFlQRV9QT1dFUikKKwkJcmV0dXJuIDA7CisKIAkvKiBQcmVzZW5jZSBvZiBfUFMwfF9QUjAgaW5kaWNhdGVzICdwb3dlciBtYW5hZ2VhYmxlJyAqLwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkZXZpY2UtPmhhbmRsZSwgIl9QUzAiLCAmdGVtcCk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5jIGIvZHJpdmVycy9hdGEvYWhjaS5jCmluZGV4IDM5ZDgyOWMuLjcxYWZlMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuYworKysgYi9kcml2ZXJzL2F0YS9haGNpLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCXsKIAkJQUhDSV9IRkxBR1MJKEFIQ0lfSEZMQUdfTk9fRlBETUFfQUEgfCBBSENJX0hGTEFHX05PX1BNUCB8CiAJCQkJIEFIQ0lfSEZMQUdfWUVTX05DUSksCi0JCS5mbGFncwkJPSBBSENJX0ZMQUdfQ09NTU9OLAorCQkuZmxhZ3MJCT0gQUhDSV9GTEFHX0NPTU1PTiB8IEFUQV9GTEFHX05PX0RJUE0sCiAJCS5waW9fbWFzawk9IEFUQV9QSU80LAogCQkudWRtYV9tYXNrCT0gQVRBX1VETUE2LAogCQkucG9ydF9vcHMJPSAmYWhjaV9vcHMsCkBAIC0yNjEsNiArMjYxLDEyIEBACiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZDA2KSwgYm9hcmRfYWhjaSB9LCAvKiBQQkcgUkFJRCAqLwogCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MjgyNiksIGJvYXJkX2FoY2kgfSwgLyogUEJHIFJBSUQgKi8KIAl7IFBDSV9WREVWSUNFKElOVEVMLCAweDIzMjMpLCBib2FyZF9haGNpIH0sIC8qIERIODl4eENDIEFIQ0kgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFlMDIpLCBib2FyZF9haGNpIH0sIC8qIFBhbnRoZXIgUG9pbnQgQUhDSSAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWUwMyksIGJvYXJkX2FoY2kgfSwgLyogUGFudGhlciBQb2ludCBBSENJICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZTA0KSwgYm9hcmRfYWhjaSB9LCAvKiBQYW50aGVyIFBvaW50IFJBSUQgKi8KKwl7IFBDSV9WREVWSUNFKElOVEVMLCAweDFlMDUpLCBib2FyZF9haGNpIH0sIC8qIFBhbnRoZXIgUG9pbnQgUkFJRCAqLworCXsgUENJX1ZERVZJQ0UoSU5URUwsIDB4MWUwNiksIGJvYXJkX2FoY2kgfSwgLyogUGFudGhlciBQb2ludCBSQUlEICovCisJeyBQQ0lfVkRFVklDRShJTlRFTCwgMHgxZTA3KSwgYm9hcmRfYWhjaSB9LCAvKiBQYW50aGVyIFBvaW50IFJBSUQgKi8KIAogCS8qIEpNaWNyb24gMzYwLzEvMy81LzYsIG1hdGNoIGNsYXNzIHRvIGF2b2lkIElERSBmdW5jdGlvbiAqLwogCXsgUENJX1ZFTkRPUl9JRF9KTUlDUk9OLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYWhjaS5oIGIvZHJpdmVycy9hdGEvYWhjaS5oCmluZGV4IDM5ODY1MDAuLjEyYzUyODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2FoY2kuaAorKysgYi9kcml2ZXJzL2F0YS9haGNpLmgKQEAgLTIyOSw2ICsyMjksMTAgQEAKIAlFTV9DVExfQUxIRAkJPSAoMSA8PCAyNiksIC8qIEFjdGl2aXR5IExFRCAqLwogCUVNX0NUTF9YTVQJCT0gKDEgPDwgMjUpLCAvKiBUcmFuc21pdCBPbmx5ICovCiAJRU1fQ1RMX1NNQgkJPSAoMSA8PCAyNCksIC8qIFNpbmdsZSBNZXNzYWdlIEJ1ZmZlciAqLworCUVNX0NUTF9TR1BJTwkJPSAoMSA8PCAxOSksIC8qIFNHUElPIG1lc3NhZ2VzIHN1cHBvcnRlZCAqLworCUVNX0NUTF9TRVMJCT0gKDEgPDwgMTgpLCAvKiBTRVMtMiBtZXNzYWdlcyBzdXBwb3J0ZWQgKi8KKwlFTV9DVExfU0FGVEUJCT0gKDEgPDwgMTcpLCAvKiBTQUYtVEUgbWVzc2FnZXMgc3VwcG9ydGVkICovCisJRU1fQ1RMX0xFRAkJPSAoMSA8PCAxNiksIC8qIExFRCBtZXNzYWdlcyBzdXBwb3J0ZWQgKi8KIAogCS8qIGVtIG1lc3NhZ2UgdHlwZSAqLwogCUVNX01TR19UWVBFX0xFRAkJPSAoMSA8PCAwKSwgLyogTEVEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwppbmRleCAwYmMzZmQ2Li42ZjZlNzcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCisrKyBiL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKQEAgLTMwOSw2ICszMDksMTQgQEAKIAl7IDB4ODA4NiwgMHgxZDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGEgfSwKIAkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQQkcpICovCiAJeyAweDgwODYsIDB4MWQwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF8ycG9ydF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoUGFudGhlciBQb2ludCkgKi8KKwl7IDB4ODA4NiwgMHgxZTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4X3NhdGEgfSwKKwkvKiBTQVRBIENvbnRyb2xsZXIgSURFIChQYW50aGVyIFBvaW50KSAqLworCXsgMHg4MDg2LCAweDFlMDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDhfc2F0YSB9LAorCS8qIFNBVEEgQ29udHJvbGxlciBJREUgKFBhbnRoZXIgUG9pbnQpICovCisJeyAweDgwODYsIDB4MWUwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgaWNoOF8ycG9ydF9zYXRhIH0sCisJLyogU0FUQSBDb250cm9sbGVyIElERSAoUGFudGhlciBQb2ludCkgKi8KKwl7IDB4ODA4NiwgMHgxZTA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g4XzJwb3J0X3NhdGEgfSwKIAl7IH0JLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmFoY2kuYyBiL2RyaXZlcnMvYXRhL2xpYmFoY2kuYwppbmRleCAyNmQ0NTIzLi5kMzhjNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhaGNpLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYWhjaS5jCkBAIC0xMDksNiArMTA5LDggQEAKIHN0YXRpYyBzc2l6ZV90IGFoY2lfc3RvcmVfZW1fYnVmZmVyKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpOworc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2VtX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zik7CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihhaGNpX2hvc3RfY2FwcywgU19JUlVHTywgYWhjaV9zaG93X2hvc3RfY2FwcywgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoYWhjaV9ob3N0X2NhcDIsIFNfSVJVR08sIGFoY2lfc2hvd19ob3N0X2NhcDIsIE5VTEwpOwpAQCAtMTE2LDYgKzExOCw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoYWhjaV9wb3J0X2NtZCwgU19JUlVHTywgYWhjaV9zaG93X3BvcnRfY21kLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihlbV9idWZmZXIsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkgICBhaGNpX3JlYWRfZW1fYnVmZmVyLCBhaGNpX3N0b3JlX2VtX2J1ZmZlcik7CitzdGF0aWMgREVWSUNFX0FUVFIoZW1fbWVzc2FnZV9zdXBwb3J0ZWQsIFNfSVJVR08sIGFoY2lfc2hvd19lbV9zdXBwb3J0ZWQsIE5VTEwpOwogCiBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYWhjaV9zaG9zdF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9saW5rX3Bvd2VyX21hbmFnZW1lbnRfcG9saWN5LApAQCAtMTI2LDYgKzEyOSw3IEBACiAJJmRldl9hdHRyX2FoY2lfaG9zdF92ZXJzaW9uLAogCSZkZXZfYXR0cl9haGNpX3BvcnRfY21kLAogCSZkZXZfYXR0cl9lbV9idWZmZXIsCisJJmRldl9hdHRyX2VtX21lc3NhZ2Vfc3VwcG9ydGVkLAogCU5VTEwKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChhaGNpX3Nob3N0X2F0dHJzKTsKQEAgLTM0Myw2ICszNDcsMjQgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAorc3RhdGljIHNzaXplX3QgYWhjaV9zaG93X2VtX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGRldik7CisJc3RydWN0IGF0YV9wb3J0ICphcCA9IGF0YV9zaG9zdF90b19wb3J0KHNob3N0KTsKKwlzdHJ1Y3QgYWhjaV9ob3N0X3ByaXYgKmhwcml2ID0gYXAtPmhvc3QtPnByaXZhdGVfZGF0YTsKKwl2b2lkIF9faW9tZW0gKm1taW8gPSBocHJpdi0+bW1pbzsKKwl1MzIgZW1fY3RsOworCisJZW1fY3RsID0gcmVhZGwobW1pbyArIEhPU1RfRU1fQ1RMKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzJXMlcyVzXG4iLAorCQkgICAgICAgZW1fY3RsICYgRU1fQ1RMX0xFRCA/ICJsZWQgIiA6ICIiLAorCQkgICAgICAgZW1fY3RsICYgRU1fQ1RMX1NBRlRFID8gInNhZi10ZSAiIDogIiIsCisJCSAgICAgICBlbV9jdGwgJiBFTV9DVExfU0VTID8gInNlcy0yICIgOiAiIiwKKwkJICAgICAgIGVtX2N0bCAmIEVNX0NUTF9TR1BJTyA/ICJzZ3BpbyAiIDogIiIpOworfQorCiAvKioKICAqCWFoY2lfc2F2ZV9pbml0aWFsX2NvbmZpZyAtIFNhdmUgYW5kIGZpeHVwIGluaXRpYWwgY29uZmlnIHZhbHVlcwogICoJQGRldjogdGFyZ2V0IEFIQ0kgZGV2aWNlCkBAIC0xODk3LDcgKzE5MTksMTcgQEAKIAlhaGNpX2VuYWJsZV9mYnMoYXApOwogCiAJcHAtPmludHJfbWFzayB8PSBQT1JUX0lSUV9CQURfUE1QOwotCXdyaXRlbChwcC0+aW50cl9tYXNrLCBwb3J0X21taW8gKyBQT1JUX0lSUV9NQVNLKTsKKworCS8qCisJICogV2UgbXVzdCBub3QgY2hhbmdlIHRoZSBwb3J0IGludGVycnVwdCBtYXNrIHJlZ2lzdGVyIGlmIHRoZQorCSAqIHBvcnQgaXMgbWFya2VkIGZyb3plbiwgdGhlIHZhbHVlIGluIHBwLT5pbnRyX21hc2sgd2lsbCBiZQorCSAqIHJlc3RvcmVkIGxhdGVyIHdoZW4gdGhlIHBvcnQgaXMgdGhhd2VkLgorCSAqCisJICogTm90ZSB0aGF0IGR1cmluZyBpbml0aWFsaXphdGlvbiwgdGhlIHBvcnQgaXMgbWFya2VkIGFzCisJICogZnJvemVuIHNpbmNlIHRoZSBpcnEgaGFuZGxlciBpcyBub3QgeWV0IHJlZ2lzdGVyZWQuCisJICovCisJaWYgKCEoYXAtPnBmbGFncyAmIEFUQV9QRkxBR19GUk9aRU4pKQorCQl3cml0ZWwocHAtPmludHJfbWFzaywgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CiB9CiAKIHN0YXRpYyB2b2lkIGFoY2lfcG1wX2RldGFjaChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpAQCAtMTkxMyw3ICsxOTQ1LDEwIEBACiAJd3JpdGVsKGNtZCwgcG9ydF9tbWlvICsgUE9SVF9DTUQpOwogCiAJcHAtPmludHJfbWFzayAmPSB+UE9SVF9JUlFfQkFEX1BNUDsKLQl3cml0ZWwocHAtPmludHJfbWFzaywgcG9ydF9tbWlvICsgUE9SVF9JUlFfTUFTSyk7CisKKwkvKiBzZWUgY29tbWVudCBhYm92ZSBpbiBhaGNpX3BtcF9hdHRhY2goKSAqLworCWlmICghKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOKSkKKwkJd3JpdGVsKHBwLT5pbnRyX21hc2ssIHBvcnRfbW1pbyArIFBPUlRfSVJRX01BU0spOwogfQogCiBpbnQgYWhjaV9wb3J0X3Jlc3VtZShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKaW5kZXggNDIzYzBhNi4uNzZjM2MxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCkBAIC00MTM5LDYgKzQxMzksNyBAQAogCSAqLwogCXsgIlBJT05FRVIgRFZELVJXICBEVlJURDA4IiwJIjEuMDAiLAlBVEFfSE9SS0FHRV9OT1NFVFhGRVIgfSwKIAl7ICJQSU9ORUVSIERWRC1SVyAgRFZSLTIxMkQiLAkiMS4yOCIsIEFUQV9IT1JLQUdFX05PU0VUWEZFUiB9LAorCXsgIlBJT05FRVIgRFZELVJXICBEVlItMjE2RCIsCSIxLjA4IiwgQVRBX0hPUktBR0VfTk9TRVRYRkVSIH0sCiAKIAkvKiBFbmQgTWFya2VyICovCiAJeyB9CkBAIC01NDgwLDcgKzU0ODEsNyBAQAogCWlmICghYXApCiAJCXJldHVybiBOVUxMOwogCi0JYXAtPnBmbGFncyB8PSBBVEFfUEZMQUdfSU5JVElBTElaSU5HOworCWFwLT5wZmxhZ3MgfD0gQVRBX1BGTEFHX0lOSVRJQUxJWklORyB8IEFUQV9QRkxBR19GUk9aRU47CiAJYXAtPmxvY2sgPSAmaG9zdC0+bG9jazsKIAlhcC0+cHJpbnRfaWQgPSAtMTsKIAlhcC0+aG9zdCA9IGhvc3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCmluZGV4IDg4Y2QyMmYuLmRhZDlmZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1laC5jCkBAIC0zMzE2LDYgKzMzMTYsNyBAQAogCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJmxpbmstPmVoX2NvbnRleHQ7CiAJc3RydWN0IGF0YV9kZXZpY2UgKmRldiwgKmxpbmtfZGV2ID0gTlVMTCwgKmxwbV9kZXYgPSBOVUxMOwogCWVudW0gYXRhX2xwbV9wb2xpY3kgb2xkX3BvbGljeSA9IGxpbmstPmxwbV9wb2xpY3k7CisJYm9vbCBub19kaXBtID0gbGluay0+YXAtPmZsYWdzICYgQVRBX0ZMQUdfTk9fRElQTTsKIAl1bnNpZ25lZCBpbnQgaGludHMgPSBBVEFfTFBNX0VNUFRZIHwgQVRBX0xQTV9ISVBNOwogCXVuc2lnbmVkIGludCBlcnJfbWFzazsKIAlpbnQgcmM7CkBAIC0zMzMyLDcgKzMzMzMsNyBAQAogCSAqLwogCWF0YV9mb3JfZWFjaF9kZXYoZGV2LCBsaW5rLCBFTkFCTEVEKSB7CiAJCWJvb2wgaGlwbSA9IGF0YV9pZF9oYXNfaGlwbShkZXYtPmlkKTsKLQkJYm9vbCBkaXBtID0gYXRhX2lkX2hhc19kaXBtKGRldi0+aWQpOworCQlib29sIGRpcG0gPSBhdGFfaWRfaGFzX2RpcG0oZGV2LT5pZCkgJiYgIW5vX2RpcG07CiAKIAkJLyogZmluZCB0aGUgZmlyc3QgZW5hYmxlZCBhbmQgTFBNIGVuYWJsZWQgZGV2aWNlcyAqLwogCQlpZiAoIWxpbmtfZGV2KQpAQCAtMzM4OSw3ICszMzkwLDggQEAKIAogCS8qIGhvc3QgY29uZmlnIHVwZGF0ZWQsIGVuYWJsZSBESVBNIGlmIHRyYW5zaXRpb25pbmcgdG8gTUlOX1BPV0VSICovCiAJYXRhX2Zvcl9lYWNoX2RldihkZXYsIGxpbmssIEVOQUJMRUQpIHsKLQkJaWYgKHBvbGljeSA9PSBBVEFfTFBNX01JTl9QT1dFUiAmJiBhdGFfaWRfaGFzX2RpcG0oZGV2LT5pZCkpIHsKKwkJaWYgKHBvbGljeSA9PSBBVEFfTFBNX01JTl9QT1dFUiAmJiAhbm9fZGlwbSAmJgorCQkgICAgYXRhX2lkX2hhc19kaXBtKGRldi0+aWQpKSB7CiAJCQllcnJfbWFzayA9IGF0YV9kZXZfc2V0X2ZlYXR1cmUoZGV2LAogCQkJCQlTRVRGRUFUVVJFU19TQVRBX0VOQUJMRSwgU0FUQV9ESVBNKTsKIAkJCWlmIChlcnJfbWFzayAmJiBlcnJfbWFzayAhPSBBQ19FUlJfREVWKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2F0OTEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCmluZGV4IDBkYTBkY2MuLmE1ZmRiZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYXQ5MS5jCkBAIC0zMywxMSArMzMsMTIgQEAKIAogCiAjZGVmaW5lIERSVl9OQU1FICJwYXRhX2F0OTEiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIiCiAKICNkZWZpbmUgQ0ZfSURFX09GRlNFVAkgICAgMHgwMGMwMDAwMAogI2RlZmluZSBDRl9BTFRfSURFX09GRlNFVCAgIDB4MDBlMDAwMDAKICNkZWZpbmUgQ0ZfSURFX1JFU19TSVpFICAgICAweDA4CisjZGVmaW5lIE5DU19SRF9QVUxTRV9MSU1JVCAgMHgzZiAvKiBtYXhpbWFsIHZhbHVlIGZvciBwdWxzZSBiaXRmaWVsZHMgKi8KIAogc3RydWN0IGF0OTFfaWRlX2luZm8gewogCXVuc2lnbmVkIGxvbmcgbW9kZTsKQEAgLTQ5LDggKzUwLDE4IEBACiAJdm9pZCBfX2lvbWVtICphbHRfYWRkcjsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyBpbml0aWFsX3RpbWluZyA9Ci0Je1hGRVJfUElPXzAsIDcwLCAyOTAsIDI0MCwgNjAwLCAxNjUsIDE1MCwgNjAwLCAwfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXRhX3RpbWluZyBpbml0aWFsX3RpbWluZyA9IHsKKwkubW9kZQkJPSBYRkVSX1BJT18wLAorCS5zZXR1cAkJPSA3MCwKKwkuYWN0OGIJCT0gMjkwLAorCS5yZWM4YgkJPSAyNDAsCisJLmN5YzhiCQk9IDYwMCwKKwkuYWN0aXZlCQk9IDE2NSwKKwkucmVjb3Zlcgk9IDE1MCwKKwkuZG1hY2tfaG9sZAk9IDAsCisJLmN5Y2xlCQk9IDYwMCwKKwkudWRtYQkJPSAwCit9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjYWxjX21ja19jeWNsZXModW5zaWduZWQgbG9uZyBucywgdW5zaWduZWQgbG9uZyBtY2tfaHopCiB7CkBAIC0xMDksNiArMTIwLDExIEBACiAJLyogKENTMCwgQ1MxLCBESVIsIE9FKSA8PSAoQ0ZDRTEsIENGQ0UyLCBDRlJOVywgTkNTWCkgdGltaW5ncyAqLwogCW5jc19yZWFkX3NldHVwID0gMTsKIAluY3NfcmVhZF9wdWxzZSA9IHJlYWRfY3ljbGUgLSAyOworCWlmIChuY3NfcmVhZF9wdWxzZSA+IE5DU19SRF9QVUxTRV9MSU1JVCkgeworCQluY3NfcmVhZF9wdWxzZSA9IE5DU19SRF9QVUxTRV9MSU1JVDsKKwkJZGV2X3dhcm4oZGV2LCAibmNzX3JlYWRfcHVsc2UgbGltaXRlZCB0byBtYXhpbWFsIHZhbHVlICVsdVxuIiwKKwkJCW5jc19yZWFkX3B1bHNlKTsKKwl9CiAKIAkvKiBXcml0ZSB0aW1pbmdzIHNhbWUgYXMgcmVhZCB0aW1pbmdzICovCiAJd3JpdGVfY3ljbGUgPSByZWFkX2N5Y2xlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYyBiL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKaW5kZXggYmRkMjcxOS4uYmM5ZTcwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vZm9yZTIwMGUuYworKysgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCkBAIC0yNjQzLDE2ICsyNjQzLDE5IEBACiB9CiAKICNpZmRlZiBDT05GSUdfU0JVUworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZm9yZTIwMGVfc2JhX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmb3JlMjAwZV9zYmFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJY29uc3Qgc3RydWN0IGZvcmUyMDBlX2J1cyAqYnVzOwogCXN0cnVjdCBmb3JlMjAwZSAqZm9yZTIwMGU7CiAJc3RhdGljIGludCBpbmRleCA9IDA7CiAJaW50IGVycjsKIAotCWlmICghb3AtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShmb3JlMjAwZV9zYmFfbWF0Y2gsICZvcC0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlidXMgPSBvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCWJ1cyA9IG1hdGNoLT5kYXRhOwogCiAJZm9yZTIwMGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZm9yZTIwMGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZvcmUyMDBlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL0tjb25maWcgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwppbmRleCBlOWU1MjM4Li5kNTdlOGQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwpAQCAtMTY4LDExICsxNjgsNCBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAotY29uZmlnIEFSQ0hfTk9fU1lTREVWX09QUwotCWJvb2wKLQktLS1oZWxwLS0tCi0JICBUbyBiZSBzZWxlY3RlZCBieSBhcmNoaXRlY3R1cmVzIHRoYXQgZG9uJ3QgdXNlIHN5c2RldiBjbGFzcyBvcgotCSAgc3lzZGV2IGRyaXZlciBwb3dlciBtYW5hZ2VtZW50IChzdXNwZW5kL3Jlc3VtZSkgYW5kIHNodXRkb3duCi0JICBvcGVyYXRpb25zLgotCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvYmFzZS5oIGIvZHJpdmVycy9iYXNlL2Jhc2UuaAppbmRleCAxOWY0OWU0Li5hMzRkY2EwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYmFzZS5oCisrKyBiL2RyaXZlcnMvYmFzZS9iYXNlLmgKQEAgLTExMSw4ICsxMTEsNiBAQAogCXJldHVybiBkcnYtPmJ1cy0+bWF0Y2ggPyBkcnYtPmJ1cy0+bWF0Y2goZGV2LCBkcnYpIDogMTsKIH0KIAotZXh0ZXJuIHZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpOwotCiBleHRlcm4gY2hhciAqbWFrZV9jbGFzc19uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBrb2JqZWN0ICprb2JqKTsKIAogZXh0ZXJuIGludCBkZXZyZXNfcmVsZWFzZV9hbGwoc3RydWN0IGRldmljZSAqZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggZGE1N2VlOS4uMjk5MTdjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTMxNiw4ICszMTYsNyBAQAogCiAJZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaWYgKGRydikgewotCQlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZShkZXYpOwotCQlwbV9ydW50aW1lX2JhcnJpZXIoZGV2KTsKKwkJcG1fcnVudGltZV9nZXRfc3luYyhkZXYpOwogCiAJCWRyaXZlcl9zeXNmc19yZW1vdmUoZGV2KTsKIApAQCAtMzI2LDYgKzMyNSw4IEBACiAJCQkJCQkgICAgIEJVU19OT1RJRllfVU5CSU5EX0RSSVZFUiwKIAkJCQkJCSAgICAgZGV2KTsKIAorCQlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CisKIAkJaWYgKGRldi0+YnVzICYmIGRldi0+YnVzLT5yZW1vdmUpCiAJCQlkZXYtPmJ1cy0+cmVtb3ZlKGRldik7CiAJCWVsc2UgaWYgKGRydi0+cmVtb3ZlKQpAQCAtMzM4LDcgKzMzOSw2IEBACiAJCQkJCQkgICAgIEJVU19OT1RJRllfVU5CT1VORF9EUklWRVIsCiAJCQkJCQkgICAgIGRldik7CiAKLQkJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCA4Yzc5OGVmLi5iYmIwM2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtNTIxLDYgKzUyMSwxMSBAQAogCWlmICghZmlybXdhcmVfcCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoV0FSTl9PTih1c2VybW9kZWhlbHBlcl9pc19kaXNhYmxlZCgpKSkgeworCQlkZXZfZXJyKGRldmljZSwgImZpcm13YXJlOiAlcyB3aWxsIG5vdCBiZSBsb2FkZWRcbiIsIG5hbWUpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwogCSpmaXJtd2FyZV9wID0gZmlybXdhcmUgPSBremFsbG9jKHNpemVvZigqZmlybXdhcmUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZpcm13YXJlKSB7CiAJCWRldl9lcnIoZGV2aWNlLCAiJXM6IGttYWxsb2Moc3RydWN0IGZpcm13YXJlKSBmYWlsZWRcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcGxhdGZvcm0uYyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCmluZGV4IDllMGU0ZmMuLjQ4NDI1ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC02NjcsNyArNjY3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBsYXRmb3JtX3BtX3ByZXBhcmUoc3RydWN0IGRldmljZSAqZGV2KQoraW50IHBsYXRmb3JtX3BtX3ByZXBhcmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTY3OCw3ICs2NzgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHBsYXRmb3JtX3BtX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldikKK3ZvaWQgcGxhdGZvcm1fcG1fY29tcGxldGUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIApAQCAtNjg2LDE2ICs2ODYsMTEgQEAKIAkJZHJ2LT5wbS0+Y29tcGxldGUoZGV2KTsKIH0KIAotI2Vsc2UgLyogIUNPTkZJR19QTV9TTEVFUCAqLwotCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3ByZXBhcmUJCU5VTEwKLSNkZWZpbmUgcGxhdGZvcm1fcG1fY29tcGxldGUJCU5VTEwKLQotI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAogI2lmZGVmIENPTkZJR19TVVNQRU5ECiAKLWludCBfX3dlYWsgcGxhdGZvcm1fcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgcGxhdGZvcm1fcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWludCByZXQgPSAwOwpAQCAtNzEzLDcgKzcwOCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IF9fd2VhayBwbGF0Zm9ybV9wbV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IHJldCA9IDA7CkBAIC03MjksNyArNzI0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgX193ZWFrIHBsYXRmb3JtX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgcGxhdGZvcm1fcG1fcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IHJldCA9IDA7CkBAIC03NDcsNyArNzQyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgX193ZWFrIHBsYXRmb3JtX3BtX3Jlc3VtZV9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgcGxhdGZvcm1fcG1fcmVzdW1lX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IHJldCA9IDA7CkBAIC03NjMsMTggKzc1OCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNlbHNlIC8qICFDT05GSUdfU1VTUEVORCAqLwotCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3N1c3BlbmQJCU5VTEwKLSNkZWZpbmUgcGxhdGZvcm1fcG1fcmVzdW1lCQlOVUxMCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3N1c3BlbmRfbm9pcnEJTlVMTAotI2RlZmluZSBwbGF0Zm9ybV9wbV9yZXN1bWVfbm9pcnEJTlVMTAotCi0jZW5kaWYgLyogIUNPTkZJR19TVVNQRU5EICovCisjZW5kaWYgLyogQ09ORklHX1NVU1BFTkQgKi8KIAogI2lmZGVmIENPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTCiAKLXN0YXRpYyBpbnQgcGxhdGZvcm1fcG1fZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTc5Miw3ICs3ODAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcGxhdGZvcm1fcG1fZnJlZXplX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9mcmVlemVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTgwOCw3ICs3OTYsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcGxhdGZvcm1fcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgcGxhdGZvcm1fcG1fdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWludCByZXQgPSAwOwpAQCAtODI2LDcgKzgxNCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwbGF0Zm9ybV9wbV90aGF3X25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV90aGF3X25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IHJldCA9IDA7CkBAIC04NDIsNyArODMwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWludCByZXQgPSAwOwpAQCAtODYwLDcgKzg0OCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgcGxhdGZvcm1fcG1fcG93ZXJvZmZfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKIAlpbnQgcmV0ID0gMDsKQEAgLTg3Niw3ICs4NjQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcGxhdGZvcm1fcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCitpbnQgcGxhdGZvcm1fcG1fcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwogCWludCByZXQgPSAwOwpAQCAtODk0LDcgKzg4Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwbGF0Zm9ybV9wbV9yZXN0b3JlX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK2ludCBwbGF0Zm9ybV9wbV9yZXN0b3JlX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CiAJaW50IHJldCA9IDA7CkBAIC05MTAsNjIgKzg5OCwxMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNlbHNlIC8qICFDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUyAqLwotCi0jZGVmaW5lIHBsYXRmb3JtX3BtX2ZyZWV6ZQkJTlVMTAotI2RlZmluZSBwbGF0Zm9ybV9wbV90aGF3CQlOVUxMCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmCQlOVUxMCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3Jlc3RvcmUJCU5VTEwKLSNkZWZpbmUgcGxhdGZvcm1fcG1fZnJlZXplX25vaXJxCU5VTEwKLSNkZWZpbmUgcGxhdGZvcm1fcG1fdGhhd19ub2lycQkJTlVMTAotI2RlZmluZSBwbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycQlOVUxMCi0jZGVmaW5lIHBsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEJTlVMTAotCi0jZW5kaWYgLyogIUNPTkZJR19ISUJFUk5BVEVfQ0FMTEJBQ0tTICovCi0KLSNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQotCi1pbnQgX193ZWFrIHBsYXRmb3JtX3BtX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIHBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kKGRldik7Ci19OwotCi1pbnQgX193ZWFrIHBsYXRmb3JtX3BtX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShkZXYpOwotfTsKLQotaW50IF9fd2VhayBwbGF0Zm9ybV9wbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBwbV9nZW5lcmljX3J1bnRpbWVfaWRsZShkZXYpOwotfTsKLQotI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCi0KLSNkZWZpbmUgcGxhdGZvcm1fcG1fcnVudGltZV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgcGxhdGZvcm1fcG1fcnVudGltZV9yZXN1bWUgTlVMTAotI2RlZmluZSBwbGF0Zm9ybV9wbV9ydW50aW1lX2lkbGUgTlVMTAotCi0jZW5kaWYgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisjZW5kaWYgLyogQ09ORklHX0hJQkVSTkFURV9DQUxMQkFDS1MgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHBsYXRmb3JtX2Rldl9wbV9vcHMgPSB7Ci0JLnByZXBhcmUgPSBwbGF0Zm9ybV9wbV9wcmVwYXJlLAotCS5jb21wbGV0ZSA9IHBsYXRmb3JtX3BtX2NvbXBsZXRlLAotCS5zdXNwZW5kID0gcGxhdGZvcm1fcG1fc3VzcGVuZCwKLQkucmVzdW1lID0gcGxhdGZvcm1fcG1fcmVzdW1lLAotCS5mcmVlemUgPSBwbGF0Zm9ybV9wbV9mcmVlemUsCi0JLnRoYXcgPSBwbGF0Zm9ybV9wbV90aGF3LAotCS5wb3dlcm9mZiA9IHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmLAotCS5yZXN0b3JlID0gcGxhdGZvcm1fcG1fcmVzdG9yZSwKLQkuc3VzcGVuZF9ub2lycSA9IHBsYXRmb3JtX3BtX3N1c3BlbmRfbm9pcnEsCi0JLnJlc3VtZV9ub2lycSA9IHBsYXRmb3JtX3BtX3Jlc3VtZV9ub2lycSwKLQkuZnJlZXplX25vaXJxID0gcGxhdGZvcm1fcG1fZnJlZXplX25vaXJxLAotCS50aGF3X25vaXJxID0gcGxhdGZvcm1fcG1fdGhhd19ub2lycSwKLQkucG93ZXJvZmZfbm9pcnEgPSBwbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycSwKLQkucmVzdG9yZV9ub2lycSA9IHBsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEsCi0JLnJ1bnRpbWVfc3VzcGVuZCA9IHBsYXRmb3JtX3BtX3J1bnRpbWVfc3VzcGVuZCwKLQkucnVudGltZV9yZXN1bWUgPSBwbGF0Zm9ybV9wbV9ydW50aW1lX3Jlc3VtZSwKLQkucnVudGltZV9pZGxlID0gcGxhdGZvcm1fcG1fcnVudGltZV9pZGxlLAorCS5ydW50aW1lX3N1c3BlbmQgPSBwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1lLAorCS5ydW50aW1lX2lkbGUgPSBwbV9nZW5lcmljX3J1bnRpbWVfaWRsZSwKKwlVU0VfUExBVEZPUk1fUE1fU0xFRVBfT1BTCiB9OwogCiBzdHJ1Y3QgYnVzX3R5cGUgcGxhdGZvcm1fYnVzX3R5cGUgPSB7CkBAIC05NzcsNDEgKzkxNiw2IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fYnVzX3R5cGUpOwogCi0vKioKLSAqIHBsYXRmb3JtX2J1c19nZXRfcG1fb3BzKCkgLSByZXR1cm4gcG9pbnRlciB0byBidXNzZXMgZGV2X3BtX29wcwotICoKLSAqIFRoaXMgZnVuY3Rpb24gY2FuIGJlIHVzZWQgYnkgcGxhdGZvcm0gY29kZSB0byBnZXQgdGhlIGN1cnJlbnQKLSAqIHNldCBvZiBkZXZfcG1fb3BzIGZ1bmN0aW9ucyB1c2VkIGJ5IHRoZSBwbGF0Zm9ybV9idXNfdHlwZS4KLSAqLwotY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKiBfX2luaXQgcGxhdGZvcm1fYnVzX2dldF9wbV9vcHModm9pZCkKLXsKLQlyZXR1cm4gcGxhdGZvcm1fYnVzX3R5cGUucG07Ci19Ci0KLS8qKgotICogcGxhdGZvcm1fYnVzX3NldF9wbV9vcHMoKSAtIHVwZGF0ZSBkZXZfcG1fb3BzIGZvciB0aGUgcGxhdGZvcm1fYnVzX3R5cGUKLSAqCi0gKiBAcG06IHBvaW50ZXIgdG8gbmV3IGRldl9wbV9vcHMgc3RydWN0IHRvIGJlIHVzZWQgZm9yIHBsYXRmb3JtX2J1c190eXBlCi0gKgotICogUGxhdGZvcm0gY29kZSBjYW4gb3ZlcnJpZGUgdGhlIGRldl9wbV9vcHMgbWV0aG9kcyBvZgotICogcGxhdGZvcm1fYnVzX3R5cGUgYnkgdXNpbmcgdGhpcyBmdW5jdGlvbi4gIEl0IGlzIGV4cGVjdGVkIHRoYXQKLSAqIHBsYXRmb3JtIGNvZGUgd2lsbCBmaXJzdCBkbyBhIHBsYXRmb3JtX2J1c19nZXRfcG1fb3BzKCksIHRoZW4KLSAqIGttZW1kdXAgaXQsIHRoZW4gY3VzdG9taXplIHNlbGVjdGVkIG1ldGhvZHMgYW5kIHBhc3MgYSBwb2ludGVyIHRvCi0gKiB0aGUgbmV3IHN0cnVjdCBkZXZfcG1fb3BzIHRvIHRoaXMgZnVuY3Rpb24uCi0gKgotICogU2luY2UgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSBpcyBjdXN0b21pemluZyBtZXRob2RzIGZvciAqYWxsKgotICogZGV2aWNlcyAobm90IGp1c3QgcGxhdGZvcm0tc3BlY2lmaWMgZGV2aWNlcykgaXQgaXMgZXhwZWN0ZWQgdGhhdAotICogYW55IGN1c3RvbSBvdmVycmlkZXMgb2YgdGhlc2UgZnVuY3Rpb25zIHdpbGwga2VlcCBleGlzdGluZyBiZWhhdmlvcgotICogYW5kIHNpbXBseSBleHRlbmQgaXQuICBGb3IgZXhhbXBsZSwgYW55IGN1c3RvbWl6YXRpb24gb2YgdGhlCi0gKiBydW50aW1lIFBNIG1ldGhvZHMgc2hvdWxkIGNvbnRpbnVlIHRvIGNhbGwgdGhlIHBtX2dlbmVyaWNfKgotICogZnVuY3Rpb25zIGFzIHRoZSBkZWZhdWx0IG9uZXMgZG8gaW4gYWRkaXRpb24gdG8gdGhlCi0gKiBwbGF0Zm9ybS1zcGVjaWZpYyBiZWhhdmlvci4KLSAqLwotdm9pZCBfX2luaXQgcGxhdGZvcm1fYnVzX3NldF9wbV9vcHMoY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtKQotewotCXBsYXRmb3JtX2J1c190eXBlLnBtID0gcG07Ci19Ci0KIGludCBfX2luaXQgcGxhdGZvcm1fYnVzX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyb3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvTWFrZWZpbGUgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvTWFrZWZpbGUKaW5kZXggMTE4YzFiOS4uMzY0N2UxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL3Bvd2VyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZQpAQCAtMyw2ICszLDYgQEAKIG9iai0kKENPTkZJR19QTV9SVU5USU1FKQkrPSBydW50aW1lLm8KIG9iai0kKENPTkZJR19QTV9UUkFDRV9SVEMpCSs9IHRyYWNlLm8KIG9iai0kKENPTkZJR19QTV9PUFApCSs9IG9wcC5vCitvYmotJChDT05GSUdfSEFWRV9DTEspCSs9IGNsb2NrX29wcy5vCiAKLWNjZmxhZ3MtJChDT05GSUdfREVCVUdfRFJJVkVSKSA6PSAtRERFQlVHCi1jY2ZsYWdzLSQoQ09ORklHX1BNX1ZFUkJPU0UpICAgKz0gLURERUJVRworY2NmbGFncy0kKENPTkZJR19ERUJVR19EUklWRVIpIDo9IC1EREVCVUcKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvY2xvY2tfb3BzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkZDA5ZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYwpAQCAtMCwwICsxLDQzMSBAQAorLyoKKyAqIGRyaXZlcnMvYmFzZS9wb3dlci9jbG9ja19vcHMuYyAtIEdlbmVyaWMgY2xvY2sgbWFuaXB1bGF0aW9uIFBNIGNhbGxiYWNrcworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBSYWZhZWwgSi4gV3lzb2NraSA8cmp3QHNpc2sucGw+LCBSZW5lc2FzIEVsZWN0cm9uaWNzIENvcnAuCisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2Mi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKKworc3RydWN0IHBtX3J1bnRpbWVfY2xrX2RhdGEgeworCXN0cnVjdCBsaXN0X2hlYWQgY2xvY2tfbGlzdDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKK307CisKK2VudW0gcGNlX3N0YXR1cyB7CisJUENFX1NUQVRVU19OT05FID0gMCwKKwlQQ0VfU1RBVFVTX0FDUVVJUkVELAorCVBDRV9TVEFUVVNfRU5BQkxFRCwKKwlQQ0VfU1RBVFVTX0VSUk9SLAorfTsKKworc3RydWN0IHBtX2Nsb2NrX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJY2hhciAqY29uX2lkOworCXN0cnVjdCBjbGsgKmNsazsKKwllbnVtIHBjZV9zdGF0dXMgc3RhdHVzOworfTsKKworc3RhdGljIHN0cnVjdCBwbV9ydW50aW1lX2Nsa19kYXRhICpfX3RvX3ByZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldiA/IGRldi0+cG93ZXIuc3Vic3lzX2RhdGEgOiBOVUxMOworfQorCisvKioKKyAqIHBtX3J1bnRpbWVfY2xrX2FkZCAtIFN0YXJ0IHVzaW5nIGEgZGV2aWNlIGNsb2NrIGZvciBydW50aW1lIFBNLgorICogQGRldjogRGV2aWNlIHdob3NlIGNsb2NrIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHJ1bnRpbWUgUE0uCisgKiBAY29uX2lkOiBDb25uZWN0aW9uIElEIG9mIHRoZSBjbG9jay4KKyAqCisgKiBBZGQgdGhlIGNsb2NrIHJlcHJlc2VudGVkIGJ5IEBjb25faWQgdG8gdGhlIGxpc3Qgb2YgY2xvY2tzIHVzZWQgZm9yCisgKiB0aGUgcnVudGltZSBQTSBvZiBAZGV2LgorICovCitpbnQgcG1fcnVudGltZV9jbGtfYWRkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkKQoreworCXN0cnVjdCBwbV9ydW50aW1lX2Nsa19kYXRhICpwcmQgPSBfX3RvX3ByZChkZXYpOworCXN0cnVjdCBwbV9jbG9ja19lbnRyeSAqY2U7CisKKwlpZiAoIXByZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZSA9IGt6YWxsb2Moc2l6ZW9mKCpjZSksIEdGUF9LRVJORUwpOworCWlmICghY2UpIHsKKwkJZGV2X2VycihkZXYsICJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgY2xvY2sgZW50cnkuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGNvbl9pZCkgeworCQljZS0+Y29uX2lkID0ga3N0cmR1cChjb25faWQsIEdGUF9LRVJORUwpOworCQlpZiAoIWNlLT5jb25faWQpIHsKKwkJCWRldl9lcnIoZGV2LAorCQkJCSJOb3QgZW5vdWdoIG1lbW9yeSBmb3IgY2xvY2sgY29ubmVjdGlvbiBJRC5cbiIpOworCQkJa2ZyZWUoY2UpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwltdXRleF9sb2NrKCZwcmQtPmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmNlLT5ub2RlLCAmcHJkLT5jbG9ja19saXN0KTsKKwltdXRleF91bmxvY2soJnByZC0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogX19wbV9ydW50aW1lX2Nsa19yZW1vdmUgLSBEZXN0cm95IHJ1bnRpbWUgUE0gY2xvY2sgZW50cnkuCisgKiBAY2U6IFJ1bnRpbWUgUE0gY2xvY2sgZW50cnkgdG8gZGVzdHJveS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSBjYWxsZWQgdW5kZXIgdGhlIG11dGV4IHByb3RlY3RpbmcgdGhlIHJ1bnRpbWUgUE0gbGlzdAorICogb2YgY2xvY2tzIGNvcnJlc3BvbmRpbmcgdGhlIHRoZSBAY2UncyBkZXZpY2UuCisgKi8KK3N0YXRpYyB2b2lkIF9fcG1fcnVudGltZV9jbGtfcmVtb3ZlKHN0cnVjdCBwbV9jbG9ja19lbnRyeSAqY2UpCit7CisJaWYgKCFjZSkKKwkJcmV0dXJuOworCisJbGlzdF9kZWwoJmNlLT5ub2RlKTsKKworCWlmIChjZS0+c3RhdHVzIDwgUENFX1NUQVRVU19FUlJPUikgeworCQlpZiAoY2UtPnN0YXR1cyA9PSBQQ0VfU1RBVFVTX0VOQUJMRUQpCisJCQljbGtfZGlzYWJsZShjZS0+Y2xrKTsKKworCQlpZiAoY2UtPnN0YXR1cyA+PSBQQ0VfU1RBVFVTX0FDUVVJUkVEKQorCQkJY2xrX3B1dChjZS0+Y2xrKTsKKwl9CisKKwlpZiAoY2UtPmNvbl9pZCkKKwkJa2ZyZWUoY2UtPmNvbl9pZCk7CisKKwlrZnJlZShjZSk7Cit9CisKKy8qKgorICogcG1fcnVudGltZV9jbGtfcmVtb3ZlIC0gU3RvcCB1c2luZyBhIGRldmljZSBjbG9jayBmb3IgcnVudGltZSBQTS4KKyAqIEBkZXY6IERldmljZSB3aG9zZSBjbG9jayBzaG91bGQgbm90IGJlIHVzZWQgZm9yIHJ1bnRpbWUgUE0gYW55IG1vcmUuCisgKiBAY29uX2lkOiBDb25uZWN0aW9uIElEIG9mIHRoZSBjbG9jay4KKyAqCisgKiBSZW1vdmUgdGhlIGNsb2NrIHJlcHJlc2VudGVkIGJ5IEBjb25faWQgZnJvbSB0aGUgbGlzdCBvZiBjbG9ja3MgdXNlZCBmb3IKKyAqIHRoZSBydW50aW1lIFBNIG9mIEBkZXYuCisgKi8KK3ZvaWQgcG1fcnVudGltZV9jbGtfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkKQoreworCXN0cnVjdCBwbV9ydW50aW1lX2Nsa19kYXRhICpwcmQgPSBfX3RvX3ByZChkZXYpOworCXN0cnVjdCBwbV9jbG9ja19lbnRyeSAqY2U7CisKKwlpZiAoIXByZCkKKwkJcmV0dXJuOworCisJbXV0ZXhfbG9jaygmcHJkLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2UsICZwcmQtPmNsb2NrX2xpc3QsIG5vZGUpIHsKKwkJaWYgKCFjb25faWQgJiYgIWNlLT5jb25faWQpIHsKKwkJCV9fcG1fcnVudGltZV9jbGtfcmVtb3ZlKGNlKTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKCFjb25faWQgfHwgIWNlLT5jb25faWQpIHsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKCFzdHJjbXAoY29uX2lkLCBjZS0+Y29uX2lkKSkgeworCQkJX19wbV9ydW50aW1lX2Nsa19yZW1vdmUoY2UpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnByZC0+bG9jayk7Cit9CisKKy8qKgorICogcG1fcnVudGltZV9jbGtfaW5pdCAtIEluaXRpYWxpemUgYSBkZXZpY2UncyBsaXN0IG9mIHJ1bnRpbWUgUE0gY2xvY2tzLgorICogQGRldjogRGV2aWNlIHRvIGluaXRpYWxpemUgdGhlIGxpc3Qgb2YgcnVudGltZSBQTSBjbG9ja3MgZm9yLgorICoKKyAqIEFsbG9jYXRlIGEgc3RydWN0IHBtX3J1bnRpbWVfY2xrX2RhdGEgb2JqZWN0LCBpbml0aWFsaXplIGl0cyBsb2NrIG1lbWJlciBhbmQKKyAqIG1ha2UgdGhlIEBkZXYncyBwb3dlci5zdWJzeXNfZGF0YSBmaWVsZCBwb2ludCB0byBpdC4KKyAqLworaW50IHBtX3J1bnRpbWVfY2xrX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbV9ydW50aW1lX2Nsa19kYXRhICpwcmQ7CisKKwlwcmQgPSBremFsbG9jKHNpemVvZigqcHJkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmQpIHsKKwkJZGV2X2VycihkZXYsICJOb3QgZW5vdWdoIG1lbW9yeSBmbyBydW50aW1lIFBNIGRhdGEuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJSU5JVF9MSVNUX0hFQUQoJnByZC0+Y2xvY2tfbGlzdCk7CisJbXV0ZXhfaW5pdCgmcHJkLT5sb2NrKTsKKwlkZXYtPnBvd2VyLnN1YnN5c19kYXRhID0gcHJkOworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtX3J1bnRpbWVfY2xrX2Rlc3Ryb3kgLSBEZXN0cm95IGEgZGV2aWNlJ3MgbGlzdCBvZiBydW50aW1lIFBNIGNsb2Nrcy4KKyAqIEBkZXY6IERldmljZSB0byBkZXN0cm95IHRoZSBsaXN0IG9mIHJ1bnRpbWUgUE0gY2xvY2tzIGZvci4KKyAqCisgKiBDbGVhciB0aGUgQGRldidzIHBvd2VyLnN1YnN5c19kYXRhIGZpZWxkLCByZW1vdmUgdGhlIGxpc3Qgb2YgY2xvY2sgZW50cmllcworICogZnJvbSB0aGUgc3RydWN0IHBtX3J1bnRpbWVfY2xrX2RhdGEgb2JqZWN0IHBvaW50ZWQgdG8gYnkgaXQgYmVmb3JlIGFuZCBmcmVlCisgKiB0aGF0IG9iamVjdC4KKyAqLwordm9pZCBwbV9ydW50aW1lX2Nsa19kZXN0cm95KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcG1fcnVudGltZV9jbGtfZGF0YSAqcHJkID0gX190b19wcmQoZGV2KTsKKwlzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgKmNlLCAqYzsKKworCWlmICghcHJkKQorCQlyZXR1cm47CisKKwlkZXYtPnBvd2VyLnN1YnN5c19kYXRhID0gTlVMTDsKKworCW11dGV4X2xvY2soJnByZC0+bG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShjZSwgYywgJnByZC0+Y2xvY2tfbGlzdCwgbm9kZSkKKwkJX19wbV9ydW50aW1lX2Nsa19yZW1vdmUoY2UpOworCisJbXV0ZXhfdW5sb2NrKCZwcmQtPmxvY2spOworCisJa2ZyZWUocHJkKTsKK30KKworLyoqCisgKiBwbV9ydW50aW1lX2Nsa19hY3F1aXJlIC0gQWNxdWlyZSBhIGRldmljZSBjbG9jay4KKyAqIEBkZXY6IERldmljZSB3aG9zZSBjbG9jayBpcyB0byBiZSBhY3F1aXJlZC4KKyAqIEBjb25faWQ6IENvbm5lY3Rpb24gSUQgb2YgdGhlIGNsb2NrLgorICovCitzdGF0aWMgdm9pZCBwbV9ydW50aW1lX2Nsa19hY3F1aXJlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IHBtX2Nsb2NrX2VudHJ5ICpjZSkKK3sKKwljZS0+Y2xrID0gY2xrX2dldChkZXYsIGNlLT5jb25faWQpOworCWlmIChJU19FUlIoY2UtPmNsaykpIHsKKwkJY2UtPnN0YXR1cyA9IFBDRV9TVEFUVVNfRVJST1I7CisJfSBlbHNlIHsKKwkJY2UtPnN0YXR1cyA9IFBDRV9TVEFUVVNfQUNRVUlSRUQ7CisJCWRldl9kYmcoZGV2LCAiQ2xvY2sgJXMgbWFuYWdlZCBieSBydW50aW1lIFBNLlxuIiwgY2UtPmNvbl9pZCk7CisJfQorfQorCisvKioKKyAqIHBtX3J1bnRpbWVfY2xrX3N1c3BlbmQgLSBEaXNhYmxlIGNsb2NrcyBpbiBhIGRldmljZSdzIHJ1bnRpbWUgUE0gY2xvY2sgbGlzdC4KKyAqIEBkZXY6IERldmljZSB0byBkaXNhYmxlIHRoZSBjbG9ja3MgZm9yLgorICovCitpbnQgcG1fcnVudGltZV9jbGtfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBtX3J1bnRpbWVfY2xrX2RhdGEgKnByZCA9IF9fdG9fcHJkKGRldik7CisJc3RydWN0IHBtX2Nsb2NrX2VudHJ5ICpjZTsKKworCWRldl9kYmcoZGV2LCAiJXMoKVxuIiwgX19mdW5jX18pOworCisJaWYgKCFwcmQpCisJCXJldHVybiAwOworCisJbXV0ZXhfbG9jaygmcHJkLT5sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjZSwgJnByZC0+Y2xvY2tfbGlzdCwgbm9kZSkgeworCQlpZiAoY2UtPnN0YXR1cyA9PSBQQ0VfU1RBVFVTX05PTkUpCisJCQlwbV9ydW50aW1lX2Nsa19hY3F1aXJlKGRldiwgY2UpOworCisJCWlmIChjZS0+c3RhdHVzIDwgUENFX1NUQVRVU19FUlJPUikgeworCQkJY2xrX2Rpc2FibGUoY2UtPmNsayk7CisJCQljZS0+c3RhdHVzID0gUENFX1NUQVRVU19BQ1FVSVJFRDsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmcHJkLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHBtX3J1bnRpbWVfY2xrX3Jlc3VtZSAtIEVuYWJsZSBjbG9ja3MgaW4gYSBkZXZpY2UncyBydW50aW1lIFBNIGNsb2NrIGxpc3QuCisgKiBAZGV2OiBEZXZpY2UgdG8gZW5hYmxlIHRoZSBjbG9ja3MgZm9yLgorICovCitpbnQgcG1fcnVudGltZV9jbGtfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcG1fcnVudGltZV9jbGtfZGF0YSAqcHJkID0gX190b19wcmQoZGV2KTsKKwlzdHJ1Y3QgcG1fY2xvY2tfZW50cnkgKmNlOworCisJZGV2X2RiZyhkZXYsICIlcygpXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoIXByZCkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZwcmQtPmxvY2spOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjZSwgJnByZC0+Y2xvY2tfbGlzdCwgbm9kZSkgeworCQlpZiAoY2UtPnN0YXR1cyA9PSBQQ0VfU1RBVFVTX05PTkUpCisJCQlwbV9ydW50aW1lX2Nsa19hY3F1aXJlKGRldiwgY2UpOworCisJCWlmIChjZS0+c3RhdHVzIDwgUENFX1NUQVRVU19FUlJPUikgeworCQkJY2xrX2VuYWJsZShjZS0+Y2xrKTsKKwkJCWNlLT5zdGF0dXMgPSBQQ0VfU1RBVFVTX0VOQUJMRUQ7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnByZC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBwbV9ydW50aW1lX2Nsa19ub3RpZnkgLSBOb3RpZnkgcm91dGluZSBmb3IgZGV2aWNlIGFkZGl0aW9uIGFuZCByZW1vdmFsLgorICogQG5iOiBOb3RpZmllciBibG9jayBvYmplY3QgdGhpcyBmdW5jdGlvbiBpcyBhIG1lbWJlciBvZi4KKyAqIEBhY3Rpb246IE9wZXJhdGlvbiBiZWluZyBjYXJyaWVkIG91dCBieSB0aGUgY2FsbGVyLgorICogQGRhdGE6IERldmljZSB0aGUgcm91dGluZSBpcyBiZWluZyBydW4gZm9yLgorICoKKyAqIEZvciB0aGlzIGZ1bmN0aW9uIHRvIHdvcmssIEBuYiBtdXN0IGJlIGEgbWVtYmVyIG9mIGFuIG9iamVjdCBvZiB0eXBlCisgKiBzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrIGNvbnRhaW5pbmcgYWxsIG9mIHRoZSByZXF1aXNpdGUgZGF0YS4KKyAqIFNwZWNpZmljYWxseSwgdGhlIHB3cl9kb21haW4gbWVtYmVyIG9mIHRoYXQgb2JqZWN0IGlzIGNvcGllZCB0byB0aGUgZGV2aWNlJ3MKKyAqIHB3cl9kb21haW4gZmllbGQgYW5kIGl0cyBjb25faWRzIG1lbWJlciBpcyB1c2VkIHRvIHBvcHVsYXRlIHRoZSBkZXZpY2UncyBsaXN0CisgKiBvZiBydW50aW1lIFBNIGNsb2NrcywgZGVwZW5kaW5nIG9uIEBhY3Rpb24uCisgKgorICogSWYgdGhlIGRldmljZSdzIHB3cl9kb21haW4gZmllbGQgaXMgYWxyZWFkeSBwb3B1bGF0ZWQgd2l0aCBhIHZhbHVlIGRpZmZlcmVudAorICogZnJvbSB0aGUgb25lIHN0b3JlZCBpbiB0aGUgc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jayBvYmplY3QsIHRoZSBmdW5jdGlvbgorICogZG9lcyBub3RoaW5nLgorICovCitzdGF0aWMgaW50IHBtX3J1bnRpbWVfY2xrX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLAorCQkJCSB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrICpjbGtuYjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBkYXRhOworCWNoYXIgKmNvbl9pZDsKKwlpbnQgZXJyb3I7CisKKwlkZXZfZGJnKGRldiwgIiVzKCkgJWxkXG4iLCBfX2Z1bmNfXywgYWN0aW9uKTsKKworCWNsa25iID0gY29udGFpbmVyX29mKG5iLCBzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrLCBuYik7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQlVTX05PVElGWV9BRERfREVWSUNFOgorCQlpZiAoZGV2LT5wd3JfZG9tYWluKQorCQkJYnJlYWs7CisKKwkJZXJyb3IgPSBwbV9ydW50aW1lX2Nsa19pbml0KGRldik7CisJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCisJCWRldi0+cHdyX2RvbWFpbiA9IGNsa25iLT5wd3JfZG9tYWluOworCQlpZiAoY2xrbmItPmNvbl9pZHNbMF0pIHsKKwkJCWZvciAoY29uX2lkID0gY2xrbmItPmNvbl9pZHNbMF07ICpjb25faWQ7IGNvbl9pZCsrKQorCQkJCXBtX3J1bnRpbWVfY2xrX2FkZChkZXYsIGNvbl9pZCk7CisJCX0gZWxzZSB7CisJCQlwbV9ydW50aW1lX2Nsa19hZGQoZGV2LCBOVUxMKTsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgQlVTX05PVElGWV9ERUxfREVWSUNFOgorCQlpZiAoZGV2LT5wd3JfZG9tYWluICE9IGNsa25iLT5wd3JfZG9tYWluKQorCQkJYnJlYWs7CisKKwkJZGV2LT5wd3JfZG9tYWluID0gTlVMTDsKKwkJcG1fcnVudGltZV9jbGtfZGVzdHJveShkZXYpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UgLyogIUNPTkZJR19QTV9SVU5USU1FICovCisKKy8qKgorICogZW5hYmxlX2Nsb2NrIC0gRW5hYmxlIGEgZGV2aWNlIGNsb2NrLgorICogQGRldjogRGV2aWNlIHdob3NlIGNsb2NrIGlzIHRvIGJlIGVuYWJsZWQuCisgKiBAY29uX2lkOiBDb25uZWN0aW9uIElEIG9mIHRoZSBjbG9jay4KKyAqLworc3RhdGljIHZvaWQgZW5hYmxlX2Nsb2NrKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkKQoreworCXN0cnVjdCBjbGsgKmNsazsKKworCWNsayA9IGNsa19nZXQoZGV2LCBjb25faWQpOworCWlmICghSVNfRVJSKGNsaykpIHsKKwkJY2xrX2VuYWJsZShjbGspOworCQljbGtfcHV0KGNsayk7CisJCWRldl9pbmZvKGRldiwgIlJ1bnRpbWUgUE0gZGlzYWJsZWQsIGNsb2NrIGZvcmNlZCBvbi5cbiIpOworCX0KK30KKworLyoqCisgKiBkaXNhYmxlX2Nsb2NrIC0gRGlzYWJsZSBhIGRldmljZSBjbG9jay4KKyAqIEBkZXY6IERldmljZSB3aG9zZSBjbG9jayBpcyB0byBiZSBkaXNhYmxlZC4KKyAqIEBjb25faWQ6IENvbm5lY3Rpb24gSUQgb2YgdGhlIGNsb2NrLgorICovCitzdGF0aWMgdm9pZCBkaXNhYmxlX2Nsb2NrKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkKQoreworCXN0cnVjdCBjbGsgKmNsazsKKworCWNsayA9IGNsa19nZXQoZGV2LCBjb25faWQpOworCWlmICghSVNfRVJSKGNsaykpIHsKKwkJY2xrX2Rpc2FibGUoY2xrKTsKKwkJY2xrX3B1dChjbGspOworCQlkZXZfaW5mbyhkZXYsICJSdW50aW1lIFBNIGRpc2FibGVkLCBjbG9jayBmb3JjZWQgb2ZmLlxuIik7CisJfQorfQorCisvKioKKyAqIHBtX3J1bnRpbWVfY2xrX25vdGlmeSAtIE5vdGlmeSByb3V0aW5lIGZvciBkZXZpY2UgYWRkaXRpb24gYW5kIHJlbW92YWwuCisgKiBAbmI6IE5vdGlmaWVyIGJsb2NrIG9iamVjdCB0aGlzIGZ1bmN0aW9uIGlzIGEgbWVtYmVyIG9mLgorICogQGFjdGlvbjogT3BlcmF0aW9uIGJlaW5nIGNhcnJpZWQgb3V0IGJ5IHRoZSBjYWxsZXIuCisgKiBAZGF0YTogRGV2aWNlIHRoZSByb3V0aW5lIGlzIGJlaW5nIHJ1biBmb3IuCisgKgorICogRm9yIHRoaXMgZnVuY3Rpb24gdG8gd29yaywgQG5iIG11c3QgYmUgYSBtZW1iZXIgb2YgYW4gb2JqZWN0IG9mIHR5cGUKKyAqIHN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgY29udGFpbmluZyBhbGwgb2YgdGhlIHJlcXVpc2l0ZSBkYXRhLgorICogU3BlY2lmaWNhbGx5LCB0aGUgY29uX2lkcyBtZW1iZXIgb2YgdGhhdCBvYmplY3QgaXMgdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZQorICogdGhlIGRldmljZSdzIGNsb2NrcywgZGVwZW5kaW5nIG9uIEBhY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgcG1fcnVudGltZV9jbGtfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgKmNsa25iOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisJY2hhciAqY29uX2lkOworCisJZGV2X2RiZyhkZXYsICIlcygpICVsZFxuIiwgX19mdW5jX18sIGFjdGlvbik7CisKKwljbGtuYiA9IGNvbnRhaW5lcl9vZihuYiwgc3RydWN0IHBtX2Nsa19ub3RpZmllcl9ibG9jaywgbmIpOworCisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIEJVU19OT1RJRllfQUREX0RFVklDRToKKwkJaWYgKGNsa25iLT5jb25faWRzWzBdKSB7CisJCQlmb3IgKGNvbl9pZCA9IGNsa25iLT5jb25faWRzWzBdOyAqY29uX2lkOyBjb25faWQrKykKKwkJCQllbmFibGVfY2xvY2soZGV2LCBjb25faWQpOworCQl9IGVsc2UgeworCQkJZW5hYmxlX2Nsb2NrKGRldiwgTlVMTCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBCVVNfTk9USUZZX0RFTF9ERVZJQ0U6CisJCWlmIChjbGtuYi0+Y29uX2lkc1swXSkgeworCQkJZm9yIChjb25faWQgPSBjbGtuYi0+Y29uX2lkc1swXTsgKmNvbl9pZDsgY29uX2lkKyspCisJCQkJZGlzYWJsZV9jbG9jayhkZXYsIGNvbl9pZCk7CisJCX0gZWxzZSB7CisJCQlkaXNhYmxlX2Nsb2NrKGRldiwgTlVMTCk7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KKworLyoqCisgKiBwbV9ydW50aW1lX2Nsa19hZGRfbm90aWZpZXIgLSBBZGQgYnVzIHR5cGUgbm90aWZpZXIgZm9yIHJ1bnRpbWUgUE0gY2xvY2tzLgorICogQGJ1czogQnVzIHR5cGUgdG8gYWRkIHRoZSBub3RpZmllciB0by4KKyAqIEBjbGtuYjogTm90aWZpZXIgdG8gYmUgYWRkZWQgdG8gdGhlIGdpdmVuIGJ1cyB0eXBlLgorICoKKyAqIFRoZSBuYiBtZW1iZXIgb2YgQGNsa25iIGlzIG5vdCBleHBlY3RlZCB0byBiZSBpbml0aWFsaXplZCBhbmQgaXRzCisgKiBub3RpZmllcl9jYWxsIG1lbWJlciB3aWxsIGJlIHJlcGxhY2VkIHdpdGggcG1fcnVudGltZV9jbGtfbm90aWZ5KCkuICBIb3dldmVyLAorICogdGhlIHJlbWFpbmluZyBtZW1iZXJzIG9mIEBjbGtuYiBzaG91bGQgYmUgcG9wdWxhdGVkIHByaW9yIHRvIGNhbGxpbmcgdGhpcworICogcm91dGluZS4KKyAqLwordm9pZCBwbV9ydW50aW1lX2Nsa19hZGRfbm90aWZpZXIoc3RydWN0IGJ1c190eXBlICpidXMsCisJCQkJIHN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgKmNsa25iKQoreworCWlmICghYnVzIHx8ICFjbGtuYikKKwkJcmV0dXJuOworCisJY2xrbmItPm5iLm5vdGlmaWVyX2NhbGwgPSBwbV9ydW50aW1lX2Nsa19ub3RpZnk7CisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKGJ1cywgJmNsa25iLT5uYik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9nZW5lcmljX29wcy5jCmluZGV4IDQyZjk3ZjkuLmNiM2JiMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9nZW5lcmljX29wcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9nZW5lcmljX29wcy5jCkBAIC03NCw2ICs3NCwyMyBAQAogCiAjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAvKioKKyAqIHBtX2dlbmVyaWNfcHJlcGFyZSAtIEdlbmVyaWMgcm91dGluZSBwcmVwYXJpbmcgYSBkZXZpY2UgZm9yIHBvd2VyIHRyYW5zaXRpb24uCisgKiBAZGV2OiBEZXZpY2UgdG8gcHJlcGFyZS4KKyAqCisgKiBQcmVwYXJlIGEgZGV2aWNlIGZvciBhIHN5c3RlbS13aWRlIHBvd2VyIHRyYW5zaXRpb24uCisgKi8KK2ludCBwbV9nZW5lcmljX3ByZXBhcmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChkcnYgJiYgZHJ2LT5wbSAmJiBkcnYtPnBtLT5wcmVwYXJlKQorCQlyZXQgPSBkcnYtPnBtLT5wcmVwYXJlKGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKICAqIF9fcG1fZ2VuZXJpY19jYWxsIC0gR2VuZXJpYyBzdXNwZW5kL2ZyZWV6ZS9wb3dlcm9mZi90aGF3IHN1YnN5c3RlbSBjYWxsYmFjay4KICAqIEBkZXY6IERldmljZSB0byBoYW5kbGUuCiAgKiBAZXZlbnQ6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSB1bmRlciB3YXkuCkBAIC0yMTMsMTYgKzIzMCwzOCBAQAogCXJldHVybiBfX3BtX2dlbmVyaWNfcmVzdW1lKGRldiwgUE1fRVZFTlRfUkVTVE9SRSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbV9nZW5lcmljX3Jlc3RvcmUpOworCisvKioKKyAqIHBtX2dlbmVyaWNfY29tcGxldGUgLSBHZW5lcmljIHJvdXRpbmUgY29tcGV0aW5nIGEgZGV2aWNlIHBvd2VyIHRyYW5zaXRpb24uCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICoKKyAqIENvbXBsZXRlIGEgZGV2aWNlIHBvd2VyIHRyYW5zaXRpb24gZHVyaW5nIGEgc3lzdGVtLXdpZGUgcG93ZXIgdHJhbnNpdGlvbi4KKyAqLwordm9pZCBwbV9nZW5lcmljX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CisKKwlpZiAoZHJ2ICYmIGRydi0+cG0gJiYgZHJ2LT5wbS0+Y29tcGxldGUpCisJCWRydi0+cG0tPmNvbXBsZXRlKGRldik7CisKKwkvKgorCSAqIExldCBydW50aW1lIFBNIHRyeSB0byBzdXNwZW5kIGRldmljZXMgdGhhdCBoYXZlbid0IGJlZW4gaW4gdXNlIGJlZm9yZQorCSAqIGdvaW5nIGludG8gdGhlIHN5c3RlbS13aWRlIHNsZWVwIHN0YXRlIHdlJ3JlIHJlc3VtaW5nIGZyb20uCisJICovCisJcG1fcnVudGltZV9pZGxlKGRldik7Cit9CiAjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCiAKIHN0cnVjdCBkZXZfcG1fb3BzIGdlbmVyaWNfc3Vic3lzX3BtX29wcyA9IHsKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKwkucHJlcGFyZSA9IHBtX2dlbmVyaWNfcHJlcGFyZSwKIAkuc3VzcGVuZCA9IHBtX2dlbmVyaWNfc3VzcGVuZCwKIAkucmVzdW1lID0gcG1fZ2VuZXJpY19yZXN1bWUsCiAJLmZyZWV6ZSA9IHBtX2dlbmVyaWNfZnJlZXplLAogCS50aGF3ID0gcG1fZ2VuZXJpY190aGF3LAogCS5wb3dlcm9mZiA9IHBtX2dlbmVyaWNfcG93ZXJvZmYsCiAJLnJlc3RvcmUgPSBwbV9nZW5lcmljX3Jlc3RvcmUsCisJLmNvbXBsZXRlID0gcG1fZ2VuZXJpY19jb21wbGV0ZSwKICNlbmRpZgogI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCiAJLnJ1bnRpbWVfc3VzcGVuZCA9IHBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKaW5kZXggZmJjNWI2ZS4uYWE2MzIwMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtNjMsNiArNjMsNyBAQAogCWRldi0+cG93ZXIud2FrZXVwID0gTlVMTDsKIAlzcGluX2xvY2tfaW5pdCgmZGV2LT5wb3dlci5sb2NrKTsKIAlwbV9ydW50aW1lX2luaXQoZGV2KTsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5wb3dlci5lbnRyeSk7CiB9CiAKIC8qKgpAQCAtNDI1LDEwICs0MjYsOCBAQAogCiAJaWYgKGRldi0+cHdyX2RvbWFpbikgewogCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJFQVJMWSBwb3dlciBkb21haW4gIik7Ci0JCXBtX25vaXJxX29wKGRldiwgJmRldi0+cHdyX2RvbWFpbi0+b3BzLCBzdGF0ZSk7Ci0JfQotCi0JaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKSB7CisJCWVycm9yID0gcG1fbm9pcnFfb3AoZGV2LCAmZGV2LT5wd3JfZG9tYWluLT5vcHMsIHN0YXRlKTsKKwl9IGVsc2UgaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKSB7CiAJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgIkVBUkxZIHR5cGUgIik7CiAJCWVycm9yID0gcG1fbm9pcnFfb3AoZGV2LCBkZXYtPnR5cGUtPnBtLCBzdGF0ZSk7CiAJfSBlbHNlIGlmIChkZXYtPmNsYXNzICYmIGRldi0+Y2xhc3MtPnBtKSB7CkBAIC01MTYsNyArNTE1LDggQEAKIAogCWlmIChkZXYtPnB3cl9kb21haW4pIHsKIAkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAicG93ZXIgZG9tYWluICIpOwotCQlwbV9vcChkZXYsICZkZXYtPnB3cl9kb21haW4tPm9wcywgc3RhdGUpOworCQllcnJvciA9IHBtX29wKGRldiwgJmRldi0+cHdyX2RvbWFpbi0+b3BzLCBzdGF0ZSk7CisJCWdvdG8gRW5kOwogCX0KIAogCWlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkgewpAQCAtNTc5LDExICs1NzksMTMgQEAKICAqIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlICJyZXN1bWUiIGNhbGxiYWNrIGZvciBhbGwgZGV2aWNlcyB3aG9zZSBzdGF0dXMKICAqIGluZGljYXRlcyB0aGF0IHRoZXkgYXJlIHN1c3BlbmRlZC4KICAqLwotc3RhdGljIHZvaWQgZHBtX3Jlc3VtZShwbV9tZXNzYWdlX3Qgc3RhdGUpCit2b2lkIGRwbV9yZXN1bWUocG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCisJbWlnaHRfc2xlZXAoKTsKKwogCW11dGV4X2xvY2soJmRwbV9saXN0X210eCk7CiAJcG1fdHJhbnNpdGlvbiA9IHN0YXRlOwogCWFzeW5jX2Vycm9yID0gMDsKQEAgLTYyOCwxMiArNjMwLDExIEBACiB7CiAJZGV2aWNlX2xvY2soZGV2KTsKIAotCWlmIChkZXYtPnB3cl9kb21haW4gJiYgZGV2LT5wd3JfZG9tYWluLT5vcHMuY29tcGxldGUpIHsKKwlpZiAoZGV2LT5wd3JfZG9tYWluKSB7CiAJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImNvbXBsZXRpbmcgcG93ZXIgZG9tYWluICIpOwotCQlkZXYtPnB3cl9kb21haW4tPm9wcy5jb21wbGV0ZShkZXYpOwotCX0KLQotCWlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkgeworCQlpZiAoZGV2LT5wd3JfZG9tYWluLT5vcHMuY29tcGxldGUpCisJCQlkZXYtPnB3cl9kb21haW4tPm9wcy5jb21wbGV0ZShkZXYpOworCX0gZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0pIHsKIAkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAiY29tcGxldGluZyB0eXBlICIpOwogCQlpZiAoZGV2LT50eXBlLT5wbS0+Y29tcGxldGUpCiAJCQlkZXYtPnR5cGUtPnBtLT5jb21wbGV0ZShkZXYpOwpAQCAtNjU3LDEwICs2NTgsMTIgQEAKICAqIEV4ZWN1dGUgdGhlIC0+Y29tcGxldGUoKSBjYWxsYmFja3MgZm9yIGFsbCBkZXZpY2VzIHdob3NlIFBNIHN0YXR1cyBpcyBub3QKICAqIERQTV9PTiAodGhpcyBhbGxvd3MgbmV3IGRldmljZXMgdG8gYmUgcmVnaXN0ZXJlZCkuCiAgKi8KLXN0YXRpYyB2b2lkIGRwbV9jb21wbGV0ZShwbV9tZXNzYWdlX3Qgc3RhdGUpCit2b2lkIGRwbV9jb21wbGV0ZShwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCisJbWlnaHRfc2xlZXAoKTsKKwogCUlOSVRfTElTVF9IRUFEKCZsaXN0KTsKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX3ByZXBhcmVkX2xpc3QpKSB7CkBAIC02ODksNyArNjkyLDYgQEAKICAqLwogdm9pZCBkcG1fcmVzdW1lX2VuZChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JbWlnaHRfc2xlZXAoKTsKIAlkcG1fcmVzdW1lKHN0YXRlKTsKIAlkcG1fY29tcGxldGUoc3RhdGUpOwogfQpAQCAtNzMxLDcgKzczMywxMiBAQAogewogCWludCBlcnJvcjsKIAotCWlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkgeworCWlmIChkZXYtPnB3cl9kb21haW4pIHsKKwkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAiTEFURSBwb3dlciBkb21haW4gIik7CisJCWVycm9yID0gcG1fbm9pcnFfb3AoZGV2LCAmZGV2LT5wd3JfZG9tYWluLT5vcHMsIHN0YXRlKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0gZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0pIHsKIAkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAiTEFURSB0eXBlICIpOwogCQllcnJvciA9IHBtX25vaXJxX29wKGRldiwgZGV2LT50eXBlLT5wbSwgc3RhdGUpOwogCQlpZiAoZXJyb3IpCkBAIC03NDgsMTEgKzc1NSw2IEBACiAJCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JaWYgKGRldi0+cHdyX2RvbWFpbikgewotCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJMQVRFIHBvd2VyIGRvbWFpbiAiKTsKLQkJcG1fbm9pcnFfb3AoZGV2LCAmZGV2LT5wd3JfZG9tYWluLT5vcHMsIHN0YXRlKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODQwLDIxICs4NDIsMjcgQEAKIAkJZ290byBFbmQ7CiAJfQogCisJaWYgKGRldi0+cHdyX2RvbWFpbikgeworCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJwb3dlciBkb21haW4gIik7CisJCWVycm9yID0gcG1fb3AoZGV2LCAmZGV2LT5wd3JfZG9tYWluLT5vcHMsIHN0YXRlKTsKKwkJZ290byBFbmQ7CisJfQorCiAJaWYgKGRldi0+dHlwZSAmJiBkZXYtPnR5cGUtPnBtKSB7CiAJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgInR5cGUgIik7CiAJCWVycm9yID0gcG1fb3AoZGV2LCBkZXYtPnR5cGUtPnBtLCBzdGF0ZSk7Ci0JCWdvdG8gRG9tYWluOworCQlnb3RvIEVuZDsKIAl9CiAKIAlpZiAoZGV2LT5jbGFzcykgewogCQlpZiAoZGV2LT5jbGFzcy0+cG0pIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImNsYXNzICIpOwogCQkJZXJyb3IgPSBwbV9vcChkZXYsIGRldi0+Y2xhc3MtPnBtLCBzdGF0ZSk7Ci0JCQlnb3RvIERvbWFpbjsKKwkJCWdvdG8gRW5kOwogCQl9IGVsc2UgaWYgKGRldi0+Y2xhc3MtPnN1c3BlbmQpIHsKIAkJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImxlZ2FjeSBjbGFzcyAiKTsKIAkJCWVycm9yID0gbGVnYWN5X3N1c3BlbmQoZGV2LCBzdGF0ZSwgZGV2LT5jbGFzcy0+c3VzcGVuZCk7Ci0JCQlnb3RvIERvbWFpbjsKKwkJCWdvdG8gRW5kOwogCQl9CiAJfQogCkBAIC04NjgsMTIgKzg3Niw2IEBACiAJCX0KIAl9CiAKLSBEb21haW46Ci0JaWYgKCFlcnJvciAmJiBkZXYtPnB3cl9kb21haW4pIHsKLQkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAicG93ZXIgZG9tYWluICIpOwotCQlwbV9vcChkZXYsICZkZXYtPnB3cl9kb21haW4tPm9wcywgc3RhdGUpOwotCX0KLQogIEVuZDoKIAlkZXZpY2VfdW5sb2NrKGRldik7CiAJY29tcGxldGVfYWxsKCZkZXYtPnBvd2VyLmNvbXBsZXRpb24pOwpAQCAtOTEzLDExICs5MTUsMTMgQEAKICAqIGRwbV9zdXNwZW5kIC0gRXhlY3V0ZSAic3VzcGVuZCIgY2FsbGJhY2tzIGZvciBhbGwgbm9uLXN5c2RldiBkZXZpY2VzLgogICogQHN0YXRlOiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gYmVpbmcgY2FycmllZCBvdXQuCiAgKi8KLXN0YXRpYyBpbnQgZHBtX3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQoraW50IGRwbV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlrdGltZV90IHN0YXJ0dGltZSA9IGt0aW1lX2dldCgpOwogCWludCBlcnJvciA9IDA7CiAKKwltaWdodF9zbGVlcCgpOworCiAJbXV0ZXhfbG9jaygmZHBtX2xpc3RfbXR4KTsKIAlwbV90cmFuc2l0aW9uID0gc3RhdGU7CiAJYXN5bmNfZXJyb3IgPSAwOwpAQCAtOTY0LDcgKzk2OCwxNCBAQAogCiAJZGV2aWNlX2xvY2soZGV2KTsKIAotCWlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkgeworCWlmIChkZXYtPnB3cl9kb21haW4pIHsKKwkJcG1fZGV2X2RiZyhkZXYsIHN0YXRlLCAicHJlcGFyaW5nIHBvd2VyIGRvbWFpbiAiKTsKKwkJaWYgKGRldi0+cHdyX2RvbWFpbi0+b3BzLnByZXBhcmUpCisJCQllcnJvciA9IGRldi0+cHdyX2RvbWFpbi0+b3BzLnByZXBhcmUoZGV2KTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldi0+cHdyX2RvbWFpbi0+b3BzLnByZXBhcmUsIGVycm9yKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBFbmQ7CisJfSBlbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkgewogCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJwcmVwYXJpbmcgdHlwZSAiKTsKIAkJaWYgKGRldi0+dHlwZS0+cG0tPnByZXBhcmUpCiAJCQllcnJvciA9IGRldi0+dHlwZS0+cG0tPnByZXBhcmUoZGV2KTsKQEAgLTk4MywxMyArOTk0LDYgQEAKIAkJaWYgKGRldi0+YnVzLT5wbS0+cHJlcGFyZSkKIAkJCWVycm9yID0gZGV2LT5idXMtPnBtLT5wcmVwYXJlKGRldik7CiAJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkZXYtPmJ1cy0+cG0tPnByZXBhcmUsIGVycm9yKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBFbmQ7Ci0JfQotCi0JaWYgKGRldi0+cHdyX2RvbWFpbiAmJiBkZXYtPnB3cl9kb21haW4tPm9wcy5wcmVwYXJlKSB7Ci0JCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgInByZXBhcmluZyBwb3dlciBkb21haW4gIik7Ci0JCWRldi0+cHdyX2RvbWFpbi0+b3BzLnByZXBhcmUoZGV2KTsKIAl9CiAKICBFbmQ6CkBAIC0xMDA0LDEwICsxMDA4LDEyIEBACiAgKgogICogRXhlY3V0ZSB0aGUgLT5wcmVwYXJlKCkgY2FsbGJhY2socykgZm9yIGFsbCBkZXZpY2VzLgogICovCi1zdGF0aWMgaW50IGRwbV9wcmVwYXJlKHBtX21lc3NhZ2VfdCBzdGF0ZSkKK2ludCBkcG1fcHJlcGFyZShwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IGVycm9yID0gMDsKIAorCW1pZ2h0X3NsZWVwKCk7CisKIAltdXRleF9sb2NrKCZkcG1fbGlzdF9tdHgpOwogCXdoaWxlICghbGlzdF9lbXB0eSgmZHBtX2xpc3QpKSB7CiAJCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRvX2RldmljZShkcG1fbGlzdC5uZXh0KTsKQEAgLTEwNTYsNyArMTA2Miw2IEBACiB7CiAJaW50IGVycm9yOwogCi0JbWlnaHRfc2xlZXAoKTsKIAllcnJvciA9IGRwbV9wcmVwYXJlKHN0YXRlKTsKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IGRwbV9zdXNwZW5kKHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvcnVudGltZS5jCmluZGV4IDMxNzJjNjAuLjBkNDU4N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9ydW50aW1lLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3J1bnRpbWUuYwpAQCAtMTY4LDcgKzE2OCw2IEBACiBzdGF0aWMgaW50IHJwbV9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHJwbWZsYWdzKQogewogCWludCAoKmNhbGxiYWNrKShzdHJ1Y3QgZGV2aWNlICopOwotCWludCAoKmRvbWFpbl9jYWxsYmFjaykoc3RydWN0IGRldmljZSAqKTsKIAlpbnQgcmV0dmFsOwogCiAJcmV0dmFsID0gcnBtX2NoZWNrX3N1c3BlbmRfYWxsb3dlZChkZXYpOwpAQCAtMjE0LDcgKzIxMyw5IEBACiAKIAlkZXYtPnBvd2VyLmlkbGVfbm90aWZpY2F0aW9uID0gdHJ1ZTsKIAotCWlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkKKwlpZiAoZGV2LT5wd3JfZG9tYWluKQorCQljYWxsYmFjayA9IGRldi0+cHdyX2RvbWFpbi0+b3BzLnJ1bnRpbWVfaWRsZTsKKwllbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkKIAkJY2FsbGJhY2sgPSBkZXYtPnR5cGUtPnBtLT5ydW50aW1lX2lkbGU7CiAJZWxzZSBpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5wbSkKIAkJY2FsbGJhY2sgPSBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9pZGxlOwpAQCAtMjIzLDE5ICsyMjQsMTAgQEAKIAllbHNlCiAJCWNhbGxiYWNrID0gTlVMTDsKIAotCWlmIChkZXYtPnB3cl9kb21haW4pCi0JCWRvbWFpbl9jYWxsYmFjayA9IGRldi0+cHdyX2RvbWFpbi0+b3BzLnJ1bnRpbWVfaWRsZTsKLQllbHNlCi0JCWRvbWFpbl9jYWxsYmFjayA9IE5VTEw7Ci0KLQlpZiAoY2FsbGJhY2sgfHwgZG9tYWluX2NhbGxiYWNrKSB7CisJaWYgKGNhbGxiYWNrKSB7CiAJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wb3dlci5sb2NrKTsKIAotCQlpZiAoZG9tYWluX2NhbGxiYWNrKQotCQkJcmV0dmFsID0gZG9tYWluX2NhbGxiYWNrKGRldik7Ci0KLQkJaWYgKCFyZXR2YWwgJiYgY2FsbGJhY2spCi0JCQljYWxsYmFjayhkZXYpOworCQljYWxsYmFjayhkZXYpOwogCiAJCXNwaW5fbG9ja19pcnEoJmRldi0+cG93ZXIubG9jayk7CiAJfQpAQCAtMzgyLDcgKzM3NCw5IEBACiAKIAlfX3VwZGF0ZV9ydW50aW1lX3N0YXR1cyhkZXYsIFJQTV9TVVNQRU5ESU5HKTsKIAotCWlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkKKwlpZiAoZGV2LT5wd3JfZG9tYWluKQorCQljYWxsYmFjayA9IGRldi0+cHdyX2RvbWFpbi0+b3BzLnJ1bnRpbWVfc3VzcGVuZDsKKwllbHNlIGlmIChkZXYtPnR5cGUgJiYgZGV2LT50eXBlLT5wbSkKIAkJY2FsbGJhY2sgPSBkZXYtPnR5cGUtPnBtLT5ydW50aW1lX3N1c3BlbmQ7CiAJZWxzZSBpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5wbSkKIAkJY2FsbGJhY2sgPSBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9zdXNwZW5kOwpAQCAtNDAwLDggKzM5NCw2IEBACiAJCWVsc2UKIAkJCXBtX3J1bnRpbWVfY2FuY2VsX3BlbmRpbmcoZGV2KTsKIAl9IGVsc2UgewotCQlpZiAoZGV2LT5wd3JfZG9tYWluKQotCQkJcnBtX2NhbGxiYWNrKGRldi0+cHdyX2RvbWFpbi0+b3BzLnJ1bnRpbWVfc3VzcGVuZCwgZGV2KTsKICBub19jYWxsYmFjazoKIAkJX191cGRhdGVfcnVudGltZV9zdGF0dXMoZGV2LCBSUE1fU1VTUEVOREVEKTsKIAkJcG1fcnVudGltZV9kZWFjdGl2YXRlX3RpbWVyKGRldik7CkBAIC01ODIsOSArNTc0LDggQEAKIAlfX3VwZGF0ZV9ydW50aW1lX3N0YXR1cyhkZXYsIFJQTV9SRVNVTUlORyk7CiAKIAlpZiAoZGV2LT5wd3JfZG9tYWluKQotCQlycG1fY2FsbGJhY2soZGV2LT5wd3JfZG9tYWluLT5vcHMucnVudGltZV9yZXN1bWUsIGRldik7Ci0KLQlpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0pCisJCWNhbGxiYWNrID0gZGV2LT5wd3JfZG9tYWluLT5vcHMucnVudGltZV9yZXN1bWU7CisJZWxzZSBpZiAoZGV2LT50eXBlICYmIGRldi0+dHlwZS0+cG0pCiAJCWNhbGxiYWNrID0gZGV2LT50eXBlLT5wbS0+cnVudGltZV9yZXN1bWU7CiAJZWxzZSBpZiAoZGV2LT5jbGFzcyAmJiBkZXYtPmNsYXNzLT5wbSkKIAkJY2FsbGJhY2sgPSBkZXYtPmNsYXNzLT5wbS0+cnVudGltZV9yZXN1bWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvc3lzZnMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCmluZGV4IGZmZjQ5YmUuLmE5ZjViODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9zeXNmcy5jCkBAIC0yMTIsOCArMjEyLDkgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihhdXRvc3VzcGVuZF9kZWxheV9tcywgMDY0NCwgYXV0b3N1c3BlbmRfZGVsYXlfbXNfc2hvdywKIAkJYXV0b3N1c3BlbmRfZGVsYXlfbXNfc3RvcmUpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfUE1fUlVOVElNRSAqLwogCisjaWZkZWYgQ09ORklHX1BNX1NMRUVQCiBzdGF0aWMgc3NpemVfdAogd2FrZV9zaG93KHN0cnVjdCBkZXZpY2UgKiBkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICogYnVmKQogewpAQCAtMjQ4LDcgKzI0OSw2IEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUih3YWtldXAsIDA2NDQsIHdha2Vfc2hvdywgd2FrZV9zdG9yZSk7CiAKLSNpZmRlZiBDT05GSUdfUE1fU0xFRVAKIHN0YXRpYyBzc2l6ZV90IHdha2V1cF9jb3VudF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL3dha2V1cC5jCmluZGV4IDQ1NzNjODMuLjg0ZjdjN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci93YWtldXAuYworKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvd2FrZXVwLmMKQEAgLTExMCw3ICsxMTAsNiBAQAogCXNwaW5fbG9ja19pcnEoJmV2ZW50c19sb2NrKTsKIAlsaXN0X2FkZF9yY3UoJndzLT5lbnRyeSwgJndha2V1cF9zb3VyY2VzKTsKIAlzcGluX3VubG9ja19pcnEoJmV2ZW50c19sb2NrKTsKLQlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdha2V1cF9zb3VyY2VfYWRkKTsKIApAQCAtMjU4LDcgKzI1Nyw3IEBACiAJaWYgKCEhZGV2LT5wb3dlci5jYW5fd2FrZXVwID09ICEhY2FwYWJsZSkKIAkJcmV0dXJuOwogCi0JaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKGRldikpIHsKKwlpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSAmJiAhbGlzdF9lbXB0eSgmZGV2LT5wb3dlci5lbnRyeSkpIHsKIAkJaWYgKGNhcGFibGUpIHsKIAkJCWlmICh3YWtldXBfc3lzZnNfYWRkKGRldikpCiAJCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3N5cy5jIGIvZHJpdmVycy9iYXNlL3N5cy5jCmluZGV4IGFjZGU5YjUuLjlkZmY3N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9zeXMuYworKysgYi9kcml2ZXJzL2Jhc2Uvc3lzLmMKQEAgLTMyOCwyMDMgKzMyOCw4IEBACiAJa29iamVjdF9wdXQoJnN5c2Rldi0+a29iaik7CiB9CiAKLQotI2lmbmRlZiBDT05GSUdfQVJDSF9OT19TWVNERVZfT1BTCi0vKioKLSAqCXN5c2Rldl9zaHV0ZG93biAtIFNodXQgZG93biBhbGwgc3lzdGVtIGRldmljZXMuCi0gKgotICoJTG9vcCBvdmVyIGVhY2ggY2xhc3Mgb2Ygc3lzdGVtIGRldmljZXMsIGFuZCB0aGUgZGV2aWNlcyBpbiBlYWNoCi0gKglvZiB0aG9zZSBjbGFzc2VzLiBGb3IgZWFjaCBkZXZpY2UsIHdlIGNhbGwgdGhlIHNodXRkb3duIG1ldGhvZCBmb3IKLSAqCWVhY2ggZHJpdmVyIHJlZ2lzdGVyZWQgZm9yIHRoZSBkZXZpY2UgLSB0aGUgYXV4aWxpYXJpZXMsCi0gKglhbmQgdGhlIGNsYXNzIGRyaXZlci4KLSAqCi0gKglOb3RlOiBUaGUgbGlzdCBpcyBpdGVyYXRlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB0aGF0IHdlIHNodXQgZG93bgotICoJY2hpbGQgZGV2aWNlcyBiZWZvcmUgd2Ugc2h1dCBkb3duIHRoZWlyIHBhcmVudHMuIFRoZSBsaXN0IG9yZGVyaW5nCi0gKglpcyBndWFyYW50ZWVkIGJ5IHZpcnR1ZSBvZiB0aGUgZmFjdCB0aGF0IGNoaWxkIGRldmljZXMgYXJlIHJlZ2lzdGVyZWQKLSAqCWFmdGVyIHRoZWlyIHBhcmVudHMuCi0gKi8KLXZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpCi17Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzOwotCi0JcHJfZGVidWcoIlNodXR0aW5nIERvd24gU3lzdGVtIERldmljZXNcbiIpOwotCi0JbXV0ZXhfbG9jaygmc3lzZGV2X2RyaXZlcnNfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGNscywgJnN5c3RlbV9rc2V0LT5saXN0LCBrc2V0LmtvYmouZW50cnkpIHsKLQkJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKLQotCQlwcl9kZWJ1ZygiU2h1dHRpbmcgZG93biB0eXBlICclcyc6XG4iLAotCQkJIGtvYmplY3RfbmFtZSgmY2xzLT5rc2V0LmtvYmopKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5c2RldiwgJmNscy0+a3NldC5saXN0LCBrb2JqLmVudHJ5KSB7Ci0JCQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2OwotCQkJcHJfZGVidWcoIiAlc1xuIiwga29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopKTsKLQotCQkJLyogQ2FsbCBhdXhpbGlhcnkgZHJpdmVycyBmaXJzdCAqLwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjbHMtPmRyaXZlcnMsIGVudHJ5KSB7Ci0JCQkJaWYgKGRydi0+c2h1dGRvd24pCi0JCQkJCWRydi0+c2h1dGRvd24oc3lzZGV2KTsKLQkJCX0KLQotCQkJLyogTm93IGNhbGwgdGhlIGdlbmVyaWMgb25lICovCi0JCQlpZiAoY2xzLT5zaHV0ZG93bikKLQkJCQljbHMtPnNodXRkb3duKHN5c2Rldik7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZzeXNkZXZfZHJpdmVyc19sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgX19zeXNkZXZfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzID0gZGV2LT5jbHM7Ci0Jc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydjsKLQotCS8qIEZpcnN0LCBjYWxsIHRoZSBjbGFzcy1zcGVjaWZpYyBvbmUgKi8KLQlpZiAoY2xzLT5yZXN1bWUpCi0JCWNscy0+cmVzdW1lKGRldik7Ci0JV0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksCi0JCSJJbnRlcnJ1cHRzIGVuYWJsZWQgYWZ0ZXIgJXBGXG4iLCBjbHMtPnJlc3VtZSk7Ci0KLQkvKiBDYWxsIGF1eGlsaWFyeSBkcml2ZXJzIG5leHQuICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShkcnYsICZjbHMtPmRyaXZlcnMsIGVudHJ5KSB7Ci0JCWlmIChkcnYtPnJlc3VtZSkKLQkJCWRydi0+cmVzdW1lKGRldik7Ci0JCVdBUk5fT05DRSghaXJxc19kaXNhYmxlZCgpLAotCQkJIkludGVycnVwdHMgZW5hYmxlZCBhZnRlciAlcEZcbiIsIGRydi0+cmVzdW1lKTsKLQl9Ci19Ci0KLS8qKgotICoJc3lzZGV2X3N1c3BlbmQgLSBTdXNwZW5kIGFsbCBzeXN0ZW0gZGV2aWNlcy4KLSAqCUBzdGF0ZToJCVBvd2VyIHN0YXRlIHRvIGVudGVyLgotICoKLSAqCVdlIHBlcmZvcm0gYW4gYWxtb3N0IGlkZW50aWNhbCBvcGVyYXRpb24gYXMgc3lzZGV2X3NodXRkb3duKCkKLSAqCWFib3ZlLCB0aG91Z2ggY2FsbGluZyAtPnN1c3BlbmQoKSBpbnN0ZWFkLiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZAotICoJd2hlbiB0aGlzIGNhbGxlZC4gRGV2aWNlcyBhcmUgcmVzcG9uc2libGUgZm9yIGJvdGggc2F2aW5nIHN0YXRlIGFuZAotICoJcXVpZXNjaW5nIG9yIHBvd2VyaW5nIGRvd24gdGhlIGRldmljZS4KLSAqCi0gKglUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBkZXZpY2UgUE0gY29yZSwgc28gd2UgbGV0IHRoZW0gaGFuZGxlCi0gKglhbGwgc3luY2hyb25pemF0aW9uLgotICovCi1pbnQgc3lzZGV2X3N1c3BlbmQocG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKLQlzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2LCAqZXJyX2RldjsKLQlzdHJ1Y3Qgc3lzZGV2X2RyaXZlciAqZHJ2LCAqZXJyX2RydjsKLQlpbnQgcmV0OwotCi0JcHJfZGVidWcoIkNoZWNraW5nIHdha2UtdXAgaW50ZXJydXB0c1xuIik7Ci0KLQkvKiBSZXR1cm4gZXJyb3IgY29kZSBpZiB0aGVyZSBhcmUgYW55IHdha2UtdXAgaW50ZXJydXB0cyBwZW5kaW5nICovCi0JcmV0ID0gY2hlY2tfd2FrZXVwX2lycXMoKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JV0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksCi0JCSJJbnRlcnJ1cHRzIGVuYWJsZWQgd2hpbGUgc3VzcGVuZGluZyBzeXN0ZW0gZGV2aWNlc1xuIik7Ci0KLQlwcl9kZWJ1ZygiU3VzcGVuZGluZyBTeXN0ZW0gRGV2aWNlc1xuIik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2UoY2xzLCAmc3lzdGVtX2tzZXQtPmxpc3QsIGtzZXQua29iai5lbnRyeSkgewotCQlwcl9kZWJ1ZygiU3VzcGVuZGluZyB0eXBlICclcyc6XG4iLAotCQkJIGtvYmplY3RfbmFtZSgmY2xzLT5rc2V0LmtvYmopKTsKLQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN5c2RldiwgJmNscy0+a3NldC5saXN0LCBrb2JqLmVudHJ5KSB7Ci0JCQlwcl9kZWJ1ZygiICVzXG4iLCBrb2JqZWN0X25hbWUoJnN5c2Rldi0+a29iaikpOwotCi0JCQkvKiBDYWxsIGF1eGlsaWFyeSBkcml2ZXJzIGZpcnN0ICovCi0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRydiwgJmNscy0+ZHJpdmVycywgZW50cnkpIHsKLQkJCQlpZiAoZHJ2LT5zdXNwZW5kKSB7Ci0JCQkJCXJldCA9IGRydi0+c3VzcGVuZChzeXNkZXYsIHN0YXRlKTsKLQkJCQkJaWYgKHJldCkKLQkJCQkJCWdvdG8gYXV4X2RyaXZlcjsKLQkJCQl9Ci0JCQkJV0FSTl9PTkNFKCFpcnFzX2Rpc2FibGVkKCksCi0JCQkJCSJJbnRlcnJ1cHRzIGVuYWJsZWQgYWZ0ZXIgJXBGXG4iLAotCQkJCQlkcnYtPnN1c3BlbmQpOwotCQkJfQotCi0JCQkvKiBOb3cgY2FsbCB0aGUgZ2VuZXJpYyBvbmUgKi8KLQkJCWlmIChjbHMtPnN1c3BlbmQpIHsKLQkJCQlyZXQgPSBjbHMtPnN1c3BlbmQoc3lzZGV2LCBzdGF0ZSk7Ci0JCQkJaWYgKHJldCkKLQkJCQkJZ290byBjbHNfZHJpdmVyOwotCQkJCVdBUk5fT05DRSghaXJxc19kaXNhYmxlZCgpLAotCQkJCQkiSW50ZXJydXB0cyBlbmFibGVkIGFmdGVyICVwRlxuIiwKLQkJCQkJY2xzLT5zdXNwZW5kKTsKLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gMDsKLQkvKiByZXN1bWUgY3VycmVudCBzeXNkZXYgKi8KLWNsc19kcml2ZXI6Ci0JZHJ2ID0gTlVMTDsKLQlwcmludGsoS0VSTl9FUlIgIkNsYXNzIHN1c3BlbmQgZmFpbGVkIGZvciAlczogJWRcbiIsCi0JCWtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSwgcmV0KTsKLQotYXV4X2RyaXZlcjoKLQlpZiAoZHJ2KQotCQlwcmludGsoS0VSTl9FUlIgIkNsYXNzIGRyaXZlciBzdXNwZW5kIGZhaWxlZCBmb3IgJXM6ICVkXG4iLAotCQkJCWtvYmplY3RfbmFtZSgmc3lzZGV2LT5rb2JqKSwgcmV0KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVycl9kcnYsICZjbHMtPmRyaXZlcnMsIGVudHJ5KSB7Ci0JCWlmIChlcnJfZHJ2ID09IGRydikKLQkJCWJyZWFrOwotCQlpZiAoZXJyX2Rydi0+cmVzdW1lKQotCQkJZXJyX2Rydi0+cmVzdW1lKHN5c2Rldik7Ci0JfQotCi0JLyogcmVzdW1lIG90aGVyIHN5c2RldnMgaW4gY3VycmVudCBjbGFzcyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZXJyX2RldiwgJmNscy0+a3NldC5saXN0LCBrb2JqLmVudHJ5KSB7Ci0JCWlmIChlcnJfZGV2ID09IHN5c2RldikKLQkJCWJyZWFrOwotCQlwcl9kZWJ1ZygiICVzXG4iLCBrb2JqZWN0X25hbWUoJmVycl9kZXYtPmtvYmopKTsKLQkJX19zeXNkZXZfcmVzdW1lKGVycl9kZXYpOwotCX0KLQotCS8qIHJlc3VtZSBvdGhlciBjbGFzc2VzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZXJyX2RldiwgJmNscy0+a3NldC5saXN0LCBrb2JqLmVudHJ5KSB7Ci0JCQlwcl9kZWJ1ZygiICVzXG4iLCBrb2JqZWN0X25hbWUoJmVycl9kZXYtPmtvYmopKTsKLQkJCV9fc3lzZGV2X3Jlc3VtZShlcnJfZGV2KTsKLQkJfQotCX0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTF9HUEwoc3lzZGV2X3N1c3BlbmQpOwotCi0vKioKLSAqCXN5c2Rldl9yZXN1bWUgLSBCcmluZyBzeXN0ZW0gZGV2aWNlcyBiYWNrIHRvIGxpZmUuCi0gKgotICoJU2ltaWxhciB0byBzeXNkZXZfc3VzcGVuZCgpLCBidXQgd2UgaXRlcmF0ZSB0aGUgbGlzdCBmb3J3YXJkcwotICoJdG8gZ3VhcmFudGVlIHRoYXQgcGFyZW50IGRldmljZXMgYXJlIHJlc3VtZWQgYmVmb3JlIHRoZWlyIGNoaWxkcmVuLgotICoKLSAqCU5vdGU6IEludGVycnVwdHMgYXJlIGRpc2FibGVkIHdoZW4gY2FsbGVkLgotICovCi1pbnQgc3lzZGV2X3Jlc3VtZSh2b2lkKQotewotCXN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsczsKLQotCVdBUk5fT05DRSghaXJxc19kaXNhYmxlZCgpLAotCQkiSW50ZXJydXB0cyBlbmFibGVkIHdoaWxlIHJlc3VtaW5nIHN5c3RlbSBkZXZpY2VzXG4iKTsKLQotCXByX2RlYnVnKCJSZXN1bWluZyBTeXN0ZW0gRGV2aWNlc1xuIik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNscywgJnN5c3RlbV9rc2V0LT5saXN0LCBrc2V0LmtvYmouZW50cnkpIHsKLQkJc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldjsKLQotCQlwcl9kZWJ1ZygiUmVzdW1pbmcgdHlwZSAnJXMnOlxuIiwKLQkJCSBrb2JqZWN0X25hbWUoJmNscy0+a3NldC5rb2JqKSk7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzeXNkZXYsICZjbHMtPmtzZXQubGlzdCwga29iai5lbnRyeSkgewotCQkJcHJfZGVidWcoIiAlc1xuIiwga29iamVjdF9uYW1lKCZzeXNkZXYtPmtvYmopKTsKLQotCQkJX19zeXNkZXZfcmVzdW1lKHN5c2Rldik7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzeXNkZXZfcmVzdW1lKTsKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9OT19TWVNERVZfT1BTICovCitFWFBPUlRfU1lNQk9MX0dQTChzeXNkZXZfcmVnaXN0ZXIpOworRVhQT1JUX1NZTUJPTF9HUEwoc3lzZGV2X3VucmVnaXN0ZXIpOwogCiBpbnQgX19pbml0IHN5c3RlbV9idXNfaW5pdCh2b2lkKQogewpAQCAtNTM0LDkgKzMzOSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0xfR1BMKHN5c2Rldl9yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MX0dQTChzeXNkZXZfdW5yZWdpc3Rlcik7Ci0KICNkZWZpbmUgdG9fZXh0X2F0dHIoeCkgY29udGFpbmVyX29mKHgsIHN0cnVjdCBzeXNkZXZfZXh0X2F0dHJpYnV0ZSwgYXR0cikKIAogc3NpemVfdCBzeXNkZXZfc3RvcmVfdWxvbmcoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXNjb3JlLmMgYi9kcml2ZXJzL2Jhc2Uvc3lzY29yZS5jCmluZGV4IDkwYWYyOTQuLmMxMjZkYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9zeXNjb3JlLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5c2NvcmUuYwpAQCAtNzMsNiArNzMsNyBAQAogCiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2NvcmVfc3VzcGVuZCk7CiAKIC8qKgogICogc3lzY29yZV9yZXN1bWUgLSBFeGVjdXRlIGFsbCB0aGUgcmVnaXN0ZXJlZCBzeXN0ZW0gY29yZSByZXN1bWUgY2FsbGJhY2tzLgpAQCAtOTUsNiArOTYsNyBAQAogCQkJCSJJbnRlcnJ1cHRzIGVuYWJsZWQgYWZ0ZXIgJXBGXG4iLCBvcHMtPnJlc3VtZSk7CiAJCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2NvcmVfcmVzdW1lKTsKICNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCA4MDY2ZDA4Li5lMDg2ZmJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTI1NDcsNyArMjU0Nyw2IEBACiAJZGlzay0+bWFqb3IgPSBNYWpvck51bWJlcjsKIAlkaXNrLT5maXJzdF9taW5vciA9IG4gPDwgREFDOTYwX01heFBhcnRpdGlvbnNCaXRzOwogCWRpc2stPmZvcHMgPSAmREFDOTYwX0Jsb2NrRGV2aWNlT3BlcmF0aW9uczsKLQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKICAgIH0KICAgLyoKICAgICBJbmRpY2F0ZSB0aGUgQmxvY2sgRGV2aWNlIFJlZ2lzdHJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9hbWlmbG9wLmMgYi9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYwppbmRleCA0NTZjMGNjLi44ZWJhODZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL2FtaWZsb3AuYwpAQCAtMTczNiw3ICsxNzM2LDYgQEAKIAkJZGlzay0+bWFqb3IgPSBGTE9QUFlfTUFKT1I7CiAJCWRpc2stPmZpcnN0X21pbm9yID0gZHJpdmU7CiAJCWRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7Ci0JCWRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCQlzcHJpbnRmKGRpc2stPmRpc2tfbmFtZSwgImZkJWQiLCBkcml2ZSk7CiAJCWRpc2stPnByaXZhdGVfZGF0YSA9ICZ1bml0W2RyaXZlXTsKIAkJc2V0X2NhcGFjaXR5KGRpc2ssIDg4MCoyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svYXRhZmxvcC5jIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKaW5kZXggYzg3MWVhZS4uZWRlMTZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKKysrIGIvZHJpdmVycy9ibG9jay9hdGFmbG9wLmMKQEAgLTE5NjQsNyArMTk2NCw2IEBACiAJCXVuaXRbaV0uZGlzay0+Zmlyc3RfbWlub3IgPSBpOwogCQlzcHJpbnRmKHVuaXRbaV0uZGlzay0+ZGlza19uYW1lLCAiZmQlZCIsIGkpOwogCQl1bml0W2ldLmRpc2stPmZvcHMgPSAmZmxvcHB5X2ZvcHM7Ci0JCXVuaXRbaV0uZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJCXVuaXRbaV0uZGlzay0+cHJpdmF0ZV9kYXRhID0gJnVuaXRbaV07CiAJCXVuaXRbaV0uZGlzay0+cXVldWUgPSBibGtfaW5pdF9xdWV1ZShkb19mZF9yZXF1ZXN0LAogCQkJCQkmYXRhZmxvcF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IDMwMWQ3YTkuLmRiOGY4ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtNDIwNSw3ICs0MjA1LDYgQEAKIAkJZGlza3NbZHJdLT5tYWpvciA9IEZMT1BQWV9NQUpPUjsKIAkJZGlza3NbZHJdLT5maXJzdF9taW5vciA9IFRPTUlOT1IoZHIpOwogCQlkaXNrc1tkcl0tPmZvcHMgPSAmZmxvcHB5X2ZvcHM7Ci0JCWRpc2tzW2RyXS0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJCXNwcmludGYoZGlza3NbZHJdLT5kaXNrX25hbWUsICJmZCVkIiwgZHIpOwogCiAJCWluaXRfdGltZXIoJm1vdG9yX29mZl90aW1lcltkcl0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGNkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwppbmRleCAyZjJjY2Y2Li44NjkwZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wY2QuYwpAQCAtMzIwLDcgKzMyMCw2IEBACiAJCWRpc2stPmZpcnN0X21pbm9yID0gdW5pdDsKIAkJc3RyY3B5KGRpc2stPmRpc2tfbmFtZSwgY2QtPm5hbWUpOwkvKiB1bW0uLi4gKi8KIAkJZGlzay0+Zm9wcyA9ICZwY2RfYmRvcHM7Ci0JCWRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYyBiL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKaW5kZXggMjFkZmRiNy4uODY5ZTc2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCkBAIC04MzcsNyArODM3LDYgQEAKIAlwLT5mb3BzID0gJnBkX2ZvcHM7CiAJcC0+bWFqb3IgPSBtYWpvcjsKIAlwLT5maXJzdF9taW5vciA9IChkaXNrIC0gcGQpIDw8IFBEX0JJVFM7Ci0JcC0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJZGlzay0+Z2QgPSBwOwogCXAtPnByaXZhdGVfZGF0YSA9IGRpc2s7CiAJcC0+cXVldWUgPSBwZF9xdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZi5jCmluZGV4IDdhZGViMWUuLmYyMWI1MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BmLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGYuYwpAQCAtMjk0LDcgKzI5NCw2IEBACiAJCWRpc2stPmZpcnN0X21pbm9yID0gdW5pdDsKIAkJc3RyY3B5KGRpc2stPmRpc2tfbmFtZSwgcGYtPm5hbWUpOwogCQlkaXNrLT5mb3BzID0gJnBmX2ZvcHM7Ci0JCWRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCQlpZiAoISgqZHJpdmVzW3VuaXRdKVtEX1BSVF0pCiAJCQlwZl9kcml2ZV9jb3VudCsrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcmJkLmMgYi9kcml2ZXJzL2Jsb2NrL3JiZC5jCmluZGV4IDE2ZGMzNjQuLjk3MTJmYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9yYmQuYwpAQCAtOTIsNiArOTIsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKIH07CiAKK3N0cnVjdCByYmRfcmVxX2NvbGw7CisKIC8qCiAgKiBhIHNpbmdsZSBpbyByZXF1ZXN0CiAgKi8KQEAgLTEwMCw2ICsxMDIsMjQgQEAKIAlzdHJ1Y3QgYmlvCQkqYmlvOwkJLyogY2xvbmVkIGJpbyAqLwogCXN0cnVjdCBwYWdlCQkqKnBhZ2VzOwkvKiBsaXN0IG9mIHVzZWQgcGFnZXMgKi8KIAl1NjQJCQlsZW47CisJaW50CQkJY29sbF9pbmRleDsKKwlzdHJ1Y3QgcmJkX3JlcV9jb2xsCSpjb2xsOworfTsKKworc3RydWN0IHJiZF9yZXFfc3RhdHVzIHsKKwlpbnQgZG9uZTsKKwlpbnQgcmM7CisJdTY0IGJ5dGVzOworfTsKKworLyoKKyAqIGEgY29sbGVjdGlvbiBvZiByZXF1ZXN0cworICovCitzdHJ1Y3QgcmJkX3JlcV9jb2xsIHsKKwlpbnQJCQl0b3RhbDsKKwlpbnQJCQludW1fZG9uZTsKKwlzdHJ1Y3Qga3JlZgkJa3JlZjsKKwlzdHJ1Y3QgcmJkX3JlcV9zdGF0dXMJc3RhdHVzWzBdOwogfTsKIAogc3RydWN0IHJiZF9zbmFwIHsKQEAgLTQxNiw2ICs0MzYsMTcgQEAKIAlyYmRfZGV2LT5jbGllbnQgPSBOVUxMOwogfQogCisvKgorICogRGVzdHJveSByZXF1ZXN0cyBjb2xsZWN0aW9uCisgKi8KK3N0YXRpYyB2b2lkIHJiZF9jb2xsX3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCit7CisJc3RydWN0IHJiZF9yZXFfY29sbCAqY29sbCA9CisJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgcmJkX3JlcV9jb2xsLCBrcmVmKTsKKworCWRvdXQoInJiZF9jb2xsX3JlbGVhc2UgJXBcbiIsIGNvbGwpOworCWtmcmVlKGNvbGwpOworfQogCiAvKgogICogQ3JlYXRlIGEgbmV3IGhlYWRlciBzdHJ1Y3R1cmUsIHRyYW5zbGF0ZSBoZWFkZXIgZm9ybWF0IGZyb20gdGhlIG9uLWRpc2sKQEAgLTU5MCw2ICs2MjEsMTQgQEAKIAlyZXR1cm4gbGVuOwogfQogCitzdGF0aWMgaW50IHJiZF9nZXRfbnVtX3NlZ21lbnRzKHN0cnVjdCByYmRfaW1hZ2VfaGVhZGVyICpoZWFkZXIsCisJCQkJdTY0IG9mcywgdTY0IGxlbikKK3sKKwl1NjQgc3RhcnRfc2VnID0gb2ZzID4+IGhlYWRlci0+b2JqX29yZGVyOworCXU2NCBlbmRfc2VnID0gKG9mcyArIGxlbiAtIDEpID4+IGhlYWRlci0+b2JqX29yZGVyOworCXJldHVybiBlbmRfc2VnIC0gc3RhcnRfc2VnICsgMTsKK30KKwogLyoKICAqIGJpbyBoZWxwZXJzCiAgKi8KQEAgLTczNSw2ICs3NzQsNTAgQEAKIAlrZnJlZShvcHMpOwogfQogCitzdGF0aWMgdm9pZCByYmRfY29sbF9lbmRfcmVxX2luZGV4KHN0cnVjdCByZXF1ZXN0ICpycSwKKwkJCQkgICBzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsLAorCQkJCSAgIGludCBpbmRleCwKKwkJCQkgICBpbnQgcmV0LCB1NjQgbGVuKQoreworCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxOworCWludCBtaW4sIG1heCwgaTsKKworCWRvdXQoInJiZF9jb2xsX2VuZF9yZXFfaW5kZXggJXAgaW5kZXggJWQgcmV0ICVkIGxlbiAlbGxkXG4iLAorCSAgICAgY29sbCwgaW5kZXgsIHJldCwgbGVuKTsKKworCWlmICghcnEpCisJCXJldHVybjsKKworCWlmICghY29sbCkgeworCQlibGtfZW5kX3JlcXVlc3QocnEsIHJldCwgbGVuKTsKKwkJcmV0dXJuOworCX0KKworCXEgPSBycS0+cTsKKworCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CisJY29sbC0+c3RhdHVzW2luZGV4XS5kb25lID0gMTsKKwljb2xsLT5zdGF0dXNbaW5kZXhdLnJjID0gcmV0OworCWNvbGwtPnN0YXR1c1tpbmRleF0uYnl0ZXMgPSBsZW47CisJbWF4ID0gbWluID0gY29sbC0+bnVtX2RvbmU7CisJd2hpbGUgKG1heCA8IGNvbGwtPnRvdGFsICYmIGNvbGwtPnN0YXR1c1ttYXhdLmRvbmUpCisJCW1heCsrOworCisJZm9yIChpID0gbWluOyBpPG1heDsgaSsrKSB7CisJCV9fYmxrX2VuZF9yZXF1ZXN0KHJxLCBjb2xsLT5zdGF0dXNbaV0ucmMsCisJCQkJICBjb2xsLT5zdGF0dXNbaV0uYnl0ZXMpOworCQljb2xsLT5udW1fZG9uZSsrOworCQlrcmVmX3B1dCgmY29sbC0+a3JlZiwgcmJkX2NvbGxfcmVsZWFzZSk7CisJfQorCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcmJkX2NvbGxfZW5kX3JlcShzdHJ1Y3QgcmJkX3JlcXVlc3QgKnJlcSwKKwkJCSAgICAgaW50IHJldCwgdTY0IGxlbikKK3sKKwlyYmRfY29sbF9lbmRfcmVxX2luZGV4KHJlcS0+cnEsIHJlcS0+Y29sbCwgcmVxLT5jb2xsX2luZGV4LCByZXQsIGxlbik7Cit9CisKIC8qCiAgKiBTZW5kIGNlcGggb3NkIHJlcXVlc3QKICAqLwpAQCAtNzQ5LDYgKzgzMiw4IEBACiAJCQkgIGludCBmbGFncywKIAkJCSAgc3RydWN0IGNlcGhfb3NkX3JlcV9vcCAqb3BzLAogCQkJICBpbnQgbnVtX3JlcGx5LAorCQkJICBzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsLAorCQkJICBpbnQgY29sbF9pbmRleCwKIAkJCSAgdm9pZCAoKnJiZF9jYikoc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKnJlcSwKIAkJCQkJIHN0cnVjdCBjZXBoX21zZyAqbXNnKSwKIAkJCSAgc3RydWN0IGNlcGhfb3NkX3JlcXVlc3QgKipsaW5nZXJfcmVxLApAQCAtNzYzLDEyICs4NDgsMjAgQEAKIAlzdHJ1Y3QgY2VwaF9vc2RfcmVxdWVzdF9oZWFkICpyZXFoZWFkOwogCXN0cnVjdCByYmRfaW1hZ2VfaGVhZGVyICpoZWFkZXIgPSAmZGV2LT5oZWFkZXI7CiAKLQlyZXQgPSAtRU5PTUVNOwogCXJlcV9kYXRhID0ga3phbGxvYyhzaXplb2YoKnJlcV9kYXRhKSwgR0ZQX05PSU8pOwotCWlmICghcmVxX2RhdGEpCi0JCWdvdG8gZG9uZTsKKwlpZiAoIXJlcV9kYXRhKSB7CisJCWlmIChjb2xsKQorCQkJcmJkX2NvbGxfZW5kX3JlcV9pbmRleChycSwgY29sbCwgY29sbF9pbmRleCwKKwkJCQkJICAgICAgIC1FTk9NRU0sIGxlbik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAotCWRvdXQoInJiZF9kb19yZXF1ZXN0IGxlbj0lbGxkIG9mcz0lbGxkXG4iLCBsZW4sIG9mcyk7CisJaWYgKGNvbGwpIHsKKwkJcmVxX2RhdGEtPmNvbGwgPSBjb2xsOworCQlyZXFfZGF0YS0+Y29sbF9pbmRleCA9IGNvbGxfaW5kZXg7CisJfQorCisJZG91dCgicmJkX2RvX3JlcXVlc3Qgb2JqPSVzIG9mcz0lbGxkIGxlbj0lbGxkXG4iLCBvYmosIGxlbiwgb2ZzKTsKIAogCWRvd25fcmVhZCgmaGVhZGVyLT5zbmFwX3J3c2VtKTsKIApAQCAtNzc3LDkgKzg3MCw5IEBACiAJCQkJICAgICAgb3BzLAogCQkJCSAgICAgIGZhbHNlLAogCQkJCSAgICAgIEdGUF9OT0lPLCBwYWdlcywgYmlvKTsKLQlpZiAoSVNfRVJSKHJlcSkpIHsKKwlpZiAoIXJlcSkgewogCQl1cF9yZWFkKCZoZWFkZXItPnNuYXBfcndzZW0pOwotCQlyZXQgPSBQVFJfRVJSKHJlcSk7CisJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZG9uZV9wYWdlczsKIAl9CiAKQEAgLTgyOCw3ICs5MjEsOCBAQAogCQlyZXQgPSBjZXBoX29zZGNfd2FpdF9yZXF1ZXN0KCZkZXYtPmNsaWVudC0+b3NkYywgcmVxKTsKIAkJaWYgKHZlcikKIAkJCSp2ZXIgPSBsZTY0X3RvX2NwdShyZXEtPnJfcmVhc3NlcnRfdmVyc2lvbi52ZXJzaW9uKTsKLQkJZG91dCgicmVhc3NlcnRfdmVyPSVsbGRcbiIsIGxlNjRfdG9fY3B1KHJlcS0+cl9yZWFzc2VydF92ZXJzaW9uLnZlcnNpb24pKTsKKwkJZG91dCgicmVhc3NlcnRfdmVyPSVsbGRcbiIsCisJCSAgICAgbGU2NF90b19jcHUocmVxLT5yX3JlYXNzZXJ0X3ZlcnNpb24udmVyc2lvbikpOwogCQljZXBoX29zZGNfcHV0X3JlcXVlc3QocmVxKTsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTgzNywxMCArOTMxLDggQEAKIAliaW9fY2hhaW5fcHV0KHJlcV9kYXRhLT5iaW8pOwogCWNlcGhfb3NkY19wdXRfcmVxdWVzdChyZXEpOwogZG9uZV9wYWdlczoKKwlyYmRfY29sbF9lbmRfcmVxKHJlcV9kYXRhLCByZXQsIGxlbik7CiAJa2ZyZWUocmVxX2RhdGEpOwotZG9uZToKLQlpZiAocnEpCi0JCWJsa19lbmRfcmVxdWVzdChycSwgcmV0LCBsZW4pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTg3NCw3ICs5NjYsNyBAQAogCQlieXRlcyA9IHJlcV9kYXRhLT5sZW47CiAJfQogCi0JYmxrX2VuZF9yZXF1ZXN0KHJlcV9kYXRhLT5ycSwgcmMsIGJ5dGVzKTsKKwlyYmRfY29sbF9lbmRfcmVxKHJlcV9kYXRhLCByYywgYnl0ZXMpOwogCiAJaWYgKHJlcV9kYXRhLT5iaW8pCiAJCWJpb19jaGFpbl9wdXQocmVxX2RhdGEtPmJpbyk7CkBAIC05MzQsNiArMTAyNiw3IEBACiAJCQkgIGZsYWdzLAogCQkJICBvcHMsCiAJCQkgIDIsCisJCQkgIE5VTEwsIDAsCiAJCQkgIE5VTEwsCiAJCQkgIGxpbmdlcl9yZXEsIHZlcik7CiAJaWYgKHJldCA8IDApCkBAIC05NTksNyArMTA1Miw5IEBACiAJCSAgICAgdTY0IHNuYXBpZCwKIAkJICAgICBpbnQgb3Bjb2RlLCBpbnQgZmxhZ3MsIGludCBudW1fcmVwbHksCiAJCSAgICAgdTY0IG9mcywgdTY0IGxlbiwKLQkJICAgICBzdHJ1Y3QgYmlvICpiaW8pCisJCSAgICAgc3RydWN0IGJpbyAqYmlvLAorCQkgICAgIHN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwsCisJCSAgICAgaW50IGNvbGxfaW5kZXgpCiB7CiAJY2hhciAqc2VnX25hbWU7CiAJdTY0IHNlZ19vZnM7CkBAIC05OTUsNyArMTA5MCwxMCBAQAogCQkJICAgICBmbGFncywKIAkJCSAgICAgb3BzLAogCQkJICAgICBudW1fcmVwbHksCisJCQkgICAgIGNvbGwsIGNvbGxfaW5kZXgsCiAJCQkgICAgIHJiZF9yZXFfY2IsIDAsIE5VTEwpOworCisJcmJkX2Rlc3Ryb3lfb3BzKG9wcyk7CiBkb25lOgogCWtmcmVlKHNlZ19uYW1lKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTAwOCwxMyArMTEwNiwxNSBAQAogCQkJIHN0cnVjdCByYmRfZGV2aWNlICpyYmRfZGV2LAogCQkJIHN0cnVjdCBjZXBoX3NuYXBfY29udGV4dCAqc25hcGMsCiAJCQkgdTY0IG9mcywgdTY0IGxlbiwKLQkJCSBzdHJ1Y3QgYmlvICpiaW8pCisJCQkgc3RydWN0IGJpbyAqYmlvLAorCQkJIHN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwsCisJCQkgaW50IGNvbGxfaW5kZXgpCiB7CiAJcmV0dXJuIHJiZF9kb19vcChycSwgcmJkX2Rldiwgc25hcGMsIENFUEhfTk9TTkFQLAogCQkJIENFUEhfT1NEX09QX1dSSVRFLAogCQkJIENFUEhfT1NEX0ZMQUdfV1JJVEUgfCBDRVBIX09TRF9GTEFHX09ORElTSywKIAkJCSAyLAotCQkJIG9mcywgbGVuLCBiaW8pOworCQkJIG9mcywgbGVuLCBiaW8sIGNvbGwsIGNvbGxfaW5kZXgpOwogfQogCiAvKgpAQCAtMTAyNCwxNCArMTEyNCwxNiBAQAogCQkJIHN0cnVjdCByYmRfZGV2aWNlICpyYmRfZGV2LAogCQkJIHU2NCBzbmFwaWQsCiAJCQkgdTY0IG9mcywgdTY0IGxlbiwKLQkJCSBzdHJ1Y3QgYmlvICpiaW8pCisJCQkgc3RydWN0IGJpbyAqYmlvLAorCQkJIHN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwsCisJCQkgaW50IGNvbGxfaW5kZXgpCiB7CiAJcmV0dXJuIHJiZF9kb19vcChycSwgcmJkX2RldiwgTlVMTCwKIAkJCSAoc25hcGlkID8gc25hcGlkIDogQ0VQSF9OT1NOQVApLAogCQkJIENFUEhfT1NEX09QX1JFQUQsCiAJCQkgQ0VQSF9PU0RfRkxBR19SRUFELAogCQkJIDIsCi0JCQkgb2ZzLCBsZW4sIGJpbyk7CisJCQkgb2ZzLCBsZW4sIGJpbywgY29sbCwgY29sbF9pbmRleCk7CiB9CiAKIC8qCkBAIC0xMDYzLDcgKzExNjUsOSBAQAogewogCXN0cnVjdCBjZXBoX29zZF9yZXFfb3AgKm9wczsKIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzID0gTlVMTDsKLQlpbnQgcmV0ID0gcmJkX2NyZWF0ZV9yd19vcHMoJm9wcywgMSwgQ0VQSF9PU0RfT1BfTk9USUZZX0FDSywgMCk7CisJaW50IHJldDsKKworCXJldCA9IHJiZF9jcmVhdGVfcndfb3BzKCZvcHMsIDEsIENFUEhfT1NEX09QX05PVElGWV9BQ0ssIDApOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xMDc3LDYgKzExODEsNyBAQAogCQkJICBDRVBIX09TRF9GTEFHX1JFQUQsCiAJCQkgIG9wcywKIAkJCSAgMSwKKwkJCSAgTlVMTCwgMCwKIAkJCSAgcmJkX3NpbXBsZV9yZXFfY2IsIDAsIE5VTEwpOwogCiAJcmJkX2Rlc3Ryb3lfb3BzKG9wcyk7CkBAIC0xMjc0LDYgKzEzNzksMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3RydWN0IHJiZF9yZXFfY29sbCAqcmJkX2FsbG9jX2NvbGwoaW50IG51bV9yZXFzKQoreworCXN0cnVjdCByYmRfcmVxX2NvbGwgKmNvbGwgPQorCQkJa3phbGxvYyhzaXplb2Yoc3RydWN0IHJiZF9yZXFfY29sbCkgKworCQkJICAgICAgICBzaXplb2Yoc3RydWN0IHJiZF9yZXFfc3RhdHVzKSAqIG51bV9yZXFzLAorCQkJCUdGUF9BVE9NSUMpOworCisJaWYgKCFjb2xsKQorCQlyZXR1cm4gTlVMTDsKKwljb2xsLT50b3RhbCA9IG51bV9yZXFzOworCWtyZWZfaW5pdCgmY29sbC0+a3JlZik7CisJcmV0dXJuIGNvbGw7Cit9CisKIC8qCiAgKiBibG9jayBkZXZpY2UgcXVldWUgY2FsbGJhY2sKICAqLwpAQCAtMTI5MSw2ICsxNDEwLDggQEAKIAkJYm9vbCBkb193cml0ZTsKIAkJaW50IHNpemUsIG9wX3NpemUgPSAwOwogCQl1NjQgb2ZzOworCQlpbnQgbnVtX3NlZ3MsIGN1cl9zZWcgPSAwOworCQlzdHJ1Y3QgcmJkX3JlcV9jb2xsICpjb2xsOwogCiAJCS8qIHBlZWsgYXQgcmVxdWVzdCBmcm9tIGJsb2NrIGxheWVyICovCiAJCWlmICghcnEpCkBAIC0xMzIxLDYgKzE0NDIsMTQgQEAKIAkJICAgICBkb193cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIsCiAJCSAgICAgc2l6ZSwgYmxrX3JxX3BvcyhycSkgKiA1MTJVTEwpOwogCisJCW51bV9zZWdzID0gcmJkX2dldF9udW1fc2VnbWVudHMoJnJiZF9kZXYtPmhlYWRlciwgb2ZzLCBzaXplKTsKKwkJY29sbCA9IHJiZF9hbGxvY19jb2xsKG51bV9zZWdzKTsKKwkJaWYgKCFjb2xsKSB7CisJCQlzcGluX2xvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOworCQkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJxLCAtRU5PTUVNKTsKKwkJCWdvdG8gbmV4dDsKKwkJfQorCiAJCWRvIHsKIAkJCS8qIGEgYmlvIGNsb25lIHRvIGJlIHBhc3NlZCBkb3duIHRvIE9TRCByZXEgKi8KIAkJCWRvdXQoInJxLT5iaW8tPmJpX3ZjbnQ9JWRcbiIsIHJxLT5iaW8tPmJpX3ZjbnQpOwpAQCAtMTMyOCwzNSArMTQ1Nyw0MSBAQAogCQkJCQkJICByYmRfZGV2LT5oZWFkZXIuYmxvY2tfbmFtZSwKIAkJCQkJCSAgb2ZzLCBzaXplLAogCQkJCQkJICBOVUxMLCBOVUxMKTsKKwkJCWtyZWZfZ2V0KCZjb2xsLT5rcmVmKTsKIAkJCWJpbyA9IGJpb19jaGFpbl9jbG9uZSgmcnFfYmlvLCAmbmV4dF9iaW8sICZicCwKIAkJCQkJICAgICAgb3Bfc2l6ZSwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoIWJpbykgewotCQkJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7Ci0JCQkJX19ibGtfZW5kX3JlcXVlc3RfYWxsKHJxLCAtRU5PTUVNKTsKLQkJCQlnb3RvIG5leHQ7CisJCQkJcmJkX2NvbGxfZW5kX3JlcV9pbmRleChycSwgY29sbCwgY3VyX3NlZywKKwkJCQkJCSAgICAgICAtRU5PTUVNLCBvcF9zaXplKTsKKwkJCQlnb3RvIG5leHRfc2VnOwogCQkJfQogCisKIAkJCS8qIGluaXQgT1NEIGNvbW1hbmQ6IHdyaXRlIG9yIHJlYWQgKi8KIAkJCWlmIChkb193cml0ZSkKIAkJCQlyYmRfcmVxX3dyaXRlKHJxLCByYmRfZGV2LAogCQkJCQkgICAgICByYmRfZGV2LT5oZWFkZXIuc25hcGMsCiAJCQkJCSAgICAgIG9mcywKLQkJCQkJICAgICAgb3Bfc2l6ZSwgYmlvKTsKKwkJCQkJICAgICAgb3Bfc2l6ZSwgYmlvLAorCQkJCQkgICAgICBjb2xsLCBjdXJfc2VnKTsKIAkJCWVsc2UKIAkJCQlyYmRfcmVxX3JlYWQocnEsIHJiZF9kZXYsCiAJCQkJCSAgICAgY3VyX3NuYXBfaWQocmJkX2RldiksCiAJCQkJCSAgICAgb2ZzLAotCQkJCQkgICAgIG9wX3NpemUsIGJpbyk7CisJCQkJCSAgICAgb3Bfc2l6ZSwgYmlvLAorCQkJCQkgICAgIGNvbGwsIGN1cl9zZWcpOwogCituZXh0X3NlZzoKIAkJCXNpemUgLT0gb3Bfc2l6ZTsKIAkJCW9mcyArPSBvcF9zaXplOwogCisJCQljdXJfc2VnKys7CiAJCQlycV9iaW8gPSBuZXh0X2JpbzsKIAkJfSB3aGlsZSAoc2l6ZSA+IDApOworCQlrcmVmX3B1dCgmY29sbC0+a3JlZiwgcmJkX2NvbGxfcmVsZWFzZSk7CiAKIAkJaWYgKGJwKQogCQkJYmlvX3BhaXJfcmVsZWFzZShicCk7Ci0KIAkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIG5leHQ6CiAJCXJxID0gYmxrX2ZldGNoX3JlcXVlc3QocSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0uYyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCmluZGV4IDI0YTQ4MmYuLmZkNWFkY2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbS5jCkBAIC04NTgsNyArODU4LDYgQEAKIAkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5maXJzdF9taW5vciA9IGRyaXZlOwogCQlzcHJpbnRmKHN3ZC0+dW5pdFtkcml2ZV0uZGlzay0+ZGlza19uYW1lLCAiZmQlZCIsIGRyaXZlKTsKIAkJc3dkLT51bml0W2RyaXZlXS5kaXNrLT5mb3BzID0gJmZsb3BweV9mb3BzOwotCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPnByaXZhdGVfZGF0YSA9ICZzd2QtPnVuaXRbZHJpdmVdOwogCQlzd2QtPnVuaXRbZHJpdmVdLmRpc2stPnF1ZXVlID0gc3dkLT5xdWV1ZTsKIAkJc2V0X2NhcGFjaXR5KHN3ZC0+dW5pdFtkcml2ZV0uZGlzaywgMjg4MCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKaW5kZXggNGMxMGY1Ni4uNzczYmZhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9zd2ltMy5jCisrKyBiL2RyaXZlcnMvYmxvY2svc3dpbTMuYwpAQCAtMTE2Myw3ICsxMTYzLDYgQEAKIAlkaXNrLT5tYWpvciA9IEZMT1BQWV9NQUpPUjsKIAlkaXNrLT5maXJzdF9taW5vciA9IGk7CiAJZGlzay0+Zm9wcyA9ICZmbG9wcHlfZm9wczsKLQlkaXNrLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlkaXNrLT5wcml2YXRlX2RhdGEgPSAmZmxvcHB5X3N0YXRlc1tpXTsKIAlkaXNrLT5xdWV1ZSA9IHN3aW0zX3F1ZXVlOwogCWRpc2stPmZsYWdzIHw9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWIuYyBiL2RyaXZlcnMvYmxvY2svdWIuYwppbmRleCA2OGI5NDMwLi4wZTM3NmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ViLmMKKysrIGIvZHJpdmVycy9ibG9jay91Yi5jCkBAIC0yMzM0LDcgKzIzMzQsNiBAQAogCWRpc2stPm1ham9yID0gVUJfTUFKT1I7CiAJZGlzay0+Zmlyc3RfbWlub3IgPSBsdW4tPmlkICogVUJfUEFSVFNfUEVSX0xVTjsKIAlkaXNrLT5mb3BzID0gJnViX2JkX2ZvcHM7Ci0JZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJZGlzay0+cHJpdmF0ZV9kYXRhID0gbHVuOwogCWRpc2stPmRyaXZlcmZzX2RldiA9ICZzYy0+aW50Zi0+ZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3hzeXNhY2UuYyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCmluZGV4IDY0NWZmNzYuLjZjN2ZkN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCisrKyBiL2RyaXZlcnMvYmxvY2sveHN5c2FjZS5jCkBAIC0xMDA1LDcgKzEwMDUsNiBAQAogCWFjZS0+Z2QtPm1ham9yID0gYWNlX21ham9yOwogCWFjZS0+Z2QtPmZpcnN0X21pbm9yID0gYWNlLT5pZCAqIEFDRV9OVU1fTUlOT1JTOwogCWFjZS0+Z2QtPmZvcHMgPSAmYWNlX2ZvcHM7Ci0JYWNlLT5nZC0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJYWNlLT5nZC0+cXVldWUgPSBhY2UtPnF1ZXVlOwogCWFjZS0+Z2QtPnByaXZhdGVfZGF0YSA9IGFjZTsKIAlzbnByaW50ZihhY2UtPmdkLT5kaXNrX25hbWUsIDMyLCAieHMlYyIsIGFjZS0+aWQgKyAnYScpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IDUxNGRkOGUuLjc1ZmI5NjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTk4Niw2ICs5ODYsOSBAQAogCiAJY2RpbmZvKENEX09QRU4sICJlbnRlcmluZyBjZHJvbV9vcGVuXG4iKTsgCiAKKwkvKiBvcGVuIGlzIGV2ZW50IHN5bmNocm9uaXphdGlvbiBwb2ludCwgY2hlY2sgZXZlbnRzIGZpcnN0ICovCisJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7CisKIAkvKiBpZiB0aGlzIHdhcyBhIE9fTk9OQkxPQ0sgb3BlbiBhbmQgd2Ugc2hvdWxkIGhvbm9yIHRoZSBmbGFncywKIAkgKiBkbyBhIHF1aWNrIG9wZW4gd2l0aG91dCBkcml2ZS9kaXNjIGludGVncml0eSBjaGVja3MuICovCiAJY2RpLT51c2VfY291bnQrKzsKQEAgLTEwMTIsOSArMTAxNSw2IEBACiAKIAljZGluZm8oQ0RfT1BFTiwgIlVzZSBjb3VudCBmb3IgXCIvZGV2LyVzXCIgbm93ICVkXG4iLAogCQkJY2RpLT5uYW1lLCBjZGktPnVzZV9jb3VudCk7Ci0JLyogRG8gdGhpcyBvbiBvcGVuLiAgRG9uJ3Qgd2FpdCBmb3IgbW91bnQsIGJlY2F1c2UgdGhleSBtaWdodAotCSAgICBub3QgYmUgbW91bnRpbmcsIGJ1dCBvcGVuaW5nIHdpdGggT19OT05CTE9DSyAqLwotCWNoZWNrX2Rpc2tfY2hhbmdlKGJkZXYpOwogCXJldHVybiAwOwogZXJyX3JlbGVhc2U6CiAJaWYgKENEUk9NX0NBTihDRENfTE9DSykgJiYgY2RpLT5vcHRpb25zICYgQ0RPX0xPQ0spIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYyBiL2RyaXZlcnMvY2Ryb20vZ2Ryb20uYwppbmRleCBiMmIwMzRmLi4zY2VhZjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2dkcm9tLmMKKysrIGIvZHJpdmVycy9jZHJvbS9nZHJvbS5jCkBAIC04MDMsNyArODAzLDYgQEAKIAkJZ290byBwcm9iZV9mYWlsX2Nkcm9tX3JlZ2lzdGVyOwogCX0KIAlnZC5kaXNrLT5mb3BzID0gJmdkcm9tX2Jkb3BzOwotCWdkLmRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCS8qIGxhdGNoIG9uIHRvIHRoZSBpbnRlcnJ1cHQgKi8KIAllcnIgPSBnZHJvbV9zZXRfaW50ZXJydXB0X2hhbmRsZXJzKCk7CiAJaWYgKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vdmlvY2QuYyBiL2RyaXZlcnMvY2Ryb20vdmlvY2QuYwppbmRleCA0ZTg3NGM1Li5lNDI3ZmJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL3Zpb2NkLmMKKysrIGIvZHJpdmVycy9jZHJvbS92aW9jZC5jCkBAIC02MjYsNyArNjI2LDYgQEAKIAlnZW5kaXNrLT5xdWV1ZSA9IHE7CiAJZ2VuZGlzay0+Zm9wcyA9ICZ2aW9jZF9mb3BzOwogCWdlbmRpc2stPmZsYWdzID0gR0VOSERfRkxfQ0R8R0VOSERfRkxfUkVNT1ZBQkxFOwotCWdlbmRpc2stPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCXNldF9jYXBhY2l0eShnZW5kaXNrLCAwKTsKIAlnZW5kaXNrLT5wcml2YXRlX2RhdGEgPSBkOwogCWQtPnZpb2NkX2Rpc2sgPSBnZW5kaXNrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2FncC9nZW5lcmljLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwppbmRleCAwMTJjYmEwLi5iMDcyNjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2NoYXIvYWdwL2dlbmVyaWMuYwpAQCAtMTE1LDYgKzExNSw5IEBACiAJc3RydWN0IGFncF9tZW1vcnkgKm5ldzsKIAl1bnNpZ25lZCBsb25nIGFsbG9jX3NpemUgPSBudW1fYWdwX3BhZ2VzKnNpemVvZihzdHJ1Y3QgcGFnZSAqKTsKIAorCWlmIChJTlRfTUFYL3NpemVvZihzdHJ1Y3QgcGFnZSAqKSA8IG51bV9hZ3BfcGFnZXMpCisJCXJldHVybiBOVUxMOworCiAJbmV3ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFncF9tZW1vcnkpLCBHRlBfS0VSTkVMKTsKIAlpZiAobmV3ID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtMjM0LDExICsyMzcsMTQgQEAKIAlpbnQgc2NyYXRjaF9wYWdlczsKIAlzdHJ1Y3QgYWdwX21lbW9yeSAqbmV3OwogCXNpemVfdCBpOworCWludCBjdXJfbWVtb3J5OwogCiAJaWYgKCFicmlkZ2UpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKChhdG9taWNfcmVhZCgmYnJpZGdlLT5jdXJyZW50X21lbW9yeV9hZ3ApICsgcGFnZV9jb3VudCkgPiBicmlkZ2UtPm1heF9tZW1vcnlfYWdwKQorCWN1cl9tZW1vcnkgPSBhdG9taWNfcmVhZCgmYnJpZGdlLT5jdXJyZW50X21lbW9yeV9hZ3ApOworCWlmICgoY3VyX21lbW9yeSArIHBhZ2VfY291bnQgPiBicmlkZ2UtPm1heF9tZW1vcnlfYWdwKSB8fAorCSAgICAoY3VyX21lbW9yeSArIHBhZ2VfY291bnQgPCBwYWdlX2NvdW50KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAodHlwZSA+PSBBR1BfVVNFUl9UWVBFUykgewpAQCAtMTA4OSw4ICsxMDk1LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogQUs6IGNvdWxkIHdyYXAgKi8KLQlpZiAoKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KSA+IG51bV9lbnRyaWVzKQorCWlmICgoKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KSA+IG51bV9lbnRyaWVzKSB8fAorCSAgICAoKHBnX3N0YXJ0ICsgbWVtLT5wYWdlX2NvdW50KSA8IHBnX3N0YXJ0KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlqID0gcGdfc3RhcnQ7CkBAIC0xMTI0LDcgKzExMzAsNyBAQAogewogCXNpemVfdCBpOwogCXN0cnVjdCBhZ3BfYnJpZGdlX2RhdGEgKmJyaWRnZTsKLQlpbnQgbWFza190eXBlOworCWludCBtYXNrX3R5cGUsIG51bV9lbnRyaWVzOwogCiAJYnJpZGdlID0gbWVtLT5icmlkZ2U7CiAJaWYgKCFicmlkZ2UpCkBAIC0xMTM2LDYgKzExNDIsMTEgQEAKIAlpZiAodHlwZSAhPSBtZW0tPnR5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCisJbnVtX2VudHJpZXMgPSBhZ3BfbnVtX2VudHJpZXMoKTsKKwlpZiAoKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPiBudW1fZW50cmllcykgfHwKKwkgICAgKChwZ19zdGFydCArIG1lbS0+cGFnZV9jb3VudCkgPCBwZ19zdGFydCkpCisJCXJldHVybiAtRUlOVkFMOworCiAJbWFza190eXBlID0gYnJpZGdlLT5kcml2ZXItPmFncF90eXBlX3RvX21hc2tfdHlwZShicmlkZ2UsIHR5cGUpOwogCWlmIChtYXNrX3R5cGUgIT0gMCkgewogCQkvKiBUaGUgZ2VuZXJpYyByb3V0aW5lcyBrbm93IG5vdGhpbmcgb2YgbWVtb3J5IHR5cGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHBldC5jIGIvZHJpdmVycy9jaGFyL2hwZXQuYwppbmRleCA3MDY2ZTgwLi4wNTE0NzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHBldC5jCisrKyBiL2RyaXZlcnMvY2hhci9ocGV0LmMKQEAgLTg0LDggKzg0LDYgQEAKIAkucmF0aW5nCQk9IDI1MCwKIAkucmVhZAkJPSByZWFkX2hwZXQsCiAJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSyg2NCksCi0JLm11bHQJCT0gMCwJCS8qIHRvIGJlIGNhbGN1bGF0ZWQgKi8KLQkuc2hpZnQJCT0gMTAsCiAJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAogfTsKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tzb3VyY2UgKmhwZXRfY2xvY2tzb3VyY2U7CkBAIC05MzQsOSArOTMyLDcgQEAKIAlpZiAoIWhwZXRfY2xvY2tzb3VyY2UpIHsKIAkJaHBldF9tY3RyID0gKHZvaWQgX19pb21lbSAqKSZocGV0cC0+aHBfaHBldC0+aHBldF9tYzsKIAkJQ0xLU1JDX0ZTWVNfTU1JT19TRVQoY2xvY2tzb3VyY2VfaHBldC5mc3lzX21taW8sIGhwZXRfbWN0cik7Ci0JCWNsb2Nrc291cmNlX2hwZXQubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoaHBldHAtPmhwX3RpY2tfZnJlcSwKLQkJCQkJCWNsb2Nrc291cmNlX2hwZXQuc2hpZnQpOwotCQljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfaHBldCk7CisJCWNsb2Nrc291cmNlX3JlZ2lzdGVyX2h6KCZjbG9ja3NvdXJjZV9ocGV0LCBocGV0cC0+aHBfdGlja19mcmVxKTsKIAkJaHBldHAtPmhwX2Nsb2Nrc291cmNlID0gJmNsb2Nrc291cmNlX2hwZXQ7CiAJCWhwZXRfY2xvY2tzb3VyY2UgPSAmY2xvY2tzb3VyY2VfaHBldDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24yLWRydi5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1kcnYuYwppbmRleCA0M2FjNjE5Li5hYzY3MzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24yLWRydi5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vbjItZHJ2LmMKQEAgLTYxOSwxNSArNjE5LDE4IEBACiAJCXByX2luZm8oIiVzIiwgdmVyc2lvbik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG4ycm5nX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBuMnJuZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlpbnQgdmljdG9yaWFfZmFsbHM7CiAJaW50IGVyciA9IC1FTk9NRU07CiAJc3RydWN0IG4ycm5nICpucDsKIAotCWlmICghb3AtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShuMnJuZ19tYXRjaCwgJm9wLT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXZpY3RvcmlhX2ZhbGxzID0gKG9wLT5kZXYub2ZfbWF0Y2gtPmRhdGEgIT0gTlVMTCk7CisJdmljdG9yaWFfZmFsbHMgPSAobWF0Y2gtPmRhdGEgIT0gTlVMTCk7CiAKIAluMnJuZ19kcml2ZXJfdmVyc2lvbigpOwogCW5wID0ga3phbGxvYyhzaXplb2YoKm5wKSwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX3NpX2ludGYuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCmluZGV4IGNjNmM5YjIuLjY0YzZiODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jCkBAIC0yNTU0LDkgKzI1NTQsMTEgQEAKIH07CiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBpcG1pX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpcG1pX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBDT05GSUdfT0YKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3Qgc21pX2luZm8gKmluZm87CiAJc3RydWN0IHJlc291cmNlIHJlc291cmNlOwogCWNvbnN0IF9fYmUzMiAqcmVnc2l6ZSwgKnJlZ3NwYWNpbmcsICpyZWdzaGlmdDsKQEAgLTI1NjYsNyArMjU2OCw4IEBACiAKIAlkZXZfaW5mbygmZGV2LT5kZXYsICJwcm9iaW5nIHZpYSBkZXZpY2UgdHJlZVxuIik7CiAKLQlpZiAoIWRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKGlwbWlfbWF0Y2gsICZkZXYtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzb3VyY2UpOwpAQCAtMjYwMSw3ICsyNjA0LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaW5mby0+c2lfdHlwZQkJPSAoZW51bSBzaV90eXBlKSBkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlpbmZvLT5zaV90eXBlCQk9IChlbnVtIHNpX3R5cGUpIG1hdGNoLT5kYXRhOwogCWluZm8tPmFkZHJfc291cmNlCT0gU0lfREVWSUNFVFJFRTsKIAlpbmZvLT5pcnFfc2V0dXAJCT0gc3RkX2lycV9zZXR1cDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwppbmRleCA4NGIxNjRkLi44Mzg1NjhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYworKysgYi9kcml2ZXJzL2NoYXIvdmlydGlvX2NvbnNvbGUuYwpAQCAtMTI4MCwxOCArMTI4MCw3IEBACiAJCXNwaW5fbG9ja19pcnEoJnBkcnZkYXRhX2xvY2spOwogCQlsaXN0X2RlbCgmcG9ydC0+Y29ucy5saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZwZHJ2ZGF0YV9sb2NrKTsKLSNpZiAwCi0JCS8qCi0JCSAqIGh2Y19yZW1vdmUoKSBub3QgY2FsbGVkIGFzIHJlbW92aW5nIG9uZSBodmMgcG9ydAotCQkgKiByZXN1bHRzIGluIG90aGVyIGh2YyBwb3J0cyBnZXR0aW5nIGZyb3plbi4KLQkJICoKLQkJICogT25jZSB0aGlzIGlzIHJlc29sdmVkIGluIGh2YywgdGhpcyBmdW5jdGlvbmFsaXR5Ci0JCSAqIHdpbGwgYmUgZW5hYmxlZC4gIFRpbGwgdGhhdCBpcyBkb25lLCB0aGUgLUVQSVBFCi0JCSAqIHJldHVybiBmcm9tIGdldF9jaGFycygpIGFib3ZlIHdpbGwgaGVscAotCQkgKiBodmNfY29uc29sZS5jIHRvIGNsZWFuIHVwIG9uIHBvcnRzIHdlIHJlbW92ZSBoZXJlLgotCQkgKi8KIAkJaHZjX3JlbW92ZShwb3J0LT5jb25zLmh2Yyk7Ci0jZW5kaWYKIAl9CiAKIAkvKiBSZW1vdmUgdW51c2VkIGRhdGEgdGhpcyBwb3J0IG1pZ2h0IGhhdmUgcmVjZWl2ZWQuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMgYi9kcml2ZXJzL2NoYXIveGlsaW54X2h3aWNhcC94aWxpbnhfaHdpY2FwLmMKaW5kZXggZDY0MTJjMS4uMzljY2RlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3hpbGlueF9od2ljYXAveGlsaW54X2h3aWNhcC5jCisrKyBiL2RyaXZlcnMvY2hhci94aWxpbnhfaHdpY2FwL3hpbGlueF9od2ljYXAuYwpAQCAtNzE1LDEzICs3MTUsMTMgQEAKIH0KIAogI2lmZGVmIENPTkZJR19PRgotc3RhdGljIGludCBfX2RldmluaXQgaHdpY2FwX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQorc3RhdGljIGludCBfX2RldmluaXQgaHdpY2FwX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wLAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGh3aWNhcF9kcml2ZXJfY29uZmlnICpjb25maWcpCiB7CiAJc3RydWN0IHJlc291cmNlIHJlczsKIAljb25zdCB1bnNpZ25lZCBpbnQgKmlkOwogCWNvbnN0IGNoYXIgKmZhbWlseTsKIAlpbnQgcmM7Ci0JY29uc3Qgc3RydWN0IGh3aWNhcF9kcml2ZXJfY29uZmlnICpjb25maWcgPSBvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhOwogCWNvbnN0IHN0cnVjdCBjb25maWdfcmVnaXN0ZXJzICpyZWdzOwogCiAKQEAgLTc1MSwyMCArNzUxLDI0IEBACiAJCQlyZWdzKTsKIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBod2ljYXBfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3ApCitzdGF0aWMgaW5saW5lIGludCBod2ljYXBfb2ZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb3AsCisJCQkJICBjb25zdCBzdHJ1Y3QgaHdpY2FwX2RyaXZlcl9jb25maWcgKmNvbmZpZykKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KICNlbmRpZiAvKiBDT05GSUdfT0YgKi8KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgX19kZXZpbml0Y29uc3QgaHdpY2FwX29mX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBod2ljYXBfZHJ2X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJY29uc3Qgc3RydWN0IGNvbmZpZ19yZWdpc3RlcnMgKnJlZ3M7CiAJY29uc3QgY2hhciAqZmFtaWx5OwogCi0JaWYgKHBkZXYtPmRldi5vZl9tYXRjaCkKLQkJcmV0dXJuIGh3aWNhcF9vZl9wcm9iZShwZGV2KTsKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShod2ljYXBfb2ZfbWF0Y2gsICZwZGV2LT5kZXYpOworCWlmIChtYXRjaCkKKwkJcmV0dXJuIGh3aWNhcF9vZl9wcm9iZShwZGV2LCBtYXRjaC0+ZGF0YSk7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmICghcmVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbGsvY2xrZGV2LmMgYi9kcml2ZXJzL2Nsay9jbGtkZXYuYwppbmRleCAwZmMwYTc5Li42ZGIxNjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nsay9jbGtkZXYuYworKysgYi9kcml2ZXJzL2Nsay9jbGtkZXYuYwpAQCAtMzIsMTAgKzMyLDkgQEAKICAqIFRoZW4gd2UgdGFrZSB0aGUgbW9zdCBzcGVjaWZpYyBlbnRyeSAtIHdpdGggdGhlIGZvbGxvd2luZwogICogb3JkZXIgb2YgcHJlY2VkZW5jZTogZGV2K2NvbiA+IGRldiBvbmx5ID4gY29uIG9ubHkuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfZmluZChjb25zdCBjaGFyICpkZXZfaWQsIGNvbnN0IGNoYXIgKmNvbl9pZCkKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCAqY2xrX2ZpbmQoY29uc3QgY2hhciAqZGV2X2lkLCBjb25zdCBjaGFyICpjb25faWQpCiB7Ci0Jc3RydWN0IGNsa19sb29rdXAgKnA7Ci0Jc3RydWN0IGNsayAqY2xrID0gTlVMTDsKKwlzdHJ1Y3QgY2xrX2xvb2t1cCAqcCwgKmNsID0gTlVMTDsKIAlpbnQgbWF0Y2gsIGJlc3QgPSAwOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBub2RlKSB7CkBAIC01MiwyNyArNTEsMjcgQEAKIAkJfQogCiAJCWlmIChtYXRjaCA+IGJlc3QpIHsKLQkJCWNsayA9IHAtPmNsazsKKwkJCWNsID0gcDsKIAkJCWlmIChtYXRjaCAhPSAzKQogCQkJCWJlc3QgPSBtYXRjaDsKIAkJCWVsc2UKIAkJCQlicmVhazsKIAkJfQogCX0KLQlyZXR1cm4gY2xrOworCXJldHVybiBjbDsKIH0KIAogc3RydWN0IGNsayAqY2xrX2dldF9zeXMoY29uc3QgY2hhciAqZGV2X2lkLCBjb25zdCBjaGFyICpjb25faWQpCiB7Ci0Jc3RydWN0IGNsayAqY2xrOworCXN0cnVjdCBjbGtfbG9va3VwICpjbDsKIAogCW11dGV4X2xvY2soJmNsb2Nrc19tdXRleCk7Ci0JY2xrID0gY2xrX2ZpbmQoZGV2X2lkLCBjb25faWQpOwotCWlmIChjbGsgJiYgIV9fY2xrX2dldChjbGspKQotCQljbGsgPSBOVUxMOworCWNsID0gY2xrX2ZpbmQoZGV2X2lkLCBjb25faWQpOworCWlmIChjbCAmJiAhX19jbGtfZ2V0KGNsLT5jbGspKQorCQljbCA9IE5VTEw7CiAJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOwogCi0JcmV0dXJuIGNsayA/IGNsayA6IEVSUl9QVFIoLUVOT0VOVCk7CisJcmV0dXJuIGNsID8gY2wtPmNsayA6IEVSUl9QVFIoLUVOT0VOVCk7CiB9CiBFWFBPUlRfU1lNQk9MKGNsa19nZXRfc3lzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMGFlZWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcKQEAgLTAsMCArMSwyIEBACitjb25maWcgQ0xLU1JDX0k4MjUzCisJYm9vbApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZSBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvTWFrZWZpbGUKaW5kZXggYmU2MWVjZS4uY2ZiNjM4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL01ha2VmaWxlCkBAIC02LDMgKzYsNCBAQAogb2JqLSQoQ09ORklHX1NIX1RJTUVSX0NNVCkJKz0gc2hfY210Lm8KIG9iai0kKENPTkZJR19TSF9USU1FUl9NVFUyKQkrPSBzaF9tdHUyLm8KIG9iai0kKENPTkZJR19TSF9USU1FUl9UTVUpCSs9IHNoX3RtdS5vCitvYmotJChDT05GSUdfQ0xLU1JDX0k4MjUzKQkrPSBpODI1My5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL2N5Y2xvbmUuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvY3ljbG9uZS5jCmluZGV4IDY0ZTUyOGUuLjcyZjgxMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvY3ljbG9uZS5jCisrKyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvY3ljbG9uZS5jCkBAIC0yOSw4ICsyOSw2IEBACiAJLnJhdGluZwkJPSAyNTAsCiAJLnJlYWQJCT0gcmVhZF9jeWNsb25lLAogCS5tYXNrCQk9IENZQ0xPTkVfVElNRVJfTUFTSywKLQkubXVsdAkJPSAxMCwKLQkuc2hpZnQJCT0gMCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCiB9OwogCkBAIC0xMDgsMTIgKzEwNiw4IEBACiAJfQogCWN5Y2xvbmVfcHRyID0gY3ljbG9uZV90aW1lcjsKIAotCS8qIHNvcnQgb3V0IG11bHQvc2hpZnQgdmFsdWVzOiAqLwotCWNsb2Nrc291cmNlX2N5Y2xvbmUuc2hpZnQgPSAyMjsKLQljbG9ja3NvdXJjZV9jeWNsb25lLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KENZQ0xPTkVfVElNRVJfRlJFUSwKLQkJCQkJCWNsb2Nrc291cmNlX2N5Y2xvbmUuc2hpZnQpOwotCi0JcmV0dXJuIGNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9jeWNsb25lKTsKKwlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmNsb2Nrc291cmNlX2N5Y2xvbmUsCisJCQkJCUNZQ0xPTkVfVElNRVJfRlJFUSk7CiB9CiAKIGFyY2hfaW5pdGNhbGwoaW5pdF9jeWNsb25lX2Nsb2Nrc291cmNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2xvY2tzb3VyY2UvaTgyNTMuYyBiL2RyaXZlcnMvY2xvY2tzb3VyY2UvaTgyNTMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjVjMTc2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jbG9ja3NvdXJjZS9pODI1My5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBpODI1MyBQSVQgY2xvY2tzb3VyY2UKKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC90aW1leC5oPgorCisjaW5jbHVkZSA8YXNtL2k4MjUzLmg+CisKKy8qCisgKiBTaW5jZSB0aGUgUElUIG92ZXJmbG93cyBldmVyeSB0aWNrLCBpdHMgbm90IHZlcnkgdXNlZnVsCisgKiB0byBqdXN0IHJlYWQgYnkgaXRzZWxmLiBTbyB1c2UgamlmZmllcyB0byBlbXVsYXRlIGEgZnJlZQorICogcnVubmluZyBjb3VudGVyOgorICovCitzdGF0aWMgY3ljbGVfdCBpODI1M19yZWFkKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJc3RhdGljIGludCBvbGRfY291bnQ7CisJc3RhdGljIHUzMiBvbGRfamlmczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjb3VudDsKKwl1MzIgamlmczsKKworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTNfbG9jaywgZmxhZ3MpOworCS8qCisJICogQWx0aG91Z2ggb3VyIGNhbGxlciBtYXkgaGF2ZSB0aGUgcmVhZCBzaWRlIG9mIHh0aW1lX2xvY2ssCisJICogdGhpcyBpcyBub3cgYSBzZXFsb2NrLCBhbmQgd2UgYXJlIGNoZWF0aW5nIGluIHRoaXMgcm91dGluZQorCSAqIGJ5IGhhdmluZyBzaWRlIGVmZmVjdHMgb24gc3RhdGUgdGhhdCB3ZSBjYW5ub3QgdW5kbyBpZgorCSAqIHRoZXJlIGlzIGEgY29sbGlzaW9uIG9uIHRoZSBzZXFsb2NrIGFuZCBvdXIgY2FsbGVyIGhhcyB0bworCSAqIHJldHJ5LiAgKE5hbWVseSwgb2xkX2ppZnMgYW5kIG9sZF9jb3VudC4pICBTbyB3ZSBtdXN0IHRyZWF0CisJICogamlmZmllcyBhcyB2b2xhdGlsZSBkZXNwaXRlIHRoZSBsb2NrLiAgV2UgcmVhZCBqaWZmaWVzCisJICogYmVmb3JlIGxhdGNoaW5nIHRoZSB0aW1lciBjb3VudCB0byBndWFyYW50ZWUgdGhhdCBhbHRob3VnaAorCSAqIHRoZSBqaWZmaWVzIHZhbHVlIG1pZ2h0IGJlIG9sZGVyIHRoYW4gdGhlIGNvdW50ICh0aGF0IGlzLAorCSAqIHRoZSBjb3VudGVyIG1heSB1bmRlcmZsb3cgYmV0d2VlbiB0aGUgbGFzdCBwb2ludCB3aGVyZQorCSAqIGppZmZpZXMgd2FzIGluY3JlbWVudGVkIGFuZCB0aGUgcG9pbnQgd2hlcmUgd2UgbGF0Y2ggdGhlCisJICogY291bnQpLCBpdCBjYW5ub3QgYmUgbmV3ZXIuCisJICovCisJamlmcyA9IGppZmZpZXM7CisJb3V0Yl9waXQoMHgwMCwgUElUX01PREUpOwkvKiBsYXRjaCB0aGUgY291bnQgQVNBUCAqLworCWNvdW50ID0gaW5iX3BpdChQSVRfQ0gwKTsJLyogcmVhZCB0aGUgbGF0Y2hlZCBjb3VudCAqLworCWNvdW50IHw9IGluYl9waXQoUElUX0NIMCkgPDwgODsKKworCS8qIFZJQTY4NmEgdGVzdCBjb2RlLi4uIHJlc2V0IHRoZSBsYXRjaCBpZiBjb3VudCA+IG1heCArIDEgKi8KKwlpZiAoY291bnQgPiBMQVRDSCkgeworCQlvdXRiX3BpdCgweDM0LCBQSVRfTU9ERSk7CisJCW91dGJfcGl0KFBJVF9MQVRDSCAmIDB4ZmYsIFBJVF9DSDApOworCQlvdXRiX3BpdChQSVRfTEFUQ0ggPj4gOCwgUElUX0NIMCk7CisJCWNvdW50ID0gUElUX0xBVENIIC0gMTsKKwl9CisKKwkvKgorCSAqIEl0J3MgcG9zc2libGUgZm9yIGNvdW50IHRvIGFwcGVhciB0byBnbyB0aGUgd3Jvbmcgd2F5IGZvciBhCisJICogY291cGxlIG9mIHJlYXNvbnM6CisJICoKKwkgKiAgMS4gVGhlIHRpbWVyIGNvdW50ZXIgdW5kZXJmbG93cywgYnV0IHdlIGhhdmVuJ3QgaGFuZGxlZCB0aGUKKwkgKiAgICAgcmVzdWx0aW5nIGludGVycnVwdCBhbmQgaW5jcmVtZW50ZWQgamlmZmllcyB5ZXQuCisJICogIDIuIEhhcmR3YXJlIHByb2JsZW0gd2l0aCB0aGUgdGltZXIsIG5vdCBnaXZpbmcgdXMgY29udGludW91cyB0aW1lLAorCSAqICAgICB0aGUgY291bnRlciBkb2VzIHNtYWxsICJqdW1wcyIgdXB3YXJkcyBvbiBzb21lIFBlbnRpdW0gc3lzdGVtcywKKwkgKiAgICAgKHNlZSBjJ3QgOTUvMTAgcGFnZSAzMzUgZm9yIE5lcHR1biBidWcuKQorCSAqCisJICogUHJldmlvdXMgYXR0ZW1wdHMgdG8gaGFuZGxlIHRoZXNlIGNhc2VzIGludGVsbGlnZW50bHkgd2VyZQorCSAqIGJ1Z2d5LCBzbyB3ZSBqdXN0IGRvIHRoZSBzaW1wbGUgdGhpbmcgbm93LgorCSAqLworCWlmIChjb3VudCA+IG9sZF9jb3VudCAmJiBqaWZzID09IG9sZF9qaWZzKQorCQljb3VudCA9IG9sZF9jb3VudDsKKworCW9sZF9jb3VudCA9IGNvdW50OworCW9sZF9qaWZzID0gamlmczsKKworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1M19sb2NrLCBmbGFncyk7CisKKwljb3VudCA9IChQSVRfTEFUQ0ggLSAxKSAtIGNvdW50OworCisJcmV0dXJuIChjeWNsZV90KShqaWZzICogUElUX0xBVENIKSArIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGk4MjUzX2NzID0geworCS5uYW1lCQk9ICJwaXQiLAorCS5yYXRpbmcJCT0gMTEwLAorCS5yZWFkCQk9IGk4MjUzX3JlYWQsCisJLm1hc2sJCT0gQ0xPQ0tTT1VSQ0VfTUFTSygzMiksCit9OworCitpbnQgX19pbml0IGNsb2Nrc291cmNlX2k4MjUzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXJfaHooJmk4MjUzX2NzLCBQSVRfVElDS19SQVRFKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2Nvbm5lY3Rvci5jIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKaW5kZXggZDc3MDA1OC4uMjE5ZDg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY29ubmVjdG9yLmMKQEAgLTE0Miw2ICsxNDIsNyBAQAogCQljYnEtPmNhbGxiYWNrKG1zZywgbnNwKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCWNuX3F1ZXVlX3JlbGVhc2VfY2FsbGJhY2soY2JxKTsKKwkJZXJyID0gMDsKIAl9CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL0tjb25maWcgYi9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZwppbmRleCBjYThlZTgwLi45ZmI4NDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZworKysgYi9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZwpAQCAtMSwzICsxLDUgQEAKK21lbnUgIkNQVSBGcmVxdWVuY3kgc2NhbGluZyIKKwogY29uZmlnIENQVV9GUkVRCiAJYm9vbCAiQ1BVIEZyZXF1ZW5jeSBzY2FsaW5nIgogCWhlbHAKQEAgLTE4LDE5ICsyMCw2IEBACiBjb25maWcgQ1BVX0ZSRVFfVEFCTEUKIAl0cmlzdGF0ZQogCi1jb25maWcgQ1BVX0ZSRVFfREVCVUcKLQlib29sICJFbmFibGUgQ1BVZnJlcSBkZWJ1Z2dpbmciCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgQ1BVZnJlcSBzdWJzeXN0ZW0gKGluY2x1ZGluZyBkcml2ZXJzKQotCSAgZGVidWdnaW5nLiBZb3Ugd2lsbCBuZWVkIHRvIGFjdGl2YXRlIGl0IHZpYSB0aGUga2VybmVsCi0JICBjb21tYW5kIGxpbmUgYnkgcGFzc2luZwotCSAgICAgY3B1ZnJlcS5kZWJ1Zz08dmFsdWU+Ci0KLQkgIFRvIGdldCA8dmFsdWU+LCBhZGQgCi0JICAgICAgIDEgdG8gYWN0aXZhdGUgQ1BVZnJlcSBjb3JlIGRlYnVnZ2luZywKLQkgICAgICAgMiB0byBhY3RpdmF0ZSBDUFVmcmVxIGRyaXZlcnMgZGVidWdnaW5nLCBhbmQKLQkgICAgICAgNCB0byBhY3RpdmF0ZSBDUFVmcmVxIGdvdmVybm9yIGRlYnVnZ2luZwotCiBjb25maWcgQ1BVX0ZSRVFfU1RBVAogCXRyaXN0YXRlICJDUFUgZnJlcXVlbmN5IHRyYW5zbGF0aW9uIHN0YXRpc3RpY3MiCiAJc2VsZWN0IENQVV9GUkVRX1RBQkxFCkBAIC0xOTAsNCArMTc5LDEwIEBACiAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KIAotZW5kaWYJIyBDUFVfRlJFUQorbWVudSAieDg2IENQVSBmcmVxdWVuY3kgc2NhbGluZyBkcml2ZXJzIgorZGVwZW5kcyBvbiBYODYKK3NvdXJjZSAiZHJpdmVycy9jcHVmcmVxL0tjb25maWcueDg2IgorZW5kbWVudQorCitlbmRpZgorZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcgYi9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZy54ODYKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9LY29uZmlnLng4NgppbmRleCA4NzBlNmNjLi43OGZmN2VlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZworKysgYi9kcml2ZXJzL2NwdWZyZXEvS2NvbmZpZy54ODYKQEAgLTEsMTUgKzEsNyBAQAogIwotIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMgeDg2IENQVSBGcmVxdWVuY3kgc2NhbGluZyBkcml2ZXJzCiAjCiAKLW1lbnUgIkNQVSBGcmVxdWVuY3kgc2NhbGluZyIKLQotc291cmNlICJkcml2ZXJzL2NwdWZyZXEvS2NvbmZpZyIKLQotaWYgQ1BVX0ZSRVEKLQotY29tbWVudCAiQ1BVRnJlcSBwcm9jZXNzb3IgZHJpdmVycyIKLQogY29uZmlnIFg4Nl9QQ0NfQ1BVRlJFUQogCXRyaXN0YXRlICJQcm9jZXNzb3IgQ2xvY2tpbmcgQ29udHJvbCBpbnRlcmZhY2UgZHJpdmVyIgogCWRlcGVuZHMgb24gQUNQSSAmJiBBQ1BJX1BST0NFU1NPUgpAQCAtNDMsNyArMzUsNyBAQAogY29uZmlnIEVMQU5fQ1BVRlJFUQogCXRyaXN0YXRlICJBTUQgRWxhbiBTQzQwMCBhbmQgU0M0MTAiCiAJc2VsZWN0IENQVV9GUkVRX1RBQkxFCi0JZGVwZW5kcyBvbiBYODZfRUxBTgorCWRlcGVuZHMgb24gTUVMQU4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBBTUQgRWxhbiBTQzQwMCBhbmQgU0M0MTAKIAkgIHByb2Nlc3NvcnMuCkBAIC01OSw3ICs1MSw3IEBACiBjb25maWcgU0M1MjBfQ1BVRlJFUQogCXRyaXN0YXRlICJBTUQgRWxhbiBTQzUyMCIKIAlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKLQlkZXBlbmRzIG9uIFg4Nl9FTEFOCisJZGVwZW5kcyBvbiBNRUxBTgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyB0aGUgQ1BVRnJlcSBkcml2ZXIgZm9yIEFNRCBFbGFuIFNDNTIwIHByb2Nlc3Nvci4KIApAQCAtMjYxLDYgKzI1MywzIEBACiAJICBvcHRpb24gbGV0cyB0aGUgcHJvYmluZyBjb2RlIGJ5cGFzcyBzb21lIG9mIHRob3NlIGNoZWNrcyBpZiB0aGUKIAkgIHBhcmFtZXRlciAicmVsYXhlZF9jaGVjaz0xIiBpcyBwYXNzZWQgdG8gdGhlIG1vZHVsZS4KIAotZW5kaWYJIyBDUFVfRlJFUQotCi1lbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvTWFrZWZpbGUgYi9kcml2ZXJzL2NwdWZyZXEvTWFrZWZpbGUKaW5kZXggNzFmYzNiNC4uYzdmMWE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9NYWtlZmlsZQpAQCAtMTMsMyArMTMsMjkgQEAKICMgQ1BVZnJlcSBjcm9zcy1hcmNoIGhlbHBlcnMKIG9iai0kKENPTkZJR19DUFVfRlJFUV9UQUJMRSkJCSs9IGZyZXFfdGFibGUubwogCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjZAorIyB4ODYgZHJpdmVycy4KKyMgTGluayBvcmRlciBtYXR0ZXJzLiBLOCBpcyBwcmVmZXJyZWQgdG8gQUNQSSBiZWNhdXNlIG9mIGZpcm13YXJlIGJ1Z3MgaW4gZWFybHkKKyMgSzggc3lzdGVtcy4gQUNQSSBpcyBwcmVmZXJyZWQgdG8gYWxsIG90aGVyIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlcnMuCisjIHNwZWVkc3RlcC0qIGlzIHByZWZlcnJlZCBvdmVyIHA0LWNsb2NrbW9kLgorCitvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s4KQkJKz0gcG93ZXJub3ctazgubyBtcGVyZi5vCitvYmotJChDT05GSUdfWDg2X0FDUElfQ1BVRlJFUSkJCSs9IGFjcGktY3B1ZnJlcS5vIG1wZXJmLm8KK29iai0kKENPTkZJR19YODZfUENDX0NQVUZSRVEpCQkrPSBwY2MtY3B1ZnJlcS5vCitvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s2KQkJKz0gcG93ZXJub3ctazYubworb2JqLSQoQ09ORklHX1g4Nl9QT1dFUk5PV19LNykJCSs9IHBvd2Vybm93LWs3Lm8KK29iai0kKENPTkZJR19YODZfTE9OR0hBVUwpCQkrPSBsb25naGF1bC5vCitvYmotJChDT05GSUdfWDg2X0VfUE9XRVJTQVZFUikJCSs9IGVfcG93ZXJzYXZlci5vCitvYmotJChDT05GSUdfRUxBTl9DUFVGUkVRKQkJKz0gZWxhbmZyZXEubworb2JqLSQoQ09ORklHX1NDNTIwX0NQVUZSRVEpCQkrPSBzYzUyMF9mcmVxLm8KK29iai0kKENPTkZJR19YODZfTE9OR1JVTikJCSs9IGxvbmdydW4ubworb2JqLSQoQ09ORklHX1g4Nl9HWF9TVVNQTU9EKQkJKz0gZ3gtc3VzcG1vZC5vCitvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9JQ0gpCQkrPSBzcGVlZHN0ZXAtaWNoLm8KK29iai0kKENPTkZJR19YODZfU1BFRURTVEVQX0xJQikJCSs9IHNwZWVkc3RlcC1saWIubworb2JqLSQoQ09ORklHX1g4Nl9TUEVFRFNURVBfU01JKQkJKz0gc3BlZWRzdGVwLXNtaS5vCitvYmotJChDT05GSUdfWDg2X1NQRUVEU1RFUF9DRU5UUklOTykJKz0gc3BlZWRzdGVwLWNlbnRyaW5vLm8KK29iai0kKENPTkZJR19YODZfUDRfQ0xPQ0tNT0QpCQkrPSBwNC1jbG9ja21vZC5vCitvYmotJChDT05GSUdfWDg2X0NQVUZSRVFfTkZPUkNFMikJKz0gY3B1ZnJlcS1uZm9yY2UyLm8KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI2QKKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IGEyYmFhZmIuLjRlMDRlMTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTQ3LDkgKzQ3LDYgQEAKICNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogI2luY2x1ZGUgIm1wZXJmLmgiCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCi0JCSJhY3BpLWNwdWZyZXEiLCBtc2cpCi0KIE1PRFVMRV9BVVRIT1IoIlBhdWwgRGllZmVuYmF1Z2gsIERvbWluaWsgQnJvZG93c2tpIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFDUEkgUHJvY2Vzc29yIFAtU3RhdGVzIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtMjMzLDcgKzIzMCw3IEBACiAJY21kLm1hc2sgPSBtYXNrOwogCWRydl9yZWFkKCZjbWQpOwogCi0JZHByaW50aygiZ2V0X2N1cl92YWwgPSAldVxuIiwgY21kLnZhbCk7CisJcHJfZGVidWcoImdldF9jdXJfdmFsID0gJXVcbiIsIGNtZC52YWwpOwogCiAJcmV0dXJuIGNtZC52YWw7CiB9CkBAIC0yNDQsNyArMjQxLDcgQEAKIAl1bnNpZ25lZCBpbnQgZnJlcTsKIAl1bnNpZ25lZCBpbnQgY2FjaGVkX2ZyZXE7CiAKLQlkcHJpbnRrKCJnZXRfY3VyX2ZyZXFfb25fY3B1ICglZClcbiIsIGNwdSk7CisJcHJfZGVidWcoImdldF9jdXJfZnJlcV9vbl9jcHUgKCVkKVxuIiwgY3B1KTsKIAogCWlmICh1bmxpa2VseShkYXRhID09IE5VTEwgfHwKIAkJICAgICBkYXRhLT5hY3BpX2RhdGEgPT0gTlVMTCB8fCBkYXRhLT5mcmVxX3RhYmxlID09IE5VTEwpKSB7CkBAIC0yNjEsNyArMjU4LDcgQEAKIAkJZGF0YS0+cmVzdW1lID0gMTsKIAl9CiAKLQlkcHJpbnRrKCJjdXIgZnJlcSA9ICV1XG4iLCBmcmVxKTsKKwlwcl9kZWJ1ZygiY3VyIGZyZXEgPSAldVxuIiwgZnJlcSk7CiAKIAlyZXR1cm4gZnJlcTsKIH0KQEAgLTI5Myw3ICsyOTAsNyBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCByZXN1bHQgPSAwOwogCi0JZHByaW50aygiYWNwaV9jcHVmcmVxX3RhcmdldCAlZCAoJWQpXG4iLCB0YXJnZXRfZnJlcSwgcG9saWN5LT5jcHUpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfdGFyZ2V0ICVkICglZClcbiIsIHRhcmdldF9mcmVxLCBwb2xpY3ktPmNwdSk7CiAKIAlpZiAodW5saWtlbHkoZGF0YSA9PSBOVUxMIHx8CiAJICAgICBkYXRhLT5hY3BpX2RhdGEgPT0gTlVMTCB8fCBkYXRhLT5mcmVxX3RhYmxlID09IE5VTEwpKSB7CkBAIC0zMTMsMTEgKzMxMCwxMSBAQAogCW5leHRfcGVyZl9zdGF0ZSA9IGRhdGEtPmZyZXFfdGFibGVbbmV4dF9zdGF0ZV0uaW5kZXg7CiAJaWYgKHBlcmYtPnN0YXRlID09IG5leHRfcGVyZl9zdGF0ZSkgewogCQlpZiAodW5saWtlbHkoZGF0YS0+cmVzdW1lKSkgewotCQkJZHByaW50aygiQ2FsbGVkIGFmdGVyIHJlc3VtZSwgcmVzZXR0aW5nIHRvIFAlZFxuIiwKKwkJCXByX2RlYnVnKCJDYWxsZWQgYWZ0ZXIgcmVzdW1lLCByZXNldHRpbmcgdG8gUCVkXG4iLAogCQkJCW5leHRfcGVyZl9zdGF0ZSk7CiAJCQlkYXRhLT5yZXN1bWUgPSAwOwogCQl9IGVsc2UgewotCQkJZHByaW50aygiQWxyZWFkeSBhdCB0YXJnZXQgc3RhdGUgKFAlZClcbiIsCisJCQlwcl9kZWJ1ZygiQWxyZWFkeSBhdCB0YXJnZXQgc3RhdGUgKFAlZClcbiIsCiAJCQkJbmV4dF9wZXJmX3N0YXRlKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0zNTcsNyArMzU0LDcgQEAKIAogCWlmIChhY3BpX3BzdGF0ZV9zdHJpY3QpIHsKIAkJaWYgKCFjaGVja19mcmVxcyhjbWQubWFzaywgZnJlcXMubmV3LCBkYXRhKSkgewotCQkJZHByaW50aygiYWNwaV9jcHVmcmVxX3RhcmdldCBmYWlsZWQgKCVkKVxuIiwKKwkJCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfdGFyZ2V0IGZhaWxlZCAoJWQpXG4iLAogCQkJCXBvbGljeS0+Y3B1KTsKIAkJCXJlc3VsdCA9IC1FQUdBSU47CiAJCQlnb3RvIG91dDsKQEAgLTM3OCw3ICszNzUsNyBAQAogewogCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSA9IHBlcl9jcHUoYWNmcmVxX2RhdGEsIHBvbGljeS0+Y3B1KTsKIAotCWRwcmludGsoImFjcGlfY3B1ZnJlcV92ZXJpZnlcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfdmVyaWZ5XG4iKTsKIAogCXJldHVybiBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV92ZXJpZnkocG9saWN5LCBkYXRhLT5mcmVxX3RhYmxlKTsKIH0KQEAgLTQzMywxMSArNDMwLDExIEBACiBzdGF0aWMgaW50IF9faW5pdCBhY3BpX2NwdWZyZXFfZWFybHlfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBpOwotCWRwcmludGsoImFjcGlfY3B1ZnJlcV9lYXJseV9pbml0XG4iKTsKKwlwcl9kZWJ1ZygiYWNwaV9jcHVmcmVxX2Vhcmx5X2luaXRcbiIpOwogCiAJYWNwaV9wZXJmX2RhdGEgPSBhbGxvY19wZXJjcHUoc3RydWN0IGFjcGlfcHJvY2Vzc29yX3BlcmZvcm1hbmNlKTsKIAlpZiAoIWFjcGlfcGVyZl9kYXRhKSB7Ci0JCWRwcmludGsoIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIGZvciBhY3BpX3BlcmZfZGF0YS5cbiIpOworCQlwcl9kZWJ1ZygiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IgZm9yIGFjcGlfcGVyZl9kYXRhLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewpAQCAtNTE5LDcgKzUxNiw3IEBACiAJc3RhdGljIGludCBibGFja2xpc3RlZDsKICNlbmRpZgogCi0JZHByaW50aygiYWNwaV9jcHVmcmVxX2NwdV9pbml0XG4iKTsKKwlwcl9kZWJ1ZygiYWNwaV9jcHVmcmVxX2NwdV9pbml0XG4iKTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAlpZiAoYmxhY2tsaXN0ZWQpCkBAIC01NjYsNyArNTYzLDcgQEAKIAogCS8qIGNhcGFiaWxpdHkgY2hlY2sgKi8KIAlpZiAocGVyZi0+c3RhdGVfY291bnQgPD0gMSkgewotCQlkcHJpbnRrKCJObyBQLVN0YXRlc1xuIik7CisJCXByX2RlYnVnKCJObyBQLVN0YXRlc1xuIik7CiAJCXJlc3VsdCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX3VucmVnOwogCX0KQEAgLTU3OCwxMSArNTc1LDExIEBACiAKIAlzd2l0Y2ggKHBlcmYtPmNvbnRyb2xfcmVnaXN0ZXIuc3BhY2VfaWQpIHsKIAljYXNlIEFDUElfQURSX1NQQUNFX1NZU1RFTV9JTzoKLQkJZHByaW50aygiU1lTVEVNIElPIGFkZHIgc3BhY2VcbiIpOworCQlwcl9kZWJ1ZygiU1lTVEVNIElPIGFkZHIgc3BhY2VcbiIpOwogCQlkYXRhLT5jcHVfZmVhdHVyZSA9IFNZU1RFTV9JT19DQVBBQkxFOwogCQlicmVhazsKIAljYXNlIEFDUElfQURSX1NQQUNFX0ZJWEVEX0hBUkRXQVJFOgotCQlkcHJpbnRrKCJIQVJEV0FSRSBhZGRyIHNwYWNlXG4iKTsKKwkJcHJfZGVidWcoIkhBUkRXQVJFIGFkZHIgc3BhY2VcbiIpOwogCQlpZiAoIWNoZWNrX2VzdF9jcHUoY3B1KSkgewogCQkJcmVzdWx0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyX3VucmVnOwpAQCAtNTkwLDcgKzU4Nyw3IEBACiAJCWRhdGEtPmNwdV9mZWF0dXJlID0gU1lTVEVNX0lOVEVMX01TUl9DQVBBQkxFOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkcHJpbnRrKCJVbmtub3duIGFkZHIgc3BhY2UgJWRcbiIsCisJCXByX2RlYnVnKCJVbmtub3duIGFkZHIgc3BhY2UgJWRcbiIsCiAJCQkodTMyKSAocGVyZi0+Y29udHJvbF9yZWdpc3Rlci5zcGFjZV9pZCkpOwogCQlyZXN1bHQgPSAtRU5PREVWOwogCQlnb3RvIGVycl91bnJlZzsKQEAgLTY2MSw5ICs2NTgsOSBAQAogCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0FQRVJGTVBFUkYpKQogCQlhY3BpX2NwdWZyZXFfZHJpdmVyLmdldGF2ZyA9IGNwdWZyZXFfZ2V0X21lYXN1cmVkX3BlcmY7CiAKLQlkcHJpbnRrKCJDUFUldSAtIEFDUEkgcGVyZm9ybWFuY2UgbWFuYWdlbWVudCBhY3RpdmF0ZWQuXG4iLCBjcHUpOworCXByX2RlYnVnKCJDUFUldSAtIEFDUEkgcGVyZm9ybWFuY2UgbWFuYWdlbWVudCBhY3RpdmF0ZWQuXG4iLCBjcHUpOwogCWZvciAoaSA9IDA7IGkgPCBwZXJmLT5zdGF0ZV9jb3VudDsgaSsrKQotCQlkcHJpbnRrKCIgICAgICVjUCVkOiAlZCBNSHosICVkIG1XLCAlZCB1U1xuIiwKKwkJcHJfZGVidWcoIiAgICAgJWNQJWQ6ICVkIE1IeiwgJWQgbVcsICVkIHVTXG4iLAogCQkJKGkgPT0gcGVyZi0+c3RhdGUgPyAnKicgOiAnICcpLCBpLAogCQkJKHUzMikgcGVyZi0+c3RhdGVzW2ldLmNvcmVfZnJlcXVlbmN5LAogCQkJKHUzMikgcGVyZi0+c3RhdGVzW2ldLnBvd2VyLApAQCAtNjk0LDcgKzY5MSw3IEBACiB7CiAJc3RydWN0IGFjcGlfY3B1ZnJlcV9kYXRhICpkYXRhID0gcGVyX2NwdShhY2ZyZXFfZGF0YSwgcG9saWN5LT5jcHUpOwogCi0JZHByaW50aygiYWNwaV9jcHVmcmVxX2NwdV9leGl0XG4iKTsKKwlwcl9kZWJ1ZygiYWNwaV9jcHVmcmVxX2NwdV9leGl0XG4iKTsKIAogCWlmIChkYXRhKSB7CiAJCWNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3B1dF9hdHRyKHBvbGljeS0+Y3B1KTsKQEAgLTcxMiw3ICs3MDksNyBAQAogewogCXN0cnVjdCBhY3BpX2NwdWZyZXFfZGF0YSAqZGF0YSA9IHBlcl9jcHUoYWNmcmVxX2RhdGEsIHBvbGljeS0+Y3B1KTsKIAotCWRwcmludGsoImFjcGlfY3B1ZnJlcV9yZXN1bWVcbiIpOworCXByX2RlYnVnKCJhY3BpX2NwdWZyZXFfcmVzdW1lXG4iKTsKIAogCWRhdGEtPnJlc3VtZSA9IDE7CiAKQEAgLTc0Myw3ICs3NDAsNyBAQAogCWlmIChhY3BpX2Rpc2FibGVkKQogCQlyZXR1cm4gMDsKIAotCWRwcmludGsoImFjcGlfY3B1ZnJlcV9pbml0XG4iKTsKKwlwcl9kZWJ1ZygiYWNwaV9jcHVmcmVxX2luaXRcbiIpOwogCiAJcmV0ID0gYWNwaV9jcHVmcmVxX2Vhcmx5X2luaXQoKTsKIAlpZiAocmV0KQpAQCAtNzU4LDcgKzc1NSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhY3BpX2NwdWZyZXFfZXhpdCh2b2lkKQogewotCWRwcmludGsoImFjcGlfY3B1ZnJlcV9leGl0XG4iKTsKKwlwcl9kZWJ1ZygiYWNwaV9jcHVmcmVxX2V4aXRcbiIpOwogCiAJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmYWNwaV9jcHVmcmVxX2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYwpzaW1pbGFyaXR5IGluZGV4IDk3JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLW5mb3JjZTIuYwppbmRleCAxNDFhYmViLi43YmFjODA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvY3B1ZnJlcS1uZm9yY2UyLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEtbmZvcmNlMi5jCkBAIC01Nyw4ICs1Nyw2IEBACiAJCSJNaW5pbXVtIEZTQiB0byB1c2UsIGlmIG5vdCBkZWZpbmVkOiBjdXJyZW50IEZTQiAtIDUwIik7CiAKICNkZWZpbmUgUEZYICJjcHVmcmVxLW5mb3JjZTI6ICIKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCi0JCSJjcHVmcmVxLW5mb3JjZTIiLCBtc2cpCiAKIC8qKgogICogbmZvcmNlMl9jYWxjX2ZzYiAtIGNhbGN1bGF0ZSBGU0IKQEAgLTI3MCw3ICsyNjgsNyBAQAogCWlmIChmcmVxcy5vbGQgPT0gZnJlcXMubmV3KQogCQlyZXR1cm4gMDsKIAotCWRwcmludGsoIk9sZCBDUFUgZnJlcXVlbmN5ICVkIGtIeiwgbmV3ICVkIGtIelxuIiwKKwlwcl9kZWJ1ZygiT2xkIENQVSBmcmVxdWVuY3kgJWQga0h6LCBuZXcgJWQga0h6XG4iLAogCSAgICAgICBmcmVxcy5vbGQsIGZyZXFzLm5ldyk7CiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwpAQCAtMjgyLDcgKzI4MCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiBQRlggIkNoYW5naW5nIEZTQiB0byAlZCBmYWlsZWRcbiIsCiAJCQl0YXJnZXRfZnNiKTsKIAllbHNlCi0JCWRwcmludGsoIkNoYW5nZWQgRlNCIHN1Y2Nlc3NmdWxseSB0byAlZFxuIiwKKwkJcHJfZGVidWcoIkNoYW5nZWQgRlNCIHN1Y2Nlc3NmdWxseSB0byAlZFxuIiwKIAkJCXRhcmdldF9mc2IpOwogCiAJLyogRW5hYmxlIElSUXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCmluZGV4IDJkYWZjNWMuLjBhNWJlYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwpAQCAtMzIsOSArMzIsNiBAQAogCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL3Bvd2VyLmg+CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfQ09SRSwgXAotCQkJCQkJImNwdWZyZXEtY29yZSIsIG1zZykKLQogLyoqCiAgKiBUaGUgImNwdWZyZXEgZHJpdmVyIiAtIHRoZSBhcmNoLSBvciBoYXJkd2FyZS1kZXBlbmRlbnQgbG93CiAgKiBsZXZlbCBkcml2ZXIgb2YgQ1BVRnJlcSBzdXBwb3J0LCBhbmQgaXRzIHNwaW5sb2NrLiBUaGlzIGxvY2sKQEAgLTE4MSw5MyArMTc4LDYgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiAgICAgICAgICAgICAgICAgICAgIFVOSUZJRUQgREVCVUcgSEVMUEVSUyAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUJVRwotCi0vKiB3aGF0IHBhcnQocykgb2YgdGhlIENQVWZyZXEgc3Vic3lzdGVtIGFyZSBkZWJ1Z2dlZD8gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7Ci0KLS8qIGlzIHRoZSBkZWJ1ZyBvdXRwdXQgcmF0ZWxpbWl0J2VkIHVzaW5nIHByaW50a19yYXRlbGltaXQ/IFVzZXIgY2FuCi0gKiBzZXQgb3IgbW9kaWZ5IHRoaXMgdmFsdWUuCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWdfcmF0ZWxpbWl0ID0gMTsKLQotLyogaXMgdGhlIHByaW50a19yYXRlbGltaXQnaW5nIGVuYWJsZWQ/IEl0J3MgZW5hYmxlZCBhZnRlciBhIHN1Y2Nlc3NmdWwKLSAqIGxvYWRpbmcgb2YgYSBjcHVmcmVxIGRyaXZlciwgdGVtcG9yYXJpbHkgZGlzYWJsZWQgd2hlbiBhIG5ldyBwb2xpY3kKLSAqIGlzIHNldCwgYW5kIGRpc2FibGVkIHVwb24gY3B1ZnJlcSBkcml2ZXIgcmVtb3ZhbAotICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGRpc2FibGVfcmF0ZWxpbWl0ID0gMTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZGlzYWJsZV9yYXRlbGltaXRfbG9jayk7Ci0KLXN0YXRpYyB2b2lkIGNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZGlzYWJsZV9yYXRlbGltaXRfbG9jaywgZmxhZ3MpOwotCWlmIChkaXNhYmxlX3JhdGVsaW1pdCkKLQkJZGlzYWJsZV9yYXRlbGltaXQtLTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaXNhYmxlX3JhdGVsaW1pdF9sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGNwdWZyZXFfZGVidWdfZGlzYWJsZV9yYXRlbGltaXQodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmRpc2FibGVfcmF0ZWxpbWl0X2xvY2ssIGZsYWdzKTsKLQlkaXNhYmxlX3JhdGVsaW1pdCsrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRpc2FibGVfcmF0ZWxpbWl0X2xvY2ssIGZsYWdzKTsKLX0KLQotdm9pZCBjcHVmcmVxX2RlYnVnX3ByaW50ayh1bnNpZ25lZCBpbnQgdHlwZSwgY29uc3QgY2hhciAqcHJlZml4LAotCQkJY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JY2hhciBzWzI1Nl07Ci0JdmFfbGlzdCBhcmdzOwotCXVuc2lnbmVkIGludCBsZW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCVdBUk5fT04oIXByZWZpeCk7Ci0JaWYgKHR5cGUgJiBkZWJ1ZykgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGlzYWJsZV9yYXRlbGltaXRfbG9jaywgZmxhZ3MpOwotCQlpZiAoIWRpc2FibGVfcmF0ZWxpbWl0ICYmIGRlYnVnX3JhdGVsaW1pdAotCQkJCQkmJiAhcHJpbnRrX3JhdGVsaW1pdCgpKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaXNhYmxlX3JhdGVsaW1pdF9sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGlzYWJsZV9yYXRlbGltaXRfbG9jaywgZmxhZ3MpOwotCi0JCWxlbiA9IHNucHJpbnRmKHMsIDI1NiwgS0VSTl9ERUJVRyAiJXM6ICIsIHByZWZpeCk7Ci0KLQkJdmFfc3RhcnQoYXJncywgZm10KTsKLQkJbGVuICs9IHZzbnByaW50Zigmc1tsZW5dLCAoMjU2IC0gbGVuKSwgZm10LCBhcmdzKTsKLQkJdmFfZW5kKGFyZ3MpOwotCi0JCXByaW50ayhzKTsKLQotCQlXQVJOX09OKGxlbiA8IDUpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woY3B1ZnJlcV9kZWJ1Z19wcmludGspOwotCi0KLW1vZHVsZV9wYXJhbShkZWJ1ZywgdWludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiQ1BVZnJlcSBkZWJ1Z2dpbmc6IGFkZCAxIHRvIGRlYnVnIGNvcmUsIgotCQkJIiAyIHRvIGRlYnVnIGRyaXZlcnMsIGFuZCA0IHRvIGRlYnVnIGdvdmVybm9ycy4iKTsKLQotbW9kdWxlX3BhcmFtKGRlYnVnX3JhdGVsaW1pdCwgdWludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnX3JhdGVsaW1pdCwgIkNQVWZyZXEgZGVidWdnaW5nOiIKLQkJCQkJIiBzZXQgdG8gMCB0byBkaXNhYmxlIHJhdGVsaW1pdGluZy4iKTsKLQotI2Vsc2UgLyogIUNPTkZJR19DUFVfRlJFUV9ERUJVRyAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KHZvaWQpIHsgcmV0dXJuOyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgY3B1ZnJlcV9kZWJ1Z19kaXNhYmxlX3JhdGVsaW1pdCh2b2lkKSB7IHJldHVybjsgfQotCi0jZW5kaWYgLyogQ09ORklHX0NQVV9GUkVRX0RFQlVHICovCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICAgICAgICAgICBFWFRFUk5BTExZIEFGRkVDVElORyBGUkVRVUVOQ1kgQ0hBTkdFUyAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtMjkxLDcgKzIwMSw3IEBACiAJaWYgKCFsX3Bfal9yZWZfZnJlcSkgewogCQlsX3Bfal9yZWYgPSBsb29wc19wZXJfamlmZnk7CiAJCWxfcF9qX3JlZl9mcmVxID0gY2ktPm9sZDsKLQkJZHByaW50aygic2F2aW5nICVsdSBhcyByZWZlcmVuY2UgdmFsdWUgZm9yIGxvb3BzX3Blcl9qaWZmeTsgIgorCQlwcl9kZWJ1Zygic2F2aW5nICVsdSBhcyByZWZlcmVuY2UgdmFsdWUgZm9yIGxvb3BzX3Blcl9qaWZmeTsgIgogCQkJImZyZXEgaXMgJXUga0h6XG4iLCBsX3Bfal9yZWYsIGxfcF9qX3JlZl9mcmVxKTsKIAl9CiAJaWYgKCh2YWwgPT0gQ1BVRlJFUV9QUkVDSEFOR0UgICYmIGNpLT5vbGQgPCBjaS0+bmV3KSB8fApAQCAtMjk5LDcgKzIwOSw3IEBACiAJICAgICh2YWwgPT0gQ1BVRlJFUV9SRVNVTUVDSEFOR0UgfHwgdmFsID09IENQVUZSRVFfU1VTUEVORENIQU5HRSkpIHsKIAkJbG9vcHNfcGVyX2ppZmZ5ID0gY3B1ZnJlcV9zY2FsZShsX3Bfal9yZWYsIGxfcF9qX3JlZl9mcmVxLAogCQkJCQkJCQljaS0+bmV3KTsKLQkJZHByaW50aygic2NhbGluZyBsb29wc19wZXJfamlmZnkgdG8gJWx1ICIKKwkJcHJfZGVidWcoInNjYWxpbmcgbG9vcHNfcGVyX2ppZmZ5IHRvICVsdSAiCiAJCQkiZm9yIGZyZXF1ZW5jeSAldSBrSHpcbiIsIGxvb3BzX3Blcl9qaWZmeSwgY2ktPm5ldyk7CiAJfQogfQpAQCAtMzI2LDcgKzIzNiw3IEBACiAJQlVHX09OKGlycXNfZGlzYWJsZWQoKSk7CiAKIAlmcmVxcy0+ZmxhZ3MgPSBjcHVmcmVxX2RyaXZlci0+ZmxhZ3M7Ci0JZHByaW50aygibm90aWZpY2F0aW9uICV1IG9mIGZyZXF1ZW5jeSB0cmFuc2l0aW9uIHRvICV1IGtIelxuIiwKKwlwcl9kZWJ1Zygibm90aWZpY2F0aW9uICV1IG9mIGZyZXF1ZW5jeSB0cmFuc2l0aW9uIHRvICV1IGtIelxuIiwKIAkJc3RhdGUsIGZyZXFzLT5uZXcpOwogCiAJcG9saWN5ID0gcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBmcmVxcy0+Y3B1KTsKQEAgLTM0MCw3ICsyNTAsNyBAQAogCQlpZiAoIShjcHVmcmVxX2RyaXZlci0+ZmxhZ3MgJiBDUFVGUkVRX0NPTlNUX0xPT1BTKSkgewogCQkJaWYgKChwb2xpY3kpICYmIChwb2xpY3ktPmNwdSA9PSBmcmVxcy0+Y3B1KSAmJgogCQkJICAgIChwb2xpY3ktPmN1cikgJiYgKHBvbGljeS0+Y3VyICE9IGZyZXFzLT5vbGQpKSB7Ci0JCQkJZHByaW50aygiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSBpcyIKKwkJCQlwcl9kZWJ1ZygiV2FybmluZzogQ1BVIGZyZXF1ZW5jeSBpcyIKIAkJCQkJIiAldSwgY3B1ZnJlcSBhc3N1bWVkICV1IGtIei5cbiIsCiAJCQkJCWZyZXFzLT5vbGQsIHBvbGljeS0+Y3VyKTsKIAkJCQlmcmVxcy0+b2xkID0gcG9saWN5LT5jdXI7CkBAIC0zNTMsNyArMjYzLDcgQEAKIAogCWNhc2UgQ1BVRlJFUV9QT1NUQ0hBTkdFOgogCQlhZGp1c3RfamlmZmllcyhDUFVGUkVRX1BPU1RDSEFOR0UsIGZyZXFzKTsKLQkJZHByaW50aygiRlJFUTogJWx1IC0gQ1BVOiAlbHUiLCAodW5zaWduZWQgbG9uZylmcmVxcy0+bmV3LAorCQlwcl9kZWJ1ZygiRlJFUTogJWx1IC0gQ1BVOiAlbHUiLCAodW5zaWduZWQgbG9uZylmcmVxcy0+bmV3LAogCQkJKHVuc2lnbmVkIGxvbmcpZnJlcXMtPmNwdSk7CiAJCXRyYWNlX3Bvd2VyX2ZyZXF1ZW5jeShQT1dFUl9QU1RBVEUsIGZyZXFzLT5uZXcsIGZyZXFzLT5jcHUpOwogCQl0cmFjZV9jcHVfZnJlcXVlbmN5KGZyZXFzLT5uZXcsIGZyZXFzLT5jcHUpOwpAQCAtNDExLDIxICszMjEsMTQgQEAKIAkJdCA9IF9fZmluZF9nb3Zlcm5vcihzdHJfZ292ZXJub3IpOwogCiAJCWlmICh0ID09IE5VTEwpIHsKLQkJCWNoYXIgKm5hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImNwdWZyZXFfJXMiLAotCQkJCQkJCQlzdHJfZ292ZXJub3IpOworCQkJaW50IHJldDsKIAotCQkJaWYgKG5hbWUpIHsKLQkJCQlpbnQgcmV0OworCQkJbXV0ZXhfdW5sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKKwkJCXJldCA9IHJlcXVlc3RfbW9kdWxlKCJjcHVmcmVxXyVzIiwgc3RyX2dvdmVybm9yKTsKKwkJCW11dGV4X2xvY2soJmNwdWZyZXFfZ292ZXJub3JfbXV0ZXgpOwogCi0JCQkJbXV0ZXhfdW5sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKLQkJCQlyZXQgPSByZXF1ZXN0X21vZHVsZSgiJXMiLCBuYW1lKTsKLQkJCQltdXRleF9sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKLQotCQkJCWlmIChyZXQgPT0gMCkKLQkJCQkJdCA9IF9fZmluZF9nb3Zlcm5vcihzdHJfZ292ZXJub3IpOwotCQkJfQotCi0JCQlrZnJlZShuYW1lKTsKKwkJCWlmIChyZXQgPT0gMCkKKwkJCQl0ID0gX19maW5kX2dvdmVybm9yKHN0cl9nb3Zlcm5vcik7CiAJCX0KIAogCQlpZiAodCAhPSBOVUxMKSB7CkBAIC03NTMsNyArNjU2LDcgQEAKIHN0YXRpYyB2b2lkIGNwdWZyZXFfc3lzZnNfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IHRvX3BvbGljeShrb2JqKTsKLQlkcHJpbnRrKCJsYXN0IHJlZmVyZW5jZSBpcyBkcm9wcGVkXG4iKTsKKwlwcl9kZWJ1ZygibGFzdCByZWZlcmVuY2UgaXMgZHJvcHBlZFxuIik7CiAJY29tcGxldGUoJnBvbGljeS0+a29ial91bnJlZ2lzdGVyKTsKIH0KIApAQCAtNzg4LDcgKzY5MSw3IEBACiAJZ292ID0gX19maW5kX2dvdmVybm9yKHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGNwdSkpOwogCWlmIChnb3YpIHsKIAkJcG9saWN5LT5nb3Zlcm5vciA9IGdvdjsKLQkJZHByaW50aygiUmVzdG9yaW5nIGdvdmVybm9yICVzIGZvciBjcHUgJWRcbiIsCisJCXByX2RlYnVnKCJSZXN0b3JpbmcgZ292ZXJub3IgJXMgZm9yIGNwdSAlZFxuIiwKIAkJICAgICAgIHBvbGljeS0+Z292ZXJub3ItPm5hbWUsIGNwdSk7CiAJfQogI2VuZGlmCkBAIC04MjQsNyArNzI3LDcgQEAKIAkJCXBlcl9jcHUoY3B1ZnJlcV9jcHVfZGF0YSwgY3B1KSA9IG1hbmFnZWRfcG9saWN5OwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3B1ZnJlcV9kcml2ZXJfbG9jaywgZmxhZ3MpOwogCi0JCQlkcHJpbnRrKCJDUFUgYWxyZWFkeSBtYW5hZ2VkLCBhZGRpbmcgbGlua1xuIik7CisJCQlwcl9kZWJ1ZygiQ1BVIGFscmVhZHkgbWFuYWdlZCwgYWRkaW5nIGxpbmtcbiIpOwogCQkJcmV0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJnN5c19kZXYtPmtvYmosCiAJCQkJCQkmbWFuYWdlZF9wb2xpY3ktPmtvYmosCiAJCQkJCQkiY3B1ZnJlcSIpOwpAQCAtODY1LDcgKzc2OCw3IEBACiAJCWlmICghY3B1X29ubGluZShqKSkKIAkJCWNvbnRpbnVlOwogCi0JCWRwcmludGsoIkNQVSAldSBhbHJlYWR5IG1hbmFnZWQsIGFkZGluZyBsaW5rXG4iLCBqKTsKKwkJcHJfZGVidWcoIkNQVSAldSBhbHJlYWR5IG1hbmFnZWQsIGFkZGluZyBsaW5rXG4iLCBqKTsKIAkJbWFuYWdlZF9wb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoY3B1KTsKIAkJY3B1X3N5c19kZXYgPSBnZXRfY3B1X3N5c2RldihqKTsKIAkJcmV0ID0gc3lzZnNfY3JlYXRlX2xpbmsoJmNwdV9zeXNfZGV2LT5rb2JqLCAmcG9saWN5LT5rb2JqLApAQCAtOTQxLDcgKzg0NCw3IEBACiAJcG9saWN5LT51c2VyX3BvbGljeS5nb3Zlcm5vciA9IHBvbGljeS0+Z292ZXJub3I7CiAKIAlpZiAocmV0KSB7Ci0JCWRwcmludGsoInNldHRpbmcgcG9saWN5IGZhaWxlZFxuIik7CisJCXByX2RlYnVnKCJzZXR0aW5nIHBvbGljeSBmYWlsZWRcbiIpOwogCQlpZiAoY3B1ZnJlcV9kcml2ZXItPmV4aXQpCiAJCQljcHVmcmVxX2RyaXZlci0+ZXhpdChwb2xpY3kpOwogCX0KQEAgLTk3Nyw4ICs4ODAsNyBAQAogCWlmIChjcHVfaXNfb2ZmbGluZShjcHUpKQogCQlyZXR1cm4gMDsKIAotCWNwdWZyZXFfZGVidWdfZGlzYWJsZV9yYXRlbGltaXQoKTsKLQlkcHJpbnRrKCJhZGRpbmcgQ1BVICV1XG4iLCBjcHUpOworCXByX2RlYnVnKCJhZGRpbmcgQ1BVICV1XG4iLCBjcHUpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIGNoZWNrIHdoZXRoZXIgYSBkaWZmZXJlbnQgQ1BVIGFscmVhZHkgcmVnaXN0ZXJlZCB0aGlzCkBAIC05ODYsNyArODg4LDYgQEAKIAlwb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoY3B1KTsKIAlpZiAodW5saWtlbHkocG9saWN5KSkgewogCQljcHVmcmVxX2NwdV9wdXQocG9saWN5KTsKLQkJY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZgpAQCAtMTAzNyw3ICs5MzgsNyBAQAogCSAqLwogCXJldCA9IGNwdWZyZXFfZHJpdmVyLT5pbml0KHBvbGljeSk7CiAJaWYgKHJldCkgewotCQlkcHJpbnRrKCJpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworCQlwcl9kZWJ1ZygiaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfdW5sb2NrX3BvbGljeTsKIAl9CiAJcG9saWN5LT51c2VyX3BvbGljeS5taW4gPSBwb2xpY3ktPm1pbjsKQEAgLTEwNjMsOCArOTY0LDcgQEAKIAogCWtvYmplY3RfdWV2ZW50KCZwb2xpY3ktPmtvYmosIEtPQkpfQUREKTsKIAltb2R1bGVfcHV0KGNwdWZyZXFfZHJpdmVyLT5vd25lcik7Ci0JZHByaW50aygiaW5pdGlhbGl6YXRpb24gY29tcGxldGVcbiIpOwotCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOworCXByX2RlYnVnKCJpbml0aWFsaXphdGlvbiBjb21wbGV0ZVxuIik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTA4OCw3ICs5ODgsNiBAQAogbm9tZW1fb3V0OgogCW1vZHVsZV9wdXQoY3B1ZnJlcV9kcml2ZXItPm93bmVyKTsKIG1vZHVsZV9vdXQ6Ci0JY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTExMiwxNSArMTAxMSwxMyBAQAogCXVuc2lnbmVkIGludCBqOwogI2VuZGlmCiAKLQljcHVmcmVxX2RlYnVnX2Rpc2FibGVfcmF0ZWxpbWl0KCk7Ci0JZHByaW50aygidW5yZWdpc3RlcmluZyBDUFUgJXVcbiIsIGNwdSk7CisJcHJfZGVidWcoInVucmVnaXN0ZXJpbmcgQ1BVICV1XG4iLCBjcHUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAlkYXRhID0gcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBjcHUpOwogCiAJaWYgKCFkYXRhKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwdWZyZXFfZHJpdmVyX2xvY2ssIGZsYWdzKTsKLQkJY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CiAJCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMTEzMiwxMiArMTAyOSwxMSBAQAogCSAqIG9ubHkgbmVlZCB0byB1bmxpbmssIHB1dCBhbmQgZXhpdAogCSAqLwogCWlmICh1bmxpa2VseShjcHUgIT0gZGF0YS0+Y3B1KSkgewotCQlkcHJpbnRrKCJyZW1vdmluZyBsaW5rXG4iKTsKKwkJcHJfZGVidWcoInJlbW92aW5nIGxpbmtcbiIpOwogCQljcHVtYXNrX2NsZWFyX2NwdShjcHUsIGRhdGEtPmNwdXMpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcHVmcmVxX2RyaXZlcl9sb2NrLCBmbGFncyk7CiAJCWtvYmogPSAmc3lzX2Rldi0+a29iajsKIAkJY3B1ZnJlcV9jcHVfcHV0KGRhdGEpOwotCQljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKIAkJdW5sb2NrX3BvbGljeV9yd3NlbV93cml0ZShjcHUpOwogCQlzeXNmc19yZW1vdmVfbGluayhrb2JqLCAiY3B1ZnJlcSIpOwogCQlyZXR1cm4gMDsKQEAgLTExNzAsNyArMTA2Niw3IEBACiAJCWZvcl9lYWNoX2NwdShqLCBkYXRhLT5jcHVzKSB7CiAJCQlpZiAoaiA9PSBjcHUpCiAJCQkJY29udGludWU7Ci0JCQlkcHJpbnRrKCJyZW1vdmluZyBsaW5rIGZvciBjcHUgJXVcbiIsIGopOworCQkJcHJfZGVidWcoInJlbW92aW5nIGxpbmsgZm9yIGNwdSAldVxuIiwgaik7CiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJCQlzdHJuY3B5KHBlcl9jcHUoY3B1ZnJlcV9jcHVfZ292ZXJub3IsIGopLAogCQkJCWRhdGEtPmdvdmVybm9yLT5uYW1lLCBDUFVGUkVRX05BTUVfTEVOKTsKQEAgLTExOTksMjEgKzEwOTUsMzUgQEAKIAkgKiBub3QgcmVmZXJlbmNlZCBhbnltb3JlIGJ5IGFueWJvZHkgYmVmb3JlIHdlIHByb2NlZWQgd2l0aAogCSAqIHVubG9hZGluZy4KIAkgKi8KLQlkcHJpbnRrKCJ3YWl0aW5nIGZvciBkcm9wcGluZyBvZiByZWZjb3VudFxuIik7CisJcHJfZGVidWcoIndhaXRpbmcgZm9yIGRyb3BwaW5nIG9mIHJlZmNvdW50XG4iKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKGNtcCk7Ci0JZHByaW50aygid2FpdCBjb21wbGV0ZVxuIik7CisJcHJfZGVidWcoIndhaXQgY29tcGxldGVcbiIpOwogCiAJbG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIAlpZiAoY3B1ZnJlcV9kcml2ZXItPmV4aXQpCiAJCWNwdWZyZXFfZHJpdmVyLT5leGl0KGRhdGEpOwogCXVubG9ja19wb2xpY3lfcndzZW1fd3JpdGUoY3B1KTsKIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorCS8qIHdoZW4gdGhlIENQVSB3aGljaCBpcyB0aGUgcGFyZW50IG9mIHRoZSBrb2JqIGlzIGhvdHBsdWdnZWQKKwkgKiBvZmZsaW5lLCBjaGVjayBmb3Igc2libGluZ3MsIGFuZCBjcmVhdGUgY3B1ZnJlcSBzeXNmcyBpbnRlcmZhY2UKKwkgKiBhbmQgc3ltbGlua3MKKwkgKi8KKwlpZiAodW5saWtlbHkoY3B1bWFza193ZWlnaHQoZGF0YS0+Y3B1cykgPiAxKSkgeworCQkvKiBmaXJzdCBzaWJsaW5nIG5vdyBvd25zIHRoZSBuZXcgc3lzZnMgZGlyICovCisJCWNwdW1hc2tfY2xlYXJfY3B1KGNwdSwgZGF0YS0+Y3B1cyk7CisJCWNwdWZyZXFfYWRkX2RldihnZXRfY3B1X3N5c2RldihjcHVtYXNrX2ZpcnN0KGRhdGEtPmNwdXMpKSk7CisKKwkJLyogZmluYWxseSByZW1vdmUgb3VyIG93biBzeW1saW5rICovCisJCWxvY2tfcG9saWN5X3J3c2VtX3dyaXRlKGNwdSk7CisJCV9fY3B1ZnJlcV9yZW1vdmVfZGV2KHN5c19kZXYpOworCX0KKyNlbmRpZgorCiAJZnJlZV9jcHVtYXNrX3ZhcihkYXRhLT5yZWxhdGVkX2NwdXMpOwogCWZyZWVfY3B1bWFza192YXIoZGF0YS0+Y3B1cyk7CiAJa2ZyZWUoZGF0YSk7Ci0JcGVyX2NwdShjcHVmcmVxX2NwdV9kYXRhLCBjcHUpID0gTlVMTDsKIAotCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjM5LDcgKzExNDksNyBAQAogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5ID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjcHVmcmVxX3BvbGljeSwgdXBkYXRlKTsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gcG9saWN5LT5jcHU7Ci0JZHByaW50aygiaGFuZGxlX3VwZGF0ZSBmb3IgY3B1ICV1IGNhbGxlZFxuIiwgY3B1KTsKKwlwcl9kZWJ1ZygiaGFuZGxlX3VwZGF0ZSBmb3IgY3B1ICV1IGNhbGxlZFxuIiwgY3B1KTsKIAljcHVmcmVxX3VwZGF0ZV9wb2xpY3koY3B1KTsKIH0KIApAQCAtMTI1Nyw3ICsxMTY3LDcgQEAKIHsKIAlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKIAotCWRwcmludGsoIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgb3V0IG9mIHN5bmM6IGNwdWZyZXEgYW5kIHRpbWluZyAiCisJcHJfZGVidWcoIldhcm5pbmc6IENQVSBmcmVxdWVuY3kgb3V0IG9mIHN5bmM6IGNwdWZyZXEgYW5kIHRpbWluZyAiCiAJICAgICAgICJjb3JlIHRoaW5rcyBvZiAldSwgaXMgJXUga0h6LlxuIiwgb2xkX2ZyZXEsIG5ld19mcmVxKTsKIAogCWZyZXFzLmNwdSA9IGNwdTsKQEAgLTEzNjAsNyArMTI3MCw3IEBACiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmNwdV9wb2xpY3k7CiAKLQlkcHJpbnRrKCJzdXNwZW5kaW5nIGNwdSAldVxuIiwgY3B1KTsKKwlwcl9kZWJ1Zygic3VzcGVuZGluZyBjcHUgJXVcbiIsIGNwdSk7CiAKIAkvKiBJZiB0aGVyZSdzIG5vIHBvbGljeSBmb3IgdGhlIGJvb3QgQ1BVLCB3ZSBoYXZlIG5vdGhpbmcgdG8gZG8uICovCiAJY3B1X3BvbGljeSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOwpAQCAtMTM5OCw3ICsxMzA4LDcgQEAKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCBjcHVmcmVxX3BvbGljeSAqY3B1X3BvbGljeTsKIAotCWRwcmludGsoInJlc3VtaW5nIGNwdSAldVxuIiwgY3B1KTsKKwlwcl9kZWJ1ZygicmVzdW1pbmcgY3B1ICV1XG4iLCBjcHUpOwogCiAJLyogSWYgdGhlcmUncyBubyBwb2xpY3kgZm9yIHRoZSBib290IENQVSwgd2UgaGF2ZSBub3RoaW5nIHRvIGRvLiAqLwogCWNwdV9wb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoY3B1KTsKQEAgLTE1MTAsNyArMTQyMCw3IEBACiB7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAKLQlkcHJpbnRrKCJ0YXJnZXQgZm9yIENQVSAldTogJXUga0h6LCByZWxhdGlvbiAldVxuIiwgcG9saWN5LT5jcHUsCisJcHJfZGVidWcoInRhcmdldCBmb3IgQ1BVICV1OiAldSBrSHosIHJlbGF0aW9uICV1XG4iLCBwb2xpY3ktPmNwdSwKIAkJdGFyZ2V0X2ZyZXEsIHJlbGF0aW9uKTsKIAlpZiAoY3B1X29ubGluZShwb2xpY3ktPmNwdSkgJiYgY3B1ZnJlcV9kcml2ZXItPnRhcmdldCkKIAkJcmV0dmFsID0gY3B1ZnJlcV9kcml2ZXItPnRhcmdldChwb2xpY3ksIHRhcmdldF9mcmVxLCByZWxhdGlvbik7CkBAIC0xNTk2LDcgKzE1MDYsNyBAQAogCWlmICghdHJ5X21vZHVsZV9nZXQocG9saWN5LT5nb3Zlcm5vci0+b3duZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRwcmludGsoIl9fY3B1ZnJlcV9nb3Zlcm5vciBmb3IgQ1BVICV1LCBldmVudCAldVxuIiwKKwlwcl9kZWJ1ZygiX19jcHVmcmVxX2dvdmVybm9yIGZvciBDUFUgJXUsIGV2ZW50ICV1XG4iLAogCQkJCQkJcG9saWN5LT5jcHUsIGV2ZW50KTsKIAlyZXQgPSBwb2xpY3ktPmdvdmVybm9yLT5nb3Zlcm5vcihwb2xpY3ksIGV2ZW50KTsKIApAQCAtMTY5Nyw4ICsxNjA3LDcgQEAKIHsKIAlpbnQgcmV0ID0gMDsKIAotCWNwdWZyZXFfZGVidWdfZGlzYWJsZV9yYXRlbGltaXQoKTsKLQlkcHJpbnRrKCJzZXR0aW5nIG5ldyBwb2xpY3kgZm9yIENQVSAldTogJXUgLSAldSBrSHpcbiIsIHBvbGljeS0+Y3B1LAorCXByX2RlYnVnKCJzZXR0aW5nIG5ldyBwb2xpY3kgZm9yIENQVSAldTogJXUgLSAldSBrSHpcbiIsIHBvbGljeS0+Y3B1LAogCQlwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgpOwogCiAJbWVtY3B5KCZwb2xpY3ktPmNwdWluZm8sICZkYXRhLT5jcHVpbmZvLApAQCAtMTczNSwxOSArMTY0NCwxOSBAQAogCWRhdGEtPm1pbiA9IHBvbGljeS0+bWluOwogCWRhdGEtPm1heCA9IHBvbGljeS0+bWF4OwogCi0JZHByaW50aygibmV3IG1pbiBhbmQgbWF4IGZyZXFzIGFyZSAldSAtICV1IGtIelxuIiwKKwlwcl9kZWJ1ZygibmV3IG1pbiBhbmQgbWF4IGZyZXFzIGFyZSAldSAtICV1IGtIelxuIiwKIAkJCQkJZGF0YS0+bWluLCBkYXRhLT5tYXgpOwogCiAJaWYgKGNwdWZyZXFfZHJpdmVyLT5zZXRwb2xpY3kpIHsKIAkJZGF0YS0+cG9saWN5ID0gcG9saWN5LT5wb2xpY3k7Ci0JCWRwcmludGsoInNldHRpbmcgcmFuZ2VcbiIpOworCQlwcl9kZWJ1Zygic2V0dGluZyByYW5nZVxuIik7CiAJCXJldCA9IGNwdWZyZXFfZHJpdmVyLT5zZXRwb2xpY3kocG9saWN5KTsKIAl9IGVsc2UgewogCQlpZiAocG9saWN5LT5nb3Zlcm5vciAhPSBkYXRhLT5nb3Zlcm5vcikgewogCQkJLyogc2F2ZSBvbGQsIHdvcmtpbmcgdmFsdWVzICovCiAJCQlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqb2xkX2dvdiA9IGRhdGEtPmdvdmVybm9yOwogCi0JCQlkcHJpbnRrKCJnb3Zlcm5vciBzd2l0Y2hcbiIpOworCQkJcHJfZGVidWcoImdvdmVybm9yIHN3aXRjaFxuIik7CiAKIAkJCS8qIGVuZCBvbGQgZ292ZXJub3IgKi8KIAkJCWlmIChkYXRhLT5nb3Zlcm5vcikKQEAgLTE3NTcsNyArMTY2Niw3IEBACiAJCQlkYXRhLT5nb3Zlcm5vciA9IHBvbGljeS0+Z292ZXJub3I7CiAJCQlpZiAoX19jcHVmcmVxX2dvdmVybm9yKGRhdGEsIENQVUZSRVFfR09WX1NUQVJUKSkgewogCQkJCS8qIG5ldyBnb3Zlcm5vciBmYWlsZWQsIHNvIHJlLXN0YXJ0IG9sZCBvbmUgKi8KLQkJCQlkcHJpbnRrKCJzdGFydGluZyBnb3Zlcm5vciAlcyBmYWlsZWRcbiIsCisJCQkJcHJfZGVidWcoInN0YXJ0aW5nIGdvdmVybm9yICVzIGZhaWxlZFxuIiwKIAkJCQkJCQlkYXRhLT5nb3Zlcm5vci0+bmFtZSk7CiAJCQkJaWYgKG9sZF9nb3YpIHsKIAkJCQkJZGF0YS0+Z292ZXJub3IgPSBvbGRfZ292OwpAQCAtMTc2OSwxMiArMTY3OCwxMSBAQAogCQkJfQogCQkJLyogbWlnaHQgYmUgYSBwb2xpY3kgY2hhbmdlLCB0b28sIHNvIGZhbGwgdGhyb3VnaCAqLwogCQl9Ci0JCWRwcmludGsoImdvdmVybm9yOiBjaGFuZ2Ugb3IgdXBkYXRlIGxpbWl0c1xuIik7CisJCXByX2RlYnVnKCJnb3Zlcm5vcjogY2hhbmdlIG9yIHVwZGF0ZSBsaW1pdHNcbiIpOwogCQlfX2NwdWZyZXFfZ292ZXJub3IoZGF0YSwgQ1BVRlJFUV9HT1ZfTElNSVRTKTsKIAl9CiAKIGVycm9yX291dDoKLQljcHVmcmVxX2RlYnVnX2VuYWJsZV9yYXRlbGltaXQoKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODAxLDcgKzE3MDksNyBAQAogCQlnb3RvIGZhaWw7CiAJfQogCi0JZHByaW50aygidXBkYXRpbmcgcG9saWN5IGZvciBDUFUgJXVcbiIsIGNwdSk7CisJcHJfZGVidWcoInVwZGF0aW5nIHBvbGljeSBmb3IgQ1BVICV1XG4iLCBjcHUpOwogCW1lbWNweSgmcG9saWN5LCBkYXRhLCBzaXplb2Yoc3RydWN0IGNwdWZyZXFfcG9saWN5KSk7CiAJcG9saWN5Lm1pbiA9IGRhdGEtPnVzZXJfcG9saWN5Lm1pbjsKIAlwb2xpY3kubWF4ID0gZGF0YS0+dXNlcl9wb2xpY3kubWF4OwpAQCAtMTgxMyw3ICsxNzIxLDcgQEAKIAlpZiAoY3B1ZnJlcV9kcml2ZXItPmdldCkgewogCQlwb2xpY3kuY3VyID0gY3B1ZnJlcV9kcml2ZXItPmdldChjcHUpOwogCQlpZiAoIWRhdGEtPmN1cikgewotCQkJZHByaW50aygiRHJpdmVyIGRpZCBub3QgaW5pdGlhbGl6ZSBjdXJyZW50IGZyZXEiKTsKKwkJCXByX2RlYnVnKCJEcml2ZXIgZGlkIG5vdCBpbml0aWFsaXplIGN1cnJlbnQgZnJlcSIpOwogCQkJZGF0YS0+Y3VyID0gcG9saWN5LmN1cjsKIAkJfSBlbHNlIHsKIAkJCWlmIChkYXRhLT5jdXIgIT0gcG9saWN5LmN1cikKQEAgLTE4ODksNyArMTc5Nyw3IEBACiAJICAgICgoIWRyaXZlcl9kYXRhLT5zZXRwb2xpY3kpICYmICghZHJpdmVyX2RhdGEtPnRhcmdldCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRwcmludGsoInRyeWluZyB0byByZWdpc3RlciBkcml2ZXIgJXNcbiIsIGRyaXZlcl9kYXRhLT5uYW1lKTsKKwlwcl9kZWJ1ZygidHJ5aW5nIHRvIHJlZ2lzdGVyIGRyaXZlciAlc1xuIiwgZHJpdmVyX2RhdGEtPm5hbWUpOwogCiAJaWYgKGRyaXZlcl9kYXRhLT5zZXRwb2xpY3kpCiAJCWRyaXZlcl9kYXRhLT5mbGFncyB8PSBDUFVGUkVRX0NPTlNUX0xPT1BTOwpAQCAtMTkyMCwxNSArMTgyOCwxNCBAQAogCiAJCS8qIGlmIGFsbCAtPmluaXQoKSBjYWxscyBmYWlsZWQsIHVucmVnaXN0ZXIgKi8KIAkJaWYgKHJldCkgewotCQkJZHByaW50aygibm8gQ1BVIGluaXRpYWxpemVkIGZvciBkcml2ZXIgJXNcbiIsCisJCQlwcl9kZWJ1Zygibm8gQ1BVIGluaXRpYWxpemVkIGZvciBkcml2ZXIgJXNcbiIsCiAJCQkJCQkJZHJpdmVyX2RhdGEtPm5hbWUpOwogCQkJZ290byBlcnJfc3lzZGV2X3VucmVnOwogCQl9CiAJfQogCiAJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZjcHVmcmVxX2NwdV9ub3RpZmllcik7Ci0JZHByaW50aygiZHJpdmVyICVzIHVwIGFuZCBydW5uaW5nXG4iLCBkcml2ZXJfZGF0YS0+bmFtZSk7Ci0JY3B1ZnJlcV9kZWJ1Z19lbmFibGVfcmF0ZWxpbWl0KCk7CisJcHJfZGVidWcoImRyaXZlciAlcyB1cCBhbmQgcnVubmluZ1xuIiwgZHJpdmVyX2RhdGEtPm5hbWUpOwogCiAJcmV0dXJuIDA7CiBlcnJfc3lzZGV2X3VucmVnOgpAQCAtMTk1NSwxNCArMTg2MiwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQljcHVmcmVxX2RlYnVnX2Rpc2FibGVfcmF0ZWxpbWl0KCk7Ci0KLQlpZiAoIWNwdWZyZXFfZHJpdmVyIHx8IChkcml2ZXIgIT0gY3B1ZnJlcV9kcml2ZXIpKSB7Ci0JCWNwdWZyZXFfZGVidWdfZW5hYmxlX3JhdGVsaW1pdCgpOworCWlmICghY3B1ZnJlcV9kcml2ZXIgfHwgKGRyaXZlciAhPSBjcHVmcmVxX2RyaXZlcikpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAotCWRwcmludGsoInVucmVnaXN0ZXJpbmcgZHJpdmVyICVzXG4iLCBkcml2ZXItPm5hbWUpOworCXByX2RlYnVnKCJ1bnJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwgZHJpdmVyLT5uYW1lKTsKIAogCXN5c2Rldl9kcml2ZXJfdW5yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywgJmNwdWZyZXFfc3lzZGV2X2RyaXZlcik7CiAJdW5yZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNwdWZyZXFfY3B1X25vdGlmaWVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3BlcmZvcm1hbmNlLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9wZXJmb3JtYW5jZS5jCmluZGV4IDdlMmU1MTUuLmYxM2E4YTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3BlcmZvcm1hbmNlLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfcGVyZm9ybWFuY2UuYwpAQCAtMTUsOSArMTUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIFwKLQljcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0dPVkVSTk9SLCAicGVyZm9ybWFuY2UiLCBtc2cpCi0KIAogc3RhdGljIGludCBjcHVmcmVxX2dvdmVybm9yX3BlcmZvcm1hbmNlKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAogCQkJCQl1bnNpZ25lZCBpbnQgZXZlbnQpCkBAIC0yNSw3ICsyMiw3IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgQ1BVRlJFUV9HT1ZfU1RBUlQ6CiAJY2FzZSBDUFVGUkVRX0dPVl9MSU1JVFM6Ci0JCWRwcmludGsoInNldHRpbmcgdG8gJXUga0h6IGJlY2F1c2Ugb2YgZXZlbnQgJXVcbiIsCisJCXByX2RlYnVnKCJzZXR0aW5nIHRvICV1IGtIeiBiZWNhdXNlIG9mIGV2ZW50ICV1XG4iLAogCQkJCQkJcG9saWN5LT5tYXgsIGV2ZW50KTsKIAkJX19jcHVmcmVxX2RyaXZlcl90YXJnZXQocG9saWN5LCBwb2xpY3ktPm1heCwKIAkJCQkJCUNQVUZSRVFfUkVMQVRJT05fSCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9wb3dlcnNhdmUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3Bvd2Vyc2F2ZS5jCmluZGV4IGU2ZGI1ZmEuLjRjMmViNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3Bvd2Vyc2F2ZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3Bvd2Vyc2F2ZS5jCkBAIC0xNSwxNiArMTUsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBcCi0JY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19HT1ZFUk5PUiwgInBvd2Vyc2F2ZSIsIG1zZykKLQogc3RhdGljIGludCBjcHVmcmVxX2dvdmVybm9yX3Bvd2Vyc2F2ZShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCQkJdW5zaWduZWQgaW50IGV2ZW50KQogewogCXN3aXRjaCAoZXZlbnQpIHsKIAljYXNlIENQVUZSRVFfR09WX1NUQVJUOgogCWNhc2UgQ1BVRlJFUV9HT1ZfTElNSVRTOgotCQlkcHJpbnRrKCJzZXR0aW5nIHRvICV1IGtIeiBiZWNhdXNlIG9mIGV2ZW50ICV1XG4iLAorCQlwcl9kZWJ1Zygic2V0dGluZyB0byAldSBrSHogYmVjYXVzZSBvZiBldmVudCAldVxuIiwKIAkJCQkJCQlwb2xpY3ktPm1pbiwgZXZlbnQpOwogCQlfX2NwdWZyZXFfZHJpdmVyX3RhcmdldChwb2xpY3ksIHBvbGljeS0+bWluLAogCQkJCQkJQ1BVRlJFUV9SRUxBVElPTl9MKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV9zdGF0cy5jCmluZGV4IDAwZDczZmMuLmI2MGE0YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3N0YXRzLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXFfc3RhdHMuYwpAQCAtMTY1LDE3ICsxNjUsMjcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKKy8qIHNob3VsZCBiZSBjYWxsZWQgbGF0ZSBpbiB0aGUgQ1BVIHJlbW92YWwgc2VxdWVuY2Ugc28gdGhhdCB0aGUgc3RhdHMKKyAqIG1lbW9yeSBpcyBzdGlsbCBhdmFpbGFibGUgaW4gY2FzZSBzb21lb25lIHRyaWVzIHRvIHVzZSBpdC4KKyAqLwogc3RhdGljIHZvaWQgY3B1ZnJlcV9zdGF0c19mcmVlX3RhYmxlKHVuc2lnbmVkIGludCBjcHUpCiB7CiAJc3RydWN0IGNwdWZyZXFfc3RhdHMgKnN0YXQgPSBwZXJfY3B1KGNwdWZyZXFfc3RhdHNfdGFibGUsIGNwdSk7Ci0Jc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kgPSBjcHVmcmVxX2NwdV9nZXQoY3B1KTsKLQlpZiAocG9saWN5ICYmIHBvbGljeS0+Y3B1ID09IGNwdSkKLQkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwb2xpY3ktPmtvYmosICZzdGF0c19hdHRyX2dyb3VwKTsKIAlpZiAoc3RhdCkgewogCQlrZnJlZShzdGF0LT50aW1lX2luX3N0YXRlKTsKIAkJa2ZyZWUoc3RhdCk7CiAJfQogCXBlcl9jcHUoY3B1ZnJlcV9zdGF0c190YWJsZSwgY3B1KSA9IE5VTEw7Cit9CisKKy8qIG11c3QgYmUgY2FsbGVkIGVhcmx5IGluIHRoZSBDUFUgcmVtb3ZhbCBzZXF1ZW5jZSAoYmVmb3JlCisgKiBjcHVmcmVxX3JlbW92ZV9kZXYpIHNvIHRoYXQgcG9saWN5IGlzIHN0aWxsIHZhbGlkLgorICovCitzdGF0aWMgdm9pZCBjcHVmcmVxX3N0YXRzX2ZyZWVfc3lzZnModW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSA9IGNwdWZyZXFfY3B1X2dldChjcHUpOworCWlmIChwb2xpY3kgJiYgcG9saWN5LT5jcHUgPT0gY3B1KQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBvbGljeS0+a29iaiwgJnN0YXRzX2F0dHJfZ3JvdXApOwogCWlmIChwb2xpY3kpCiAJCWNwdWZyZXFfY3B1X3B1dChwb2xpY3kpOwogfQpAQCAtMzE2LDYgKzMyNiw5IEBACiAJY2FzZSBDUFVfT05MSU5FX0ZST1pFTjoKIAkJY3B1ZnJlcV91cGRhdGVfcG9saWN5KGNwdSk7CiAJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJY3B1ZnJlcV9zdGF0c19mcmVlX3N5c2ZzKGNwdSk7CisJCWJyZWFrOwogCWNhc2UgQ1BVX0RFQUQ6CiAJY2FzZSBDUFVfREVBRF9GUk9aRU46CiAJCWNwdWZyZXFfc3RhdHNfZnJlZV90YWJsZShjcHUpOwpAQCAtMzI0LDkgKzMzNywxMCBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3B1ZnJlcV9zdGF0X2NwdV9ub3RpZmllciBfX3JlZmRhdGEgPQoteworLyogcHJpb3JpdHk9MSBzbyB0aGlzIHdpbGwgZ2V0IGNhbGxlZCBiZWZvcmUgY3B1ZnJlcV9yZW1vdmVfZGV2ICovCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGNwdWZyZXFfc3RhdF9jcHVfbm90aWZpZXIgX19yZWZkYXRhID0gewogCS5ub3RpZmllcl9jYWxsID0gY3B1ZnJlcV9zdGF0X2NwdV9jYWxsYmFjaywKKwkucHJpb3JpdHkgPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBub3RpZmllcl9wb2xpY3lfYmxvY2sgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcV91c2Vyc3BhY2UuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCmluZGV4IDY2ZDJkMWQuLmYyMzEwMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxX3VzZXJzcGFjZS5jCkBAIC0zNyw5ICszNyw2IEBACiBzdGF0aWMgREVGSU5FX01VVEVYKHVzZXJzcGFjZV9tdXRleCk7CiBzdGF0aWMgaW50IGNwdXNfdXNpbmdfdXNlcnNwYWNlX2dvdmVybm9yOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBcCi0JY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19HT1ZFUk5PUiwgInVzZXJzcGFjZSIsIG1zZykKLQogLyoga2VlcCB0cmFjayBvZiBmcmVxdWVuY3kgdHJhbnNpdGlvbnMgKi8KIHN0YXRpYyBpbnQKIHVzZXJzcGFjZV9jcHVmcmVxX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgdmFsLApAQCAtNTAsNyArNDcsNyBAQAogCWlmICghcGVyX2NwdShjcHVfaXNfbWFuYWdlZCwgZnJlcS0+Y3B1KSkKIAkJcmV0dXJuIDA7CiAKLQlkcHJpbnRrKCJzYXZpbmcgY3B1X2N1cl9mcmVxIG9mIGNwdSAldSB0byBiZSAldSBrSHpcbiIsCisJcHJfZGVidWcoInNhdmluZyBjcHVfY3VyX2ZyZXEgb2YgY3B1ICV1IHRvIGJlICV1IGtIelxuIiwKIAkJCWZyZXEtPmNwdSwgZnJlcS0+bmV3KTsKIAlwZXJfY3B1KGNwdV9jdXJfZnJlcSwgZnJlcS0+Y3B1KSA9IGZyZXEtPm5ldzsKIApAQCAtNzMsNyArNzAsNyBAQAogewogCWludCByZXQgPSAtRUlOVkFMOwogCi0JZHByaW50aygiY3B1ZnJlcV9zZXQgZm9yIGNwdSAldSwgZnJlcSAldSBrSHpcbiIsIHBvbGljeS0+Y3B1LCBmcmVxKTsKKwlwcl9kZWJ1ZygiY3B1ZnJlcV9zZXQgZm9yIGNwdSAldSwgZnJlcSAldSBrSHpcbiIsIHBvbGljeS0+Y3B1LCBmcmVxKTsKIAogCW11dGV4X2xvY2soJnVzZXJzcGFjZV9tdXRleCk7CiAJaWYgKCFwZXJfY3B1KGNwdV9pc19tYW5hZ2VkLCBwb2xpY3ktPmNwdSkpCkBAIC0xMzQsNyArMTMxLDcgQEAKIAkJcGVyX2NwdShjcHVfbWF4X2ZyZXEsIGNwdSkgPSBwb2xpY3ktPm1heDsKIAkJcGVyX2NwdShjcHVfY3VyX2ZyZXEsIGNwdSkgPSBwb2xpY3ktPmN1cjsKIAkJcGVyX2NwdShjcHVfc2V0X2ZyZXEsIGNwdSkgPSBwb2xpY3ktPmN1cjsKLQkJZHByaW50aygibWFuYWdpbmcgY3B1ICV1IHN0YXJ0ZWQgIgorCQlwcl9kZWJ1ZygibWFuYWdpbmcgY3B1ICV1IHN0YXJ0ZWQgIgogCQkJIigldSAtICV1IGtIeiwgY3VycmVudGx5ICV1IGtIeilcbiIsCiAJCQkJY3B1LAogCQkJCXBlcl9jcHUoY3B1X21pbl9mcmVxLCBjcHUpLApAQCAtMTU2LDEyICsxNTMsMTIgQEAKIAkJcGVyX2NwdShjcHVfbWluX2ZyZXEsIGNwdSkgPSAwOwogCQlwZXJfY3B1KGNwdV9tYXhfZnJlcSwgY3B1KSA9IDA7CiAJCXBlcl9jcHUoY3B1X3NldF9mcmVxLCBjcHUpID0gMDsKLQkJZHByaW50aygibWFuYWdpbmcgY3B1ICV1IHN0b3BwZWRcbiIsIGNwdSk7CisJCXByX2RlYnVnKCJtYW5hZ2luZyBjcHUgJXUgc3RvcHBlZFxuIiwgY3B1KTsKIAkJbXV0ZXhfdW5sb2NrKCZ1c2Vyc3BhY2VfbXV0ZXgpOwogCQlicmVhazsKIAljYXNlIENQVUZSRVFfR09WX0xJTUlUUzoKIAkJbXV0ZXhfbG9jaygmdXNlcnNwYWNlX211dGV4KTsKLQkJZHByaW50aygibGltaXQgZXZlbnQgZm9yIGNwdSAldTogJXUgLSAldSBrSHosICIKKwkJcHJfZGVidWcoImxpbWl0IGV2ZW50IGZvciBjcHUgJXU6ICV1IC0gJXUga0h6LCAiCiAJCQkiY3VycmVudGx5ICV1IGtIeiwgbGFzdCBzZXQgdG8gJXUga0h6XG4iLAogCQkJY3B1LCBwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgsCiAJCQlwZXJfY3B1KGNwdV9jdXJfZnJlcSwgY3B1KSwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYyBiL2RyaXZlcnMvY3B1ZnJlcS9lX3Bvd2Vyc2F2ZXIuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2VfcG93ZXJzYXZlci5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvZV9wb3dlcnNhdmVyLmMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2VsYW5mcmVxLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9lbGFuZnJlcS5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvZWxhbmZyZXEuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYyBiL2RyaXZlcnMvY3B1ZnJlcS9mcmVxX3RhYmxlLmMKaW5kZXggMDU0MzIyMS4uOTA0MzFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2ZyZXFfdGFibGUuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvZnJlcV90YWJsZS5jCkBAIC0xNCw5ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgXAotCWNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfQ09SRSwgImZyZXEtdGFibGUiLCBtc2cpCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgRlJFUVVFTkNZIFRBQkxFIEhFTFBFUlMgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0zMSwxMSArMjgsMTEgQEAKIAlmb3IgKGkgPSAwOyAodGFibGVbaV0uZnJlcXVlbmN5ICE9IENQVUZSRVFfVEFCTEVfRU5EKTsgaSsrKSB7CiAJCXVuc2lnbmVkIGludCBmcmVxID0gdGFibGVbaV0uZnJlcXVlbmN5OwogCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpIHsKLQkJCWRwcmludGsoInRhYmxlIGVudHJ5ICV1IGlzIGludmFsaWQsIHNraXBwaW5nXG4iLCBpKTsKKwkJCXByX2RlYnVnKCJ0YWJsZSBlbnRyeSAldSBpcyBpbnZhbGlkLCBza2lwcGluZ1xuIiwgaSk7CiAKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWRwcmludGsoInRhYmxlIGVudHJ5ICV1OiAldSBrSHosICV1IGluZGV4XG4iLAorCQlwcl9kZWJ1ZygidGFibGUgZW50cnkgJXU6ICV1IGtIeiwgJXUgaW5kZXhcbiIsCiAJCQkJCWksIGZyZXEsIHRhYmxlW2ldLmluZGV4KTsKIAkJaWYgKGZyZXEgPCBtaW5fZnJlcSkKIAkJCW1pbl9mcmVxID0gZnJlcTsKQEAgLTYxLDcgKzU4LDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCi0JZHByaW50aygicmVxdWVzdCBmb3IgdmVyaWZpY2F0aW9uIG9mIHBvbGljeSAoJXUgLSAldSBrSHopIGZvciBjcHUgJXVcbiIsCisJcHJfZGVidWcoInJlcXVlc3QgZm9yIHZlcmlmaWNhdGlvbiBvZiBwb2xpY3kgKCV1IC0gJXUga0h6KSBmb3IgY3B1ICV1XG4iLAogCQkJCQlwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgsIHBvbGljeS0+Y3B1KTsKIAogCWlmICghY3B1X29ubGluZShwb2xpY3ktPmNwdSkpCkBAIC04Niw3ICs4Myw3IEBACiAJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSwKIAkJCQkgICAgIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSk7CiAKLQlkcHJpbnRrKCJ2ZXJpZmljYXRpb24gbGVhZCB0byAoJXUgLSAldSBrSHopIGZvciBjcHUgJXVcbiIsCisJcHJfZGVidWcoInZlcmlmaWNhdGlvbiBsZWFkIHRvICgldSAtICV1IGtIeikgZm9yIGNwdSAldVxuIiwKIAkJCQlwb2xpY3ktPm1pbiwgcG9saWN5LT5tYXgsIHBvbGljeS0+Y3B1KTsKIAogCXJldHVybiAwOwpAQCAtMTEwLDcgKzEwNyw3IEBACiAJfTsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWRwcmludGsoInJlcXVlc3QgZm9yIHRhcmdldCAldSBrSHogKHJlbGF0aW9uOiAldSkgZm9yIGNwdSAldVxuIiwKKwlwcl9kZWJ1ZygicmVxdWVzdCBmb3IgdGFyZ2V0ICV1IGtIeiAocmVsYXRpb246ICV1KSBmb3IgY3B1ICV1XG4iLAogCQkJCQl0YXJnZXRfZnJlcSwgcmVsYXRpb24sIHBvbGljeS0+Y3B1KTsKIAogCXN3aXRjaCAocmVsYXRpb24pIHsKQEAgLTE2Nyw3ICsxNjQsNyBAQAogCX0gZWxzZQogCQkqaW5kZXggPSBvcHRpbWFsLmluZGV4OwogCi0JZHByaW50aygidGFyZ2V0IGlzICV1ICgldSBrSHosICV1KVxuIiwgKmluZGV4LCB0YWJsZVsqaW5kZXhdLmZyZXF1ZW5jeSwKKwlwcl9kZWJ1ZygidGFyZ2V0IGlzICV1ICgldSBrSHosICV1KVxuIiwgKmluZGV4LCB0YWJsZVsqaW5kZXhdLmZyZXF1ZW5jeSwKIAkJdGFibGVbKmluZGV4XS5pbmRleCk7CiAKIAlyZXR1cm4gMDsKQEAgLTIxNiwxNCArMjEzLDE0IEBACiB2b2lkIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IGNwdSkKIHsKLQlkcHJpbnRrKCJzZXR0aW5nIHNob3dfdGFibGUgZm9yIGNwdSAldSB0byAlcFxuIiwgY3B1LCB0YWJsZSk7CisJcHJfZGVidWcoInNldHRpbmcgc2hvd190YWJsZSBmb3IgY3B1ICV1IHRvICVwXG4iLCBjcHUsIHRhYmxlKTsKIAlwZXJfY3B1KGNwdWZyZXFfc2hvd190YWJsZSwgY3B1KSA9IHRhYmxlOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIpOwogCiB2b2lkIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3B1dF9hdHRyKHVuc2lnbmVkIGludCBjcHUpCiB7Ci0JZHByaW50aygiY2xlYXJpbmcgc2hvd190YWJsZSBmb3IgY3B1ICV1XG4iLCBjcHUpOworCXByX2RlYnVnKCJjbGVhcmluZyBzaG93X3RhYmxlIGZvciBjcHUgJXVcbiIsIGNwdSk7CiAJcGVyX2NwdShjcHVmcmVxX3Nob3dfdGFibGUsIGNwdSkgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfcHV0X2F0dHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYyBiL2RyaXZlcnMvY3B1ZnJlcS9neC1zdXNwbW9kLmMKc2ltaWxhcml0eSBpbmRleCA5NSUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2d4LXN1c3Btb2QuYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL2d4LXN1c3Btb2QuYwppbmRleCAzMjk3NGNmLi5mZmUxZjJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvZ3gtc3VzcG1vZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9neC1zdXNwbW9kLmMKQEAgLTE0Miw5ICsxNDIsNiBAQAogI2RlZmluZSBQT0xJQ1lfTUlOX0RJViAyMAogCiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCi0JCSJneC1zdXNwbW9kIiwgbXNnKQotCiAvKioKICAqIHdlIGNhbiBkZXRlY3QgYSBjb3JlIG11bHRpcGlsZXIgZnJvbSBkaXIwX2xzYgogICogZnJvbSBHWDEgZGF0YXNoZWV0IHAuNTYsCkBAIC0xOTEsNyArMTg4LDcgQEAKIAkvKiBjaGVjayBpZiBDUFUgaXMgYSBNZWRpYUdYIG9yIGEgR2VvZGUuICovCiAJaWYgKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9OU0MpICYmCiAJICAgIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9DWVJJWCkpIHsKLQkJZHByaW50aygiZXJyb3I6IG5vIE1lZGlhR1gvR2VvZGUgcHJvY2Vzc29yIGZvdW5kIVxuIik7CisJCXByX2RlYnVnKCJlcnJvcjogbm8gTWVkaWFHWC9HZW9kZSBwcm9jZXNzb3IgZm91bmQhXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC0yMDEsNyArMTk4LDcgQEAKIAkJCXJldHVybiBneF9wY2k7CiAJfQogCi0JZHByaW50aygiZXJyb3I6IG5vIHN1cHBvcnRlZCBjaGlwc2V0IGZvdW5kIVxuIik7CisJcHJfZGVidWcoImVycm9yOiBubyBzdXBwb3J0ZWQgY2hpcHNldCBmb3VuZCFcbiIpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0zMDUsMTQgKzMwMiwxNCBAQAogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCQlkcHJpbnRrKCJmYXRhbDogdHJ5IHRvIHNldCB1bmtub3duIGNoaXBzZXQuXG4iKTsKKwkJCXByX2RlYnVnKCJmYXRhbDogdHJ5IHRvIHNldCB1bmtub3duIGNoaXBzZXQuXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCX0gZWxzZSB7CiAJCXN1c2NmZyA9IGd4X3BhcmFtcy0+cGNpX3N1c2NmZyAmIH4oU1VTTU9EKTsKIAkJZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24gPSAwOwogCQlneF9wYXJhbXMtPm9uX2R1cmF0aW9uID0gMDsKLQkJZHByaW50aygic3VzcGVuZCBtb2R1bGF0aW9uIGRpc2FibGVkOiBjcHUgcnVucyAxMDAlJSBzcGVlZC5cbiIpOworCQlwcl9kZWJ1Zygic3VzcGVuZCBtb2R1bGF0aW9uIGRpc2FibGVkOiBjcHUgcnVucyAxMDAlJSBzcGVlZC5cbiIpOwogCX0KIAogCWd4X3dyaXRlX2J5dGUoUENJX01PRE9GRiwgZ3hfcGFyYW1zLT5vZmZfZHVyYXRpb24pOwpAQCAtMzI3LDkgKzMyNCw5IEBACiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKIAotCWRwcmludGsoInN1c3BlbmQgbW9kdWxhdGlvbiB3LyBkdXJhdGlvbiBvZiBPTjolZCB1cywgT0ZGOiVkIHVzXG4iLAorCXByX2RlYnVnKCJzdXNwZW5kIG1vZHVsYXRpb24gdy8gZHVyYXRpb24gb2YgT046JWQgdXMsIE9GRjolZCB1c1xuIiwKIAkJZ3hfcGFyYW1zLT5vbl9kdXJhdGlvbiAqIDMyLCBneF9wYXJhbXMtPm9mZl9kdXJhdGlvbiAqIDMyKTsKLQlkcHJpbnRrKCJzdXNwZW5kIG1vZHVsYXRpb24gdy8gY2xvY2sgc3BlZWQ6ICVkIGtIei5cbiIsIGZyZXFzLm5ldyk7CisJcHJfZGVidWcoInN1c3BlbmQgbW9kdWxhdGlvbiB3LyBjbG9jayBzcGVlZDogJWQga0h6LlxuIiwgZnJlcXMubmV3KTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTQyOCw4ICs0MjUsOCBAQAogCXN0b2NrX2ZyZXEgPSBtYXhmcmVxOwogCWN1cmZyZXEgPSBneF9nZXRfY3B1c3BlZWQoMCk7CiAKLQlkcHJpbnRrKCJjcHUgbWF4IGZyZXF1ZW5jeSBpcyAlZC5cbiIsIG1heGZyZXEpOwotCWRwcmludGsoImNwdSBjdXJyZW50IGZyZXF1ZW5jeSBpcyAlZGtIei5cbiIsIGN1cmZyZXEpOworCXByX2RlYnVnKCJjcHUgbWF4IGZyZXF1ZW5jeSBpcyAlZC5cbiIsIG1heGZyZXEpOworCXByX2RlYnVnKCJjcHUgY3VycmVudCBmcmVxdWVuY3kgaXMgJWRrSHouXG4iLCBjdXJmcmVxKTsKIAogCS8qIHNldHVwIGJhc2ljIHN0cnVjdCBmb3IgY3B1ZnJlcSBBUEkgKi8KIAlwb2xpY3ktPmNwdSA9IDA7CkBAIC00NzUsNyArNDcyLDcgQEAKIAlpZiAobWF4X2R1cmF0aW9uID4gMHhmZikKIAkJbWF4X2R1cmF0aW9uID0gMHhmZjsKIAotCWRwcmludGsoImdlb2RlIHN1c3BlbmQgbW9kdWxhdGlvbiBhdmFpbGFibGUuXG4iKTsKKwlwcl9kZWJ1ZygiZ2VvZGUgc3VzcGVuZCBtb2R1bGF0aW9uIGF2YWlsYWJsZS5cbiIpOwogCiAJcGFyYW1zID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGd4ZnJlcV9wYXJhbXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAocGFyYW1zID09IE5VTEwpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYyBiL2RyaXZlcnMvY3B1ZnJlcS9sb25naGF1bC5jCnNpbWlsYXJpdHkgaW5kZXggOTglCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvbG9uZ2hhdWwuYwppbmRleCBjZjQ4Y2RkLi5mNDdkMjZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvbG9uZ2hhdWwuYwpAQCAtNzcsOSArNzcsNiBAQAogc3RhdGljIGludCBkaXNhYmxlX2FjcGlfYzM7CiBzdGF0aWMgaW50IHJldmlkX2VycmF0YTsKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKLQkJImxvbmdoYXVsIiwgbXNnKQotCiAKIC8qIENsb2NrIHJhdGlvcyBtdWx0aXBsaWVkIGJ5IDEwICovCiBzdGF0aWMgaW50IG11bHRzWzMyXTsKQEAgLTg3LDcgKzg0LDYgQEAKIHN0YXRpYyBpbnQgbG9uZ2hhdWxfdmVyc2lvbjsKIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmxvbmdoYXVsX3RhYmxlOwogCi0jaWZkZWYgQ09ORklHX0NQVV9GUkVRX0RFQlVHCiBzdGF0aWMgY2hhciBzcGVlZGJ1ZmZlcls4XTsKIAogc3RhdGljIGNoYXIgKnByaW50X3NwZWVkKGludCBzcGVlZCkKQEAgLTEwNiw3ICsxMDIsNiBAQAogCiAJcmV0dXJuIHNwZWVkYnVmZmVyOwogfQotI2VuZGlmCiAKIAogc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX3NwZWVkKGludCBtdWx0KQpAQCAtMjc1LDcgKzI3MCw3IEBACiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCi0JZHByaW50aygiU2V0dGluZyB0byBGU0I6JWRNSHogTXVsdDolZC4lZHggKCVzKVxuIiwKKwlwcl9kZWJ1ZygiU2V0dGluZyB0byBGU0I6JWRNSHogTXVsdDolZC4lZHggKCVzKVxuIiwKIAkJCWZzYiwgbXVsdC8xMCwgbXVsdCUxMCwgcHJpbnRfc3BlZWQoc3BlZWQvMTAwMCkpOwogcmV0cnlfbG9vcDoKIAlwcmVlbXB0X2Rpc2FibGUoKTsKQEAgLTQ2MCwxMiArNDU1LDEyIEBACiAJCWJyZWFrOwogCX0KIAotCWRwcmludGsoIk1pbk11bHQ6JWQuJWR4IE1heE11bHQ6JWQuJWR4XG4iLAorCXByX2RlYnVnKCJNaW5NdWx0OiVkLiVkeCBNYXhNdWx0OiVkLiVkeFxuIiwKIAkJIG1pbm11bHQvMTAsIG1pbm11bHQlMTAsIG1heG11bHQvMTAsIG1heG11bHQlMTApOwogCiAJaGlnaGVzdF9zcGVlZCA9IGNhbGNfc3BlZWQobWF4bXVsdCk7CiAJbG93ZXN0X3NwZWVkID0gY2FsY19zcGVlZChtaW5tdWx0KTsKLQlkcHJpbnRrKCJGU0I6JWRNSHogIExvd2VzdCBzcGVlZDogJXMgICBIaWdoZXN0IHNwZWVkOiVzXG4iLCBmc2IsCisJcHJfZGVidWcoIkZTQjolZE1IeiAgTG93ZXN0IHNwZWVkOiAlcyAgIEhpZ2hlc3Qgc3BlZWQ6JXNcbiIsIGZzYiwKIAkJIHByaW50X3NwZWVkKGxvd2VzdF9zcGVlZC8xMDAwKSwKIAkJIHByaW50X3NwZWVkKGhpZ2hlc3Rfc3BlZWQvMTAwMCkpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaCBiL2RyaXZlcnMvY3B1ZnJlcS9sb25naGF1bC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuaApyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL2xvbmdoYXVsLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMgYi9kcml2ZXJzL2NwdWZyZXEvbG9uZ3J1bi5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25ncnVuLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9sb25ncnVuLmMKaW5kZXggZDlmNTEzNi4uMzRlYTM1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdydW4uYworKysgYi9kcml2ZXJzL2NwdWZyZXEvbG9uZ3J1bi5jCkBAIC0xNSw5ICsxNSw2IEBACiAjaW5jbHVkZSA8YXNtL21zci5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKLQkJImxvbmdydW4iLCBtc2cpCi0KIHN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9kcml2ZXIJbG9uZ3J1bl9kcml2ZXI7CiAKIC8qKgpAQCAtNDAsMTQgKzM3LDE0IEBACiAJdTMyIG1zcl9sbywgbXNyX2hpOwogCiAJcmRtc3IoTVNSX1RNVEFfTE9OR1JVTl9GTEFHUywgbXNyX2xvLCBtc3JfaGkpOwotCWRwcmludGsoImxvbmdydW4gZmxhZ3MgYXJlICV4IC0gJXhcbiIsIG1zcl9sbywgbXNyX2hpKTsKKwlwcl9kZWJ1ZygibG9uZ3J1biBmbGFncyBhcmUgJXggLSAleFxuIiwgbXNyX2xvLCBtc3JfaGkpOwogCWlmIChtc3JfbG8gJiAweDAxKQogCQlwb2xpY3ktPnBvbGljeSA9IENQVUZSRVFfUE9MSUNZX1BFUkZPUk1BTkNFOwogCWVsc2UKIAkJcG9saWN5LT5wb2xpY3kgPSBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkU7CiAKIAlyZG1zcihNU1JfVE1UQV9MT05HUlVOX0NUUkwsIG1zcl9sbywgbXNyX2hpKTsKLQlkcHJpbnRrKCJsb25ncnVuIGN0cmwgaXMgJXggLSAleFxuIiwgbXNyX2xvLCBtc3JfaGkpOworCXByX2RlYnVnKCJsb25ncnVuIGN0cmwgaXMgJXggLSAleFxuIiwgbXNyX2xvLCBtc3JfaGkpOwogCW1zcl9sbyAmPSAweDAwMDAwMDdGOwogCW1zcl9oaSAmPSAweDAwMDAwMDdGOwogCkBAIC0xNTAsNyArMTQ3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAljcHVpZCgweDgwODYwMDA3LCAmZWF4LCAmZWJ4LCAmZWN4LCAmZWR4KTsKLQlkcHJpbnRrKCJjcHVpZCBlYXggaXMgJXVcbiIsIGVheCk7CisJcHJfZGVidWcoImNwdWlkIGVheCBpcyAldVxuIiwgZWF4KTsKIAogCXJldHVybiBlYXggKiAxMDAwOwogfQpAQCAtMTk2LDcgKzE5Myw3IEBACiAJCXJkbXNyKE1TUl9UTVRBX0xSVElfVk9MVF9NSFosIG1zcl9sbywgbXNyX2hpKTsKIAkJKmhpZ2hfZnJlcSA9IG1zcl9sbyAqIDEwMDA7IC8qIHRvIGtIeiAqLwogCi0JCWRwcmludGsoImxvbmdydW4gdGFibGUgaW50ZXJmYWNlIHRvbGQgJXUgLSAldSBrSHpcbiIsCisJCXByX2RlYnVnKCJsb25ncnVuIHRhYmxlIGludGVyZmFjZSB0b2xkICV1IC0gJXUga0h6XG4iLAogCQkJCSpsb3dfZnJlcSwgKmhpZ2hfZnJlcSk7CiAKIAkJaWYgKCpsb3dfZnJlcSA+ICpoaWdoX2ZyZXEpCkBAIC0yMDcsNyArMjA0LDcgQEAKIAkvKiBzZXQgdGhlIHVwcGVyIGJvcmRlciB0byB0aGUgdmFsdWUgZGV0ZXJtaW5lZCBkdXJpbmcgVFNDIGluaXQgKi8KIAkqaGlnaF9mcmVxID0gKGNwdV9raHogLyAxMDAwKTsKIAkqaGlnaF9mcmVxID0gKmhpZ2hfZnJlcSAqIDEwMDA7Ci0JZHByaW50aygiaGlnaCBmcmVxdWVuY3kgaXMgJXUga0h6XG4iLCAqaGlnaF9mcmVxKTsKKwlwcl9kZWJ1ZygiaGlnaCBmcmVxdWVuY3kgaXMgJXUga0h6XG4iLCAqaGlnaF9mcmVxKTsKIAogCS8qIGdldCBjdXJyZW50IGJvcmRlcnMgKi8KIAlyZG1zcihNU1JfVE1UQV9MT05HUlVOX0NUUkwsIG1zcl9sbywgbXNyX2hpKTsKQEAgLTIzMyw3ICsyMzAsNyBAQAogCQkvKiByZXN0b3JlIHZhbHVlcyAqLwogCQl3cm1zcihNU1JfVE1UQV9MT05HUlVOX0NUUkwsIHNhdmVfbG8sIHNhdmVfaGkpOwogCX0KLQlkcHJpbnRrKCJwZXJjZW50YWdlIGlzICV1ICUlLCBmcmVxIGlzICV1IE1IelxuIiwgZWN4LCBlYXgpOworCXByX2RlYnVnKCJwZXJjZW50YWdlIGlzICV1ICUlLCBmcmVxIGlzICV1IE1IelxuIiwgZWN4LCBlYXgpOwogCiAJLyogcGVyZm9ybWFuY2VfcGN0ZyA9IChjdXJyZW50X2ZyZXEgLSBsb3dfZnJlcSkvKGhpZ2hfZnJlcSAtIGxvd19mcmVxKQogCSAqIGVxYWxzCkBAIC0yNDksNyArMjQ2LDcgQEAKIAllZHggPSAoKGVheCAtIGVieCkgKiAxMDApIC8gKDEwMCAtIGVjeCk7CiAJKmxvd19mcmVxID0gZWR4ICogMTAwMDsgLyogYmFjayB0byBrSHogKi8KIAotCWRwcmludGsoImxvdyBmcmVxdWVuY3kgaXMgJXUga0h6XG4iLCAqbG93X2ZyZXEpOworCXByX2RlYnVnKCJsb3cgZnJlcXVlbmN5IGlzICV1IGtIelxuIiwgKmxvd19mcmVxKTsKIAogCWlmICgqbG93X2ZyZXEgPiAqaGlnaF9mcmVxKQogCQkqbG93X2ZyZXEgPSAqaGlnaF9mcmVxOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL21wZXJmLmMgYi9kcml2ZXJzL2NwdWZyZXEvbXBlcmYuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL21wZXJmLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9tcGVyZi5jCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbXBlcmYuaCBiL2RyaXZlcnMvY3B1ZnJlcS9tcGVyZi5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbXBlcmYuaApyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL21wZXJmLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jIGIvZHJpdmVycy9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3A0LWNsb2NrbW9kLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCmluZGV4IDUyYzkzNjQuLjZiZTNlMDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9wNC1jbG9ja21vZC5jCkBAIC0zNSw4ICszNSw2IEBACiAjaW5jbHVkZSAic3BlZWRzdGVwLWxpYi5oIgogCiAjZGVmaW5lIFBGWAkicDQtY2xvY2ttb2Q6ICIKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCi0JCSJwNC1jbG9ja21vZCIsIG1zZykKIAogLyoKICAqIER1dHkgQ3ljbGUgKDNiaXRzKSwgbm90ZSBEQ19ESVNBQkxFIGlzIG5vdCBzcGVjaWZpZWQgaW4KQEAgLTY2LDcgKzY0LDcgQEAKIAlyZG1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9USEVSTV9TVEFUVVMsICZsLCAmaCk7CiAKIAlpZiAobCAmIDB4MDEpCi0JCWRwcmludGsoIkNQVSMlZCBjdXJyZW50bHkgdGhlcm1hbCB0aHJvdHRsZWRcbiIsIGNwdSk7CisJCXByX2RlYnVnKCJDUFUjJWQgY3VycmVudGx5IHRoZXJtYWwgdGhyb3R0bGVkXG4iLCBjcHUpOwogCiAJaWYgKGhhc19ONDRfTzE3X2VycmF0YVtjcHVdICYmCiAJICAgIChuZXdzdGF0ZSA9PSBEQ18yNVBUIHx8IG5ld3N0YXRlID09IERDX0RGTFQpKQpAQCAtNzQsMTAgKzcyLDEwIEBACiAKIAlyZG1zcl9vbl9jcHUoY3B1LCBNU1JfSUEzMl9USEVSTV9DT05UUk9MLCAmbCwgJmgpOwogCWlmIChuZXdzdGF0ZSA9PSBEQ19ESVNBQkxFKSB7Ci0JCWRwcmludGsoIkNQVSMlZCBkaXNhYmxpbmcgbW9kdWxhdGlvblxuIiwgY3B1KTsKKwkJcHJfZGVidWcoIkNQVSMlZCBkaXNhYmxpbmcgbW9kdWxhdGlvblxuIiwgY3B1KTsKIAkJd3Jtc3Jfb25fY3B1KGNwdSwgTVNSX0lBMzJfVEhFUk1fQ09OVFJPTCwgbCAmIH4oMTw8NCksIGgpOwogCX0gZWxzZSB7Ci0JCWRwcmludGsoIkNQVSMlZCBzZXR0aW5nIGR1dHkgY3ljbGUgdG8gJWQlJVxuIiwKKwkJcHJfZGVidWcoIkNQVSMlZCBzZXR0aW5nIGR1dHkgY3ljbGUgdG8gJWQlJVxuIiwKIAkJCWNwdSwgKCgxMjUgKiBuZXdzdGF0ZSkgLyAxMCkpOwogCQkvKiBiaXRzIDYzIC0gNQk6IHJlc2VydmVkCiAJCSAqIGJpdCAgNAk6IGVuYWJsZS9kaXNhYmxlCkBAIC0yMTcsNyArMjE1LDcgQEAKIAljYXNlIDB4MGYxMToKIAljYXNlIDB4MGYxMjoKIAkJaGFzX040NF9PMTdfZXJyYXRhW3BvbGljeS0+Y3B1XSA9IDE7Ci0JCWRwcmludGsoImhhcyBlcnJhdGEgLS0gZGlzYWJsaW5nIGxvdyBmcmVxdWVuY2llc1xuIik7CisJCXByX2RlYnVnKCJoYXMgZXJyYXRhIC0tIGRpc2FibGluZyBsb3cgZnJlcXVlbmNpZXNcbiIpOwogCX0KIAogCWlmIChzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpID09IFNQRUVEU1RFUF9DUFVfUDREICYmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcGNjLWNwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvcGNjLWNwdWZyZXEuYwppbmRleCA3NTVhMzFlLi43YjA2MDNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcGNjLWNwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvcGNjLWNwdWZyZXEuYwpAQCAtMzksNyArMzksNyBAQAogCiAjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KIAotI2RlZmluZSBQQ0NfVkVSU0lPTiAJIjEuMDAuMDAiCisjZGVmaW5lIFBDQ19WRVJTSU9OCSIxLjEwLjAwIgogI2RlZmluZSBQT0xMX0xPT1BTIAkzMDAKIAogI2RlZmluZSBDTURfQ09NUExFVEUgCTB4MQpAQCAtNDgsOSArNDgsNiBAQAogCiAjZGVmaW5lIEJVRl9TWgkJNAogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwJXAotCQkJCQkgICAgICJwY2MtY3B1ZnJlcSIsIG1zZykKLQogc3RydWN0IHBjY19yZWdpc3Rlcl9yZXNvdXJjZSB7CiAJdTggZGVzY3JpcHRvcjsKIAl1MTYgbGVuZ3RoOwpAQCAtMTAyLDcgKzk5LDcgQEAKIHN0YXRpYyB1NjQgZG9vcmJlbGxfcHJlc2VydmU7CiBzdGF0aWMgdTY0IGRvb3JiZWxsX3dyaXRlOwogCi1zdGF0aWMgdTggT1NDX1VVSURbMTZdID0gezB4NjMsIDB4OUIsIDB4MkMsIDB4OUYsIDB4NzAsIDB4OTEsIDB4NDksIDB4MWYsCitzdGF0aWMgdTggT1NDX1VVSURbMTZdID0gezB4OUYsIDB4MkMsIDB4OUIsIDB4NjMsIDB4OTEsIDB4NzAsIDB4MWYsIDB4NDksCiAJCQkgIDB4QkIsIDB4NEYsIDB4QTUsIDB4OTgsIDB4MkYsIDB4QTEsIDB4QjUsIDB4NDZ9OwogCiBzdHJ1Y3QgcGNjX2NwdSB7CkBAIC0xNTIsNyArMTQ5LDcgQEAKIAogCXNwaW5fbG9jaygmcGNjX2xvY2spOwogCi0JZHByaW50aygiZ2V0OiBnZXRfZnJlcSBmb3IgQ1BVICVkXG4iLCBjcHUpOworCXByX2RlYnVnKCJnZXQ6IGdldF9mcmVxIGZvciBDUFUgJWRcbiIsIGNwdSk7CiAJcGNjX2NwdV9kYXRhID0gcGVyX2NwdV9wdHIocGNjX2NwdV9pbmZvLCBjcHUpOwogCiAJaW5wdXRfYnVmZmVyID0gMHgxOwpAQCAtMTcwLDcgKzE2Nyw3IEBACiAKIAlzdGF0dXMgPSBpb3JlYWQxNigmcGNjaF9oZHItPnN0YXR1cyk7CiAJaWYgKHN0YXR1cyAhPSBDTURfQ09NUExFVEUpIHsKLQkJZHByaW50aygiZ2V0OiBGQUlMRUQ6IGZvciBDUFUgJWQsIHN0YXR1cyBpcyAlZFxuIiwKKwkJcHJfZGVidWcoImdldDogRkFJTEVEOiBmb3IgQ1BVICVkLCBzdGF0dXMgaXMgJWRcbiIsCiAJCQljcHUsIHN0YXR1cyk7CiAJCWdvdG8gY21kX2luY29tcGxldGU7CiAJfQpAQCAtMTc4LDE0ICsxNzUsMTQgQEAKIAljdXJyX2ZyZXEgPSAoKChpb3JlYWQzMigmcGNjaF9oZHItPm5vbWluYWwpICogKG91dHB1dF9idWZmZXIgJiAweGZmKSkKIAkJCS8gMTAwKSAqIDEwMDApOwogCi0JZHByaW50aygiZ2V0OiBTVUNDRVNTOiAodmlydHVhbCkgb3V0cHV0X29mZnNldCBmb3IgY3B1ICVkIGlzICIKLQkJIjB4JXgsIGNvbnRhaW5zIGEgdmFsdWUgb2Y6IDB4JXguIFNwZWVkIGlzOiAlZCBNSHpcbiIsCisJcHJfZGVidWcoImdldDogU1VDQ0VTUzogKHZpcnR1YWwpIG91dHB1dF9vZmZzZXQgZm9yIGNwdSAlZCBpcyAiCisJCSIweCVwLCBjb250YWlucyBhIHZhbHVlIG9mOiAweCV4LiBTcGVlZCBpczogJWQgTUh6XG4iLAogCQljcHUsIChwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+b3V0cHV0X29mZnNldCksCiAJCW91dHB1dF9idWZmZXIsIGN1cnJfZnJlcSk7CiAKIAlmcmVxX2xpbWl0ID0gKG91dHB1dF9idWZmZXIgPj4gOCkgJiAweGZmOwogCWlmIChmcmVxX2xpbWl0ICE9IDB4ZmYpIHsKLQkJZHByaW50aygiZ2V0OiBmcmVxdWVuY3kgZm9yIGNwdSAlZCBpcyBiZWluZyB0ZW1wb3JhcmlseSIKKwkJcHJfZGVidWcoImdldDogZnJlcXVlbmN5IGZvciBjcHUgJWQgaXMgYmVpbmcgdGVtcG9yYXJpbHkiCiAJCQkiIGNhcHBlZCBhdCAlZFxuIiwgY3B1LCBjdXJyX2ZyZXEpOwogCX0KIApAQCAtMjEyLDggKzIwOSw4IEBACiAJY3B1ID0gcG9saWN5LT5jcHU7CiAJcGNjX2NwdV9kYXRhID0gcGVyX2NwdV9wdHIocGNjX2NwdV9pbmZvLCBjcHUpOwogCi0JZHByaW50aygidGFyZ2V0OiBDUFUgJWQgc2hvdWxkIGdvIHRvIHRhcmdldCBmcmVxOiAlZCAiCi0JCSIodmlydHVhbCkgaW5wdXRfb2Zmc2V0IGlzIDB4JXhcbiIsCisJcHJfZGVidWcoInRhcmdldDogQ1BVICVkIHNob3VsZCBnbyB0byB0YXJnZXQgZnJlcTogJWQgIgorCQkiKHZpcnR1YWwpIGlucHV0X29mZnNldCBpcyAweCVwXG4iLAogCQljcHUsIHRhcmdldF9mcmVxLAogCQkocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPmlucHV0X29mZnNldCkpOwogCkBAIC0yMzQsMTQgKzIzMSwxNCBAQAogCiAJc3RhdHVzID0gaW9yZWFkMTYoJnBjY2hfaGRyLT5zdGF0dXMpOwogCWlmIChzdGF0dXMgIT0gQ01EX0NPTVBMRVRFKSB7Ci0JCWRwcmludGsoInRhcmdldDogRkFJTEVEIGZvciBjcHUgJWQsIHdpdGggc3RhdHVzOiAweCV4XG4iLAorCQlwcl9kZWJ1ZygidGFyZ2V0OiBGQUlMRUQgZm9yIGNwdSAlZCwgd2l0aCBzdGF0dXM6IDB4JXhcbiIsCiAJCQljcHUsIHN0YXR1cyk7CiAJCWdvdG8gY21kX2luY29tcGxldGU7CiAJfQogCWlvd3JpdGUxNigwLCAmcGNjaF9oZHItPnN0YXR1cyk7CiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QT1NUQ0hBTkdFKTsKLQlkcHJpbnRrKCJ0YXJnZXQ6IHdhcyBTVUNDRVNTRlVMIGZvciBjcHUgJWRcbiIsIGNwdSk7CisJcHJfZGVidWcoInRhcmdldDogd2FzIFNVQ0NFU1NGVUwgZm9yIGNwdSAlZFxuIiwgY3B1KTsKIAlzcGluX3VubG9jaygmcGNjX2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yOTMsNyArMjkwLDcgQEAKIAltZW1zZXRfaW8oKHBjY2hfdmlydF9hZGRyICsgcGNjX2NwdV9kYXRhLT5pbnB1dF9vZmZzZXQpLCAwLCBCVUZfU1opOwogCW1lbXNldF9pbygocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPm91dHB1dF9vZmZzZXQpLCAwLCBCVUZfU1opOwogCi0JZHByaW50aygicGNjX2dldF9vZmZzZXQ6IGZvciBDUFUgJWQ6IHBjY19jcHVfZGF0YSAiCisJcHJfZGVidWcoInBjY19nZXRfb2Zmc2V0OiBmb3IgQ1BVICVkOiBwY2NfY3B1X2RhdGEgIgogCQkiaW5wdXRfb2Zmc2V0OiAweCV4LCBwY2NfY3B1X2RhdGEgb3V0cHV0X29mZnNldDogMHgleFxuIiwKIAkJY3B1LCBwY2NfY3B1X2RhdGEtPmlucHV0X29mZnNldCwgcGNjX2NwdV9kYXRhLT5vdXRwdXRfb2Zmc2V0KTsKIG91dF9mcmVlOgpAQCAtNDEwLDcgKzQwNyw3IEBACiAJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CiAJCXJldCA9IHBjY19jcHVmcmVxX2RvX29zYygmb3NjX2hhbmRsZSk7CiAJCWlmIChyZXQpCi0JCQlkcHJpbnRrKCJwcm9iZTogX09TQyBldmFsdWF0aW9uIGRpZCBub3Qgc3VjY2VlZFxuIik7CisJCQlwcl9kZWJ1ZygicHJvYmU6IF9PU0MgZXZhbHVhdGlvbiBkaWQgbm90IHN1Y2NlZWRcbiIpOwogCQkvKiBGaXJtd2FyZSdzIHVzZSBvZiBfT1NDIGlzIG9wdGlvbmFsICovCiAJCXJldCA9IDA7CiAJfQpAQCAtNDMzLDcgKzQzMCw3IEBACiAKIAltZW1fcmVzb3VyY2UgPSAoc3RydWN0IHBjY19tZW1vcnlfcmVzb3VyY2UgKiltZW1iZXItPmJ1ZmZlci5wb2ludGVyOwogCi0JZHByaW50aygicHJvYmU6IG1lbV9yZXNvdXJjZSBkZXNjcmlwdG9yOiAweCV4LCIKKwlwcl9kZWJ1ZygicHJvYmU6IG1lbV9yZXNvdXJjZSBkZXNjcmlwdG9yOiAweCV4LCIKIAkJIiBsZW5ndGg6ICVkLCBzcGFjZV9pZDogJWQsIHJlc291cmNlX3VzYWdlOiAlZCwiCiAJCSIgdHlwZV9zcGVjaWZpYzogJWQsIGdyYW51bGFyaXR5OiAweCVsbHgsIgogCQkiIG1pbmltdW06IDB4JWxseCwgbWF4aW11bTogMHglbGx4LCIKQEAgLTQ1MywxMyArNDUwLDEzIEBACiAJcGNjaF92aXJ0X2FkZHIgPSBpb3JlbWFwX25vY2FjaGUobWVtX3Jlc291cmNlLT5taW5pbXVtLAogCQkJCQltZW1fcmVzb3VyY2UtPmFkZHJlc3NfbGVuZ3RoKTsKIAlpZiAocGNjaF92aXJ0X2FkZHIgPT0gTlVMTCkgewotCQlkcHJpbnRrKCJwcm9iZTogY291bGQgbm90IG1hcCBzaGFyZWQgbWVtIHJlZ2lvblxuIik7CisJCXByX2RlYnVnKCJwcm9iZTogY291bGQgbm90IG1hcCBzaGFyZWQgbWVtIHJlZ2lvblxuIik7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCXBjY2hfaGRyID0gcGNjaF92aXJ0X2FkZHI7CiAKLQlkcHJpbnRrKCJwcm9iZTogUENDSCBoZWFkZXIgKHZpcnR1YWwpIGFkZHI6IDB4JXBcbiIsIHBjY2hfaGRyKTsKLQlkcHJpbnRrKCJwcm9iZTogUENDSCBoZWFkZXIgaXMgYXQgcGh5c2ljYWwgYWRkcmVzczogMHglbGx4LCIKKwlwcl9kZWJ1ZygicHJvYmU6IFBDQ0ggaGVhZGVyICh2aXJ0dWFsKSBhZGRyOiAweCVwXG4iLCBwY2NoX2hkcik7CisJcHJfZGVidWcoInByb2JlOiBQQ0NIIGhlYWRlciBpcyBhdCBwaHlzaWNhbCBhZGRyZXNzOiAweCVsbHgsIgogCQkiIHNpZ25hdHVyZTogMHgleCwgbGVuZ3RoOiAlZCBieXRlcywgbWFqb3I6ICVkLCBtaW5vcjogJWQsIgogCQkiIHN1cHBvcnRlZCBmZWF0dXJlczogMHgleCwgY29tbWFuZCBmaWVsZDogMHgleCwiCiAJCSIgc3RhdHVzIGZpZWxkOiAweCV4LCBub21pbmFsIGxhdGVuY3k6ICVkIHVzXG4iLApAQCAtNDY5LDcgKzQ2Niw3IEBACiAJCWlvcmVhZDE2KCZwY2NoX2hkci0+Y29tbWFuZCksIGlvcmVhZDE2KCZwY2NoX2hkci0+c3RhdHVzKSwKIAkJaW9yZWFkMzIoJnBjY2hfaGRyLT5sYXRlbmN5KSk7CiAKLQlkcHJpbnRrKCJwcm9iZTogbWluIHRpbWUgYmV0d2VlbiBjb21tYW5kczogJWQgdXMsIgorCXByX2RlYnVnKCJwcm9iZTogbWluIHRpbWUgYmV0d2VlbiBjb21tYW5kczogJWQgdXMsIgogCQkiIG1heCB0aW1lIGJldHdlZW4gY29tbWFuZHM6ICVkIHVzLCIKIAkJIiBub21pbmFsIENQVSBmcmVxdWVuY3k6ICVkIE1IeiwiCiAJCSIgbWluaW11bSBDUFUgZnJlcXVlbmN5OiAlZCBNSHosIgpAQCAtNDk0LDcgKzQ5MSw3IEBACiAJZG9vcmJlbGwuYWNjZXNzX3dpZHRoID0gNjQ7CiAJZG9vcmJlbGwuYWRkcmVzcyA9IHJlZ19yZXNvdXJjZS0+YWRkcmVzczsKIAotCWRwcmludGsoInByb2JlOiBkb29yYmVsbDogc3BhY2VfaWQgaXMgJWQsIGJpdF93aWR0aCBpcyAlZCwgIgorCXByX2RlYnVnKCJwcm9iZTogZG9vcmJlbGw6IHNwYWNlX2lkIGlzICVkLCBiaXRfd2lkdGggaXMgJWQsICIKIAkJImJpdF9vZmZzZXQgaXMgJWQsIGFjY2Vzc193aWR0aCBpcyAlZCwgYWRkcmVzcyBpcyAweCVsbHhcbiIsCiAJCWRvb3JiZWxsLnNwYWNlX2lkLCBkb29yYmVsbC5iaXRfd2lkdGgsIGRvb3JiZWxsLmJpdF9vZmZzZXQsCiAJCWRvb3JiZWxsLmFjY2Vzc193aWR0aCwgcmVnX3Jlc291cmNlLT5hZGRyZXNzKTsKQEAgLTUxNSw3ICs1MTIsNyBAQAogCiAJZG9vcmJlbGxfd3JpdGUgPSBtZW1iZXItPmludGVnZXIudmFsdWU7CiAKLQlkcHJpbnRrKCJwcm9iZTogZG9vcmJlbGxfcHJlc2VydmU6IDB4JWxseCwiCisJcHJfZGVidWcoInByb2JlOiBkb29yYmVsbF9wcmVzZXJ2ZTogMHglbGx4LCIKIAkJIiBkb29yYmVsbF93cml0ZTogMHglbGx4XG4iLAogCQlkb29yYmVsbF9wcmVzZXJ2ZSwgZG9vcmJlbGxfd3JpdGUpOwogCkBAIC01NTAsNyArNTQ3LDcgQEAKIAogCXJlc3VsdCA9IHBjY19nZXRfb2Zmc2V0KGNwdSk7CiAJaWYgKHJlc3VsdCkgewotCQlkcHJpbnRrKCJpbml0OiBQQ0NQIGV2YWx1YXRpb24gZmFpbGVkXG4iKTsKKwkJcHJfZGVidWcoImluaXQ6IFBDQ1AgZXZhbHVhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU2MSwxMiArNTU4LDEyIEBACiAJcG9saWN5LT5jdXIgPSBwY2NfZ2V0X2ZyZXEoY3B1KTsKIAogCWlmICghcG9saWN5LT5jdXIpIHsKLQkJZHByaW50aygiaW5pdDogVW5hYmxlIHRvIGdldCBjdXJyZW50IENQVSBmcmVxdWVuY3lcbiIpOworCQlwcl9kZWJ1ZygiaW5pdDogVW5hYmxlIHRvIGdldCBjdXJyZW50IENQVSBmcmVxdWVuY3lcbiIpOwogCQlyZXN1bHQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlkcHJpbnRrKCJpbml0OiBwb2xpY3ktPm1heCBpcyAlZCwgcG9saWN5LT5taW4gaXMgJWRcbiIsCisJcHJfZGVidWcoImluaXQ6IHBvbGljeS0+bWF4IGlzICVkLCBwb2xpY3ktPm1pbiBpcyAlZFxuIiwKIAkJcG9saWN5LT5tYXgsIHBvbGljeS0+bWluKTsKIG91dDoKIAlyZXR1cm4gcmVzdWx0OwpAQCAtNTk3LDcgKzU5NCw3IEBACiAKIAlyZXQgPSBwY2NfY3B1ZnJlcV9wcm9iZSgpOwogCWlmIChyZXQpIHsKLQkJZHByaW50aygicGNjX2NwdWZyZXFfaW5pdDogUENDSCBldmFsdWF0aW9uIGZhaWxlZFxuIik7CisJCXByX2RlYnVnKCJwY2NfY3B1ZnJlcV9pbml0OiBQQ0NIIGV2YWx1YXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jIGIvZHJpdmVycy9jcHVmcmVxL3Bvd2Vybm93LWs2LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNi5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazYuYwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMgYi9kcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazcuYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazcuYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKaW5kZXggNGE0NWZkNi4uZDcxZDlmMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL3Bvd2Vybm93LWs3LmMKQEAgLTY4LDcgKzY4LDYgQEAKIH07CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUJVRwogLyogZGl2aWRlIGJ5IDEwMDAgdG8gZ2V0IFZDb3JlIHZvbHRhZ2UgaW4gVi4gKi8KIHN0YXRpYyBjb25zdCBpbnQgbW9iaWxlX3ZpZF90YWJsZVszMl0gPSB7CiAgICAgMjAwMCwgMTk1MCwgMTkwMCwgMTg1MCwgMTgwMCwgMTc1MCwgMTcwMCwgMTY1MCwKQEAgLTc2LDcgKzc1LDYgQEAKICAgICAxMjc1LCAxMjUwLCAxMjI1LCAxMjAwLCAxMTc1LCAxMTUwLCAxMTI1LCAxMTAwLAogICAgIDEwNzUsIDEwNTAsIDEwMjUsIDEwMDAsIDk3NSwgOTUwLCA5MjUsIDAsCiB9OwotI2VuZGlmCiAKIC8qIGRpdmlkZSBieSAxMCB0byBnZXQgRklELiAqLwogc3RhdGljIGNvbnN0IGludCBmaWRfY29kZXNbMzJdID0gewpAQCAtMTAzLDkgKzEwMSw2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGxhdGVuY3k7CiBzdGF0aWMgY2hhciBoYXZlX2EwOwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAotCQkicG93ZXJub3ctazciLCBtc2cpCi0KIHN0YXRpYyBpbnQgY2hlY2tfZnNiKHVuc2lnbmVkIGludCBmc2JzcGVlZCkKIHsKIAlpbnQgZGVsdGE7CkBAIC0yMDksNyArMjA0LDcgQEAKIAkJdmlkID0gKnBzdCsrOwogCQlwb3dlcm5vd190YWJsZVtqXS5pbmRleCB8PSAodmlkIDw8IDgpOyAvKiB1cHBlciA4IGJpdHMgKi8KIAotCQlkcHJpbnRrKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgorCQlwcl9kZWJ1ZygiICAgRklEOiAweCV4ICglZC4lZHggWyVkTUh6XSkgICIKIAkJCSAiVklEOiAweCV4ICglZC4lMDNkVilcbiIsIGZpZCwgZmlkX2NvZGVzW2ZpZF0gLyAxMCwKIAkJCSBmaWRfY29kZXNbZmlkXSAlIDEwLCBzcGVlZC8xMDAwLCB2aWQsCiAJCQkgbW9iaWxlX3ZpZF90YWJsZVt2aWRdLzEwMDAsCkBAIC0zNjcsNyArMzYyLDcgQEAKIAkJdW5zaWduZWQgaW50IHNwZWVkLCBzcGVlZF9taHo7CiAKIAkJcGMudmFsID0gKHVuc2lnbmVkIGxvbmcpIHN0YXRlLT5jb250cm9sOwotCQlkcHJpbnRrKCJhY3BpOiAgUCVkOiAlZCBNSHogJWQgbVcgJWQgdVMgY29udHJvbCAlMDh4IFNHVEMgJWRcbiIsCisJCXByX2RlYnVnKCJhY3BpOiAgUCVkOiAlZCBNSHogJWQgbVcgJWQgdVMgY29udHJvbCAlMDh4IFNHVEMgJWRcbiIsCiAJCQkgaSwKIAkJCSAodTMyKSBzdGF0ZS0+Y29yZV9mcmVxdWVuY3ksCiAJCQkgKHUzMikgc3RhdGUtPnBvd2VyLApAQCAtNDAxLDcgKzM5Niw3IEBACiAJCQkJaW52YWxpZGF0ZV9lbnRyeShpKTsKIAkJfQogCi0JCWRwcmludGsoIiAgIEZJRDogMHgleCAoJWQuJWR4IFslZE1Iel0pICAiCisJCXByX2RlYnVnKCIgICBGSUQ6IDB4JXggKCVkLiVkeCBbJWRNSHpdKSAgIgogCQkJICJWSUQ6IDB4JXggKCVkLiUwM2RWKVxuIiwgZmlkLCBmaWRfY29kZXNbZmlkXSAvIDEwLAogCQkJIGZpZF9jb2Rlc1tmaWRdICUgMTAsIHNwZWVkX21oeiwgdmlkLAogCQkJIG1vYmlsZV92aWRfdGFibGVbdmlkXS8xMDAwLApAQCAtNDA5LDcgKzQwNCw3IEBACiAKIAkJaWYgKHN0YXRlLT5jb3JlX2ZyZXF1ZW5jeSAhPSBzcGVlZF9taHopIHsKIAkJCXN0YXRlLT5jb3JlX2ZyZXF1ZW5jeSA9IHNwZWVkX21oejsKLQkJCWRwcmludGsoIiAgIENvcnJlY3RlZCBBQ1BJIGZyZXF1ZW5jeSB0byAlZFxuIiwKKwkJCXByX2RlYnVnKCIgICBDb3JyZWN0ZWQgQUNQSSBmcmVxdWVuY3kgdG8gJWRcbiIsCiAJCQkJc3BlZWRfbWh6KTsKIAkJfQogCkBAIC00NTMsOCArNDQ4LDggQEAKIAogc3RhdGljIHZvaWQgcHJpbnRfcHN0X2VudHJ5KHN0cnVjdCBwc3RfcyAqcHN0LCB1bnNpZ25lZCBpbnQgaikKIHsKLQlkcHJpbnRrKCJQU1Q6JWQgKEAlcClcbiIsIGosIHBzdCk7Ci0JZHByaW50aygiIGNwdWlkOiAweCV4ICBmc2I6ICVkICBtYXhGSUQ6IDB4JXggIHN0YXJ0dmlkOiAweCV4XG4iLAorCXByX2RlYnVnKCJQU1Q6JWQgKEAlcClcbiIsIGosIHBzdCk7CisJcHJfZGVidWcoIiBjcHVpZDogMHgleCAgZnNiOiAlZCAgbWF4RklEOiAweCV4ICBzdGFydHZpZDogMHgleFxuIiwKIAkJcHN0LT5jcHVpZCwgcHN0LT5mc2JzcGVlZCwgcHN0LT5tYXhmaWQsIHBzdC0+c3RhcnR2aWQpOwogfQogCkBAIC00NzQsMjAgKzQ2OSwyMCBAQAogCQlwID0gcGh5c190b192aXJ0KGkpOwogCiAJCWlmIChtZW1jbXAocCwgIkFNREs3UE5PVyEiLCAgMTApID09IDApIHsKLQkJCWRwcmludGsoIkZvdW5kIFBTQiBoZWFkZXIgYXQgJXBcbiIsIHApOworCQkJcHJfZGVidWcoIkZvdW5kIFBTQiBoZWFkZXIgYXQgJXBcbiIsIHApOwogCQkJcHNiID0gKHN0cnVjdCBwc2JfcyAqKSBwOwotCQkJZHByaW50aygiVGFibGUgdmVyc2lvbjogMHgleFxuIiwgcHNiLT50YWJsZXZlcnNpb24pOworCQkJcHJfZGVidWcoIlRhYmxlIHZlcnNpb246IDB4JXhcbiIsIHBzYi0+dGFibGV2ZXJzaW9uKTsKIAkJCWlmIChwc2ItPnRhYmxldmVyc2lvbiAhPSAweDEyKSB7CiAJCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIlNvcnJ5LCBvbmx5IHYxLjIgdGFibGVzIgogCQkJCQkJIiBzdXBwb3J0ZWQgcmlnaHQgbm93XG4iKTsKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJCX0KIAotCQkJZHByaW50aygiRmxhZ3M6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MpOworCQkJcHJfZGVidWcoIkZsYWdzOiAweCV4XG4iLCBwc2ItPmZsYWdzKTsKIAkJCWlmICgocHNiLT5mbGFncyAmIDEpID09IDApCi0JCQkJZHByaW50aygiTW9iaWxlIHZvbHRhZ2UgcmVndWxhdG9yXG4iKTsKKwkJCQlwcl9kZWJ1ZygiTW9iaWxlIHZvbHRhZ2UgcmVndWxhdG9yXG4iKTsKIAkJCWVsc2UKLQkJCQlkcHJpbnRrKCJEZXNrdG9wIHZvbHRhZ2UgcmVndWxhdG9yXG4iKTsKKwkJCQlwcl9kZWJ1ZygiRGVza3RvcCB2b2x0YWdlIHJlZ3VsYXRvclxuIik7CiAKIAkJCWxhdGVuY3kgPSBwc2ItPnNldHRsaW5ndGltZTsKIAkJCWlmIChsYXRlbmN5IDwgMTAwKSB7CkBAIC00OTcsOSArNDkyLDkgQEAKIAkJCQkJCSJDb3JyZWN0aW5nLlxuIiwgbGF0ZW5jeSk7CiAJCQkJbGF0ZW5jeSA9IDEwMDsKIAkJCX0KLQkJCWRwcmludGsoIlNldHRsaW5nIFRpbWU6ICVkIG1pY3Jvc2Vjb25kcy5cbiIsCisJCQlwcl9kZWJ1ZygiU2V0dGxpbmcgVGltZTogJWQgbWljcm9zZWNvbmRzLlxuIiwKIAkJCQkJcHNiLT5zZXR0bGluZ3RpbWUpOwotCQkJZHByaW50aygiSGFzICVkIFBTVCB0YWJsZXMuIChPbmx5IGR1bXBpbmcgb25lcyAiCisJCQlwcl9kZWJ1ZygiSGFzICVkIFBTVCB0YWJsZXMuIChPbmx5IGR1bXBpbmcgb25lcyAiCiAJCQkJCSJyZWxldmFudCB0byB0aGlzIENQVSkuXG4iLAogCQkJCQlwc2ItPm51bXBzdCk7CiAKQEAgLTY1MCw3ICs2NDUsNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiY2FuIG5vdCBkZXRlcm1pbmUgYnVzIGZyZXF1ZW5jeVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlkcHJpbnRrKCJGU0I6ICUzZE1IelxuIiwgZnNiLzEwMDApOworCXByX2RlYnVnKCJGU0I6ICUzZE1IelxuIiwgZnNiLzEwMDApOwogCiAJaWYgKGRtaV9jaGVja19zeXN0ZW0ocG93ZXJub3dfZG1pX3RhYmxlKSB8fCBhY3BpX2ZvcmNlKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJQU0IvUFNUIGtub3duIHRvIGJlIGJyb2tlbi4gICIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5oIGIvZHJpdmVycy9jcHVmcmVxL3Bvd2Vybm93LWs3LmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rNy5oCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazcuaApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMgYi9kcml2ZXJzL2NwdWZyZXEvcG93ZXJub3ctazguYwpzaW1pbGFyaXR5IGluZGV4IDkzJQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvcG93ZXJub3ctazguYwpyZW5hbWUgdG8gZHJpdmVycy9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKaW5kZXggMjM2OGUzOC4uODM0NzliNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL3Bvd2Vybm93LWs4LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCX0KIAlkbyB7CiAJCWlmIChpKysgPiAxMDAwMCkgewotCQkJZHByaW50aygiZGV0ZWN0ZWQgY2hhbmdlIHBlbmRpbmcgc3R1Y2tcbiIpOworCQkJcHJfZGVidWcoImRldGVjdGVkIGNoYW5nZSBwZW5kaW5nIHN0dWNrXG4iKTsKIAkJCXJldHVybiAxOwogCQl9CiAJCXJkbXNyKE1TUl9GSURWSURfU1RBVFVTLCBsbywgaGkpOwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJZmlkID0gbG8gJiBNU1JfU19MT19DVVJSRU5UX0ZJRDsKIAlsbyA9IGZpZCB8ICh2aWQgPDwgTVNSX0NfTE9fVklEX1NISUZUKTsKIAloaSA9IE1TUl9DX0hJX1NUUF9HTlRfQkVOSUdOOwotCWRwcmludGsoImNwdSVkLCBpbml0IGxvIDB4JXgsIGhpIDB4JXhcbiIsIHNtcF9wcm9jZXNzb3JfaWQoKSwgbG8sIGhpKTsKKwlwcl9kZWJ1ZygiY3B1JWQsIGluaXQgbG8gMHgleCwgaGkgMHgleFxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBsbywgaGkpOwogCXdybXNyKE1TUl9GSURWSURfQ1RMLCBsbywgaGkpOwogfQogCkBAIC0xOTYsNyArMTk2LDcgQEAKIAlsbyB8PSAoZGF0YS0+Y3VycnZpZCA8PCBNU1JfQ19MT19WSURfU0hJRlQpOwogCWxvIHw9IE1TUl9DX0xPX0lOSVRfRklEX1ZJRDsKIAotCWRwcmludGsoIndyaXRpbmcgZmlkIDB4JXgsIGxvIDB4JXgsIGhpIDB4JXhcbiIsCisJcHJfZGVidWcoIndyaXRpbmcgZmlkIDB4JXgsIGxvIDB4JXgsIGhpIDB4JXhcbiIsCiAJCWZpZCwgbG8sIGRhdGEtPnBsbGxvY2sgKiBQTExfTE9DS19DT05WRVJTSU9OKTsKIAogCWRvIHsKQEAgLTI0NCw3ICsyNDQsNyBAQAogCWxvIHw9ICh2aWQgPDwgTVNSX0NfTE9fVklEX1NISUZUKTsKIAlsbyB8PSBNU1JfQ19MT19JTklUX0ZJRF9WSUQ7CiAKLQlkcHJpbnRrKCJ3cml0aW5nIHZpZCAweCV4LCBsbyAweCV4LCBoaSAweCV4XG4iLAorCXByX2RlYnVnKCJ3cml0aW5nIHZpZCAweCV4LCBsbyAweCV4LCBoaSAweCV4XG4iLAogCQl2aWQsIGxvLCBTVE9QX0dSQU5UXzVOUyk7CiAKIAlkbyB7CkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JZHByaW50aygidHJhbnNpdGlvbmVkIChjcHUlZCk6IG5ldyBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCisJcHJfZGVidWcoInRyYW5zaXRpb25lZCAoY3B1JWQpOiBuZXcgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCQlzbXBfcHJvY2Vzc29yX2lkKCksIGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCiAJcmV0dXJuIDA7CkBAIC0zMzksNyArMzM5LDcgQEAKIAl1MzIgc2F2ZWZpZCA9IGRhdGEtPmN1cnJmaWQ7CiAJdTMyIG1heHZpZCwgbG8sIHJ2b211bHQgPSAxOwogCi0JZHByaW50aygicGgxIChjcHUlZCk6IHN0YXJ0LCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleCwgIgorCXByX2RlYnVnKCJwaDEgKGNwdSVkKTogc3RhcnQsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4LCAiCiAJCSJyZXF2aWQgMHgleCwgcnZvIDB4JXhcbiIsCiAJCXNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCwgcmVxdmlkLCBkYXRhLT5ydm8pOwpAQCAtMzQ5LDEyICszNDksMTIgQEAKIAlydm9zdGVwcyAqPSBydm9tdWx0OwogCXJkbXNyKE1TUl9GSURWSURfU1RBVFVTLCBsbywgbWF4dmlkKTsKIAltYXh2aWQgPSAweDFmICYgKG1heHZpZCA+PiAxNik7Ci0JZHByaW50aygicGgxIG1heHZpZD0weCV4XG4iLCBtYXh2aWQpOworCXByX2RlYnVnKCJwaDEgbWF4dmlkPTB4JXhcbiIsIG1heHZpZCk7CiAJaWYgKHJlcXZpZCA8IG1heHZpZCkgLyogbG93ZXIgbnVtYmVycyBhcmUgaGlnaGVyIHZvbHRhZ2VzICovCiAJCXJlcXZpZCA9IG1heHZpZDsKIAogCXdoaWxlIChkYXRhLT5jdXJydmlkID4gcmVxdmlkKSB7Ci0JCWRwcmludGsoInBoMTogY3VyciAweCV4LCByZXEgdmlkIDB4JXhcbiIsCisJCXByX2RlYnVnKCJwaDE6IGN1cnIgMHgleCwgcmVxIHZpZCAweCV4XG4iLAogCQkJZGF0YS0+Y3VycnZpZCwgcmVxdmlkKTsKIAkJaWYgKGRlY3JlYXNlX3ZpZF9jb2RlX2J5X3N0ZXAoZGF0YSwgcmVxdmlkLCBkYXRhLT52aWRtdnMpKQogCQkJcmV0dXJuIDE7CkBAIC0zNjUsNyArMzY1LDcgQEAKIAkJaWYgKGRhdGEtPmN1cnJ2aWQgPT0gbWF4dmlkKSB7CiAJCQlydm9zdGVwcyA9IDA7CiAJCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKCJwaDE6IGNoYW5naW5nIHZpZCBmb3IgcnZvLCByZXEgMHgleFxuIiwKKwkJCXByX2RlYnVnKCJwaDE6IGNoYW5naW5nIHZpZCBmb3IgcnZvLCByZXEgMHgleFxuIiwKIAkJCQlkYXRhLT5jdXJydmlkIC0gMSk7CiAJCQlpZiAoZGVjcmVhc2VfdmlkX2NvZGVfYnlfc3RlcChkYXRhLCBkYXRhLT5jdXJydmlkLTEsIDEpKQogCQkJCXJldHVybiAxOwpAQCAtMzgyLDcgKzM4Miw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWRwcmludGsoInBoMSBjb21wbGV0ZSwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXhcbiIsCisJcHJfZGVidWcoInBoMSBjb21wbGV0ZSwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXhcbiIsCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCiAJcmV0dXJuIDA7CkBAIC00MDAsNyArNDAwLDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JZHByaW50aygicGgyIChjcHUlZCk6IHN0YXJ0aW5nLCBjdXJyZmlkIDB4JXgsIGN1cnJ2aWQgMHgleCwgIgorCXByX2RlYnVnKCJwaDIgKGNwdSVkKTogc3RhcnRpbmcsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4LCAiCiAJCSJyZXFmaWQgMHgleFxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpLAogCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkLCByZXFmaWQpOwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCWRwcmludGsoInBoMiBjb21wbGV0ZSwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXhcbiIsCisJcHJfZGVidWcoInBoMiBjb21wbGV0ZSwgY3VycmZpZCAweCV4LCBjdXJydmlkIDB4JXhcbiIsCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCiAJcmV0dXJuIDA7CkBAIC00NzAsNyArNDcwLDcgQEAKIAl1MzIgc2F2ZWZpZCA9IGRhdGEtPmN1cnJmaWQ7CiAJdTMyIHNhdmVyZXF2aWQgPSByZXF2aWQ7CiAKLQlkcHJpbnRrKCJwaDMgKGNwdSVkKTogc3RhcnRpbmcsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4XG4iLAorCXByX2RlYnVnKCJwaDMgKGNwdSVkKTogc3RhcnRpbmcsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4XG4iLAogCQlzbXBfcHJvY2Vzc29yX2lkKCksCiAJCWRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCkBAIC00OTgsMTcgKzQ5OCwxNyBAQAogCQlyZXR1cm4gMTsKIAogCWlmIChzYXZlcmVxdmlkICE9IGRhdGEtPmN1cnJ2aWQpIHsKLQkJZHByaW50aygicGgzIGZhaWxlZCwgY3VycnZpZCAweCV4XG4iLCBkYXRhLT5jdXJydmlkKTsKKwkJcHJfZGVidWcoInBoMyBmYWlsZWQsIGN1cnJ2aWQgMHgleFxuIiwgZGF0YS0+Y3VycnZpZCk7CiAJCXJldHVybiAxOwogCX0KIAogCWlmIChzYXZlZmlkICE9IGRhdGEtPmN1cnJmaWQpIHsKLQkJZHByaW50aygicGgzIGZhaWxlZCwgY3VycmZpZCBjaGFuZ2VkIDB4JXhcbiIsCisJCXByX2RlYnVnKCJwaDMgZmFpbGVkLCBjdXJyZmlkIGNoYW5nZWQgMHgleFxuIiwKIAkJCWRhdGEtPmN1cnJmaWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKLQlkcHJpbnRrKCJwaDMgY29tcGxldGUsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4XG4iLAorCXByX2RlYnVnKCJwaDMgY29tcGxldGUsIGN1cnJmaWQgMHgleCwgY3VycnZpZCAweCV4XG4iLAogCQlkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKIAogCXJldHVybiAwOwpAQCAtNzA3LDcgKzcwNyw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWRwcmludGsoImNmaWQgMHgleCwgY3ZpZCAweCV4XG4iLCBkYXRhLT5jdXJyZmlkLCBkYXRhLT5jdXJydmlkKTsKKwlwcl9kZWJ1ZygiY2ZpZCAweCV4LCBjdmlkIDB4JXhcbiIsIGRhdGEtPmN1cnJmaWQsIGRhdGEtPmN1cnJ2aWQpOwogCWRhdGEtPnBvd2Vybm93X3RhYmxlID0gcG93ZXJub3dfdGFibGU7CiAJaWYgKGNwdW1hc2tfZmlyc3QoY3B1X2NvcmVfbWFzayhkYXRhLT5jcHUpKSA9PSBkYXRhLT5jcHUpCiAJCXByaW50X2Jhc2ljcyhkYXRhKTsKQEAgLTcxNyw3ICs3MTcsNyBAQAogCQkgICAgKHBzdFtqXS52aWQgPT0gZGF0YS0+Y3VycnZpZCkpCiAJCQlyZXR1cm4gMDsKIAotCWRwcmludGsoImN1cnJmaWQvdmlkIGRvIG5vdCBtYXRjaCBQU1QsIGlnbm9yaW5nXG4iKTsKKwlwcl9kZWJ1ZygiY3VycmZpZC92aWQgZG8gbm90IG1hdGNoIFBTVCwgaWdub3JpbmdcbiIpOwogCXJldHVybiAwOwogfQogCkBAIC03MzksMzYgKzczOSwzNiBAQAogCQlpZiAobWVtY21wKHBzYiwgUFNCX0lEX1NUUklORywgUFNCX0lEX1NUUklOR19MRU4pICE9IDApCiAJCQljb250aW51ZTsKIAotCQlkcHJpbnRrKCJmb3VuZCBQU0IgaGVhZGVyIGF0IDB4JXBcbiIsIHBzYik7CisJCXByX2RlYnVnKCJmb3VuZCBQU0IgaGVhZGVyIGF0IDB4JXBcbiIsIHBzYik7CiAKLQkJZHByaW50aygidGFibGUgdmVyczogMHgleFxuIiwgcHNiLT50YWJsZXZlcnNpb24pOworCQlwcl9kZWJ1ZygidGFibGUgdmVyczogMHgleFxuIiwgcHNiLT50YWJsZXZlcnNpb24pOwogCQlpZiAocHNiLT50YWJsZXZlcnNpb24gIT0gUFNCX1ZFUlNJT05fMV80KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgRldfQlVHIFBGWCAiUFNCIHRhYmxlIGlzIG5vdCB2MS40XG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAKLQkJZHByaW50aygiZmxhZ3M6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MxKTsKKwkJcHJfZGVidWcoImZsYWdzOiAweCV4XG4iLCBwc2ItPmZsYWdzMSk7CiAJCWlmIChwc2ItPmZsYWdzMSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIEZXX0JVRyBQRlggInVua25vd24gZmxhZ3NcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAogCQlkYXRhLT52c3RhYmxlID0gcHNiLT52c3RhYmxlOwotCQlkcHJpbnRrKCJ2b2x0YWdlIHN0YWJpbGl6YXRpb24gdGltZTogJWQoKjIwdXMpXG4iLAorCQlwcl9kZWJ1Zygidm9sdGFnZSBzdGFiaWxpemF0aW9uIHRpbWU6ICVkKCoyMHVzKVxuIiwKIAkJCQlkYXRhLT52c3RhYmxlKTsKIAotCQlkcHJpbnRrKCJmbGFnczI6IDB4JXhcbiIsIHBzYi0+ZmxhZ3MyKTsKKwkJcHJfZGVidWcoImZsYWdzMjogMHgleFxuIiwgcHNiLT5mbGFnczIpOwogCQlkYXRhLT5ydm8gPSBwc2ItPmZsYWdzMiAmIDM7CiAJCWRhdGEtPmlydCA9ICgocHNiLT5mbGFnczIpID4+IDIpICYgMzsKIAkJbXZzID0gKChwc2ItPmZsYWdzMikgPj4gNCkgJiAzOwogCQlkYXRhLT52aWRtdnMgPSAxIDw8IG12czsKIAkJZGF0YS0+YmF0cHMgPSAoKHBzYi0+ZmxhZ3MyKSA+PiA2KSAmIDM7CiAKLQkJZHByaW50aygicmFtcCB2b2x0YWdlIG9mZnNldDogJWRcbiIsIGRhdGEtPnJ2byk7Ci0JCWRwcmludGsoImlzb2Nocm9ub3VzIHJlbGllZiB0aW1lOiAlZFxuIiwgZGF0YS0+aXJ0KTsKLQkJZHByaW50aygibWF4aW11bSB2b2x0YWdlIHN0ZXA6ICVkIC0gMHgleFxuIiwgbXZzLCBkYXRhLT52aWRtdnMpOworCQlwcl9kZWJ1ZygicmFtcCB2b2x0YWdlIG9mZnNldDogJWRcbiIsIGRhdGEtPnJ2byk7CisJCXByX2RlYnVnKCJpc29jaHJvbm91cyByZWxpZWYgdGltZTogJWRcbiIsIGRhdGEtPmlydCk7CisJCXByX2RlYnVnKCJtYXhpbXVtIHZvbHRhZ2Ugc3RlcDogJWQgLSAweCV4XG4iLCBtdnMsIGRhdGEtPnZpZG12cyk7CiAKLQkJZHByaW50aygibnVtcHN0OiAweCV4XG4iLCBwc2ItPm51bV90YWJsZXMpOworCQlwcl9kZWJ1ZygibnVtcHN0OiAweCV4XG4iLCBwc2ItPm51bV90YWJsZXMpOwogCQljcHN0ID0gcHNiLT5udW1fdGFibGVzOwogCQlpZiAoKHBzYi0+Y3B1aWQgPT0gMHgwMDAwMGZjMCkgfHwKIAkJICAgIChwc2ItPmNwdWlkID09IDB4MDAwMDBmZTApKSB7CkBAIC03ODMsMTMgKzc4MywxMyBAQAogCQl9CiAKIAkJZGF0YS0+cGxsbG9jayA9IHBzYi0+cGxsbG9ja3RpbWU7Ci0JCWRwcmludGsoInBsbGxvY2t0aW1lOiAweCV4ICh1bml0cyAxdXMpXG4iLCBwc2ItPnBsbGxvY2t0aW1lKTsKLQkJZHByaW50aygibWF4ZmlkOiAweCV4XG4iLCBwc2ItPm1heGZpZCk7Ci0JCWRwcmludGsoIm1heHZpZDogMHgleFxuIiwgcHNiLT5tYXh2aWQpOworCQlwcl9kZWJ1ZygicGxsbG9ja3RpbWU6IDB4JXggKHVuaXRzIDF1cylcbiIsIHBzYi0+cGxsbG9ja3RpbWUpOworCQlwcl9kZWJ1ZygibWF4ZmlkOiAweCV4XG4iLCBwc2ItPm1heGZpZCk7CisJCXByX2RlYnVnKCJtYXh2aWQ6IDB4JXhcbiIsIHBzYi0+bWF4dmlkKTsKIAkJbWF4dmlkID0gcHNiLT5tYXh2aWQ7CiAKIAkJZGF0YS0+bnVtcHMgPSBwc2ItPm51bXBzOwotCQlkcHJpbnRrKCJudW1wc3RhdGVzOiAweCV4XG4iLCBkYXRhLT5udW1wcyk7CisJCXByX2RlYnVnKCJudW1wc3RhdGVzOiAweCV4XG4iLCBkYXRhLT5udW1wcyk7CiAJCXJldHVybiBmaWxsX3Bvd2Vybm93X3RhYmxlKGRhdGEsCiAJCQkJKHN0cnVjdCBwc3RfcyAqKShwc2IrMSksIG1heHZpZCk7CiAJfQpAQCAtODM0LDEzICs4MzQsMTMgQEAKIAl1NjQgY29udHJvbCwgc3RhdHVzOwogCiAJaWYgKGFjcGlfcHJvY2Vzc29yX3JlZ2lzdGVyX3BlcmZvcm1hbmNlKCZkYXRhLT5hY3BpX2RhdGEsIGRhdGEtPmNwdSkpIHsKLQkJZHByaW50aygicmVnaXN0ZXIgcGVyZm9ybWFuY2UgZmFpbGVkOiBiYWQgQUNQSSBkYXRhXG4iKTsKKwkJcHJfZGVidWcoInJlZ2lzdGVyIHBlcmZvcm1hbmNlIGZhaWxlZDogYmFkIEFDUEkgZGF0YVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIAogCS8qIHZlcmlmeSB0aGUgZGF0YSBjb250YWluZWQgaW4gdGhlIEFDUEkgc3RydWN0dXJlcyAqLwogCWlmIChkYXRhLT5hY3BpX2RhdGEuc3RhdGVfY291bnQgPD0gMSkgewotCQlkcHJpbnRrKCJObyBBQ1BJIFAtU3RhdGVzXG4iKTsKKwkJcHJfZGVidWcoIk5vIEFDUEkgUC1TdGF0ZXNcbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCkBAIC04NDksNyArODQ5LDcgQEAKIAogCWlmICgoY29udHJvbCAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkgfHwKIAkgICAgKHN0YXR1cyAhPSBBQ1BJX0FEUl9TUEFDRV9GSVhFRF9IQVJEV0FSRSkpIHsKLQkJZHByaW50aygiSW52YWxpZCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKCV4IC0gJXgpXG4iLAorCQlwcl9kZWJ1ZygiSW52YWxpZCBjb250cm9sL3N0YXR1cyByZWdpc3RlcnMgKCVsbHggLSAlbGx4KVxuIiwKIAkJCWNvbnRyb2wsIHN0YXR1cyk7CiAJCWdvdG8gZXJyX291dDsKIAl9CkBAIC04NTgsNyArODU4LDcgQEAKIAlwb3dlcm5vd190YWJsZSA9IGttYWxsb2MoKHNpemVvZihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUpCiAJCSogKGRhdGEtPmFjcGlfZGF0YS5zdGF0ZV9jb3VudCArIDEpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwb3dlcm5vd190YWJsZSkgewotCQlkcHJpbnRrKCJwb3dlcm5vd190YWJsZSBtZW1vcnkgYWxsb2MgZmFpbHVyZVxuIik7CisJCXByX2RlYnVnKCJwb3dlcm5vd190YWJsZSBtZW1vcnkgYWxsb2MgZmFpbHVyZVxuIik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKQEAgLTkyOCw3ICs5MjgsNyBAQAogCQl9CiAJCXJkbXNyKE1TUl9QU1RBVEVfREVGX0JBU0UgKyBpbmRleCwgbG8sIGhpKTsKIAkJaWYgKCEoaGkgJiBIV19QU1RBVEVfVkFMSURfTUFTSykpIHsKLQkJCWRwcmludGsoImludmFsaWQgcHN0YXRlICVkLCBpZ25vcmluZ1xuIiwgaW5kZXgpOworCQkJcHJfZGVidWcoImludmFsaWQgcHN0YXRlICVkLCBpZ25vcmluZ1xuIiwgaW5kZXgpOwogCQkJaW52YWxpZGF0ZV9lbnRyeShwb3dlcm5vd190YWJsZSwgaSk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtOTY4LDcgKzk2OCw3IEBACiAJCQl2aWQgPSAoY29udHJvbCA+PiBWSURfU0hJRlQpICYgVklEX01BU0s7CiAJCX0KIAotCQlkcHJpbnRrKCIgICAlZCA6IGZpZCAweCV4LCB2aWQgMHgleFxuIiwgaSwgZmlkLCB2aWQpOworCQlwcl9kZWJ1ZygiICAgJWQgOiBmaWQgMHgleCwgdmlkIDB4JXhcbiIsIGksIGZpZCwgdmlkKTsKIAogCQlpbmRleCA9IGZpZCB8ICh2aWQ8PDgpOwogCQlwb3dlcm5vd190YWJsZVtpXS5pbmRleCA9IGluZGV4OwpAQCAtOTc4LDcgKzk3OCw3IEBACiAKIAkJLyogdmVyaWZ5IGZyZXF1ZW5jeSBpcyBPSyAqLwogCQlpZiAoKGZyZXEgPiAoTUFYX0ZSRVEgKiAxMDAwKSkgfHwgKGZyZXEgPCAoTUlOX0ZSRVEgKiAxMDAwKSkpIHsKLQkJCWRwcmludGsoImludmFsaWQgZnJlcSAldSBrSHosIGlnbm9yaW5nXG4iLCBmcmVxKTsKKwkJCXByX2RlYnVnKCJpbnZhbGlkIGZyZXEgJXUga0h6LCBpZ25vcmluZ1xuIiwgZnJlcSk7CiAJCQlpbnZhbGlkYXRlX2VudHJ5KHBvd2Vybm93X3RhYmxlLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC05ODYsNyArOTg2LDcgQEAKIAkJLyogdmVyaWZ5IHZvbHRhZ2UgaXMgT0sgLQogCQkgKiBCSU9TcyBhcmUgdXNpbmcgIm9mZiIgdG8gaW5kaWNhdGUgaW52YWxpZCAqLwogCQlpZiAodmlkID09IFZJRF9PRkYpIHsKLQkJCWRwcmludGsoImludmFsaWQgdmlkICV1LCBpZ25vcmluZ1xuIiwgdmlkKTsKKwkJCXByX2RlYnVnKCJpbnZhbGlkIHZpZCAldSwgaWdub3JpbmdcbiIsIHZpZCk7CiAJCQlpbnZhbGlkYXRlX2VudHJ5KHBvd2Vybm93X3RhYmxlLCBpKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0xMDQ3LDcgKzEwNDcsNyBAQAogCWludCByZXMsIGk7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAKLQlkcHJpbnRrKCJjcHUgJWQgdHJhbnNpdGlvbiB0byBpbmRleCAldVxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpbmRleCk7CisJcHJfZGVidWcoImNwdSAlZCB0cmFuc2l0aW9uIHRvIGluZGV4ICV1XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGluZGV4KTsKIAogCS8qIGZpZC92aWQgY29ycmVjdG5lc3MgY2hlY2sgZm9yIGs4ICovCiAJLyogZmlkIGFyZSB0aGUgbG93ZXIgOCBiaXRzIG9mIHRoZSBpbmRleCB3ZSBzdG9yZWQgaW50bwpAQCAtMTA1NywxOCArMTA1NywxOCBAQAogCWZpZCA9IGRhdGEtPnBvd2Vybm93X3RhYmxlW2luZGV4XS5pbmRleCAmIDB4RkY7CiAJdmlkID0gKGRhdGEtPnBvd2Vybm93X3RhYmxlW2luZGV4XS5pbmRleCAmIDB4RkYwMCkgPj4gODsKIAotCWRwcmludGsoInRhYmxlIG1hdGNoZWQgZmlkIDB4JXgsIGdpdmluZyB2aWQgMHgleFxuIiwgZmlkLCB2aWQpOworCXByX2RlYnVnKCJ0YWJsZSBtYXRjaGVkIGZpZCAweCV4LCBnaXZpbmcgdmlkIDB4JXhcbiIsIGZpZCwgdmlkKTsKIAogCWlmIChxdWVyeV9jdXJyZW50X3ZhbHVlc193aXRoX3BlbmRpbmdfd2FpdChkYXRhKSkKIAkJcmV0dXJuIDE7CiAKIAlpZiAoKGRhdGEtPmN1cnJ2aWQgPT0gdmlkKSAmJiAoZGF0YS0+Y3VycmZpZCA9PSBmaWQpKSB7Ci0JCWRwcmludGsoInRhcmdldCBtYXRjaGVzIGN1cnJlbnQgdmFsdWVzIChmaWQgMHgleCwgdmlkIDB4JXgpXG4iLAorCQlwcl9kZWJ1ZygidGFyZ2V0IG1hdGNoZXMgY3VycmVudCB2YWx1ZXMgKGZpZCAweCV4LCB2aWQgMHgleClcbiIsCiAJCQlmaWQsIHZpZCk7CiAJCXJldHVybiAwOwogCX0KIAotCWRwcmludGsoImNwdSAlZCwgY2hhbmdpbmcgdG8gZmlkIDB4JXgsIHZpZCAweCV4XG4iLAorCXByX2RlYnVnKCJjcHUgJWQsIGNoYW5naW5nIHRvIGZpZCAweCV4LCB2aWQgMHgleFxuIiwKIAkJc21wX3Byb2Nlc3Nvcl9pZCgpLCBmaWQsIHZpZCk7CiAJZnJlcXMub2xkID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKIAlmcmVxcy5uZXcgPSBmaW5kX2toel9mcmVxX2Zyb21fZmlkKGZpZCk7CkBAIC0xMDk2LDcgKzEwOTYsNyBAQAogCWludCByZXMsIGk7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7CiAKLQlkcHJpbnRrKCJjcHUgJWQgdHJhbnNpdGlvbiB0byBpbmRleCAldVxuIiwgc21wX3Byb2Nlc3Nvcl9pZCgpLCBpbmRleCk7CisJcHJfZGVidWcoImNwdSAlZCB0cmFuc2l0aW9uIHRvIGluZGV4ICV1XG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksIGluZGV4KTsKIAogCS8qIGdldCBNU1IgaW5kZXggZm9yIGhhcmR3YXJlIHBzdGF0ZSB0cmFuc2l0aW9uICovCiAJcHN0YXRlID0gaW5kZXggJiBIV19QU1RBVEVfTUFTSzsKQEAgLTExNTYsMTQgKzExNTYsMTQgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWRwcmludGsoInRhcmc6IGNwdSAlZCwgJWQga0h6LCBtaW4gJWQsIG1heCAlZCwgcmVsYXRpb24gJWRcbiIsCisJcHJfZGVidWcoInRhcmc6IGNwdSAlZCwgJWQga0h6LCBtaW4gJWQsIG1heCAlZCwgcmVsYXRpb24gJWRcbiIsCiAJCXBvbC0+Y3B1LCB0YXJnZnJlcSwgcG9sLT5taW4sIHBvbC0+bWF4LCByZWxhdGlvbik7CiAKIAlpZiAocXVlcnlfY3VycmVudF92YWx1ZXNfd2l0aF9wZW5kaW5nX3dhaXQoZGF0YSkpCiAJCWdvdG8gZXJyX291dDsKIAogCWlmIChjcHVfZmFtaWx5ICE9IENQVV9IV19QU1RBVEUpIHsKLQkJZHByaW50aygidGFyZzogY3VyciBmaWQgMHgleCwgdmlkIDB4JXhcbiIsCisJCXByX2RlYnVnKCJ0YXJnOiBjdXJyIGZpZCAweCV4LCB2aWQgMHgleFxuIiwKIAkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKIAkJaWYgKChjaGVja3ZpZCAhPSBkYXRhLT5jdXJydmlkKSB8fApAQCAtMTMxOSw3ICsxMzE5LDcgQEAKIAkJCQlkYXRhLT5jdXJycHN0YXRlKTsKIAllbHNlCiAJCXBvbC0+Y3VyID0gZmluZF9raHpfZnJlcV9mcm9tX2ZpZChkYXRhLT5jdXJyZmlkKTsKLQlkcHJpbnRrKCJwb2xpY3kgY3VycmVudCBmcmVxdWVuY3kgJWQga0h6XG4iLCBwb2wtPmN1cik7CisJcHJfZGVidWcoInBvbGljeSBjdXJyZW50IGZyZXF1ZW5jeSAlZCBrSHpcbiIsIHBvbC0+Y3VyKTsKIAogCS8qIG1pbi9tYXggdGhlIGNwdSBpcyBjYXBhYmxlIG9mICovCiAJaWYgKGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9sLCBkYXRhLT5wb3dlcm5vd190YWJsZSkpIHsKQEAgLTEzMzcsMTAgKzEzMzcsMTAgQEAKIAljcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihkYXRhLT5wb3dlcm5vd190YWJsZSwgcG9sLT5jcHUpOwogCiAJaWYgKGNwdV9mYW1pbHkgPT0gQ1BVX0hXX1BTVEFURSkKLQkJZHByaW50aygiY3B1X2luaXQgZG9uZSwgY3VycmVudCBwc3RhdGUgMHgleFxuIiwKKwkJcHJfZGVidWcoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgcHN0YXRlIDB4JXhcbiIsCiAJCQkJZGF0YS0+Y3VycnBzdGF0ZSk7CiAJZWxzZQotCQlkcHJpbnRrKCJjcHVfaW5pdCBkb25lLCBjdXJyZW50IGZpZCAweCV4LCB2aWQgMHgleFxuIiwKKwkJcHJfZGVidWcoImNwdV9pbml0IGRvbmUsIGN1cnJlbnQgZmlkIDB4JXgsIHZpZCAweCV4XG4iLAogCQkJZGF0YS0+Y3VycmZpZCwgZGF0YS0+Y3VycnZpZCk7CiAKIAlwZXJfY3B1KHBvd2Vybm93X2RhdGEsIHBvbC0+Y3B1KSA9IGRhdGE7CkBAIC0xNTg2LDcgKzE1ODYsNyBAQAogLyogZHJpdmVyIGVudHJ5IHBvaW50IGZvciB0ZXJtICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgcG93ZXJub3drOF9leGl0KHZvaWQpCiB7Ci0JZHByaW50aygiZXhpdFxuIik7CisJcHJfZGVidWcoImV4aXRcbiIpOwogCiAJaWYgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9DUEIpKSB7CiAJCW1zcnNfZnJlZShtc3JzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oIGIvZHJpdmVycy9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20gYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3Bvd2Vybm93LWs4LmgKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCmluZGV4IGRmMzUyOWIuLjM3NDRkMjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9wb3dlcm5vdy1rOC5oCkBAIC0yMTEsOCArMjExLDYgQEAKIAl1OCB2aWQ7CiB9OwogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgInBvd2Vybm93LWs4IiwgbXNnKQotCiBzdGF0aWMgaW50IGNvcmVfdm9sdGFnZV9wcmVfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwKIAl1MzIgcmVxdmlkLCB1MzIgcmVnZmlkKTsKIHN0YXRpYyBpbnQgY29yZV92b2x0YWdlX3Bvc3RfdHJhbnNpdGlvbihzdHJ1Y3QgcG93ZXJub3dfazhfZGF0YSAqZGF0YSwgdTMyIHJlcXZpZCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL3NjNTIwX2ZyZXEuYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc2M1MjBfZnJlcS5jCnJlbmFtZSB0byBkcml2ZXJzL2NwdWZyZXEvc2M1MjBfZnJlcS5jCmluZGV4IDQzNWE5OTYuLjFlMjA1ZTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zYzUyMF9mcmVxLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL3NjNTIwX2ZyZXEuYwpAQCAtMjksOCArMjksNiBAQAogCiBzdGF0aWMgX191OCBfX2lvbWVtICpjcHVjdGw7CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCi0JCSJzYzUyMF9mcmVxIiwgbXNnKQogI2RlZmluZSBQRlggInNjNTIwX2ZyZXE6ICIKIAogc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSBzYzUyMF9mcmVxX3RhYmxlW10gPSB7CkBAIC02Niw3ICs2NCw3IEBACiAKIAljcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKCZmcmVxcywgQ1BVRlJFUV9QUkVDSEFOR0UpOwogCi0JZHByaW50aygiYXR0ZW1wdGluZyB0byBzZXQgZnJlcXVlbmN5IHRvICVpIGtIelxuIiwKKwlwcl9kZWJ1ZygiYXR0ZW1wdGluZyB0byBzZXQgZnJlcXVlbmN5IHRvICVpIGtIelxuIiwKIAkJCXNjNTIwX2ZyZXFfdGFibGVbc3RhdGVdLmZyZXF1ZW5jeSk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwpAQCAtMTYxLDcgKzE1OSw3IEBACiAJLyogVGVzdCBpZiB3ZSBoYXZlIHRoZSByaWdodCBoYXJkd2FyZSAqLwogCWlmIChjLT54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EIHx8CiAJICAgIGMtPng4NiAhPSA0IHx8IGMtPng4Nl9tb2RlbCAhPSA5KSB7Ci0JCWRwcmludGsoIm5vIEVsYW4gU0M1MjAgcHJvY2Vzc29yIGZvdW5kIVxuIik7CisJCXByX2RlYnVnKCJubyBFbGFuIFNDNTIwIHByb2Nlc3NvciBmb3VuZCFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJY3B1Y3RsID0gaW9yZW1hcCgodW5zaWduZWQgbG9uZykoTU1DUl9CQVNFICsgT0ZGU19DUFVDVEwpLCAxKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYyBiL2RyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYwpzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBhcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYwppbmRleCA5YjFmZjM3Li42ZWEzNDU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKKysrIGIvZHJpdmVycy9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCkBAIC0yOSw5ICsyOSw2IEBACiAjZGVmaW5lIFBGWAkJInNwZWVkc3RlcC1jZW50cmlubzogIgogI2RlZmluZSBNQUlOVEFJTkVSCSJjcHVmcmVxQHZnZXIua2VybmVsLm9yZyIKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgXAotCWNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCAic3BlZWRzdGVwLWNlbnRyaW5vIiwgbXNnKQotCiAjZGVmaW5lIElOVEVMX01TUl9SQU5HRQkoMHhmZmZmKQogCiBzdHJ1Y3QgY3B1X2lkCkBAIC0yNDQsNyArMjQxLDcgQEAKIAogCWlmIChtb2RlbC0+Y3B1X2lkID09IE5VTEwpIHsKIAkJLyogTm8gbWF0Y2ggYXQgYWxsICovCi0JCWRwcmludGsoIm5vIHN1cHBvcnQgZm9yIENQVSBtb2RlbCBcIiVzXCI6ICIKKwkJcHJfZGVidWcoIm5vIHN1cHBvcnQgZm9yIENQVSBtb2RlbCBcIiVzXCI6ICIKIAkJICAgICAgICJzZW5kIC9wcm9jL2NwdWluZm8gdG8gIiBNQUlOVEFJTkVSICJcbiIsCiAJCSAgICAgICBjcHUtPng4Nl9tb2RlbF9pZCk7CiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMjUyLDE1ICsyNDksMTUgQEAKIAogCWlmIChtb2RlbC0+b3BfcG9pbnRzID09IE5VTEwpIHsKIAkJLyogTWF0Y2hlZCBhIG5vbi1tYXRjaCAqLwotCQlkcHJpbnRrKCJubyB0YWJsZSBzdXBwb3J0IGZvciBDUFUgbW9kZWwgXCIlc1wiXG4iLAorCQlwcl9kZWJ1Zygibm8gdGFibGUgc3VwcG9ydCBmb3IgQ1BVIG1vZGVsIFwiJXNcIlxuIiwKIAkJICAgICAgIGNwdS0+eDg2X21vZGVsX2lkKTsKLQkJZHByaW50aygidHJ5IHVzaW5nIHRoZSBhY3BpLWNwdWZyZXEgZHJpdmVyXG4iKTsKKwkJcHJfZGVidWcoInRyeSB1c2luZyB0aGUgYWNwaS1jcHVmcmVxIGRyaXZlclxuIik7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCXBlcl9jcHUoY2VudHJpbm9fbW9kZWwsIHBvbGljeS0+Y3B1KSA9IG1vZGVsOwogCi0JZHByaW50aygiZm91bmQgXCIlc1wiOiBtYXggZnJlcXVlbmN5OiAlZGtIelxuIiwKKwlwcl9kZWJ1ZygiZm91bmQgXCIlc1wiOiBtYXggZnJlcXVlbmN5OiAlZGtIelxuIiwKIAkgICAgICAgbW9kZWwtPm1vZGVsX25hbWUsIG1vZGVsLT5tYXhfZnJlcSk7CiAKIAlyZXR1cm4gMDsKQEAgLTM2OSw3ICszNjYsNyBAQAogCQlwZXJfY3B1KGNlbnRyaW5vX2NwdSwgcG9saWN5LT5jcHUpID0gJmNwdV9pZHNbaV07CiAKIAlpZiAoIXBlcl9jcHUoY2VudHJpbm9fY3B1LCBwb2xpY3ktPmNwdSkpIHsKLQkJZHByaW50aygiZm91bmQgdW5zdXBwb3J0ZWQgQ1BVIHdpdGggIgorCQlwcl9kZWJ1ZygiZm91bmQgdW5zdXBwb3J0ZWQgQ1BVIHdpdGggIgogCQkiRW5oYW5jZWQgU3BlZWRTdGVwOiBzZW5kIC9wcm9jL2NwdWluZm8gdG8gIgogCQlNQUlOVEFJTkVSICJcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM4NSw3ICszODIsNyBAQAogCiAJaWYgKCEobCAmIE1TUl9JQTMyX01JU0NfRU5BQkxFX0VOSEFOQ0VEX1NQRUVEU1RFUCkpIHsKIAkJbCB8PSBNU1JfSUEzMl9NSVNDX0VOQUJMRV9FTkhBTkNFRF9TUEVFRFNURVA7Ci0JCWRwcmludGsoInRyeWluZyB0byBlbmFibGUgRW5oYW5jZWQgU3BlZWRTdGVwICgleClcbiIsIGwpOworCQlwcl9kZWJ1ZygidHJ5aW5nIHRvIGVuYWJsZSBFbmhhbmNlZCBTcGVlZFN0ZXAgKCV4KVxuIiwgbCk7CiAJCXdybXNyKE1TUl9JQTMyX01JU0NfRU5BQkxFLCBsLCBoKTsKIAogCQkvKiBjaGVjayB0byBzZWUgaWYgaXQgc3R1Y2sgKi8KQEAgLTQwMiw3ICszOTksNyBAQAogCQkJCQkJLyogMTB1UyB0cmFuc2l0aW9uIGxhdGVuY3kgKi8KIAlwb2xpY3ktPmN1ciA9IGZyZXE7CiAKLQlkcHJpbnRrKCJjZW50cmlub19jcHVfaW5pdDogY3VyPSVka0h6XG4iLCBwb2xpY3ktPmN1cik7CisJcHJfZGVidWcoImNlbnRyaW5vX2NwdV9pbml0OiBjdXI9JWRrSHpcbiIsIHBvbGljeS0+Y3VyKTsKIAogCXJldCA9IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2NwdWluZm8ocG9saWN5LAogCQlwZXJfY3B1KGNlbnRyaW5vX21vZGVsLCBwb2xpY3ktPmNwdSktPm9wX3BvaW50cyk7CkBAIC00OTgsNyArNDk1LDcgQEAKIAkJCWdvb2RfY3B1ID0gajsKIAogCQlpZiAoZ29vZF9jcHUgPj0gbnJfY3B1X2lkcykgewotCQkJZHByaW50aygiY291bGRuJ3QgbGltaXQgdG8gQ1BVcyBpbiB0aGlzIGRvbWFpblxuIik7CisJCQlwcl9kZWJ1ZygiY291bGRuJ3QgbGltaXQgdG8gQ1BVcyBpbiB0aGlzIGRvbWFpblxuIik7CiAJCQlyZXR2YWwgPSAtRUFHQUlOOwogCQkJaWYgKGZpcnN0X2NwdSkgewogCQkJCS8qIFdlIGhhdmVuJ3Qgc3RhcnRlZCB0aGUgdHJhbnNpdGlvbiB5ZXQuICovCkBAIC01MTIsNyArNTA5LDcgQEAKIAkJaWYgKGZpcnN0X2NwdSkgewogCQkJcmRtc3Jfb25fY3B1KGdvb2RfY3B1LCBNU1JfSUEzMl9QRVJGX0NUTCwgJm9sZG1zciwgJmgpOwogCQkJaWYgKG1zciA9PSAob2xkbXNyICYgMHhmZmZmKSkgewotCQkJCWRwcmludGsoIm5vIGNoYW5nZSBuZWVkZWQgLSBtc3Igd2FzIGFuZCBuZWVkcyAiCisJCQkJcHJfZGVidWcoIm5vIGNoYW5nZSBuZWVkZWQgLSBtc3Igd2FzIGFuZCBuZWVkcyAiCiAJCQkJCSJ0byBiZSAleFxuIiwgb2xkbXNyKTsKIAkJCQlyZXR2YWwgPSAwOwogCQkJCWdvdG8gb3V0OwpAQCAtNTIxLDcgKzUxOCw3IEBACiAJCQlmcmVxcy5vbGQgPSBleHRyYWN0X2Nsb2NrKG9sZG1zciwgY3B1LCAwKTsKIAkJCWZyZXFzLm5ldyA9IGV4dHJhY3RfY2xvY2sobXNyLCBjcHUsIDApOwogCi0JCQlkcHJpbnRrKCJ0YXJnZXQ9JWRrSHogb2xkPSVkIG5ldz0lZCBtc3I9JTA0eFxuIiwKKwkJCXByX2RlYnVnKCJ0YXJnZXQ9JWRrSHogb2xkPSVkIG5ldz0lZCBtc3I9JTA0eFxuIiwKIAkJCQl0YXJnZXRfZnJlcSwgZnJlcXMub2xkLCBmcmVxcy5uZXcsIG1zcik7CiAKIAkJCWZvcl9lYWNoX2NwdShrLCBwb2xpY3ktPmNwdXMpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMgYi9kcml2ZXJzL2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCnNpbWlsYXJpdHkgaW5kZXggOTIlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtaWNoLmMKaW5kZXggNTYxNzU4ZS4uYTc0OGNlNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1pY2guYworKysgYi9kcml2ZXJzL2NwdWZyZXEvc3BlZWRzdGVwLWljaC5jCkBAIC01MywxMCArNTMsNiBAQAogfTsKIAogCi0jZGVmaW5lIGRwcmludGsobXNnLi4uKSBjcHVmcmVxX2RlYnVnX3ByaW50ayhDUFVGUkVRX0RFQlVHX0RSSVZFUiwgXAotCQkic3BlZWRzdGVwLWljaCIsIG1zZykKLQotCiAvKioKICAqIHNwZWVkc3RlcF9maW5kX3JlZ2lzdGVyIC0gcmVhZCB0aGUgUE1CQVNFIGFkZHJlc3MKICAqCkBAIC04MCw3ICs3Niw3IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRwcmludGsoInBtYmFzZSBpcyAweCV4XG4iLCBwbWJhc2UpOworCXByX2RlYnVnKCJwbWJhc2UgaXMgMHgleFxuIiwgcG1iYXNlKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA2LDEzICsxMDIsMTMgQEAKIAkvKiByZWFkIHN0YXRlICovCiAJdmFsdWUgPSBpbmIocG1iYXNlICsgMHg1MCk7CiAKLQlkcHJpbnRrKCJyZWFkIGF0IHBtYmFzZSAweCV4ICsgMHg1MCByZXR1cm5lZCAweCV4XG4iLCBwbWJhc2UsIHZhbHVlKTsKKwlwcl9kZWJ1ZygicmVhZCBhdCBwbWJhc2UgMHgleCArIDB4NTAgcmV0dXJuZWQgMHgleFxuIiwgcG1iYXNlLCB2YWx1ZSk7CiAKIAkvKiB3cml0ZSBuZXcgc3RhdGUgKi8KIAl2YWx1ZSAmPSAweEZFOwogCXZhbHVlIHw9IHN0YXRlOwogCi0JZHByaW50aygid3JpdGluZyAweCV4IHRvIHBtYmFzZSAweCV4ICsgMHg1MFxuIiwgdmFsdWUsIHBtYmFzZSk7CisJcHJfZGVidWcoIndyaXRpbmcgMHgleCB0byBwbWJhc2UgMHgleCArIDB4NTBcbiIsIHZhbHVlLCBwbWJhc2UpOwogCiAJLyogRGlzYWJsZSBidXMgbWFzdGVyIGFyYml0cmF0aW9uICovCiAJcG0yX2JsayA9IGluYihwbWJhc2UgKyAweDIwKTsKQEAgLTEzMiwxMCArMTI4LDEwIEBACiAJLyogRW5hYmxlIElSUXMgKi8KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKLQlkcHJpbnRrKCJyZWFkIGF0IHBtYmFzZSAweCV4ICsgMHg1MCByZXR1cm5lZCAweCV4XG4iLCBwbWJhc2UsIHZhbHVlKTsKKwlwcl9kZWJ1ZygicmVhZCBhdCBwbWJhc2UgMHgleCArIDB4NTAgcmV0dXJuZWQgMHgleFxuIiwgcG1iYXNlLCB2YWx1ZSk7CiAKIAlpZiAoc3RhdGUgPT0gKHZhbHVlICYgMHgxKSkKLQkJZHByaW50aygiY2hhbmdlIHRvICV1IE1IeiBzdWNjZWVkZWRcbiIsCisJCXByX2RlYnVnKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZFxuIiwKIAkJCXNwZWVkc3RlcF9nZXRfZnJlcXVlbmN5KHNwZWVkc3RlcF9wcm9jZXNzb3IpIC8gMTAwMCk7CiAJZWxzZQogCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGNoYW5nZSBmYWlsZWQgLSBJL08gZXJyb3JcbiIpOwpAQCAtMTY1LDcgKzE2MSw3IEBACiAJcGNpX3JlYWRfY29uZmlnX3dvcmQoc3BlZWRzdGVwX2NoaXBzZXRfZGV2LCAweDAwQTAsICZ2YWx1ZSk7CiAJaWYgKCEodmFsdWUgJiAweDA4KSkgewogCQl2YWx1ZSB8PSAweDA4OwotCQlkcHJpbnRrKCJhY3RpdmF0aW5nIFNwZWVkU3RlcCAoVE0pIHJlZ2lzdGVyc1xuIik7CisJCXByX2RlYnVnKCJhY3RpdmF0aW5nIFNwZWVkU3RlcCAoVE0pIHJlZ2lzdGVyc1xuIik7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZChzcGVlZHN0ZXBfY2hpcHNldF9kZXYsIDB4MDBBMCwgdmFsdWUpOwogCX0KIApAQCAtMjE4LDcgKzIxNCw3IEBACiAJCQlyZXR1cm4gMjsgLyogMi1NICovCiAKIAkJaWYgKGhvc3RicmlkZ2UtPnJldmlzaW9uIDwgNSkgewotCQkJZHByaW50aygiaG9zdGJyaWRnZSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkc3RlcFxuIik7CisJCQlwcl9kZWJ1ZygiaG9zdGJyaWRnZSBkb2VzIG5vdCBzdXBwb3J0IHNwZWVkc3RlcFxuIik7CiAJCQlzcGVlZHN0ZXBfY2hpcHNldF9kZXYgPSBOVUxMOwogCQkJcGNpX2Rldl9wdXQoaG9zdGJyaWRnZSk7CiAJCQlyZXR1cm4gMDsKQEAgLTI0Niw3ICsyNDIsNyBAQAogCWlmIChzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCBnZXRfZnJlcV9kYXRhLCAmc3BlZWQsIDEpICE9IDApCiAJCUJVRygpOwogCi0JZHByaW50aygiZGV0ZWN0ZWQgJXUga0h6IGFzIGN1cnJlbnQgZnJlcXVlbmN5XG4iLCBzcGVlZCk7CisJcHJfZGVidWcoImRldGVjdGVkICV1IGtIeiBhcyBjdXJyZW50IGZyZXF1ZW5jeVxuIiwgc3BlZWQpOwogCXJldHVybiBzcGVlZDsKIH0KIApAQCAtMjc2LDcgKzI3Miw3IEBACiAJZnJlcXMubmV3ID0gc3BlZWRzdGVwX2ZyZXFzW25ld3N0YXRlXS5mcmVxdWVuY3k7CiAJZnJlcXMuY3B1ID0gcG9saWN5LT5jcHU7CiAKLQlkcHJpbnRrKCJ0cmFuc2l0aW5nIGZyb20gJXUgdG8gJXUga0h6XG4iLCBmcmVxcy5vbGQsIGZyZXFzLm5ldyk7CisJcHJfZGVidWcoInRyYW5zaXRpbmcgZnJvbSAldSB0byAldSBrSHpcbiIsIGZyZXFzLm9sZCwgZnJlcXMubmV3KTsKIAogCS8qIG5vIHRyYW5zaXRpb24gbmVjZXNzYXJ5ICovCiAJaWYgKGZyZXFzLm9sZCA9PSBmcmVxcy5uZXcpCkBAIC0zNTEsNyArMzQ3LDcgQEAKIAlpZiAoIXNwZWVkKQogCQlyZXR1cm4gLUVJTzsKIAotCWRwcmludGsoImN1cnJlbnRseSBhdCAlcyBzcGVlZCBzZXR0aW5nIC0gJWkgTUh6XG4iLAorCXByX2RlYnVnKCJjdXJyZW50bHkgYXQgJXMgc3BlZWQgc2V0dGluZyAtICVpIE1IelxuIiwKIAkJKHNwZWVkID09IHNwZWVkc3RlcF9mcmVxc1tTUEVFRFNURVBfTE9XXS5mcmVxdWVuY3kpCiAJCT8gImxvdyIgOiAiaGlnaCIsCiAJCShzcGVlZCAvIDEwMDApKTsKQEAgLTQwNSwxNCArNDAxLDE0IEBACiAJLyogZGV0ZWN0IHByb2Nlc3NvciAqLwogCXNwZWVkc3RlcF9wcm9jZXNzb3IgPSBzcGVlZHN0ZXBfZGV0ZWN0X3Byb2Nlc3NvcigpOwogCWlmICghc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCQlkcHJpbnRrKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGNhcGFibGUgcHJvY2Vzc29yICIKKwkJcHJfZGVidWcoIkludGVsKFIpIFNwZWVkU3RlcChUTSkgY2FwYWJsZSBwcm9jZXNzb3IgIgogCQkJCSJub3QgZm91bmRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBkZXRlY3QgY2hpcHNldCAqLwogCWlmICghc3BlZWRzdGVwX2RldGVjdF9jaGlwc2V0KCkpIHsKLQkJZHByaW50aygiSW50ZWwoUikgU3BlZWRTdGVwKFRNKSBmb3IgdGhpcyBjaGlwc2V0IG5vdCAiCisJCXByX2RlYnVnKCJJbnRlbChSKSBTcGVlZFN0ZXAoVE0pIGZvciB0aGlzIGNoaXBzZXQgbm90ICIKIAkJCQkiKHlldCkgYXZhaWxhYmxlLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMgYi9kcml2ZXJzL2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmMKaW5kZXggYTk0ZWM2Yi4uOGFmMmQyZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvc3BlZWRzdGVwLWxpYi5jCkBAIC0xOCw5ICsxOCw2IEBACiAjaW5jbHVkZSA8YXNtL3RzYy5oPgogI2luY2x1ZGUgInNwZWVkc3RlcC1saWIuaCIKIAotI2RlZmluZSBkcHJpbnRrKG1zZy4uLikgY3B1ZnJlcV9kZWJ1Z19wcmludGsoQ1BVRlJFUV9ERUJVR19EUklWRVIsIFwKLQkJInNwZWVkc3RlcC1saWIiLCBtc2cpCi0KICNkZWZpbmUgUEZYICJzcGVlZHN0ZXAtbGliOiAiCiAKICNpZmRlZiBDT05GSUdfWDg2X1NQRUVEU1RFUF9SRUxBWEVEX0NBUF9DSEVDSwpAQCAtNzUsNyArNzIsNyBAQAogCiAJLyogcmVhZCBNU1IgMHgyYSAtIHdlIG9ubHkgbmVlZCB0aGUgbG93IDMyIGJpdHMgKi8KIAlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbXNyX2xvLCBtc3JfdG1wKTsKLQlkcHJpbnRrKCJQMyAtIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOiAweCV4IDB4JXhcbiIsIG1zcl9sbywgbXNyX3RtcCk7CisJcHJfZGVidWcoIlAzIC0gTVNSX0lBMzJfRUJMX0NSX1BPV0VST046IDB4JXggMHgleFxuIiwgbXNyX2xvLCBtc3JfdG1wKTsKIAltc3JfdG1wID0gbXNyX2xvOwogCiAJLyogZGVjb2RlIHRoZSBGU0IgKi8KQEAgLTg5LDcgKzg2LDcgQEAKIAogCS8qIGRlY29kZSB0aGUgbXVsdGlwbGllciAqLwogCWlmIChwcm9jZXNzb3IgPT0gU1BFRURTVEVQX0NQVV9QSUlJX0NfRUFSTFkpIHsKLQkJZHByaW50aygid29ya2Fyb3VuZCBmb3IgZWFybHkgUElJSXNcbiIpOworCQlwcl9kZWJ1Zygid29ya2Fyb3VuZCBmb3IgZWFybHkgUElJSXNcbiIpOwogCQltc3JfbG8gJj0gMHgwM2MwMDAwMDsKIAl9IGVsc2UKIAkJbXNyX2xvICY9IDB4MGJjMDAwMDA7CkBAIC0xMDAsNyArOTcsNyBAQAogCQlqKys7CiAJfQogCi0JZHByaW50aygic3BlZWQgaXMgJXVcbiIsCisJcHJfZGVidWcoInNwZWVkIGlzICV1XG4iLAogCQkobXNyX2RlY29kZV9tdWx0W2pdLnJhdGlvICogbXNyX2RlY29kZV9mc2JbaV0udmFsdWUgKiAxMDApKTsKIAogCXJldHVybiBtc3JfZGVjb2RlX211bHRbal0ucmF0aW8gKiBtc3JfZGVjb2RlX2ZzYltpXS52YWx1ZSAqIDEwMDsKQEAgLTExMiw3ICsxMDksNyBAQAogCXUzMiBtc3JfbG8sIG1zcl90bXA7CiAKIAlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbXNyX2xvLCBtc3JfdG1wKTsKLQlkcHJpbnRrKCJQTSAtIE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OOiAweCV4IDB4JXhcbiIsIG1zcl9sbywgbXNyX3RtcCk7CisJcHJfZGVidWcoIlBNIC0gTVNSX0lBMzJfRUJMX0NSX1BPV0VST046IDB4JXggMHgleFxuIiwgbXNyX2xvLCBtc3JfdG1wKTsKIAogCS8qIHNlZSB0YWJsZSBCLTIgb2YgMjQ1NDcyMTIucGRmICovCiAJaWYgKG1zcl9sbyAmIDB4MDAwNDAwMDApIHsKQEAgLTEyMiw3ICsxMTksNyBAQAogCX0KIAogCW1zcl90bXAgPSAobXNyX2xvID4+IDIyKSAmIDB4MWY7Ci0JZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCisJcHJfZGVidWcoImJpdHMgMjItMjYgYXJlIDB4JXgsIHNwZWVkIGlzICV1XG4iLAogCQkJbXNyX3RtcCwgKG1zcl90bXAgKiAxMDAgKiAxMDAwKSk7CiAKIAlyZXR1cm4gbXNyX3RtcCAqIDEwMCAqIDEwMDA7CkBAIC0xNjAsMTEgKzE1NywxMSBAQAogCX0KIAogCXJkbXNyKE1TUl9JQTMyX0VCTF9DUl9QT1dFUk9OLCBtc3JfbG8sIG1zcl90bXApOwotCWRwcmludGsoIlBDT1JFIC0gTVNSX0lBMzJfRUJMX0NSX1BPV0VST046IDB4JXggMHgleFxuIiwKKwlwcl9kZWJ1ZygiUENPUkUgLSBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTjogMHgleCAweCV4XG4iLAogCQkJbXNyX2xvLCBtc3JfdG1wKTsKIAogCW1zcl90bXAgPSAobXNyX2xvID4+IDIyKSAmIDB4MWY7Ci0JZHByaW50aygiYml0cyAyMi0yNiBhcmUgMHgleCwgc3BlZWQgaXMgJXVcbiIsCisJcHJfZGVidWcoImJpdHMgMjItMjYgYXJlIDB4JXgsIHNwZWVkIGlzICV1XG4iLAogCQkJbXNyX3RtcCwgKG1zcl90bXAgKiBmc2IpKTsKIAogCXJldCA9IChtc3JfdG1wICogZnNiKTsKQEAgLTE5MCw3ICsxODcsNyBAQAogCiAJcmRtc3IoMHgyYywgbXNyX2xvLCBtc3JfaGkpOwogCi0JZHByaW50aygiUDQgLSBNU1JfRUJDX0ZSRVFVRU5DWV9JRDogMHgleCAweCV4XG4iLCBtc3JfbG8sIG1zcl9oaSk7CisJcHJfZGVidWcoIlA0IC0gTVNSX0VCQ19GUkVRVUVOQ1lfSUQ6IDB4JXggMHgleFxuIiwgbXNyX2xvLCBtc3JfaGkpOwogCiAJLyogZGVjb2RlIHRoZSBGU0I6IHNlZSBJQS0zMiBJbnRlbCAoQykgQXJjaGl0ZWN0dXJlIFNvZnR3YXJlCiAJICogRGV2ZWxvcGVyJ3MgTWFudWFsLCBWb2x1bWUgMzogU3lzdGVtIFByZ3JhbW1pbmcgR3VpZGUsCkBAIC0yMTcsNyArMjE0LDcgQEAKIAkvKiBNdWx0aXBsaWVyLiAqLwogCW11bHQgPSBtc3JfbG8gPj4gMjQ7CiAKLQlkcHJpbnRrKCJQNCAtIEZTQiAldSBrSHo7IE11bHRpcGxpZXIgJXU7IFNwZWVkICV1IGtIelxuIiwKKwlwcl9kZWJ1ZygiUDQgLSBGU0IgJXUga0h6OyBNdWx0aXBsaWVyICV1OyBTcGVlZCAldSBrSHpcbiIsCiAJCQlmc2IsIG11bHQsIChmc2IgKiBtdWx0KSk7CiAKIAlyZXQgPSAoZnNiICogbXVsdCk7CkBAIC0yNTcsNyArMjU0LDcgQEAKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmY3B1X2RhdGEoMCk7CiAJdTMyIGVieCwgbXNyX2xvLCBtc3JfaGk7CiAKLQlkcHJpbnRrKCJ4ODY6ICV4LCBtb2RlbDogJXhcbiIsIGMtPng4NiwgYy0+eDg2X21vZGVsKTsKKwlwcl9kZWJ1ZygieDg2OiAleCwgbW9kZWw6ICV4XG4iLCBjLT54ODYsIGMtPng4Nl9tb2RlbCk7CiAKIAlpZiAoKGMtPng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9JTlRFTCkgfHwKIAkgICAgKChjLT54ODYgIT0gNikgJiYgKGMtPng4NiAhPSAweEYpKSkKQEAgLTI3Miw3ICsyNjksNyBAQAogCQllYnggPSBjcHVpZF9lYngoMHgwMDAwMDAwMSk7CiAJCWVieCAmPSAweDAwMDAwMEZGOwogCi0JCWRwcmludGsoImVieCB2YWx1ZSBpcyAleCwgeDg2X21hc2sgaXMgJXhcbiIsIGVieCwgYy0+eDg2X21hc2spOworCQlwcl9kZWJ1ZygiZWJ4IHZhbHVlIGlzICV4LCB4ODZfbWFzayBpcyAleFxuIiwgZWJ4LCBjLT54ODZfbWFzayk7CiAKIAkJc3dpdGNoIChjLT54ODZfbWFzaykgewogCQljYXNlIDQ6CkBAIC0zMjcsNyArMzI0LDcgQEAKIAkJLyogY3B1aWRfZWJ4KDEpIGlzIDB4MDQgZm9yIGRlc2t0b3AgUElJSSwKIAkJICogMHgwNiBmb3IgbW9iaWxlIFBJSUktTSAqLwogCQllYnggPSBjcHVpZF9lYngoMHgwMDAwMDAwMSk7Ci0JCWRwcmludGsoImVieCBpcyAleFxuIiwgZWJ4KTsKKwkJcHJfZGVidWcoImVieCBpcyAleFxuIiwgZWJ4KTsKIAogCQllYnggJj0gMHgwMDAwMDBGRjsKIApAQCAtMzQ0LDcgKzM0MSw3IEBACiAJCS8qIGFsbCBtb2JpbGUgUElJSSBDb3BwZXJtaW5lcyBoYXZlIEZTQiAxMDAgTUh6CiAJCSAqID09PiBzb3J0IG91dCBhIGZldyBkZXNrdG9wIFBJSUlzLiAqLwogCQlyZG1zcihNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiwgbXNyX2xvLCBtc3JfaGkpOwotCQlkcHJpbnRrKCJDb3BwZXJtaW5lOiBNU1JfSUEzMl9FQkxfQ1JfUE9XRVJPTiBpcyAweCV4LCAweCV4XG4iLAorCQlwcl9kZWJ1ZygiQ29wcGVybWluZTogTVNSX0lBMzJfRUJMX0NSX1BPV0VST04gaXMgMHgleCwgMHgleFxuIiwKIAkJCQltc3JfbG8sIG1zcl9oaSk7CiAJCW1zcl9sbyAmPSAweDAwYzAwMDA7CiAJCWlmIChtc3JfbG8gIT0gMHgwMDgwMDAwKQpAQCAtMzU3LDEyICszNTQsMTIgQEAKIAkJICogYml0IDU2IG9yIDU3IGlzIHNldAogCQkgKi8KIAkJcmRtc3IoTVNSX0lBMzJfUExBVEZPUk1fSUQsIG1zcl9sbywgbXNyX2hpKTsKLQkJZHByaW50aygiQ29wcGVybWluZTogTVNSX0lBMzJfUExBVEZPUk0gSUQgaXMgMHgleCwgMHgleFxuIiwKKwkJcHJfZGVidWcoIkNvcHBlcm1pbmU6IE1TUl9JQTMyX1BMQVRGT1JNIElEIGlzIDB4JXgsIDB4JXhcbiIsCiAJCQkJbXNyX2xvLCBtc3JfaGkpOwogCQlpZiAoKG1zcl9oaSAmICgxPDwxOCkpICYmCiAJCSAgICAocmVsYXhlZF9jaGVjayA/IDEgOiAobXNyX2hpICYgKDM8PDI0KSkpKSB7CiAJCQlpZiAoYy0+eDg2X21hc2sgPT0gMHgwMSkgewotCQkJCWRwcmludGsoImVhcmx5IFBJSUkgdmVyc2lvblxuIik7CisJCQkJcHJfZGVidWcoImVhcmx5IFBJSUkgdmVyc2lvblxuIik7CiAJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUElJSV9DX0VBUkxZOwogCQkJfSBlbHNlCiAJCQkJcmV0dXJuIFNQRUVEU1RFUF9DUFVfUElJSV9DOwpAQCAtMzkzLDE0ICszOTAsMTQgQEAKIAlpZiAoKCFwcm9jZXNzb3IpIHx8ICghbG93X3NwZWVkKSB8fCAoIWhpZ2hfc3BlZWQpIHx8ICghc2V0X3N0YXRlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gZGV0ZXJtaW5lIGJvdGggc3BlZWRzXG4iKTsKKwlwcl9kZWJ1ZygidHJ5aW5nIHRvIGRldGVybWluZSBib3RoIHNwZWVkc1xuIik7CiAKIAkvKiBnZXQgY3VycmVudCBzcGVlZCAqLwogCXByZXZfc3BlZWQgPSBzcGVlZHN0ZXBfZ2V0X2ZyZXF1ZW5jeShwcm9jZXNzb3IpOwogCWlmICghcHJldl9zcGVlZCkKIAkJcmV0dXJuIC1FSU87CiAKLQlkcHJpbnRrKCJwcmV2aW91cyBzcGVlZCBpcyAldVxuIiwgcHJldl9zcGVlZCk7CisJcHJfZGVidWcoInByZXZpb3VzIHNwZWVkIGlzICV1XG4iLCBwcmV2X3NwZWVkKTsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIApAQCAtNDEyLDcgKzQwOSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWRwcmludGsoImxvdyBzcGVlZCBpcyAldVxuIiwgKmxvd19zcGVlZCk7CisJcHJfZGVidWcoImxvdyBzcGVlZCBpcyAldVxuIiwgKmxvd19zcGVlZCk7CiAKIAkvKiBzdGFydCBsYXRlbmN5IG1lYXN1cmVtZW50ICovCiAJaWYgKHRyYW5zaXRpb25fbGF0ZW5jeSkKQEAgLTQzMSw3ICs0MjgsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlkcHJpbnRrKCJoaWdoIHNwZWVkIGlzICV1XG4iLCAqaGlnaF9zcGVlZCk7CisJcHJfZGVidWcoImhpZ2ggc3BlZWQgaXMgJXVcbiIsICpoaWdoX3NwZWVkKTsKIAogCWlmICgqbG93X3NwZWVkID09ICpoaWdoX3NwZWVkKSB7CiAJCXJldCA9IC1FTk9ERVY7CkBAIC00NDUsNyArNDQyLDcgQEAKIAlpZiAodHJhbnNpdGlvbl9sYXRlbmN5KSB7CiAJCSp0cmFuc2l0aW9uX2xhdGVuY3kgPSAodHYyLnR2X3NlYyAtIHR2MS50dl9zZWMpICogVVNFQ19QRVJfU0VDICsKIAkJCXR2Mi50dl91c2VjIC0gdHYxLnR2X3VzZWM7Ci0JCWRwcmludGsoInRyYW5zaXRpb24gbGF0ZW5jeSBpcyAldSB1U2VjXG4iLCAqdHJhbnNpdGlvbl9sYXRlbmN5KTsKKwkJcHJfZGVidWcoInRyYW5zaXRpb24gbGF0ZW5jeSBpcyAldSB1U2VjXG4iLCAqdHJhbnNpdGlvbl9sYXRlbmN5KTsKIAogCQkvKiBjb252ZXJ0IHVTZWMgdG8gblNlYyBhbmQgYWRkIDIwJSBmb3Igc2FmZXR5IHJlYXNvbnMgKi8KIAkJKnRyYW5zaXRpb25fbGF0ZW5jeSAqPSAxMjAwOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1saWIuaCBiL2RyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtbGliLmgKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMgYi9kcml2ZXJzL2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCnNpbWlsYXJpdHkgaW5kZXggODklCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKcmVuYW1lIHRvIGRyaXZlcnMvY3B1ZnJlcS9zcGVlZHN0ZXAtc21pLmMKaW5kZXggOTFiYzI1Yi4uYzc2ZWFkMyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1zbWkuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvc3BlZWRzdGVwLXNtaS5jCkBAIC01NSw5ICs1NSw2IEBACiAgKiBvZiBETUEgYWN0aXZpdHkgZ29pbmcgb24/ICovCiAjZGVmaW5lIFNNSV9UUklFUyA1CiAKLSNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLCBcCi0JCSJzcGVlZHN0ZXAtc21pIiwgbXNnKQotCiAvKioKICAqIHNwZWVkc3RlcF9zbWlfb3duZXJzaGlwCiAgKi8KQEAgLTcwLDcgKzY3LDcgQEAKIAljb21tYW5kID0gKHNtaV9zaWcgJiAweGZmZmZmZjAwKSB8IChzbWlfY21kICYgMHhmZik7CiAJbWFnaWMgPSB2aXJ0X3RvX3BoeXMobWFnaWNfZGF0YSk7CiAKLQlkcHJpbnRrKCJ0cnlpbmcgdG8gb2J0YWluIG93bmVyc2hpcCB3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKKwlwcl9kZWJ1ZygidHJ5aW5nIHRvIG9idGFpbiBvd25lcnNoaXAgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCiAJCQljb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKQEAgLTg1LDcgKzgyLDcgQEAKIAkJOiAibWVtb3J5IgogCSk7CiAKLQlkcHJpbnRrKCJyZXN1bHQgaXMgJXhcbiIsIHJlc3VsdCk7CisJcHJfZGVidWcoInJlc3VsdCBpcyAleFxuIiwgcmVzdWx0KTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0xMDYsMTMgKzEwMywxMyBAQAogCXUzMiBmdW5jdGlvbiA9IEdFVF9TUEVFRFNURVBfRlJFUVM7CiAKIAlpZiAoIShpc3RfaW5mby5ldmVudCAmIDB4RkZGRikpIHsKLQkJZHByaW50aygiYnVnICMxNDIyIC0tIGNhbid0IHJlYWQgZnJlcXMgZnJvbSBCSU9TXG4iKTsKKwkJcHJfZGVidWcoImJ1ZyAjMTQyMiAtLSBjYW4ndCByZWFkIGZyZXFzIGZyb20gQklPU1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAotCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgZnJlcXVlbmNpZXMgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCisJcHJfZGVidWcoInRyeWluZyB0byBkZXRlcm1pbmUgZnJlcXVlbmNpZXMgd2l0aCBjb21tYW5kICV4IGF0IHBvcnQgJXhcbiIsCiAJCQljb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKQEAgLTEyOSw3ICsxMjYsNyBAQAogCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJKTsKIAotCWRwcmludGsoInJlc3VsdCAleCwgbG93X2ZyZXEgJXUsIGhpZ2hfZnJlcSAldVxuIiwKKwlwcl9kZWJ1ZygicmVzdWx0ICV4LCBsb3dfZnJlcSAldSwgaGlnaF9mcmVxICV1XG4iLAogCQkJcmVzdWx0LCBsb3dfbWh6LCBoaWdoX21oeik7CiAKIAkvKiBhYm9ydCBpZiByZXN1bHRzIGFyZSBvYnZpb3VzbHkgaW5jb3JyZWN0Li4uICovCkBAIC0xNTQsNyArMTUxLDcgQEAKIAogCWNvbW1hbmQgPSAoc21pX3NpZyAmIDB4ZmZmZmZmMDApIHwgKHNtaV9jbWQgJiAweGZmKTsKIAotCWRwcmludGsoInRyeWluZyB0byBkZXRlcm1pbmUgY3VycmVudCBzZXR0aW5nIHdpdGggY29tbWFuZCAleCAiCisJcHJfZGVidWcoInRyeWluZyB0byBkZXRlcm1pbmUgY3VycmVudCBzZXR0aW5nIHdpdGggY29tbWFuZCAleCAiCiAJCSJhdCBwb3J0ICV4XG4iLCBjb21tYW5kLCBzbWlfcG9ydCk7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKQEAgLTE2OCw3ICsxNjUsNyBAQAogCQkgICJkIiAoc21pX3BvcnQpLCAiUyIgKDApLCAiRCIgKDApCiAJKTsKIAotCWRwcmludGsoInN0YXRlIGlzICV4LCByZXN1bHQgaXMgJXhcbiIsIHN0YXRlLCByZXN1bHQpOworCXByX2RlYnVnKCJzdGF0ZSBpcyAleCwgcmVzdWx0IGlzICV4XG4iLCBzdGF0ZSwgcmVzdWx0KTsKIAogCXJldHVybiBzdGF0ZSAmIDE7CiB9CkBAIC0xOTQsMTMgKzE5MSwxMyBAQAogCiAJY29tbWFuZCA9IChzbWlfc2lnICYgMHhmZmZmZmYwMCkgfCAoc21pX2NtZCAmIDB4ZmYpOwogCi0JZHByaW50aygidHJ5aW5nIHRvIHNldCBmcmVxdWVuY3kgdG8gc3RhdGUgJXUgIgorCXByX2RlYnVnKCJ0cnlpbmcgdG8gc2V0IGZyZXF1ZW5jeSB0byBzdGF0ZSAldSAiCiAJCSJ3aXRoIGNvbW1hbmQgJXggYXQgcG9ydCAleFxuIiwKIAkJc3RhdGUsIGNvbW1hbmQsIHNtaV9wb3J0KTsKIAogCWRvIHsKIAkJaWYgKHJldHJ5KSB7Ci0JCQlkcHJpbnRrKCJyZXRyeSAldSwgcHJldmlvdXMgcmVzdWx0ICV1LCB3YWl0aW5nLi4uXG4iLAorCQkJcHJfZGVidWcoInJldHJ5ICV1LCBwcmV2aW91cyByZXN1bHQgJXUsIHdhaXRpbmcuLi5cbiIsCiAJCQkJCXJldHJ5LCByZXN1bHQpOwogCQkJbWRlbGF5KHJldHJ5ICogNTApOwogCQl9CkBAIC0yMjEsNyArMjE4LDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlpZiAobmV3X3N0YXRlID09IHN0YXRlKQotCQlkcHJpbnRrKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZCBhZnRlciAldSB0cmllcyAiCisJCXByX2RlYnVnKCJjaGFuZ2UgdG8gJXUgTUh6IHN1Y2NlZWRlZCBhZnRlciAldSB0cmllcyAiCiAJCQkid2l0aCByZXN1bHQgJXVcbiIsCiAJCQkoc3BlZWRzdGVwX2ZyZXFzW25ld19zdGF0ZV0uZnJlcXVlbmN5IC8gMTAwMCksCiAJCQlyZXRyeSwgcmVzdWx0KTsKQEAgLTI5Miw3ICsyODksNyBAQAogCiAJcmVzdWx0ID0gc3BlZWRzdGVwX3NtaV9vd25lcnNoaXAoKTsKIAlpZiAocmVzdWx0KSB7Ci0JCWRwcmludGsoImZhaWxzIGluIGFjcXVpcmluZyBvd25lcnNoaXAgb2YgYSBTTUkgaW50ZXJmYWNlLlxuIik7CisJCXByX2RlYnVnKCJmYWlscyBpbiBhY3F1aXJpbmcgb3duZXJzaGlwIG9mIGEgU01JIGludGVyZmFjZS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTMwNCw3ICszMDEsNyBAQAogCWlmIChyZXN1bHQpIHsKIAkJLyogZmFsbCBiYWNrIHRvIHNwZWVkc3RlcF9saWIuYyBkZWN0aW9uIG1lY2hhbmlzbToKIAkJICogdHJ5IGJvdGggc3RhdGVzIG91dCAqLwotCQlkcHJpbnRrKCJjb3VsZCBub3QgZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY2llcyAiCisJCXByX2RlYnVnKCJjb3VsZCBub3QgZGV0ZWN0IGxvdyBhbmQgaGlnaCBmcmVxdWVuY2llcyAiCiAJCQkJImJ5IFNNSSBjYWxsLlxuIik7CiAJCXJlc3VsdCA9IHNwZWVkc3RlcF9nZXRfZnJlcXMoc3BlZWRzdGVwX3Byb2Nlc3NvciwKIAkJCQlsb3csIGhpZ2gsCkBAIC0zMTIsMTggKzMwOSwxOCBAQAogCQkJCSZzcGVlZHN0ZXBfc2V0X3N0YXRlKTsKIAogCQlpZiAocmVzdWx0KSB7Ci0JCQlkcHJpbnRrKCJjb3VsZCBub3QgZGV0ZWN0IHR3byBkaWZmZXJlbnQgc3BlZWRzIgorCQkJcHJfZGVidWcoImNvdWxkIG5vdCBkZXRlY3QgdHdvIGRpZmZlcmVudCBzcGVlZHMiCiAJCQkJCSIgLS0gYWJvcnRpbmcuXG4iKTsKIAkJCXJldHVybiByZXN1bHQ7CiAJCX0gZWxzZQotCQkJZHByaW50aygid29ya2Fyb3VuZCB3b3JrZWQuXG4iKTsKKwkJCXByX2RlYnVnKCJ3b3JrYXJvdW5kIHdvcmtlZC5cbiIpOwogCX0KIAogCS8qIGdldCBjdXJyZW50IHNwZWVkIHNldHRpbmcgKi8KIAlzdGF0ZSA9IHNwZWVkc3RlcF9nZXRfc3RhdGUoKTsKIAlzcGVlZCA9IHNwZWVkc3RlcF9mcmVxc1tzdGF0ZV0uZnJlcXVlbmN5OwogCi0JZHByaW50aygiY3VycmVudGx5IGF0ICVzIHNwZWVkIHNldHRpbmcgLSAlaSBNSHpcbiIsCisJcHJfZGVidWcoImN1cnJlbnRseSBhdCAlcyBzcGVlZCBzZXR0aW5nIC0gJWkgTUh6XG4iLAogCQkoc3BlZWQgPT0gc3BlZWRzdGVwX2ZyZXFzW1NQRUVEU1RFUF9MT1ddLmZyZXF1ZW5jeSkKIAkJPyAibG93IiA6ICJoaWdoIiwKIAkJKHNwZWVkIC8gMTAwMCkpOwpAQCAtMzYwLDcgKzM1Nyw3IEBACiAJaW50IHJlc3VsdCA9IHNwZWVkc3RlcF9zbWlfb3duZXJzaGlwKCk7CiAKIAlpZiAocmVzdWx0KQotCQlkcHJpbnRrKCJmYWlscyBpbiByZS1hY3F1aXJpbmcgb3duZXJzaGlwIG9mIGEgU01JIGludGVyZmFjZS5cbiIpOworCQlwcl9kZWJ1ZygiZmFpbHMgaW4gcmUtYWNxdWlyaW5nIG93bmVyc2hpcCBvZiBhIFNNSSBpbnRlcmZhY2UuXG4iKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC00MDMsMTIgKzQwMCwxMiBAQAogCX0KIAogCWlmICghc3BlZWRzdGVwX3Byb2Nlc3NvcikgewotCQlkcHJpbnRrKCJObyBzdXBwb3J0ZWQgSW50ZWwgQ1BVIGRldGVjdGVkLlxuIik7CisJCXByX2RlYnVnKCJObyBzdXBwb3J0ZWQgSW50ZWwgQ1BVIGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWRwcmludGsoInNpZ25hdHVyZToweCUuOGx4LCBjb21tYW5kOjB4JS44bHgsICIKLQkJImV2ZW50OjB4JS44bHgsIHBlcmZfbGV2ZWw6MHglLjhseC5cbiIsCisJcHJfZGVidWcoInNpZ25hdHVyZToweCUuOHVseCwgY29tbWFuZDoweCUuOHVseCwgIgorCQkiZXZlbnQ6MHglLjh1bHgsIHBlcmZfbGV2ZWw6MHglLjh1bHguXG4iLAogCQlpc3RfaW5mby5zaWduYXR1cmUsIGlzdF9pbmZvLmNvbW1hbmQsCiAJCWlzdF9pbmZvLmV2ZW50LCBpc3RfaW5mby5wZXJmX2xldmVsKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggMzFlNzFjNGYuLjlhOGJlYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYwpAQCAtMjExLDggKzIxMSw2IEBACiAKIAlzY3J1YnZhbCA9IHNjcnVidmFsICYgMHgwMDFGOwogCi0JYW1kNjRfZGVidWcoInBjaS1yZWFkLCBzZHJhbSBzY3J1YiBjb250cm9sIHZhbHVlOiAlZFxuIiwgc2NydWJ2YWwpOwotCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2NydWJyYXRlcyk7IGkrKykgewogCQlpZiAoc2NydWJyYXRlc1tpXS5zY3J1YnZhbCA9PSBzY3J1YnZhbCkgewogCQkJcmV0dmFsID0gc2NydWJyYXRlc1tpXS5iYW5kd2lkdGg7CkBAIC05MzMsMjUgKzkzMSw3NCBAQAogLyogT24gRjEwaCBhbmQgbGF0ZXIgRXJyQWRkciBpcyBNQzRfQUREUls0NzoxXSAqLwogc3RhdGljIHU2NCBnZXRfZXJyb3JfYWRkcmVzcyhzdHJ1Y3QgbWNlICptKQogeworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9ICZib290X2NwdV9kYXRhOworCXU2NCBhZGRyOwogCXU4IHN0YXJ0X2JpdCA9IDE7CiAJdTggZW5kX2JpdCAgID0gNDc7CiAKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmKSB7CisJaWYgKGMtPng4NiA9PSAweGYpIHsKIAkJc3RhcnRfYml0ID0gMzsKIAkJZW5kX2JpdCAgID0gMzk7CiAJfQogCi0JcmV0dXJuIG0tPmFkZHIgJiBHRU5NQVNLKHN0YXJ0X2JpdCwgZW5kX2JpdCk7CisJYWRkciA9IG0tPmFkZHIgJiBHRU5NQVNLKHN0YXJ0X2JpdCwgZW5kX2JpdCk7CisKKwkvKgorCSAqIEVycmF0dW0gNjM3IHdvcmthcm91bmQKKwkgKi8KKwlpZiAoYy0+eDg2ID09IDB4MTUpIHsKKwkJc3RydWN0IGFtZDY0X3B2dCAqcHZ0OworCQl1NjQgY2M2X2Jhc2UsIHRtcF9hZGRyOworCQl1MzIgdG1wOworCQl1OCBtY2VfbmlkLCBpbnRsdl9lbjsKKworCQlpZiAoKGFkZHIgJiBHRU5NQVNLKDI0LCA0NykpID4+IDI0ICE9IDB4MDBmZGY3KQorCQkJcmV0dXJuIGFkZHI7CisKKwkJbWNlX25pZAk9IGFtZF9nZXRfbmJfaWQobS0+ZXh0Y3B1KTsKKwkJcHZ0CT0gbWNpc1ttY2VfbmlkXS0+cHZ0X2luZm87CisKKwkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fTE9DQUxfTk9ERV9MSU0sICZ0bXApOworCQlpbnRsdl9lbiA9IHRtcCA+PiAyMSAmIDB4NzsKKworCQkvKiBhZGQgWzQ3OjI3XSArIDMgdHJhaWxpbmcgYml0cyAqLworCQljYzZfYmFzZSAgPSAodG1wICYgR0VOTUFTSygwLCAyMCkpIDw8IDM7CisKKwkJLyogcmV2ZXJzZSBhbmQgYWRkIERyYW1JbnRsdkVuICovCisJCWNjNl9iYXNlIHw9IGludGx2X2VuIF4gMHg3OworCisJCS8qIHBpbiBhdCBbNDc6MjRdICovCisJCWNjNl9iYXNlIDw8PSAyNDsKKworCQlpZiAoIWludGx2X2VuKQorCQkJcmV0dXJuIGNjNl9iYXNlIHwgKGFkZHIgJiBHRU5NQVNLKDAsIDIzKSk7CisKKwkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fTE9DQUxfTk9ERV9CQVNFLCAmdG1wKTsKKworCQkJCQkJCS8qIGZhc3RlciBsb2cyICovCisJCXRtcF9hZGRyICA9IChhZGRyICYgR0VOTUFTSygxMiwgMjMpKSA8PCBfX2ZscyhpbnRsdl9lbiArIDEpOworCisJCS8qIE9SIERyYW1JbnRsdlNlbCBpbnRvIGJpdHMgWzE0OjEyXSAqLworCQl0bXBfYWRkciB8PSAodG1wICYgR0VOTUFTSygyMSwgMjMpKSA+PiA5OworCisJCS8qIGFkZCByZW1haW5pbmcgWzExOjBdIGJpdHMgZnJvbSBvcmlnaW5hbCBNQzRfQUREUiAqLworCQl0bXBfYWRkciB8PSBhZGRyICYgR0VOTUFTSygwLCAxMSk7CisKKwkJcmV0dXJuIGNjNl9iYXNlIHwgdG1wX2FkZHI7CisJfQorCisJcmV0dXJuIGFkZHI7CiB9CiAKIHN0YXRpYyB2b2lkIHJlYWRfZHJhbV9iYXNlX2xpbWl0X3JlZ3Moc3RydWN0IGFtZDY0X3B2dCAqcHZ0LCB1bnNpZ25lZCByYW5nZSkKIHsKKwlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSAmYm9vdF9jcHVfZGF0YTsKIAlpbnQgb2ZmID0gcmFuZ2UgPDwgMzsKIAogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYxLCBEUkFNX0JBU0VfTE8gKyBvZmYsICAmcHZ0LT5yYW5nZXNbcmFuZ2VdLmJhc2UubG8pOwogCWFtZDY0X3JlYWRfcGNpX2NmZyhwdnQtPkYxLCBEUkFNX0xJTUlUX0xPICsgb2ZmLCAmcHZ0LT5yYW5nZXNbcmFuZ2VdLmxpbS5sbyk7CiAKLQlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPT0gMHhmKQorCWlmIChjLT54ODYgPT0gMHhmKQogCQlyZXR1cm47CiAKIAlpZiAoIWRyYW1fcncocHZ0LCByYW5nZSkpCkBAIC05NTksNiArMTAwNiwzMSBAQAogCiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fQkFTRV9ISSArIG9mZiwgICZwdnQtPnJhbmdlc1tyYW5nZV0uYmFzZS5oaSk7CiAJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+RjEsIERSQU1fTElNSVRfSEkgKyBvZmYsICZwdnQtPnJhbmdlc1tyYW5nZV0ubGltLmhpKTsKKworCS8qIEZhY3RvciBpbiBDQzYgc2F2ZSBhcmVhIGJ5IHJlYWRpbmcgZHN0IG5vZGUncyBsaW1pdCByZWcgKi8KKwlpZiAoYy0+eDg2ID09IDB4MTUpIHsKKwkJc3RydWN0IHBjaV9kZXYgKmYxID0gTlVMTDsKKwkJdTggbmlkID0gZHJhbV9kc3Rfbm9kZShwdnQsIHJhbmdlKTsKKwkJdTMyIGxsaW07CisKKwkJZjEgPSBwY2lfZ2V0X2RvbWFpbl9idXNfYW5kX3Nsb3QoMCwgMCwgUENJX0RFVkZOKDB4MTggKyBuaWQsIDEpKTsKKwkJaWYgKFdBUk5fT04oIWYxKSkKKwkJCXJldHVybjsKKworCQlhbWQ2NF9yZWFkX3BjaV9jZmcoZjEsIERSQU1fTE9DQUxfTk9ERV9MSU0sICZsbGltKTsKKworCQlwdnQtPnJhbmdlc1tyYW5nZV0ubGltLmxvICY9IEdFTk1BU0soMCwgMTUpOworCisJCQkJCSAgICAvKiB7WzM5OjI3XSwxMTFifSAqLworCQlwdnQtPnJhbmdlc1tyYW5nZV0ubGltLmxvIHw9ICgobGxpbSAmIDB4MWZmZikgPDwgMyB8IDB4NykgPDwgMTY7CisKKwkJcHZ0LT5yYW5nZXNbcmFuZ2VdLmxpbS5oaSAmPSBHRU5NQVNLKDAsIDcpOworCisJCQkJCSAgICAvKiBbNDc6NDBdICovCisJCXB2dC0+cmFuZ2VzW3JhbmdlXS5saW0uaGkgfD0gbGxpbSA+PiAxMzsKKworCQlwY2lfZGV2X3B1dChmMSk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBrOF9tYXBfc3lzYWRkcl90b19jc3JvdyhzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHU2NCBzeXNfYWRkciwKQEAgLTE0MDMsMTIgKzE0NzUsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoaW50bHZfZW4gJiYKLQkgICAgKGludGx2X3NlbCAhPSAoKHN5c19hZGRyID4+IDEyKSAmIGludGx2X2VuKSkpIHsKLQkJYW1kNjRfd2FybigiQm90Y2hlZCBpbnRsdiBiaXRzLCBlbjogMHgleCwgc2VsOiAweCV4XG4iLAotCQkJICAgaW50bHZfZW4sIGludGx2X3NlbCk7CisJaWYgKGludGx2X2VuICYmIChpbnRsdl9zZWwgIT0gKChzeXNfYWRkciA+PiAxMikgJiBpbnRsdl9lbikpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlzeXNfYWRkciA9IGYxeF9zd2FwX2ludGVybGVhdmVkX3JlZ2lvbihwdnQsIHN5c19hZGRyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaCBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKaW5kZXggMTFiZTM2YS4uOWE2NjZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaAorKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCkBAIC0xOTYsNiArMTk2LDkgQEAKIAogI2RlZmluZSBEQ1RfQ0ZHX1NFTAkJCTB4MTBDCiAKKyNkZWZpbmUgRFJBTV9MT0NBTF9OT0RFX0JBU0UJCTB4MTIwCisjZGVmaW5lIERSQU1fTE9DQUxfTk9ERV9MSU0JCTB4MTI0CisKICNkZWZpbmUgRFJBTV9CQVNFX0hJCQkJMHgxNDAKICNkZWZpbmUgRFJBTV9MSU1JVF9ISQkJCTB4MTQ0CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jCmluZGV4IDI2MzQzZmQuLjI5ZmZhMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYwpAQCAtNDU4LDEzICs0NTgsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAluZXdfYncgPSBtY2ktPnNldF9zZHJhbV9zY3J1Yl9yYXRlKG1jaSwgYmFuZHdpZHRoKTsKLQlpZiAobmV3X2J3ID49IDApIHsKLQkJZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywgIlNjcnViIHJhdGUgc2V0IHRvICVkXG4iLCBuZXdfYncpOwotCQlyZXR1cm4gY291bnQ7CisJaWYgKG5ld19idyA8IDApIHsKKwkJZWRhY19wcmludGsoS0VSTl9XQVJOSU5HLCBFREFDX01DLAorCQkJICAgICJFcnJvciBzZXR0aW5nIHNjcnViIHJhdGUgdG86ICVsdVxuIiwgYmFuZHdpZHRoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZWRhY19wcmludGsoS0VSTl9ERUJVRywgRURBQ19NQywgIkVycm9yIHNldHRpbmcgc2NydWIgcmF0ZSB0bzogJWx1XG4iLCBiYW5kd2lkdGgpOwotCXJldHVybiAtRUlOVkFMOworCXJldHVybiBjb3VudDsKIH0KIAogLyoKQEAgLTQ4Myw3ICs0ODMsNiBAQAogCQlyZXR1cm4gYmFuZHdpZHRoOwogCX0KIAotCWVkYWNfcHJpbnRrKEtFUk5fREVCVUcsIEVEQUNfTUMsICJSZWFkIHNjcnViIHJhdGU6ICVkXG4iLCBiYW5kd2lkdGgpOwogCXJldHVybiBzcHJpbnRmKGRhdGEsICIlZFxuIiwgYmFuZHdpZHRoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL3BwYzR4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYwppbmRleCBjMWYwMDQ1Li5hZjhlN2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvcHBjNHh4X2VkYWMuYwpAQCAtMTAxOSw3ICsxMDE5LDcgQEAKIAlzdHJ1Y3QgcHBjNHh4X2VkYWNfcGRhdGEgKnBkYXRhID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb3AtPmRldi5vZl9ub2RlOwogCi0JaWYgKG9wLT5kZXYub2ZfbWF0Y2ggPT0gTlVMTCkKKwlpZiAob2ZfbWF0Y2hfZGV2aWNlKHBwYzR4eF9lZGFjX21hdGNoLCAmb3AtPmRldikgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBJbml0aWFsIGRyaXZlciBwb2ludGVycyBhbmQgcHJpdmF0ZSBkYXRhICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCmluZGV4IGY5MDNkN2I2Li4yM2QxNDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYwpAQCAtMjE5OSw3ICsyMTk5LDYgQEAKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAtRUJVU1k7CiAJX19iZTMyICpuZXh0X2NvbmZpZ19yb207CiAJZG1hX2FkZHJfdCB1bmluaXRpYWxpemVkX3ZhcihuZXh0X2NvbmZpZ19yb21fYnVzKTsKIApAQCAtMjI0MCwyMiArMjIzOSwzNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm9oY2ktPmxvY2ssIGZsYWdzKTsKIAorCS8qCisJICogSWYgdGhlcmUgaXMgbm90IGFuIGFscmVhZHkgcGVuZGluZyBjb25maWdfcm9tIHVwZGF0ZSwKKwkgKiBwdXNoIG91ciBuZXcgYWxsb2NhdGlvbiBpbnRvIHRoZSBvaGNpLT5uZXh0X2NvbmZpZ19yb20KKwkgKiBhbmQgdGhlbiBtYXJrIHRoZSBsb2NhbCB2YXJpYWJsZSBhcyBudWxsIHNvIHRoYXQgd2UKKwkgKiB3b24ndCBkZWFsbG9jYXRlIHRoZSBuZXcgYnVmZmVyLgorCSAqCisJICogT1RPSCwgaWYgdGhlcmUgaXMgYSBwZW5kaW5nIGNvbmZpZ19yb20gdXBkYXRlLCBqdXN0CisJICogdXNlIHRoYXQgYnVmZmVyIHdpdGggdGhlIG5ldyBjb25maWdfcm9tIGRhdGEsIGFuZAorCSAqIGxldCB0aGlzIHJvdXRpbmUgZnJlZSB0aGUgdW51c2VkIERNQSBhbGxvY2F0aW9uLgorCSAqLworCiAJaWYgKG9oY2ktPm5leHRfY29uZmlnX3JvbSA9PSBOVUxMKSB7CiAJCW9oY2ktPm5leHRfY29uZmlnX3JvbSA9IG5leHRfY29uZmlnX3JvbTsKIAkJb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyA9IG5leHRfY29uZmlnX3JvbV9idXM7Ci0KLQkJY29weV9jb25maWdfcm9tKG9oY2ktPm5leHRfY29uZmlnX3JvbSwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKLQotCQlvaGNpLT5uZXh0X2hlYWRlciA9IGNvbmZpZ19yb21bMF07Ci0JCW9oY2ktPm5leHRfY29uZmlnX3JvbVswXSA9IDA7Ci0KLQkJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwKLQkJCSAgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7Ci0JCXJldCA9IDA7CisJCW5leHRfY29uZmlnX3JvbSA9IE5VTEw7CiAJfQogCisJY29weV9jb25maWdfcm9tKG9oY2ktPm5leHRfY29uZmlnX3JvbSwgY29uZmlnX3JvbSwgbGVuZ3RoKTsKKworCW9oY2ktPm5leHRfaGVhZGVyID0gY29uZmlnX3JvbVswXTsKKwlvaGNpLT5uZXh0X2NvbmZpZ19yb21bMF0gPSAwOworCisJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0NvbmZpZ1JPTW1hcCwgb2hjaS0+bmV4dF9jb25maWdfcm9tX2J1cyk7CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKKwkvKiBJZiB3ZSBkaWRuJ3QgdXNlIHRoZSBETUEgYWxsb2NhdGlvbiwgZGVsZXRlIGl0LiAqLworCWlmIChuZXh0X2NvbmZpZ19yb20gIT0gTlVMTCkKKwkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKKwkJCQkgIG5leHRfY29uZmlnX3JvbSwgbmV4dF9jb25maWdfcm9tX2J1cyk7CisKIAkvKgogCSAqIE5vdyBpbml0aWF0ZSBhIGJ1cyByZXNldCB0byBoYXZlIHRoZSBjaGFuZ2VzIHRha2UKIAkgKiBlZmZlY3QuIFdlIGNsZWFuIHVwIHRoZSBvbGQgY29uZmlnIHJvbSBtZW1vcnkgYW5kIERNQQpAQCAtMjI2MywxMyArMjI3NywxMCBAQAogCSAqIGNvbnRyb2xsZXIgY291bGQgbmVlZCB0byBhY2Nlc3MgaXQgYmVmb3JlIHRoZSBidXMgcmVzZXQKIAkgKiB0YWtlcyBlZmZlY3QuCiAJICovCi0JaWYgKHJldCA9PSAwKQotCQlmd19zY2hlZHVsZV9idXNfcmVzZXQoJm9oY2ktPmNhcmQsIHRydWUsIHRydWUpOwotCWVsc2UKLQkJZG1hX2ZyZWVfY29oZXJlbnQob2hjaS0+Y2FyZC5kZXZpY2UsIENPTkZJR19ST01fU0laRSwKLQkJCQkgIG5leHRfY29uZmlnX3JvbSwgbmV4dF9jb25maWdfcm9tX2J1cyk7CiAKLQlyZXR1cm4gcmV0OworCWZ3X3NjaGVkdWxlX2J1c19yZXNldCgmb2hjaS0+Y2FyZCwgdHJ1ZSwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgb2hjaV9zZW5kX3JlcXVlc3Qoc3RydWN0IGZ3X2NhcmQgKmNhcmQsIHN0cnVjdCBmd19wYWNrZXQgKnBhY2tldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2lzY3NpX2liZnRfZmluZC5jCmluZGV4IDIxOTI0NTYuLmYwMzJlNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdF9maW5kLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0X2ZpbmQuYwpAQCAtNDIsNyArNDIsMjAgQEAKIHN0cnVjdCBhY3BpX3RhYmxlX2liZnQgKmliZnRfYWRkcjsKIEVYUE9SVF9TWU1CT0xfR1BMKGliZnRfYWRkcik7CiAKLSNkZWZpbmUgSUJGVF9TSUdOICJpQkZUIgorc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY2hhciAqc2lnbjsKK30gaWJmdF9zaWduc1tdID0geworI2lmZGVmIENPTkZJR19BQ1BJCisJLyoKKwkgKiBPbmUgc3BlYyBzYXlzICJJQkZUIiwgdGhlIG90aGVyIHNheXMgImlCRlQiLiBXZSBoYXZlIHRvIGNoZWNrCisJICogZm9yIGJvdGguCisJICovCisJeyBBQ1BJX1NJR19JQkZUIH0sCisjZW5kaWYKKwl7ICJpQkZUIiB9LAorCXsgIkJJRlQiIH0sCS8qIEJyb2FkY29tIGlTQ1NJIE9mZmxvYWQgKi8KK307CisKICNkZWZpbmUgSUJGVF9TSUdOX0xFTiA0CiAjZGVmaW5lIElCRlRfU1RBUlQgMHg4MDAwMCAvKiA1MTJrQiAqLwogI2RlZmluZSBJQkZUX0VORCAweDEwMDAwMCAvKiAxTUIgKi8KQEAgLTYyLDYgKzc1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHBvczsKIAl1bnNpZ25lZCBpbnQgbGVuID0gMDsKIAl2b2lkICp2aXJ0OworCWludCBpOwogCiAJZm9yIChwb3MgPSBJQkZUX1NUQVJUOyBwb3MgPCBJQkZUX0VORDsgcG9zICs9IDE2KSB7CiAJCS8qIFRoZSB0YWJsZSBjYW4ndCBiZSBpbnNpZGUgdGhlIFZHQSBCSU9TIHJlc2VydmVkIHNwYWNlLApAQCAtNjksMTggKzgzLDIzIEBACiAJCWlmIChwb3MgPT0gVkdBX01FTSkKIAkJCXBvcyArPSBWR0FfU0laRTsKIAkJdmlydCA9IGlzYV9idXNfdG9fdmlydChwb3MpOwotCQlpZiAobWVtY21wKHZpcnQsIElCRlRfU0lHTiwgSUJGVF9TSUdOX0xFTikgPT0gMCkgewotCQkJdW5zaWduZWQgbG9uZyAqYWRkciA9Ci0JCQkgICAgKHVuc2lnbmVkIGxvbmcgKilpc2FfYnVzX3RvX3ZpcnQocG9zICsgNCk7Ci0JCQlsZW4gPSAqYWRkcjsKLQkJCS8qIGlmIHRoZSBsZW5ndGggb2YgdGhlIHRhYmxlIGV4dGVuZHMgcGFzdCAxTSwKLQkJCSAqIHRoZSB0YWJsZSBjYW5ub3QgYmUgdmFsaWQuICovCi0JCQlpZiAocG9zICsgbGVuIDw9IChJQkZUX0VORC0xKSkgewotCQkJCWliZnRfYWRkciA9IChzdHJ1Y3QgYWNwaV90YWJsZV9pYmZ0ICopdmlydDsKLQkJCQlicmVhazsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpYmZ0X3NpZ25zKTsgaSsrKSB7CisJCQlpZiAobWVtY21wKHZpcnQsIGliZnRfc2lnbnNbaV0uc2lnbiwgSUJGVF9TSUdOX0xFTikgPT0KKwkJCSAgICAwKSB7CisJCQkJdW5zaWduZWQgbG9uZyAqYWRkciA9CisJCQkJICAgICh1bnNpZ25lZCBsb25nICopaXNhX2J1c190b192aXJ0KHBvcyArIDQpOworCQkJCWxlbiA9ICphZGRyOworCQkJCS8qIGlmIHRoZSBsZW5ndGggb2YgdGhlIHRhYmxlIGV4dGVuZHMgcGFzdCAxTSwKKwkJCQkgKiB0aGUgdGFibGUgY2Fubm90IGJlIHZhbGlkLiAqLworCQkJCWlmIChwb3MgKyBsZW4gPD0gKElCRlRfRU5ELTEpKSB7CisJCQkJCWliZnRfYWRkciA9IChzdHJ1Y3QgYWNwaV90YWJsZV9pYmZ0ICopdmlydDsKKwkJCQkJZ290byBkb25lOworCQkJCX0KIAkJCX0KIAkJfQogCX0KK2RvbmU6CiAJcmV0dXJuIGxlbjsKIH0KIC8qCkBAIC04OSwxOCArMTA4LDEyIEBACiAgKi8KIHVuc2lnbmVkIGxvbmcgX19pbml0IGZpbmRfaWJmdF9yZWdpb24odW5zaWduZWQgbG9uZyAqc2l6ZXApCiB7Ci0KKwlpbnQgaTsKIAlpYmZ0X2FkZHIgPSBOVUxMOwogCiAjaWZkZWYgQ09ORklHX0FDUEkKLQkvKgotCSAqIE9uZSBzcGVjIHNheXMgIklCRlQiLCB0aGUgb3RoZXIgc2F5cyAiaUJGVCIuIFdlIGhhdmUgdG8gY2hlY2sKLQkgKiBmb3IgYm90aC4KLQkgKi8KLQlpZiAoIWliZnRfYWRkcikKLQkJYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19JQkZULCBhY3BpX2ZpbmRfaWJmdCk7Ci0JaWYgKCFpYmZ0X2FkZHIpCi0JCWFjcGlfdGFibGVfcGFyc2UoSUJGVF9TSUdOLCBhY3BpX2ZpbmRfaWJmdCk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaWJmdF9zaWducykgJiYgIWliZnRfYWRkcjsgaSsrKQorCQlhY3BpX3RhYmxlX3BhcnNlKGliZnRfc2lnbnNbaV0uc2lnbiwgYWNwaV9maW5kX2liZnQpOwogI2VuZGlmIC8qIENPTkZJR19BQ1BJICovCiAKIAkvKiBpQkZUIDEuMDMgc2VjdGlvbiAxLjQuMy4xIG1hbmRhdGVzIHRoYXQgVUVGSSBtYWNoaW5lcyB3aWxsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCmluZGV4IGM1OGY2OTEuLmI0OTM2NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCkBAIC0yNCw2ICsyNCw3IEBACiAJZGVwZW5kcyBvbiBEUk0KIAlzZWxlY3QgRkIKIAlzZWxlY3QgRlJBTUVCVUZGRVJfQ09OU09MRSBpZiAhRVhQRVJUCisJc2VsZWN0IEZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaWYgRlJBTUVCVUZGRVJfQ09OU09MRQogCWhlbHAKIAkgIEZCIGFuZCBDUlRDIGhlbHBlcnMgZm9yIEtNUyBkcml2ZXJzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwppbmRleCA5NTA3MjA0Li4xNDBiOTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKQEAgLTM0Miw5ICszNDIsMjIgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2ZiX2hlbHBlcl9kZWJ1Z19sZWF2ZSk7CiAKK2Jvb2wgZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX2ZiZGV2X21vZGUoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKK3sKKwlib29sIGVycm9yID0gZmFsc2U7CisJaW50IGksIHJldDsKKwlmb3IgKGkgPSAwOyBpIDwgZmJfaGVscGVyLT5jcnRjX2NvdW50OyBpKyspIHsKKwkJc3RydWN0IGRybV9tb2RlX3NldCAqbW9kZV9zZXQgPSAmZmJfaGVscGVyLT5jcnRjX2luZm9baV0ubW9kZV9zZXQ7CisJCXJldCA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKG1vZGVfc2V0KTsKKwkJaWYgKHJldCkKKwkJCWVycm9yID0gdHJ1ZTsKKwl9CisJcmV0dXJuIGVycm9yOworfQorRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX3Jlc3RvcmVfZmJkZXZfbW9kZSk7CisKIGJvb2wgZHJtX2ZiX2hlbHBlcl9mb3JjZV9rZXJuZWxfbW9kZSh2b2lkKQogewotCWludCBpID0gMDsKIAlib29sIHJldCwgZXJyb3IgPSBmYWxzZTsKIAlzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyOwogCkBAIC0zNTIsMTIgKzM2NSwxMiBAQAogCQlyZXR1cm4gZmFsc2U7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhlbHBlciwgJmtlcm5lbF9mYl9oZWxwZXJfbGlzdCwga2VybmVsX2ZiX2xpc3QpIHsKLQkJZm9yIChpID0gMDsgaSA8IGhlbHBlci0+Y3J0Y19jb3VudDsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZHJtX21vZGVfc2V0ICptb2RlX3NldCA9ICZoZWxwZXItPmNydGNfaW5mb1tpXS5tb2RlX3NldDsKLQkJCXJldCA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnKG1vZGVfc2V0KTsKLQkJCWlmIChyZXQpCi0JCQkJZXJyb3IgPSB0cnVlOwotCQl9CisJCWlmIChoZWxwZXItPmRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlID09IERSTV9TV0lUQ0hfUE9XRVJfT0ZGKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gZHJtX2ZiX2hlbHBlcl9yZXN0b3JlX2ZiZGV2X21vZGUoaGVscGVyKTsKKwkJaWYgKHJldCkKKwkJCWVycm9yID0gdHJ1ZTsKIAl9CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTUwMywxNyArMTUxNiwzMyBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fZmJfaGVscGVyX2luaXRpYWxfY29uZmlnKTsKIAotYm9vbCBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcikKKy8qKgorICogZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50IC0gcmVzcG9uZCB0byBhIGhvdHBsdWcgbm90aWZpY2F0aW9uIGJ5CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9iaW5nIGFsbCB0aGUgb3V0cHV0cyBhdHRhY2hlZCB0byB0aGUgZmIuCisgKiBAZmJfaGVscGVyOiB0aGUgZHJtX2ZiX2hlbHBlcgorICoKKyAqIExPQ0tJTkc6CisgKiBDYWxsZWQgYXQgcnVudGltZSwgbXVzdCB0YWtlIG1vZGUgY29uZmlnIGxvY2suCisgKgorICogU2NhbiB0aGUgY29ubmVjdG9ycyBhdHRhY2hlZCB0byB0aGUgZmJfaGVscGVyIGFuZCB0cnkgdG8gcHV0IHRvZ2V0aGVyIGEKKyAqIHNldHVwIGFmdGVyICpub3RpZmljYXRpb24gb2YgYSBjaGFuZ2UgaW4gb3V0cHV0IGNvbmZpZ3VyYXRpb24uCisgKgorICogUkVUVVJOUzoKKyAqIDAgb24gc3VjY2VzcyBhbmQgYSBub24temVybyBlcnJvciBjb2RlIG90aGVyd2lzZS4KKyAqLworaW50IGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKQogeworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBmYl9oZWxwZXItPmRldjsKIAlpbnQgY291bnQgPSAwOwogCXUzMiBtYXhfd2lkdGgsIG1heF9oZWlnaHQsIGJwcF9zZWw7CiAJYm9vbCBib3VuZCA9IGZhbHNlLCBjcnRjc19ib3VuZCA9IGZhbHNlOwogCXN0cnVjdCBkcm1fY3J0YyAqY3J0YzsKIAogCWlmICghZmJfaGVscGVyLT5mYikKLQkJcmV0dXJuIGZhbHNlOworCQlyZXR1cm4gMDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3J0YywgJmZiX2hlbHBlci0+ZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwltdXRleF9sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlpZiAoY3J0Yy0+ZmIpCiAJCQljcnRjc19ib3VuZCA9IHRydWU7CiAJCWlmIChjcnRjLT5mYiA9PSBmYl9oZWxwZXItPmZiKQpAQCAtMTUyMiw3ICsxNTUxLDggQEAKIAogCWlmICghYm91bmQgJiYgY3J0Y3NfYm91bmQpIHsKIAkJZmJfaGVscGVyLT5kZWxheWVkX2hvdHBsdWcgPSB0cnVlOwotCQlyZXR1cm4gZmFsc2U7CisJCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5tdXRleCk7CisJCXJldHVybiAwOwogCX0KIAlEUk1fREVCVUdfS01TKCJcbiIpOwogCkBAIC0xNTMzLDYgKzE1NjMsNyBAQAogCWNvdW50ID0gZHJtX2ZiX2hlbHBlcl9wcm9iZV9jb25uZWN0b3JfbW9kZXMoZmJfaGVscGVyLCBtYXhfd2lkdGgsCiAJCQkJCQkgICAgbWF4X2hlaWdodCk7CiAJZHJtX3NldHVwX2NydGNzKGZiX2hlbHBlcik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKIAogCXJldHVybiBkcm1fZmJfaGVscGVyX3NpbmdsZV9mYl9wcm9iZShmYl9oZWxwZXIsIGJwcF9zZWwpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faXJxLmMKaW5kZXggNzQxNDU3Yi4uYTFmMTJjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCkBAIC05MzIsMTEgKzkzMiwzNCBAQAogCiB2b2lkIGRybV92Ymxhbmtfb2ZmKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBjcnRjKQogeworCXN0cnVjdCBkcm1fcGVuZGluZ192YmxhbmtfZXZlbnQgKmUsICp0OworCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOworCXVuc2lnbmVkIGludCBzZXE7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT52YmxfbG9jaywgaXJxZmxhZ3MpOwogCXZibGFua19kaXNhYmxlX2FuZF9zYXZlKGRldiwgY3J0Yyk7CiAJRFJNX1dBS0VVUCgmZGV2LT52YmxfcXVldWVbY3J0Y10pOworCisJLyogU2VuZCBhbnkgcXVldWVkIHZibGFuayBldmVudHMsIGxlc3QgdGhlIG5hdGl2ZXMgZ3JvdyBkaXNxdWlldCAqLworCXNlcSA9IGRybV92YmxhbmtfY291bnRfYW5kX3RpbWUoZGV2LCBjcnRjLCAmbm93KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgdCwgJmRldi0+dmJsYW5rX2V2ZW50X2xpc3QsIGJhc2UubGluaykgeworCQlpZiAoZS0+cGlwZSAhPSBjcnRjKQorCQkJY29udGludWU7CisJCURSTV9ERUJVRygiU2VuZGluZyBwcmVtYXR1cmUgdmJsYW5rIGV2ZW50IG9uIGRpc2FibGU6IFwKKwkJCSAgd2FudGVkICVkLCBjdXJyZW50ICVkXG4iLAorCQkJICBlLT5ldmVudC5zZXF1ZW5jZSwgc2VxKTsKKworCQllLT5ldmVudC5zZXF1ZW5jZSA9IHNlcTsKKwkJZS0+ZXZlbnQudHZfc2VjID0gbm93LnR2X3NlYzsKKwkJZS0+ZXZlbnQudHZfdXNlYyA9IG5vdy50dl91c2VjOworCQlkcm1fdmJsYW5rX3B1dChkZXYsIGUtPnBpcGUpOworCQlsaXN0X21vdmVfdGFpbCgmZS0+YmFzZS5saW5rLCAmZS0+YmFzZS5maWxlX3ByaXYtPmV2ZW50X2xpc3QpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmUtPmJhc2UuZmlsZV9wcml2LT5ldmVudF93YWl0KTsKKwkJdHJhY2VfZHJtX3ZibGFua19ldmVudF9kZWxpdmVyZWQoZS0+YmFzZS5waWQsIGUtPnBpcGUsCisJCQkJCQkgZS0+ZXZlbnQuc2VxdWVuY2UpOworCX0KKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dmJsX2xvY2ssIGlycWZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX3ZibGFua19vZmYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tbS5jCmluZGV4IDVkMDBiMGYuLjk1OTE4NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21tLmMKQEAgLTQzMSw3ICs0MzEsNyBAQAogdm9pZCBkcm1fbW1fcmVwbGFjZV9ub2RlKHN0cnVjdCBkcm1fbW1fbm9kZSAqb2xkLCBzdHJ1Y3QgZHJtX21tX25vZGUgKm5ldykKIHsKIAlsaXN0X3JlcGxhY2UoJm9sZC0+bm9kZV9saXN0LCAmbmV3LT5ub2RlX2xpc3QpOwotCWxpc3RfcmVwbGFjZSgmb2xkLT5ub2RlX2xpc3QsICZuZXctPmhvbGVfc3RhY2spOworCWxpc3RfcmVwbGFjZSgmb2xkLT5ob2xlX3N0YWNrLCAmbmV3LT5ob2xlX3N0YWNrKTsKIAluZXctPmhvbGVfZm9sbG93cyA9IG9sZC0+aG9sZV9mb2xsb3dzOwogCW5ldy0+bW0gPSBvbGQtPm1tOwogCW5ldy0+c3RhcnQgPSBvbGQtPnN0YXJ0OwpAQCAtNjk5LDggKzY5OSw4IEBACiAJCQkJZW50cnktPnNpemUpOwogCQl0b3RhbF91c2VkICs9IGVudHJ5LT5zaXplOwogCQlpZiAoZW50cnktPmhvbGVfZm9sbG93cykgewotCQkJaG9sZV9zdGFydCA9IGRybV9tbV9ob2xlX25vZGVfc3RhcnQoJm1tLT5oZWFkX25vZGUpOwotCQkJaG9sZV9lbmQgPSBkcm1fbW1faG9sZV9ub2RlX2VuZCgmbW0tPmhlYWRfbm9kZSk7CisJCQlob2xlX3N0YXJ0ID0gZHJtX21tX2hvbGVfbm9kZV9zdGFydChlbnRyeSk7CisJCQlob2xlX2VuZCA9IGRybV9tbV9ob2xlX25vZGVfZW5kKGVudHJ5KTsKIAkJCWhvbGVfc2l6ZSA9IGhvbGVfZW5kIC0gaG9sZV9zdGFydDsKIAkJCXNlcV9wcmludGYobSwgIjB4JTA4bHgtMHglMDhseDogMHglMDhseDogZnJlZVxuIiwKIAkJCQkJaG9sZV9zdGFydCwgaG9sZV9lbmQsIGhvbGVfc2l6ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYwppbmRleCA3MjczMDM3Li4xMjg3NmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKQEAgLTIyMDcsNyArMjIwNyw3IEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAlpZiAoIWRldl9wcml2IHx8IGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKLQkJZHJtX2ZiX2hlbHBlcl9yZXN0b3JlKCk7CisJCWludGVsX2ZiX3Jlc3RvcmVfbW9kZShkZXYpOwogCQl2Z2Ffc3dpdGNoZXJvb19wcm9jZXNzX2RlbGF5ZWRfc3dpdGNoKCk7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwppbmRleCBjMzRhOGRkLi4zMmQxYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKQEAgLTQ5LDcgKzQ5LDcgQEAKIHVuc2lnbmVkIGludCBpOTE1X3Bvd2Vyc2F2ZSA9IDE7CiBtb2R1bGVfcGFyYW1fbmFtZWQocG93ZXJzYXZlLCBpOTE1X3Bvd2Vyc2F2ZSwgaW50LCAwNjAwKTsKIAotdW5zaWduZWQgaW50IGk5MTVfc2VtYXBob3JlcyA9IDE7Cit1bnNpZ25lZCBpbnQgaTkxNV9zZW1hcGhvcmVzID0gMDsKIG1vZHVsZV9wYXJhbV9uYW1lZChzZW1hcGhvcmVzLCBpOTE1X3NlbWFwaG9yZXMsIGludCwgMDYwMCk7CiAKIHVuc2lnbmVkIGludCBpOTE1X2VuYWJsZV9yYzYgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IDQzMmZjMDQuLjIxNjZlZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTM3NzEsOCArMzc3MSwxMSBAQAogCWludCBlbnRyaWVzLCB0bGJfbWlzczsKIAogCWNydGMgPSBpbnRlbF9nZXRfY3J0Y19mb3JfcGxhbmUoZGV2LCBwbGFuZSk7Ci0JaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpCisJaWYgKGNydGMtPmZiID09IE5VTEwgfHwgIWNydGMtPmVuYWJsZWQpIHsKKwkJKmN1cnNvcl93bSA9IGN1cnNvci0+Z3VhcmRfc2l6ZTsKKwkJKnBsYW5lX3dtID0gZGlzcGxheS0+Z3VhcmRfc2l6ZTsKIAkJcmV0dXJuIGZhbHNlOworCX0KIAogCWh0b3RhbCA9IGNydGMtPm1vZGUuaHRvdGFsOwogCWhkaXNwbGF5ID0gY3J0Yy0+bW9kZS5oZGlzcGxheTsKQEAgLTU2MDIsOSArNTYwNSw5IEBACiAJaW50ZWxfY2xvY2tfdCBjbG9jazsKIAogCWlmICgoZHBsbCAmIERJU1BMQVlfUkFURV9TRUxFQ1RfRlBBMSkgPT0gMCkKLQkJZnAgPSBGUDAocGlwZSk7CisJCWZwID0gSTkxNV9SRUFEKEZQMChwaXBlKSk7CiAJZWxzZQotCQlmcCA9IEZQMShwaXBlKTsKKwkJZnAgPSBJOTE1X1JFQUQoRlAxKHBpcGUpKTsKIAogCWNsb2NrLm0xID0gKGZwICYgRlBfTTFfRElWX01BU0spID4+IEZQX00xX0RJVl9TSElGVDsKIAlpZiAoSVNfUElORVZJRVcoZGV2KSkgewpAQCAtNjIxNSwzNiArNjIxOCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19yZXNldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCi17Ci0Jc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMgPSB0b19pbnRlbF9jcnRjKGNydGMpOwotCi0JLyogUmVzZXQgZmxhZ3MgYmFjayB0byB0aGUgJ3Vua25vd24nIHN0YXR1cyBzbyB0aGF0IHRoZXkKLQkgKiB3aWxsIGJlIGNvcnJlY3RseSBzZXQgb24gdGhlIGluaXRpYWwgbW9kZXNldC4KLQkgKi8KLQlpbnRlbF9jcnRjLT5kcG1zX21vZGUgPSAtMTsKLX0KLQotc3RhdGljIHN0cnVjdCBkcm1fY3J0Y19oZWxwZXJfZnVuY3MgaW50ZWxfaGVscGVyX2Z1bmNzID0gewotCS5kcG1zID0gaW50ZWxfY3J0Y19kcG1zLAotCS5tb2RlX2ZpeHVwID0gaW50ZWxfY3J0Y19tb2RlX2ZpeHVwLAotCS5tb2RlX3NldCA9IGludGVsX2NydGNfbW9kZV9zZXQsCi0JLm1vZGVfc2V0X2Jhc2UgPSBpbnRlbF9waXBlX3NldF9iYXNlLAotCS5tb2RlX3NldF9iYXNlX2F0b21pYyA9IGludGVsX3BpcGVfc2V0X2Jhc2VfYXRvbWljLAotCS5sb2FkX2x1dCA9IGludGVsX2NydGNfbG9hZF9sdXQsCi0JLmRpc2FibGUgPSBpbnRlbF9jcnRjX2Rpc2FibGUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2Z1bmNzIGludGVsX2NydGNfZnVuY3MgPSB7Ci0JLnJlc2V0ID0gaW50ZWxfY3J0Y19yZXNldCwKLQkuY3Vyc29yX3NldCA9IGludGVsX2NydGNfY3Vyc29yX3NldCwKLQkuY3Vyc29yX21vdmUgPSBpbnRlbF9jcnRjX2N1cnNvcl9tb3ZlLAotCS5nYW1tYV9zZXQgPSBpbnRlbF9jcnRjX2dhbW1hX3NldCwKLQkuc2V0X2NvbmZpZyA9IGRybV9jcnRjX2hlbHBlcl9zZXRfY29uZmlnLAotCS5kZXN0cm95ID0gaW50ZWxfY3J0Y19kZXN0cm95LAotCS5wYWdlX2ZsaXAgPSBpbnRlbF9jcnRjX3BhZ2VfZmxpcCwKLX07Ci0KIHN0YXRpYyB2b2lkIGludGVsX3Nhbml0aXplX21vZGVzZXR0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJICAgICAgIGludCBwaXBlLCBpbnQgcGxhbmUpCiB7CkBAIC02MjgxLDYgKzYyNTQsNDIgQEAKIAlpbnRlbF9kaXNhYmxlX3BpcGUoZGV2X3ByaXYsIHBpcGUpOwogfQogCitzdGF0aWMgdm9pZCBpbnRlbF9jcnRjX3Jlc2V0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCBpbnRlbF9jcnRjICppbnRlbF9jcnRjID0gdG9faW50ZWxfY3J0YyhjcnRjKTsKKworCS8qIFJlc2V0IGZsYWdzIGJhY2sgdG8gdGhlICd1bmtub3duJyBzdGF0dXMgc28gdGhhdCB0aGV5CisJICogd2lsbCBiZSBjb3JyZWN0bHkgc2V0IG9uIHRoZSBpbml0aWFsIG1vZGVzZXQuCisJICovCisJaW50ZWxfY3J0Yy0+ZHBtc19tb2RlID0gLTE7CisKKwkvKiBXZSBuZWVkIHRvIGZpeCB1cCBhbnkgQklPUyBjb25maWd1cmF0aW9uIHRoYXQgY29uZmxpY3RzIHdpdGgKKwkgKiBvdXIgZXhwZWN0YXRpb25zLgorCSAqLworCWludGVsX3Nhbml0aXplX21vZGVzZXR0aW5nKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgaW50ZWxfY3J0Yy0+cGxhbmUpOworfQorCitzdGF0aWMgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBpbnRlbF9oZWxwZXJfZnVuY3MgPSB7CisJLmRwbXMgPSBpbnRlbF9jcnRjX2RwbXMsCisJLm1vZGVfZml4dXAgPSBpbnRlbF9jcnRjX21vZGVfZml4dXAsCisJLm1vZGVfc2V0ID0gaW50ZWxfY3J0Y19tb2RlX3NldCwKKwkubW9kZV9zZXRfYmFzZSA9IGludGVsX3BpcGVfc2V0X2Jhc2UsCisJLm1vZGVfc2V0X2Jhc2VfYXRvbWljID0gaW50ZWxfcGlwZV9zZXRfYmFzZV9hdG9taWMsCisJLmxvYWRfbHV0ID0gaW50ZWxfY3J0Y19sb2FkX2x1dCwKKwkuZGlzYWJsZSA9IGludGVsX2NydGNfZGlzYWJsZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2NydGNfZnVuY3MgaW50ZWxfY3J0Y19mdW5jcyA9IHsKKwkucmVzZXQgPSBpbnRlbF9jcnRjX3Jlc2V0LAorCS5jdXJzb3Jfc2V0ID0gaW50ZWxfY3J0Y19jdXJzb3Jfc2V0LAorCS5jdXJzb3JfbW92ZSA9IGludGVsX2NydGNfY3Vyc29yX21vdmUsCisJLmdhbW1hX3NldCA9IGludGVsX2NydGNfZ2FtbWFfc2V0LAorCS5zZXRfY29uZmlnID0gZHJtX2NydGNfaGVscGVyX3NldF9jb25maWcsCisJLmRlc3Ryb3kgPSBpbnRlbF9jcnRjX2Rlc3Ryb3ksCisJLnBhZ2VfZmxpcCA9IGludGVsX2NydGNfcGFnZV9mbGlwLAorfTsKKwogc3RhdGljIHZvaWQgaW50ZWxfY3J0Y19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBwaXBlKQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtNjMzMCw4ICs2MzM5LDYgQEAKIAogCXNldHVwX3RpbWVyKCZpbnRlbF9jcnRjLT5pZGxlX3RpbWVyLCBpbnRlbF9jcnRjX2lkbGVfdGltZXIsCiAJCSAgICAodW5zaWduZWQgbG9uZylpbnRlbF9jcnRjKTsKLQotCWludGVsX3Nhbml0aXplX21vZGVzZXR0aW5nKGRldiwgaW50ZWxfY3J0Yy0+cGlwZSwgaW50ZWxfY3J0Yy0+cGxhbmUpOwogfQogCiBpbnQgaW50ZWxfZ2V0X3BpcGVfZnJvbV9jcnRjX2lkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC02NTcyLDggKzY1NzksMTAgQEAKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CiAKIAlpbnRlbF9mYiA9IGt6YWxsb2Moc2l6ZW9mKCppbnRlbF9mYiksIEdGUF9LRVJORUwpOwotCWlmICghaW50ZWxfZmIpCisJaWYgKCFpbnRlbF9mYikgeworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZCgmb2JqLT5iYXNlKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQogCiAJcmV0ID0gaW50ZWxfZnJhbWVidWZmZXJfaW5pdChkZXYsIGludGVsX2ZiLCBtb2RlX2NtZCwgb2JqKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwppbmRleCBjYjg1NzhiLi5hNGQ4MDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKQEAgLTE0NzAsNyArMTQ3MCw4IEBACiAKIAlpZiAoIUhBU19QQ0hfQ1BUKGRldikgJiYKIAkgICAgSTkxNV9SRUFEKGludGVsX2RwLT5vdXRwdXRfcmVnKSAmIERQX1BJUEVCX1NFTEVDVCkgewotCQlzdHJ1Y3QgaW50ZWxfY3J0YyAqaW50ZWxfY3J0YyA9IHRvX2ludGVsX2NydGMoaW50ZWxfZHAtPmJhc2UuYmFzZS5jcnRjKTsKKwkJc3RydWN0IGRybV9jcnRjICpjcnRjID0gaW50ZWxfZHAtPmJhc2UuYmFzZS5jcnRjOworCiAJCS8qIEhhcmR3YXJlIHdvcmthcm91bmQ6IGxlYXZpbmcgb3VyIHRyYW5zY29kZXIgc2VsZWN0CiAJCSAqIHNldCB0byB0cmFuc2NvZGVyIEIgd2hpbGUgaXQncyBvZmYgd2lsbCBwcmV2ZW50IHRoZQogCQkgKiBjb3JyZXNwb25kaW5nIEhETUkgb3V0cHV0IG9uIHRyYW5zY29kZXIgQS4KQEAgLTE0ODUsNyArMTQ4NiwxOSBAQAogCQkvKiBDaGFuZ2VzIHRvIGVuYWJsZSBvciBzZWxlY3QgdGFrZSBwbGFjZSB0aGUgdmJsYW5rCiAJCSAqIGFmdGVyIGJlaW5nIHdyaXR0ZW4uCiAJCSAqLwotCQlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2LCBpbnRlbF9jcnRjLT5waXBlKTsKKwkJaWYgKGNydGMgPT0gTlVMTCkgeworCQkJLyogV2UgY2FuIGFycml2ZSBoZXJlIG5ldmVyIGhhdmluZyBiZWVuIGF0dGFjaGVkCisJCQkgKiB0byBhIENSVEMsIGZvciBpbnN0YW5jZSwgZHVlIHRvIGluaGVyaXRpbmcKKwkJCSAqIHJhbmRvbSBzdGF0ZSBmcm9tIHRoZSBCSU9TLgorCQkJICoKKwkJCSAqIElmIHRoZSBwaXBlIGlzIG5vdCBydW5uaW5nLCBwbGF5IHNhZmUgYW5kCisJCQkgKiB3YWl0IGZvciB0aGUgY2xvY2tzIHRvIHN0YWJpbGlzZSBiZWZvcmUKKwkJCSAqIGNvbnRpbnVpbmcuCisJCQkgKi8KKwkJCVBPU1RJTkdfUkVBRChpbnRlbF9kcC0+b3V0cHV0X3JlZyk7CisJCQltc2xlZXAoNTApOworCQl9IGVsc2UKKwkJCWludGVsX3dhaXRfZm9yX3ZibGFuayhkZXYsIHRvX2ludGVsX2NydGMoY3J0YyktPnBpcGUpOwogCX0KIAogCUk5MTVfV1JJVEUoaW50ZWxfZHAtPm91dHB1dF9yZWcsIERQICYgfkRQX1BPUlRfRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCBmNWIwZDgzLi4xZDIwNzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMzM4LDQgKzMzOCw1IEBACiAJCQkgICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogCiBleHRlcm4gdm9pZCBpbnRlbF9mYl9vdXRwdXRfcG9sbF9jaGFuZ2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgaW50ZWxfZmJfcmVzdG9yZV9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogI2VuZGlmIC8qIF9fSU5URUxfRFJWX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKaW5kZXggNTEyNzgyNy4uZWM0OWJhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCkBAIC0yNjQsMyArMjY0LDEzIEBACiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX2ZiX2hlbHBlcl9ob3RwbHVnX2V2ZW50KCZkZXZfcHJpdi0+ZmJkZXYtPmhlbHBlcik7CiB9CisKK3ZvaWQgaW50ZWxfZmJfcmVzdG9yZV9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCXJldCA9IGRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlKCZkZXZfcHJpdi0+ZmJkZXYtPmhlbHBlcik7CisJaWYgKHJldCkKKwkJRFJNX0RFQlVHKCJmYWlsZWQgdG8gcmVzdG9yZSBjcnRjIG1vZGVcbiIpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCmluZGV4IGE1NjJiZDIuLjY3Y2IwNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKQEAgLTUzOSw2ICs1MzksOSBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBkZXZfcHJpdi0+ZGV2OwogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IgPSBkZXZfcHJpdi0+aW50X2x2ZHNfY29ubmVjdG9yOwogCisJaWYgKGRldi0+c3dpdGNoX3Bvd2VyX3N0YXRlICE9IERSTV9TV0lUQ0hfUE9XRVJfT04pCisJCXJldHVybiBOT1RJRllfT0s7CisKIAkvKgogCSAqIGNoZWNrIGFuZCB1cGRhdGUgdGhlIHN0YXR1cyBvZiBMVkRTIGNvbm5lY3RvciBhZnRlciByZWNlaXZpbmcKIAkgKiB0aGUgTElEIG5vZmljYXRpb24gZXZlbnQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfdHYuYwppbmRleCA0MjU2YjhlLi42YjIyYzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF90di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3R2LmMKQEAgLTExNTEsMTAgKzExNTEsMTAgQEAKIAkJCSAgICAodmlkZW9fbGV2ZWxzLT5ibGFuayA8PCBUVl9CTEFOS19MRVZFTF9TSElGVCkpKTsKIAl7CiAJCWludCBwaXBlY29uZl9yZWcgPSBQSVBFQ09ORihwaXBlKTsKLQkJaW50IGRzcGNudHJfcmVnID0gRFNQQ05UUihwaXBlKTsKKwkJaW50IGRzcGNudHJfcmVnID0gRFNQQ05UUihpbnRlbF9jcnRjLT5wbGFuZSk7CiAJCWludCBwaXBlY29uZiA9IEk5MTVfUkVBRChwaXBlY29uZl9yZWcpOwogCQlpbnQgZHNwY250ciA9IEk5MTVfUkVBRChkc3BjbnRyX3JlZyk7Ci0JCWludCBkc3BiYXNlX3JlZyA9IERTUEFERFIocGlwZSk7CisJCWludCBkc3BiYXNlX3JlZyA9IERTUEFERFIoaW50ZWxfY3J0Yy0+cGxhbmUpOwogCQlpbnQgeHBvcyA9IDB4MCwgeXBvcyA9IDB4MDsKIAkJdW5zaWduZWQgaW50IHhzaXplLCB5c2l6ZTsKIAkJLyogUGlwZSBtdXN0IGJlIG9mZiBoZXJlICovCkBAIC0xMzc4LDcgKzEzNzgsOSBAQAogCWlmICh0eXBlIDwgMCkKIAkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwogCisJaW50ZWxfdHYtPnR5cGUgPSB0eXBlOwogCWludGVsX3R2X2ZpbmRfYmV0dGVyX2Zvcm1hdChjb25uZWN0b3IpOworCiAJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOwogfQogCkBAIC0xNjcwLDggKzE2NzIsNyBAQAogCSAqCiAJICogTW9yZSByZWNlbnQgY2hpcHNldHMgZmF2b3VyIEhETUkgcmF0aGVyIHRoYW4gaW50ZWdyYXRlZCBTLVZpZGVvLgogCSAqLwotCWNvbm5lY3Rvci0+cG9sbGVkID0KLQkJRFJNX0NPTk5FQ1RPUl9QT0xMX0NPTk5FQ1QgfCBEUk1fQ09OTkVDVE9SX1BPTExfRElTQ09OTkVDVDsKKwljb25uZWN0b3ItPnBvbGxlZCA9IERSTV9DT05ORUNUT1JfUE9MTF9DT05ORUNUOwogCiAJZHJtX2Nvbm5lY3Rvcl9pbml0KGRldiwgY29ubmVjdG9yLCAmaW50ZWxfdHZfY29ubmVjdG9yX2Z1bmNzLAogCQkJICAgRFJNX01PREVfQ09OTkVDVE9SX1NWSURFTyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYwppbmRleCBjZTM4ZTk3Li41NjhjYWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIE5WX01FTU9SWV9UT19NRU1PUllfRk9STUFUIHJlcXVpcmVzIGEgbm90aWZpZXIgb2JqZWN0ICovCi0JcmV0ID0gbm91dmVhdV9ub3RpZmllcl9hbGxvYyhjaGFuLCBOdk5vdGlmeTAsIDMyLCAweGZkMCwgMHgxMDAwLAorCXJldCA9IG5vdXZlYXVfbm90aWZpZXJfYWxsb2MoY2hhbiwgTnZOb3RpZnkwLCAzMiwgMHhmZTAsIDB4MTAwMCwKIAkJCQkgICAgICZjaGFuLT5tMm1mX250ZnkpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAppbmRleCA4NTZkNTZhLi5hNzY1MTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKQEAgLTY4Miw2ICs2ODIsOSBAQAogCS8qIEZvciBQRklGTyBhbmQgUEdSQVBILiAqLwogCXNwaW5sb2NrX3QgY29udGV4dF9zd2l0Y2hfbG9jazsKIAorCS8qIFZNL1BSQU1JTiBmbHVzaCwgbGVnYWN5IFBSQU1JTiBhcGVydHVyZSAqLworCXNwaW5sb2NrX3Qgdm1fbG9jazsKKwogCS8qIFJBTUlOIGNvbmZpZ3VyYXRpb24sIFJBTUZDLCBSQU1IVCBhbmQgUkFNUk8gb2Zmc2V0cyAqLwogCXN0cnVjdCBub3V2ZWF1X3JhbWh0ICAqcmFtaHQ7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpyYW1mYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYwppbmRleCA4ODljNDQ1Li4zOWFlZTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCkBAIC0xODEsMTMgKzE4MSwxMyBAQAogCQlPVVRfUklORyAgKGNoYW4sIDApOwogCX0KIAotCW5vdXZlYXVfYm9fd3IzMihjaGFuLT5ub3RpZmllcl9ibywgY2hhbi0+bTJtZl9udGZ5ICsgMywgMHhmZmZmZmZmZik7CisJbm91dmVhdV9ib193cjMyKGNoYW4tPm5vdGlmaWVyX2JvLCBjaGFuLT5tMm1mX250ZnkvNCArIDMsIDB4ZmZmZmZmZmYpOwogCUZJUkVfUklORyhjaGFuKTsKIAltdXRleF91bmxvY2soJmNoYW4tPm11dGV4KTsKIAogCXJldCA9IC1FQlVTWTsKIAlmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKLQkJaWYgKCFub3V2ZWF1X2JvX3JkMzIoY2hhbi0+bm90aWZpZXJfYm8sIGNoYW4tPm0ybWZfbnRmeSArIDMpKSB7CisJCWlmICghbm91dmVhdV9ib19yZDMyKGNoYW4tPm5vdGlmaWVyX2JvLCBjaGFuLT5tMm1mX250ZnkvNCArIDMpKSB7CiAJCQlyZXQgPSAwOwogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X21lbS5jCmluZGV4IDc4ZjQ2N2YuLmMzZTk1M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9tZW0uYwpAQCAtMTUyLDggKzE1Miw2IEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCW5vdXZlYXVfYm9fcmVmKE5VTEwsICZkZXZfcHJpdi0+dmdhX3JhbSk7Ci0KIAl0dG1fYm9fZGV2aWNlX3JlbGVhc2UoJmRldl9wcml2LT50dG0uYmRldik7CiAKIAlub3V2ZWF1X3R0bV9nbG9iYWxfcmVsZWFzZShkZXZfcHJpdik7CkBAIC0zOTgsNyArMzk2LDcgQEAKIAkJCWRtYV9iaXRzID0gNDA7CiAJfSBlbHNlCiAJaWYgKGRybV9wY2lfZGV2aWNlX2lzX3BjaWUoZGV2KSAmJgotCSAgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDQwICYmCisJICAgIGRldl9wcml2LT5jaGlwc2V0ICA+IDB4NDAgJiYKIAkgICAgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0NSkgewogCQlpZiAocGNpX2RtYV9zdXBwb3J0ZWQoZGV2LT5wZGV2LCBETUFfQklUX01BU0soMzkpKSkKIAkJCWRtYV9iaXRzID0gMzk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKaW5kZXggN2JhM2ZjMC4uNWIzOTcxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYwpAQCAtMzUsMTkgKzM1LDIyIEBACiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnRmeSA9IE5VTEw7Ci0JdWludDMyX3QgZmxhZ3M7CisJdWludDMyX3QgZmxhZ3MsIHR0bXBsOwogCWludCByZXQ7CiAKLQlpZiAobm91dmVhdV92cmFtX25vdGlmeSkKKwlpZiAobm91dmVhdV92cmFtX25vdGlmeSkgewogCQlmbGFncyA9IE5PVVZFQVVfR0VNX0RPTUFJTl9WUkFNOwotCWVsc2UKKwkJdHRtcGwgPSBUVE1fUExfRkxBR19WUkFNOworCX0gZWxzZSB7CiAJCWZsYWdzID0gTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQ7CisJCXR0bXBsID0gVFRNX1BMX0ZMQUdfVFQ7CisJfQogCiAJcmV0ID0gbm91dmVhdV9nZW1fbmV3KGRldiwgTlVMTCwgUEFHRV9TSVpFLCAwLCBmbGFncywgMCwgMCwgJm50ZnkpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBub3V2ZWF1X2JvX3BpbihudGZ5LCBmbGFncyk7CisJcmV0ID0gbm91dmVhdV9ib19waW4obnRmeSwgdHRtcGwpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2VycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfb2JqZWN0LmMKaW5kZXggNGYwMGM4Ny4uNjdhMTZlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9vYmplY3QuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X29iamVjdC5jCkBAIC0xMDM5LDE5ICsxMDM5LDIwIEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZ3B1b2JqLT5kZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBncHVvYmotPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGdwdW9iai0+cGluc3QgPT0gfjAgfHwgIWRldl9wcml2LT5yYW1pbl9hdmFpbGFibGUpIHsKIAkJdTY0ICBwdHIgPSBncHVvYmotPnZpbnN0ICsgb2Zmc2V0OwogCQl1MzIgYmFzZSA9IHB0ciA+PiAxNjsKIAkJdTMyICB2YWw7CiAKLQkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2X3ByaXYtPnJhbWluX2Jhc2UgIT0gYmFzZSkgewogCQkJZGV2X3ByaXYtPnJhbWluX2Jhc2UgPSBiYXNlOwogCQkJbnZfd3IzMihkZXYsIDB4MDAxNzAwLCBkZXZfcHJpdi0+cmFtaW5fYmFzZSk7CiAJCX0KIAkJdmFsID0gbnZfcmQzMihkZXYsIDB4NzAwMDAwICsgKHB0ciAmIDB4ZmZmZikpOwotCQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gdmFsOwogCX0KIApAQCAtMTA2MywxOCArMTA2NCwxOSBAQAogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGdwdW9iai0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZ3B1b2JqLT5kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChncHVvYmotPnBpbnN0ID09IH4wIHx8ICFkZXZfcHJpdi0+cmFtaW5fYXZhaWxhYmxlKSB7CiAJCXU2NCAgcHRyID0gZ3B1b2JqLT52aW5zdCArIG9mZnNldDsKIAkJdTMyIGJhc2UgPSBwdHIgPj4gMTY7CiAKLQkJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCQlpZiAoZGV2X3ByaXYtPnJhbWluX2Jhc2UgIT0gYmFzZSkgewogCQkJZGV2X3ByaXYtPnJhbWluX2Jhc2UgPSBiYXNlOwogCQkJbnZfd3IzMihkZXYsIDB4MDAxNzAwLCBkZXZfcHJpdi0+cmFtaW5fYmFzZSk7CiAJCX0KIAkJbnZfd3IzMihkZXYsIDB4NzAwMDAwICsgKHB0ciAmIDB4ZmZmZiksIHZhbCk7Ci0JCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc2dkbWEuYwppbmRleCBhMzNmZTQwLi5jNzcxMTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3NnZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zZ2RtYS5jCkBAIC00Miw3ICs0Miw4IEBACiAKIAludmJlLT5ucl9wYWdlcyA9IDA7CiAJd2hpbGUgKG51bV9wYWdlcy0tKSB7Ci0JCWlmIChkbWFfYWRkcnNbbnZiZS0+bnJfcGFnZXNdICE9IERNQV9FUlJPUl9DT0RFKSB7CisJCS8qIHRoaXMgY29kZSBwYXRoIGlzbid0IGNhbGxlZCBhbmQgaXMgaW5jb3JyZWN0IGFueXdheXMgKi8KKwkJaWYgKDApIHsgLypkbWFfYWRkcnNbbnZiZS0+bnJfcGFnZXNdICE9IERNQV9FUlJPUl9DT0RFKSovCiAJCQludmJlLT5wYWdlc1tudmJlLT5ucl9wYWdlc10gPQogCQkJCQlkbWFfYWRkcnNbbnZiZS0+bnJfcGFnZXNdOwogCQkgCW52YmUtPnR0bV9hbGxvY2VkW252YmUtPm5yX3BhZ2VzXSA9IHRydWU7CkBAIC01NSw2ICs1Niw3IEBACiAJCQkJYmUtPmZ1bmMtPmNsZWFyKGJlKTsKIAkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCX0KKwkJCW52YmUtPnR0bV9hbGxvY2VkW252YmUtPm5yX3BhZ2VzXSA9IGZhbHNlOwogCQl9CiAKIAkJbnZiZS0+bnJfcGFnZXMrKzsKQEAgLTQyNyw3ICs0MjksNyBAQAogCXUzMiBhcGVyX3NpemUsIGFsaWduOwogCWludCByZXQ7CiAKLQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCB8fCBkcm1fcGNpX2RldmljZV9pc19wY2llKGRldikpCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfNDAgJiYgZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpKQogCQlhcGVyX3NpemUgPSA1MTIgKiAxMDI0ICogMTAyNDsKIAllbHNlCiAJCWFwZXJfc2l6ZSA9IDY0ICogMTAyNCAqIDEwMjQ7CkBAIC00NTcsNyArNDU5LDcgQEAKIAkJZGV2X3ByaXYtPmdhcnRfaW5mby5mdW5jID0gJm52NTBfc2dkbWFfYmFja2VuZDsKIAl9IGVsc2UKIAlpZiAoZHJtX3BjaV9kZXZpY2VfaXNfcGNpZShkZXYpICYmCi0JICAgIGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NDAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0NSkgeworCSAgICBkZXZfcHJpdi0+Y2hpcHNldCA+IDB4NDAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg0NSkgewogCQlpZiAobnY0NF9ncmFwaF9jbGFzcyhkZXYpKSB7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmZ1bmMgPSAmbnY0NF9zZ2RtYV9iYWNrZW5kOwogCQkJYWxpZ24gPSA1MTIgKiAxMDI0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IDZlMmIxYTYuLjkxNWZiY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTYwOCw2ICs2MDgsNyBAQAogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+Y2hhbm5lbHMubG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT50aWxlLmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmRldl9wcml2LT52bV9sb2NrKTsKIAogCS8qIE1ha2UgdGhlIENSVENzIGFuZCBJMkMgYnVzZXMgYWNjZXNzaWJsZSAqLwogCXJldCA9IGVuZ2luZS0+ZGlzcGxheS5lYXJseV9pbml0KGRldik7CkBAIC03NjcsNiArNzY4LDExIEBACiAJZW5naW5lLT5tYy50YWtlZG93bihkZXYpOwogCWVuZ2luZS0+ZGlzcGxheS5sYXRlX3Rha2Vkb3duKGRldik7CiAKKwlpZiAoZGV2X3ByaXYtPnZnYV9yYW0pIHsKKwkJbm91dmVhdV9ib191bnBpbihkZXZfcHJpdi0+dmdhX3JhbSk7CisJCW5vdXZlYXVfYm9fcmVmKE5VTEwsICZkZXZfcHJpdi0+dmdhX3JhbSk7CisJfQorCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXR0bV9ib19jbGVhbl9tbSgmZGV2X3ByaXYtPnR0bS5iZGV2LCBUVE1fUExfVlJBTSk7CiAJdHRtX2JvX2NsZWFuX21tKCZkZXZfcHJpdi0+dHRtLmJkZXYsIFRUTV9QTF9UVCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2luc3RtZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCmluZGV4IGE2ZjhhYTYuLjRmOTVhMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jCkBAIC00MDQsMjMgKzQwNCwyNSBAQAogbnY1MF9pbnN0bWVtX2ZsdXNoKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiAJbnZfd3IzMihkZXYsIDB4MDAzMzBjLCAweDAwMDAwMDAxKTsKIAlpZiAoIW52X3dhaXQoZGV2LCAweDAwMzMwYywgMHgwMDAwMDAwMiwgMHgwMDAwMDAwMCkpCiAJCU5WX0VSUk9SKGRldiwgIlBSQU1JTiBmbHVzaCB0aW1lb3V0XG4iKTsKLQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiB9CiAKIHZvaWQKIG52ODRfaW5zdG1lbV9mbHVzaChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCW52X3dyMzIoZGV2LCAweDA3MDAwMCwgMHgwMDAwMDAwMSk7CiAJaWYgKCFudl93YWl0KGRldiwgMHgwNzAwMDAsIDB4MDAwMDAwMDIsIDB4MDAwMDAwMDApKQogCQlOVl9FUlJPUihkZXYsICJQUkFNSU4gZmx1c2ggdGltZW91dFxuIik7Ci0Jc3Bpbl91bmxvY2soJmRldl9wcml2LT5yYW1pbl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX3ZtLmMKaW5kZXggNGZkMzQzMi4uNmMyNjk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfdm0uYwpAQCAtMTc0LDEwICsxNzQsMTEgQEAKIG52NTBfdm1fZmx1c2hfZW5naW5lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBlbmdpbmUpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiAJbnZfd3IzMihkZXYsIDB4MTAwYzgwLCAoZW5naW5lIDw8IDE2KSB8IDEpOwogCWlmICghbnZfd2FpdChkZXYsIDB4MTAwYzgwLCAweDAwMDAwMDAxLCAweDAwMDAwMDAwKSkKIAkJTlZfRVJST1IoZGV2LCAidm0gZmx1c2ggdGltZW91dDogZW5naW5lICVkXG4iLCBlbmdpbmUpOwotCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+cmFtaW5fbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPnZtX2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252YzBfdm0uYwppbmRleCBhMGEyYTAyLi5hMTc5ZTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udmMwX3ZtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnZjMF92bS5jCkBAIC0xMDQsMTEgKzEwNCwxMiBAQAogCXN0cnVjdCBub3V2ZWF1X2luc3RtZW1fZW5naW5lICpwaW5zdG1lbSA9ICZkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW07CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHZtLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfdm1fcGdkICp2cGdkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGVuZ2luZSA9IChkZXZfcHJpdi0+Y2hhbl92bSA9PSB2bSkgPyAxIDogNTsKIAogCXBpbnN0bWVtLT5mbHVzaCh2bS0+ZGV2KTsKIAotCXNwaW5fbG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dm1fbG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkodnBnZCwgJnZtLT5wZ2RfbGlzdCwgaGVhZCkgewogCQkvKiBsb29rcyBsaWtlIG1heWJlIGEgImZyZWUgZmx1c2ggc2xvdHMiIGNvdW50ZXIsIHRoZQogCQkgKiBmYXN0ZXIgeW91IHdyaXRlIHRvIDB4MTAwY2JjIHRvIG1vcmUgaXQgZGVjcmVhc2VzCkBAIC0xMjUsNSArMTI2LDUgQEAKIAkJCQkgbnZfcmQzMihkZXYsIDB4MTAwYzgwKSwgZW5naW5lKTsKIAkJfQogCX0KLQlzcGluX3VubG9jaygmZGV2X3ByaXYtPnJhbWluX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT52bV9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCmluZGV4IGQ3MWQzNzUuLjdiZDc0NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbS5jCkBAIC0xMzUsNyArMTM1LDcgQEAKIAkJY2FzZSBBVE9NX0lJT19NT1ZFX0lOREVYOgogCQkJdGVtcCAmPQogCQkJICAgIH4oKDB4RkZGRkZGRkYgPj4gKDMyIC0gQ1U4KGJhc2UgKyAxKSkpIDw8Ci0JCQkgICAgICBDVTgoYmFzZSArIDIpKTsKKwkJCSAgICAgIENVOChiYXNlICsgMykpOwogCQkJdGVtcCB8PQogCQkJICAgICgoaW5kZXggPj4gQ1U4KGJhc2UgKyAyKSkgJgogCQkJICAgICAoMHhGRkZGRkZGRiA+PiAoMzIgLSBDVTgoYmFzZSArIDEpKSkpIDw8IENVOChiYXNlICsKQEAgLTE0NSw3ICsxNDUsNyBAQAogCQljYXNlIEFUT01fSUlPX01PVkVfREFUQToKIAkJCXRlbXAgJj0KIAkJCSAgICB+KCgweEZGRkZGRkZGID4+ICgzMiAtIENVOChiYXNlICsgMSkpKSA8PAotCQkJICAgICAgQ1U4KGJhc2UgKyAyKSk7CisJCQkgICAgICBDVTgoYmFzZSArIDMpKTsKIAkJCXRlbXAgfD0KIAkJCSAgICAoKGRhdGEgPj4gQ1U4KGJhc2UgKyAyKSkgJgogCQkJICAgICAoMHhGRkZGRkZGRiA+PiAoMzIgLSBDVTgoYmFzZSArIDEpKSkpIDw8IENVOChiYXNlICsKQEAgLTE1NSw3ICsxNTUsNyBAQAogCQljYXNlIEFUT01fSUlPX01PVkVfQVRUUjoKIAkJCXRlbXAgJj0KIAkJCSAgICB+KCgweEZGRkZGRkZGID4+ICgzMiAtIENVOChiYXNlICsgMSkpKSA8PAotCQkJICAgICAgQ1U4KGJhc2UgKyAyKSk7CisJCQkgICAgICBDVTgoYmFzZSArIDMpKTsKIAkJCXRlbXAgfD0KIAkJCSAgICAoKGN0eC0+CiAJCQkgICAgICBpb19hdHRyID4+IENVOChiYXNlICsgMikpICYgKDB4RkZGRkZGRkYgPj4gKDMyIC0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKaW5kZXggOWQ1MTZhOC4uNTI5YTNhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19jcnRjLmMKQEAgLTUzMiwxMCArNTMyLDcgQEAKIAkJZWxzZQogCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9MT1dfUkVGX0RJVjsKIAotCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1I2MDApIHx8Ci0JCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MTApIHx8Ci0JCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2MzApIHx8Ci0JCSAgICAocmRldi0+ZmFtaWx5ID09IENISVBfUlY2NzApKQorCQlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9SVjc3MCkKIAkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9QUkVGRVJfTUlOTV9PVkVSX01BWFA7CiAJfSBlbHNlIHsKIAkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX0xFR0FDWTsKQEAgLTU2NSw3ICs1NjIsNiBAQAogCQkJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0xDRF9TVVBQT1JUKSkgewogCQkJCWlmIChzc19lbmFibGVkKSB7CiAJCQkJCWlmIChzcy0+cmVmZGl2KSB7Ci0JCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfUFJFRkVSX01JTk1fT1ZFUl9NQVhQOwogCQkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1VTRV9SRUZfRElWOwogCQkJCQkJcGxsLT5yZWZlcmVuY2VfZGl2ID0gc3MtPnJlZmRpdjsKIAkJCQkJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMKaW5kZXggMzQ1MzkxMC4uOTA3M2UzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW4uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCkBAIC0zNTMsNyArMzUzLDcgQEAKIAkJCQkJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpvdGhlcl9tb2RlKQogewotCXUzMiB0bXAgPSAwOworCXUzMiB0bXA7CiAJLyoKIAkgKiBMaW5lIEJ1ZmZlciBTZXR1cAogCSAqIFRoZXJlIGFyZSAzIGxpbmUgYnVmZmVycywgZWFjaCBvbmUgc2hhcmVkIGJ5IDIgZGlzcGxheSBjb250cm9sbGVycy4KQEAgLTM2Myw2NCArMzYzLDYzIEBACiAJICogZmlyc3QgZGlzcGxheSBjb250cm9sbGVyCiAJICogIDAgLSBmaXJzdCBoYWxmIG9mIGxiICgzODQwICogMikKIAkgKiAgMSAtIGZpcnN0IDMvNCBvZiBsYiAoNTc2MCAqIDIpCi0JICogIDIgLSB3aG9sZSBsYiAoNzY4MCAqIDIpCisJICogIDIgLSB3aG9sZSBsYiAoNzY4MCAqIDIpLCBvdGhlciBjcnRjIG11c3QgYmUgZGlzYWJsZWQKIAkgKiAgMyAtIGZpcnN0IDEvNCBvZiBsYiAoMTkyMCAqIDIpCiAJICogc2Vjb25kIGRpc3BsYXkgY29udHJvbGxlcgogCSAqICA0IC0gc2Vjb25kIGhhbGYgb2YgbGIgKDM4NDAgKiAyKQogCSAqICA1IC0gc2Vjb25kIDMvNCBvZiBsYiAoNTc2MCAqIDIpCi0JICogIDYgLSB3aG9sZSBsYiAoNzY4MCAqIDIpCisJICogIDYgLSB3aG9sZSBsYiAoNzY4MCAqIDIpLCBvdGhlciBjcnRjIG11c3QgYmUgZGlzYWJsZWQKIAkgKiAgNyAtIGxhc3QgMS80IG9mIGxiICgxOTIwICogMikKIAkgKi8KLQlpZiAobW9kZSAmJiBvdGhlcl9tb2RlKSB7Ci0JCWlmIChtb2RlLT5oZGlzcGxheSA+IG90aGVyX21vZGUtPmhkaXNwbGF5KSB7Ci0JCQlpZiAobW9kZS0+aGRpc3BsYXkgPiAyNTYwKQotCQkJCXRtcCA9IDE7IC8qIDMvNCAqLwotCQkJZWxzZQotCQkJCXRtcCA9IDA7IC8qIDEvMiAqLwotCQl9IGVsc2UgaWYgKG90aGVyX21vZGUtPmhkaXNwbGF5ID4gbW9kZS0+aGRpc3BsYXkpIHsKLQkJCWlmIChvdGhlcl9tb2RlLT5oZGlzcGxheSA+IDI1NjApCi0JCQkJdG1wID0gMzsgLyogMS80ICovCi0JCQllbHNlCi0JCQkJdG1wID0gMDsgLyogMS8yICovCi0JCX0gZWxzZQorCS8qIHRoaXMgY2FuIGdldCB0cmlja3kgaWYgd2UgaGF2ZSB0d28gbGFyZ2UgZGlzcGxheXMgb24gYSBwYWlyZWQgZ3JvdXAKKwkgKiBvZiBjcnRjcy4gIElkZWFsbHkgZm9yIG11bHRpcGxlIGxhcmdlIGRpc3BsYXlzIHdlJ2QgYXNzaWduIHRoZW0gdG8KKwkgKiBub24tbGlua2VkIGNydGNzIGZvciBtYXhpbXVtIGxpbmUgYnVmZmVyIGFsbG9jYXRpb24uCisJICovCisJaWYgKHJhZGVvbl9jcnRjLT5iYXNlLmVuYWJsZWQgJiYgbW9kZSkgeworCQlpZiAob3RoZXJfbW9kZSkKIAkJCXRtcCA9IDA7IC8qIDEvMiAqLwotCX0gZWxzZSBpZiAobW9kZSkKLQkJdG1wID0gMjsgLyogd2hvbGUgKi8KLQllbHNlIGlmIChvdGhlcl9tb2RlKQotCQl0bXAgPSAzOyAvKiAxLzQgKi8KKwkJZWxzZQorCQkJdG1wID0gMjsgLyogd2hvbGUgKi8KKwl9IGVsc2UKKwkJdG1wID0gMDsKIAogCS8qIHNlY29uZCBjb250cm9sbGVyIG9mIHRoZSBwYWlyIHVzZXMgc2Vjb25kIGhhbGYgb2YgdGhlIGxiICovCiAJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkICUgMikKIAkJdG1wICs9IDQ7CiAJV1JFRzMyKERDX0xCX01FTU9SWV9TUExJVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgdG1wKTsKIAotCXN3aXRjaCAodG1wKSB7Ci0JY2FzZSAwOgotCWNhc2UgNDoKLQlkZWZhdWx0OgotCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKQotCQkJcmV0dXJuIDQwOTYgKiAyOwotCQllbHNlCi0JCQlyZXR1cm4gMzg0MCAqIDI7Ci0JY2FzZSAxOgotCWNhc2UgNToKLQkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKLQkJCXJldHVybiA2MTQ0ICogMjsKLQkJZWxzZQotCQkJcmV0dXJuIDU3NjAgKiAyOwotCWNhc2UgMjoKLQljYXNlIDY6Ci0JCWlmIChBU0lDX0lTX0RDRTUocmRldikpCi0JCQlyZXR1cm4gODE5MiAqIDI7Ci0JCWVsc2UKLQkJCXJldHVybiA3NjgwICogMjsKLQljYXNlIDM6Ci0JY2FzZSA3OgotCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKQotCQkJcmV0dXJuIDIwNDggKiAyOwotCQllbHNlCi0JCQlyZXR1cm4gMTkyMCAqIDI7CisJaWYgKHJhZGVvbl9jcnRjLT5iYXNlLmVuYWJsZWQgJiYgbW9kZSkgeworCQlzd2l0Y2ggKHRtcCkgeworCQljYXNlIDA6CisJCWNhc2UgNDoKKwkJZGVmYXVsdDoKKwkJCWlmIChBU0lDX0lTX0RDRTUocmRldikpCisJCQkJcmV0dXJuIDQwOTYgKiAyOworCQkJZWxzZQorCQkJCXJldHVybiAzODQwICogMjsKKwkJY2FzZSAxOgorCQljYXNlIDU6CisJCQlpZiAoQVNJQ19JU19EQ0U1KHJkZXYpKQorCQkJCXJldHVybiA2MTQ0ICogMjsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gNTc2MCAqIDI7CisJCWNhc2UgMjoKKwkJY2FzZSA2OgorCQkJaWYgKEFTSUNfSVNfRENFNShyZGV2KSkKKwkJCQlyZXR1cm4gODE5MiAqIDI7CisJCQllbHNlCisJCQkJcmV0dXJuIDc2ODAgKiAyOworCQljYXNlIDM6CisJCWNhc2UgNzoKKwkJCWlmIChBU0lDX0lTX0RDRTUocmRldikpCisJCQkJcmV0dXJuIDIwNDggKiAyOworCQkJZWxzZQorCQkJCXJldHVybiAxOTIwICogMjsKKwkJfQogCX0KKworCS8qIGNvbnRyb2xsZXIgbm90IGVuYWJsZWQsIHNvIG5vIGxiIHVzZWQgKi8KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHUzMiBldmVyZ3JlZW5fZ2V0X251bWJlcl9vZl9kcmFtX2NoYW5uZWxzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtODYzLDkgKzg2MiwxNSBAQAogCQlTWVNURU1fQUNDRVNTX01PREVfTk9UX0lOX1NZUyB8CiAJCVNZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfUEFTU19USFJVIHwKIAkJRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwgRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoNSk7Ci0JV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjBfQ05UTCwgdG1wKTsKLQlXUkVHMzIoTUNfVk1fTURfTDFfVExCMV9DTlRMLCB0bXApOwotCVdSRUczMihNQ19WTV9NRF9MMV9UTEIyX0NOVEwsIHRtcCk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCQlXUkVHMzIoRlVTX01DX1ZNX01EX0wxX1RMQjBfQ05UTCwgdG1wKTsKKwkJV1JFRzMyKEZVU19NQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJCVdSRUczMihGVVNfTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCX0gZWxzZSB7CisJCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJCVdSRUczMihNQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJCVdSRUczMihNQ19WTV9NRF9MMV9UTEIyX0NOVEwsIHRtcCk7CisJfQogCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CiAJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKIAlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOwpAQCAtMTc3NSw3ICsxNzgwLDEwIEBACiAKIAogCW1jX3NoYXJlZF9jaG1hcCA9IFJSRUczMihNQ19TSEFSRURfQ0hNQVApOwotCW1jX2FyYl9yYW1jZmcgPSBSUkVHMzIoTUNfQVJCX1JBTUNGRyk7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKKwkJbWNfYXJiX3JhbWNmZyA9IFJSRUczMihGVVNfTUNfQVJCX1JBTUNGRyk7CisJZWxzZQorCQltY19hcmJfcmFtY2ZnID0gUlJFRzMyKE1DX0FSQl9SQU1DRkcpOwogCiAJc3dpdGNoIChyZGV2LT5jb25maWcuZXZlcmdyZWVuLm1heF90aWxlX3BpcGVzKSB7CiAJY2FzZSAxOgpAQCAtMjU4MSw3ICsyNTg5LDcgQEAKIAl1MzIgd3B0ciwgdG1wOwogCiAJaWYgKHJkZXYtPndiLmVuYWJsZWQpCi0JCXdwdHIgPSByZGV2LT53Yi53YltSNjAwX1dCX0lIX1dQVFJfT0ZGU0VULzRdOworCQl3cHRyID0gbGUzMl90b19jcHUocmRldi0+d2Iud2JbUjYwMF9XQl9JSF9XUFRSX09GRlNFVC80XSk7CiAJZWxzZQogCQl3cHRyID0gUlJFRzMyKElIX1JCX1dQVFIpOwogCkBAIC0yOTI0LDExICsyOTMyLDYgQEAKIAkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7CiAJCWRldl93YXJuKHJkZXYtPmRldiwgImZhaWxlZCBibGl0dGVyICglZCkgZmFsbGluZyBiYWNrIHRvIG1lbWNweVxuIiwgcik7CiAJfQotCS8qIFhYWDogb250YXJpbyBoYXMgcHJvYmxlbXMgYmxpdHRpbmcgdG8gZ2FydCBhdCB0aGUgbW9tZW50ICovCi0JaWYgKHJkZXYtPmZhbWlseSA9PSBDSElQX1BBTE0pIHsKLQkJcmRldi0+YXNpYy0+Y29weSA9IE5VTEw7Ci0JCXJhZGVvbl90dG1fc2V0X2FjdGl2ZV92cmFtX3NpemUocmRldiwgcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUpOwotCX0KIAogCS8qIGFsbG9jYXRlIHdiIGJ1ZmZlciAqLwogCXIgPSByYWRlb25fd2JfaW5pdChyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKaW5kZXggOWFhYTNmMC4uZmM0MGUwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5kLmgKQEAgLTIwMCw2ICsyMDAsNyBAQAogI2RlZmluZQkJQlVSU1RMRU5HVEhfU0hJRlQJCQkJOQogI2RlZmluZQkJQlVSU1RMRU5HVEhfTUFTSwkJCQkweDAwMDAwMjAwCiAjZGVmaW5lCQlDSEFOU0laRV9PVkVSUklERQkJCQkoMSA8PCAxMSkKKyNkZWZpbmUJRlVTX01DX0FSQl9SQU1DRkcJCQkJMHgyNzY4CiAjZGVmaW5lCU1DX1ZNX0FHUF9UT1AJCQkJCTB4MjAyOAogI2RlZmluZQlNQ19WTV9BR1BfQk9UCQkJCQkweDIwMkMKICNkZWZpbmUJTUNfVk1fQUdQX0JBU0UJCQkJCTB4MjAzMApAQCAtMjIxLDYgKzIyMiwxMSBAQAogI2RlZmluZQlNQ19WTV9NRF9MMV9UTEIwX0NOVEwJCQkJMHgyNjU0CiAjZGVmaW5lCU1DX1ZNX01EX0wxX1RMQjFfQ05UTAkJCQkweDI2NTgKICNkZWZpbmUJTUNfVk1fTURfTDFfVExCMl9DTlRMCQkJCTB4MjY1QworCisjZGVmaW5lCUZVU19NQ19WTV9NRF9MMV9UTEIwX0NOVEwJCQkweDI2NUMKKyNkZWZpbmUJRlVTX01DX1ZNX01EX0wxX1RMQjFfQ05UTAkJCTB4MjY2MAorI2RlZmluZQlGVVNfTUNfVk1fTURfTDFfVExCMl9DTlRMCQkJMHgyNjY0CisKICNkZWZpbmUJTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUgkJMHgyMDNDCiAjZGVmaW5lCU1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIJCQkweDIwMzgKICNkZWZpbmUJTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSCQkJMHgyMDM0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL25pLmMKaW5kZXggN2FhZGUyMC4uM2Q4YTc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9uaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vbmkuYwpAQCAtNjc0LDcgKzY3NCw3IEBACiAKIAljY19yYl9iYWNrZW5kX2Rpc2FibGUgPSBSUkVHMzIoQ0NfUkJfQkFDS0VORF9ESVNBQkxFKTsKIAljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSBSUkVHMzIoQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHKTsKLQljZ3RzX3RjY19kaXNhYmxlID0gUlJFRzMyKENHVFNfVENDX0RJU0FCTEUpOworCWNndHNfdGNjX2Rpc2FibGUgPSAweGZmMDAwMDAwOwogCWdjX3VzZXJfcmJfYmFja2VuZF9kaXNhYmxlID0gUlJFRzMyKEdDX1VTRVJfUkJfQkFDS0VORF9ESVNBQkxFKTsKIAlnY191c2VyX3NoYWRlcl9waXBlX2NvbmZpZyA9IFJSRUczMihHQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRyk7CiAJY2d0c191c2VyX3RjY19kaXNhYmxlID0gUlJFRzMyKENHVFNfVVNFUl9UQ0NfRElTQUJMRSk7CkBAIC04NzEsNyArODcxLDcgQEAKIAogCXNteF9kY19jdGwwID0gUlJFRzMyKFNNWF9EQ19DVEwwKTsKIAlzbXhfZGNfY3RsMCAmPSB+TlVNQkVSX09GX1NFVFMoMHgxZmYpOwotCXNteF9kY19jdGwwIHw9IE5VTUJFUl9PRl9TRVRTKHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbnVtX29mX3NldHMpOworCXNteF9kY19jdGwwIHw9IE5VTUJFUl9PRl9TRVRTKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbnVtX29mX3NldHMpOwogCVdSRUczMihTTVhfRENfQ1RMMCwgc214X2RjX2N0bDApOwogCiAJV1JFRzMyKFNQSV9DT05GSUdfQ05UTF8xLCBWVFhfRE9ORV9ERUxBWSg0KSB8IENSQ19TSU1EX0lEX1dBRERSX0RJU0FCTEUpOwpAQCAtODg3LDIwICs4ODcsMjAgQEAKIAogCVdSRUczMihUQV9DTlRMX0FVWCwgRElTQUJMRV9DVUJFX0FOSVNPKTsKIAotCVdSRUczMihTWF9FWFBPUlRfQlVGRkVSX1NJWkVTLCAoQ09MT1JfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4uc3hfbWF4X2V4cG9ydF9zaXplIC8gNCkgLSAxKSB8Ci0JCQkJCVBPU0lUSU9OX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfcG9zX3NpemUgLyA0KSAtIDEpIHwKLQkJCQkJU01YX0JVRkZFUl9TSVpFKChyZGV2LT5jb25maWcuZXZlcmdyZWVuLnN4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CisJV1JFRzMyKFNYX0VYUE9SVF9CVUZGRVJfU0laRVMsIChDT0xPUl9CVUZGRVJfU0laRSgocmRldi0+Y29uZmlnLmNheW1hbi5zeF9tYXhfZXhwb3J0X3NpemUgLyA0KSAtIDEpIHwKKwkJCQkJUE9TSVRJT05fQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQlTTVhfQlVGRkVSX1NJWkUoKHJkZXYtPmNvbmZpZy5jYXltYW4uc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSAvIDQpIC0gMSkpKTsKIAotCVdSRUczMihQQV9TQ19GSUZPX1NJWkUsIChTQ19QUklNX0ZJRk9fU0laRShyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX3ByaW1fZmlmb19zaXplKSB8Ci0JCQkJIFNDX0hJWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcuZXZlcmdyZWVuLnNjX2hpel90aWxlX2ZpZm9fc2l6ZSkgfAotCQkJCSBTQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUocmRldi0+Y29uZmlnLmV2ZXJncmVlbi5zY19lYXJseXpfdGlsZV9maWZvX3NpemUpKSk7CisJV1JFRzMyKFBBX1NDX0ZJRk9fU0laRSwgKFNDX1BSSU1fRklGT19TSVpFKHJkZXYtPmNvbmZpZy5jYXltYW4uc2NfcHJpbV9maWZvX3NpemUpIHwKKwkJCQkgU0NfSElaX1RJTEVfRklGT19TSVpFKHJkZXYtPmNvbmZpZy5jYXltYW4uc2NfaGl6X3RpbGVfZmlmb19zaXplKSB8CisJCQkJIFNDX0VBUkxZWl9USUxFX0ZJRk9fU0laRShyZGV2LT5jb25maWcuY2F5bWFuLnNjX2Vhcmx5el90aWxlX2ZpZm9fc2l6ZSkpKTsKIAogCiAJV1JFRzMyKFZHVF9OVU1fSU5TVEFOQ0VTLCAxKTsKIAogCVdSRUczMihDUF9QRVJGTU9OX0NOVEwsIDApOwogCi0JV1JFRzMyKFNRX01TX0ZJRk9fU0laRVMsIChDQUNIRV9GSUZPX1NJWkUoMTYgKiByZGV2LT5jb25maWcuZXZlcmdyZWVuLnNxX251bV9jZl9pbnN0cykgfAorCVdSRUczMihTUV9NU19GSUZPX1NJWkVTLCAoQ0FDSEVfRklGT19TSVpFKDE2ICogcmRldi0+Y29uZmlnLmNheW1hbi5zcV9udW1fY2ZfaW5zdHMpIHwKIAkJCQkgIEZFVENIX0ZJRk9fSElXQVRFUigweDQpIHwKIAkJCQkgIERPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKIAkJCQkgIEFMVV9VUERBVEVfRklGT19ISVdBVEVSKDB4OCkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKaW5kZXggMTVkNTgyOS4uNmYyNzU5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwLmMKQEAgLTMyMzEsNyArMzIzMSw3IEBACiAJdTMyIHdwdHIsIHRtcDsKIAogCWlmIChyZGV2LT53Yi5lbmFibGVkKQotCQl3cHRyID0gcmRldi0+d2Iud2JbUjYwMF9XQl9JSF9XUFRSX09GRlNFVC80XTsKKwkJd3B0ciA9IGxlMzJfdG9fY3B1KHJkZXYtPndiLndiW1I2MDBfV0JfSUhfV1BUUl9PRkZTRVQvNF0pOwogCWVsc2UKIAkJd3B0ciA9IFJSRUczMihJSF9SQl9XUFRSKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggZjVkMTJmYi4uOTBkZmIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC00MzEsNyArNDMxLDcgQEAKIAkJfQogCX0KIAotCS8qIEFjZXIgbGFwdG9wIChBY2VyIFRyYXZlbE1hdGUgNTczMEcpIGhhcyBhbiBIRE1JIHBvcnQKKwkvKiBBY2VyIGxhcHRvcCAoQWNlciBUcmF2ZWxNYXRlIDU3MzAvNTczMEcpIGhhcyBhbiBIRE1JIHBvcnQKIAkgKiBvbiB0aGUgbGFwdG9wIGFuZCBhIERWSSBwb3J0IG9uIHRoZSBkb2NraW5nIHN0YXRpb24gYW5kCiAJICogYm90aCBzaGFyZSB0aGUgc2FtZSBlbmNvZGVyLCBocGQgcGluLCBhbmQgZGRjIGxpbmUuCiAJICogU28gd2hpbGUgdGhlIGJpb3MgdGFibGUgaXMgdGVjaG5pY2FsbHkgY29ycmVjdCwKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCSAqIHdpdGggZGlmZmVyZW50IGNydGNzIHdoaWNoIGlzbid0IHBvc3NpYmxlIG9uIHRoZSBoYXJkd2FyZQogCSAqIHNpZGUgYW5kIGxlYXZlcyBubyBjcnRjcyBmb3IgTFZEUyBvciBWR0EuCiAJICovCi0JaWYgKChkZXYtPnBkZXYtPmRldmljZSA9PSAweDk1YzQpICYmCisJaWYgKCgoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NWM0KSB8fCAoZGV2LT5wZGV2LT5kZXZpY2UgPT0gMHg5NTkxKSkgJiYKIAkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwMjUpICYmCiAJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMTNjKSkgewogCQlpZiAoKCpjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgJiYKQEAgLTE1NzQsOSArMTU3NCwxNyBAQAogCQkJQVRPTV9GQUtFX0VESURfUEFUQ0hfUkVDT1JEICpmYWtlX2VkaWRfcmVjb3JkOwogCQkJQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRCAqcGFuZWxfcmVzX3JlY29yZDsKIAkJCWJvb2wgYmFkX3JlY29yZCA9IGZhbHNlOwotCQkJdTggKnJlY29yZCA9ICh1OCAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCi0JCQkJCSAgICBkYXRhX29mZnNldCArCi0JCQkJCSAgICBsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpOworCQkJdTggKnJlY29yZDsKKworCQkJaWYgKChmcmV2ID09IDEpICYmIChjcmV2IDwgMikpCisJCQkJLyogYWJzb2x1dGUgKi8KKwkJCQlyZWNvcmQgPSAodTggKikobW9kZV9pbmZvLT5hdG9tX2NvbnRleHQtPmJpb3MgKworCQkJCQkJbGUxNl90b19jcHUobHZkc19pbmZvLT5pbmZvLnVzTW9kZVBhdGNoVGFibGVPZmZzZXQpKTsKKwkJCWVsc2UKKwkJCQkvKiByZWxhdGl2ZSAqLworCQkJCXJlY29yZCA9ICh1OCAqKShtb2RlX2luZm8tPmF0b21fY29udGV4dC0+YmlvcyArCisJCQkJCQlkYXRhX29mZnNldCArCisJCQkJCQlsZTE2X3RvX2NwdShsdmRzX2luZm8tPmluZm8udXNNb2RlUGF0Y2hUYWJsZU9mZnNldCkpOwogCQkJd2hpbGUgKCpyZWNvcmQgIT0gQVRPTV9SRUNPUkRfRU5EX1RZUEUpIHsKIAkJCQlzd2l0Y2ggKCpyZWNvcmQpIHsKIAkJCQljYXNlIExDRF9NT0RFX1BBVENIX1JFQ09SRF9NT0RFX1RZUEU6CkBAIC0xNTk5LDkgKzE2MDcsMTAgQEAKIAkJCQkJCQltZW1jcHkoKHU4ICopZWRpZCwgKHU4ICopJmZha2VfZWRpZF9yZWNvcmQtPnVjRmFrZUVESURTdHJpbmdbMF0sCiAJCQkJCQkJICAgICAgIGZha2VfZWRpZF9yZWNvcmQtPnVjRmFrZUVESURMZW5ndGgpOwogCi0JCQkJCQkJaWYgKGRybV9lZGlkX2lzX3ZhbGlkKGVkaWQpKQorCQkJCQkJCWlmIChkcm1fZWRpZF9pc192YWxpZChlZGlkKSkgewogCQkJCQkJCQlyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZCA9IGVkaWQ7Ci0JCQkJCQkJZWxzZQorCQkJCQkJCQlyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZF9zaXplID0gZWRpZF9zaXplOworCQkJCQkJCX0gZWxzZQogCQkJCQkJCQlrZnJlZShlZGlkKTsKIAkJCQkJCX0KIAkJCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRweF9oYW5kbGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYwppbmRleCBlZDVkZmU1Li45ZDk1NzkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYwpAQCAtMTUsNiArMTUsOSBAQAogI2RlZmluZSBBVFBYX1ZFUlNJT04gMAogI2RlZmluZSBBVFBYX0dQVV9QV1IgMgogI2RlZmluZSBBVFBYX01VWF9TRUxFQ1QgMworI2RlZmluZSBBVFBYX0kyQ19NVVhfU0VMRUNUIDQKKyNkZWZpbmUgQVRQWF9TV0lUQ0hfU1RBUlQgNQorI2RlZmluZSBBVFBYX1NXSVRDSF9FTkQgNgogCiAjZGVmaW5lIEFUUFhfSU5URUdSQVRFRCAwCiAjZGVmaW5lIEFUUFhfRElTQ1JFVEUgMQpAQCAtMTQ5LDEzICsxNTIsMzUgQEAKIAlyZXR1cm4gcmFkZW9uX2F0cHhfZXhlY3V0ZShoYW5kbGUsIEFUUFhfTVVYX1NFTEVDVCwgbXV4X2lkKTsKIH0KIAorc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2hfaTJjX211eChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBtdXhfaWQpCit7CisJcmV0dXJuIHJhZGVvbl9hdHB4X2V4ZWN1dGUoaGFuZGxlLCBBVFBYX0kyQ19NVVhfU0VMRUNULCBtdXhfaWQpOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X3N3aXRjaF9zdGFydChhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBncHVfaWQpCit7CisJcmV0dXJuIHJhZGVvbl9hdHB4X2V4ZWN1dGUoaGFuZGxlLCBBVFBYX1NXSVRDSF9TVEFSVCwgZ3B1X2lkKTsKK30KKworc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2hfZW5kKGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IGdwdV9pZCkKK3sKKwlyZXR1cm4gcmFkZW9uX2F0cHhfZXhlY3V0ZShoYW5kbGUsIEFUUFhfU1dJVENIX0VORCwgZ3B1X2lkKTsKK30KIAogc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2h0byhlbnVtIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9pZCBpZCkKIHsKKwlpbnQgZ3B1X2lkOworCiAJaWYgKGlkID09IFZHQV9TV0lUQ0hFUk9PX0lHRCkKLQkJcmFkZW9uX2F0cHhfc3dpdGNoX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCAwKTsKKwkJZ3B1X2lkID0gQVRQWF9JTlRFR1JBVEVEOwogCWVsc2UKLQkJcmFkZW9uX2F0cHhfc3dpdGNoX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCAxKTsKKwkJZ3B1X2lkID0gQVRQWF9ESVNDUkVURTsKKworCXJhZGVvbl9hdHB4X3N3aXRjaF9zdGFydChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCBncHVfaWQpOworCXJhZGVvbl9hdHB4X3N3aXRjaF9tdXgocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgZ3B1X2lkKTsKKwlyYWRlb25fYXRweF9zd2l0Y2hfaTJjX211eChyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCBncHVfaWQpOworCXJhZGVvbl9hdHB4X3N3aXRjaF9lbmQocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgZ3B1X2lkKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggMmVmNmQ1MS4uNWY0NWZhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtMTE5OSw3ICsxMTk5LDcgQEAKIAlpZiAocm91dGVyLT5kZGNfdmFsaWQgfHwgcm91dGVyLT5jZF92YWxpZCkgewogCQlyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXJfYnVzID0gcmFkZW9uX2kyY19sb29rdXAocmRldiwgJnJvdXRlci0+aTJjX2luZm8pOwogCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPnJvdXRlcl9idXMpCi0JCQlnb3RvIGZhaWxlZDsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFzc2lnbiByb3V0ZXIgaTJjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAl9CiAJc3dpdGNoIChjb25uZWN0b3JfdHlwZSkgewogCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKQEAgLTEyMDgsNyArMTIwOCw3IEBACiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiVkdBOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCkBAIC0xMjI2LDcgKzEyMjYsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIkRWSUE6IEZhaWxlZCB0byBhc3NpZ24gZGRjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAkJfQogCQlyYWRlb25fY29ubmVjdG9yLT5kYWNfbG9hZF9kZXRlY3QgPSB0cnVlOwogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKQEAgLTEyNDksNyArMTI0OSw3IEBACiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiRFZJOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJc3VicGl4ZWxfb3JkZXIgPSBTdWJQaXhlbEhvcml6b250YWxSR0I7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLApAQCAtMTI5MCw3ICsxMjkwLDcgQEAKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19sb29rdXAocmRldiwgaTJjX2J1cyk7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCi0JCQkJZ290byBmYWlsZWQ7CisJCQkJRFJNX0VSUk9SKCJIRE1JOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCSAgICAgIHJkZXYtPm1vZGVfaW5mby5jb2hlcmVudF9tb2RlX3Byb3BlcnR5LApAQCAtMTMyOSwxMCArMTMyOSwxMCBAQAogCQkJZWxzZQogCQkJCXJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9pMmNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGVfZHAoZGV2LCBpMmNfYnVzLCAiRFAtYXV4Y2giKTsKIAkJCWlmICghcmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX2kyY19idXMpCi0JCQkJZ290byBmYWlsZWQ7CisJCQkJRFJNX0VSUk9SKCJEUDogRmFpbGVkIHRvIGFzc2lnbiBkcCBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiRFA6IEZhaWxlZCB0byBhc3NpZ24gZGRjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAkJfQogCQlzdWJwaXhlbF9vcmRlciA9IFN1YlBpeGVsSG9yaXpvbnRhbFJHQjsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCkBAIC0xMzgxLDcgKzEzODEsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIkxWRFM6IEZhaWxlZCB0byBhc3NpZ24gZGRjIGJ1cyEgQ2hlY2sgZG1lc2cgZm9yIGkyYyBlcnJvcnMuXG4iKTsKIAkJfQogCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwKIAkJCQkJICAgICAgZGV2LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21vZGVfcHJvcGVydHksCkBAIC0xNDU3LDcgKzE0NTcsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIlZHQTogRmFpbGVkIHRvIGFzc2lnbiBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQl9CiAJCXJhZGVvbl9jb25uZWN0b3ItPmRhY19sb2FkX2RldGVjdCA9IHRydWU7CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLApAQCAtMTQ3NSw3ICsxNDc1LDcgQEAKIAkJaWYgKGkyY19idXMtPnZhbGlkKSB7CiAJCQlyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzID0gcmFkZW9uX2kyY19sb29rdXAocmRldiwgaTJjX2J1cyk7CiAJCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpCi0JCQkJZ290byBmYWlsZWQ7CisJCQkJRFJNX0VSUk9SKCJEVklBOiBGYWlsZWQgdG8gYXNzaWduIGRkYyBidXMhIENoZWNrIGRtZXNnIGZvciBpMmMgZXJyb3JzLlxuIik7CiAJCX0KIAkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKIAkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogCQlpZiAoaTJjX2J1cy0+dmFsaWQpIHsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMgPSByYWRlb25faTJjX2xvb2t1cChyZGV2LCBpMmNfYnVzKTsKIAkJCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKLQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlEUk1fRVJST1IoIkRWSTogRmFpbGVkIHRvIGFzc2lnbiBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQl9CiAJCWlmIChjb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGFjX2xvYWRfZGV0ZWN0ID0gdHJ1ZTsKQEAgLTE1MzgsNyArMTUzOCw3IEBACiAJCWlmIChpMmNfYnVzLT52YWxpZCkgewogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cyA9IHJhZGVvbl9pMmNfbG9va3VwKHJkZXYsIGkyY19idXMpOwogCQkJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKQotCQkJCWdvdG8gZmFpbGVkOworCQkJCURSTV9FUlJPUigiTFZEUzogRmFpbGVkIHRvIGFzc2lnbiBkZGMgYnVzISBDaGVjayBkbWVzZyBmb3IgaTJjIGVycm9ycy5cbiIpOwogCQl9CiAJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLAogCQkJCQkgICAgICBkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKQEAgLTE1NjcsOSArMTU2Nyw0IEBACiAJCQkJcmFkZW9uX2xlZ2FjeV9iYWNrbGlnaHRfaW5pdChyYWRlb25fZW5jb2RlciwgY29ubmVjdG9yKTsKIAkJfQogCX0KLQlyZXR1cm47Ci0KLWZhaWxlZDoKLQlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKLQlrZnJlZShjb25uZWN0b3IpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3Vyc29yLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwppbmRleCBiZGYyZmExLi4zMTg5YTdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYwpAQCAtMTY3LDkgKzE2Nyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJhZGVvbl9jcnRjLT5jdXJzb3Jfd2lkdGggPSB3aWR0aDsKLQlyYWRlb25fY3J0Yy0+Y3Vyc29yX2hlaWdodCA9IGhlaWdodDsKLQogCW9iaiA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChjcnRjLT5kZXYsIGZpbGVfcHJpdiwgaGFuZGxlKTsKIAlpZiAoIW9iaikgewogCQlEUk1fRVJST1IoIkNhbm5vdCBmaW5kIGN1cnNvciBvYmplY3QgJXggZm9yIGNydGMgJWRcbiIsIGhhbmRsZSwgcmFkZW9uX2NydGMtPmNydGNfaWQpOwpAQCAtMTgwLDYgKzE3Nyw5IEBACiAJaWYgKHJldCkKIAkJZ290byBmYWlsOwogCisJcmFkZW9uX2NydGMtPmN1cnNvcl93aWR0aCA9IHdpZHRoOworCXJhZGVvbl9jcnRjLT5jdXJzb3JfaGVpZ2h0ID0gaGVpZ2h0OworCiAJcmFkZW9uX2xvY2tfY3Vyc29yKGNydGMsIHRydWUpOwogCS8qIFhYWCBvbmx5IDI3IGJpdCBvZmZzZXQgZm9yIGxlZ2FjeSBjdXJzb3IgKi8KIAlyYWRlb25fc2V0X2N1cnNvcihjcnRjLCBvYmosIGdwdV9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwppbmRleCA4YTk1NWJiLi5hNTMzZjUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCkBAIC0xODEsOSArMTgxLDkgQEAKIAlwID0gdCAvIChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKywgcCsrKSB7Ci0JCS8qIE9uIFRUTSBwYXRoLCB3ZSBvbmx5IHVzZSB0aGUgRE1BIEFQSSBpZiBUVE1fUEFHRV9GTEFHX0RNQTMyCi0JCSAqIGlzIHJlcXVlc3RlZC4gKi8KLQkJaWYgKGRtYV9hZGRyW2ldICE9IERNQV9FUlJPUl9DT0RFKSB7CisJCS8qIHdlIHJldmVydGVkIHRoZSBwYXRjaCB1c2luZyBkbWFfYWRkciBpbiBUVE0gZm9yIG5vdyBidXQgdGhpcworCQkgKiBjb2RlIHN0b3BzIGJ1aWxkaW5nIG9uIGFscGhhIHNvIGp1c3QgY29tbWVudCBpdCBvdXQgZm9yIG5vdyAqLworCQlpZiAoMCkgeyAvKmRtYV9hZGRyW2ldICE9IERNQV9FUlJPUl9DT0RFKSAqLwogCQkJcmRldi0+Z2FydC50dG1fYWxsb2NlZFtwXSA9IHRydWU7CiAJCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSBkbWFfYWRkcltpXTsKIAkJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2kyYy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKaW5kZXggY2NiYWJmNy4uOTgzY2JhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faTJjLmMKQEAgLTEwOTYsNiArMTA5Niw5IEBACiAJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXIuZGRjX3ZhbGlkKQogCQlyZXR1cm47CiAKKwlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPnJvdXRlcl9idXMpCisJCXJldHVybjsKKwogCXJhZGVvbl9pMmNfZ2V0X2J5dGUocmFkZW9uX2Nvbm5lY3Rvci0+cm91dGVyX2J1cywKIAkJCSAgICByYWRlb25fY29ubmVjdG9yLT5yb3V0ZXIuaTJjX2FkZHIsCiAJCQkgICAgMHgzLCAmdmFsKTsKQEAgLTExMjEsNiArMTEyNCw5IEBACiAJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXIuY2RfdmFsaWQpCiAJCXJldHVybjsKIAorCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+cm91dGVyX2J1cykKKwkJcmV0dXJuOworCiAJcmFkZW9uX2kyY19nZXRfYnl0ZShyYWRlb25fY29ubmVjdG9yLT5yb3V0ZXJfYnVzLAogCQkJICAgIHJhZGVvbl9jb25uZWN0b3ItPnJvdXRlci5pMmNfYWRkciwKIAkJCSAgICAweDMsICZ2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCBiZjdkNGMwLi5iZDU4YWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtMjIxLDYgKzIyMSwyMiBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBSQURFT05fSU5GT19OVU1fVElMRV9QSVBFUzoKKwkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX0NBWU1BTikKKwkJCXZhbHVlID0gcmRldi0+Y29uZmlnLmNheW1hbi5tYXhfdGlsZV9waXBlczsKKwkJZWxzZSBpZiAocmRldi0+ZmFtaWx5ID49IENISVBfQ0VEQVIpCisJCQl2YWx1ZSA9IHJkZXYtPmNvbmZpZy5ldmVyZ3JlZW4ubWF4X3RpbGVfcGlwZXM7CisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWNzcwKQorCQkJdmFsdWUgPSByZGV2LT5jb25maWcucnY3NzAubWF4X3RpbGVfcGlwZXM7CisJCWVsc2UgaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApCisJCQl2YWx1ZSA9IHJkZXYtPmNvbmZpZy5yNjAwLm1heF90aWxlX3BpcGVzOworCQllbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCWNhc2UgUkFERU9OX0lORk9fRlVTSU9OX0dBUlRfV09SS0lORzoKKwkJdmFsdWUgPSAxOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fREVCVUdfS01TKCJJbnZhbGlkIHJlcXVlc3QgJWRcbiIsIGluZm8tPnJlcXVlc3QpOwogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvY2F5bWFuIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4KaW5kZXggNjMzNGY4YS4uMGFhOGU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4KKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9jYXltYW4KQEAgLTMzLDYgKzMzLDcgQEAKIDB4MDAwMDhFNDggU1FfRVhfQUxMT0NfVEFCTEVfU0xPVFMKIDB4MDAwMDkxMDAgU1BJX0NPTkZJR19DTlRMCiAweDAwMDA5MTNDIFNQSV9DT05GSUdfQ05UTF8xCisweDAwMDA5NTA4IFRBX0NOVExfQVVYCiAweDAwMDA5ODMwIERCX0RFQlVHCiAweDAwMDA5ODM0IERCX0RFQlVHMgogMHgwMDAwOTgzOCBEQl9ERUJVRzMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvZXZlcmdyZWVuIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4KaW5kZXggN2UxNjM3MS4uMGUyOGNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4KKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9ldmVyZ3JlZW4KQEAgLTQ2LDYgKzQ2LDcgQEAKIDB4MDAwMDhFNDggU1FfRVhfQUxMT0NfVEFCTEVfU0xPVFMKIDB4MDAwMDkxMDAgU1BJX0NPTkZJR19DTlRMCiAweDAwMDA5MTNDIFNQSV9DT05GSUdfQ05UTF8xCisweDAwMDA5NTA4IFRBX0NOVExfQVVYCiAweDAwMDA5NzAwIFZDX0NOVEwKIDB4MDAwMDk3MTQgVkNfRU5IQU5DRQogMHgwMDAwOTgzMCBEQl9ERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yZWdfc3Jjcy9yNjAwCmluZGV4IGFmMGRhNGEuLjkyZjE5MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKQEAgLTcwOCw2ICs3MDgsNyBAQAogMHgwMDAyOEQwQyBEQl9SRU5ERVJfQ09OVFJPTAogMHgwMDAyOEQxMCBEQl9SRU5ERVJfT1ZFUlJJREUKIDB4MDAwMjg4MEMgREJfU0hBREVSX0NPTlRST0wKKzB4MDAwMjhEMjggREJfU1JFU1VMVFNfQ09NUEFSRV9TVEFURTAKIDB4MDAwMjhEMkMgREJfU1JFU1VMVFNfQ09NUEFSRV9TVEFURTEKIDB4MDAwMjg0MzAgREJfU1RFTkNJTFJFRk1BU0sKIDB4MDAwMjg0MzQgREJfU1RFTkNJTFJFRk1BU0tfQkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2Ffc3dpdGNoZXJvby5jIGIvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKaW5kZXggZTAxY2FjYi4uNDk4YjI4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKQEAgLTIxOSw5ICsyMTksNiBAQAogCWludCBpOwogCXN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19jbGllbnQgKmFjdGl2ZSA9IE5VTEw7CiAKLQlpZiAobmV3X2NsaWVudC0+YWN0aXZlID09IHRydWUpCi0JCXJldHVybiAwOwotCiAJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKIAkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5hY3RpdmUgPT0gdHJ1ZSkgewogCQkJYWN0aXZlID0gJnZnYXNyX3ByaXYuY2xpZW50c1tpXTsKQEAgLTM3Miw2ICszNjksOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKKwlpZiAoY2xpZW50LT5hY3RpdmUgPT0gdHJ1ZSkKKwkJZ290byBvdXQ7CisKIAkvKiBva2F5IHdlIHdhbnQgYSBzd2l0Y2ggLSB0ZXN0IGlmIGRldmljZXMgYXJlIHdpbGxpbmcgdG8gc3dpdGNoICovCiAJY2FuX3N3aXRjaCA9IHRydWU7CiAJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwppbmRleCAwNjBlZjYzLi41MGU0MGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL0tjb25maWcKKysrIGIvZHJpdmVycy9od21vbi9LY29uZmlnCkBAIC0xMTAsOCArMTEwLDcgQEAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgQW5hbG9nIERldmljZXMgQURNMTAyMQogCSAgYW5kIEFETTEwMjMgc2Vuc29yIGNoaXBzIGFuZCBjbG9uZXM6IE1heGltIE1BWDE2MTcgYW5kIE1BWDE2MTdBLAotCSAgR2VuZXN5cyBMb2dpYyBHTDUyM1NNLCBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODQsIFRJIFRITUMxMCwKLQkgIGFuZCB0aGUgWEVPTiBwcm9jZXNzb3IgYnVpbHQtaW4gc2Vuc29yLgorCSAgR2VuZXN5cyBMb2dpYyBHTDUyM1NNLCBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODQgYW5kIFRJIFRITUMxMC4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWRtMTAyMS4KQEAgLTYxOCwxMCArNjE3LDEwIEBACiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTkwLAotCSAgTE04NiwgTE04OSBhbmQgTE05OSwgQW5hbG9nIERldmljZXMgQURNMTAzMiBhbmQgQURUNzQ2MSwgTWF4aW0KLQkgIE1BWDY2NDYsIE1BWDY2NDcsIE1BWDY2NDgsIE1BWDY2NDksIE1BWDY2NTcsIE1BWDY2NTgsIE1BWDY2NTksCi0JICBNQVg2NjgwLCBNQVg2NjgxLCBNQVg2NjkyLCBNQVg2Njk1LCBNQVg2Njk2LCBhbmQgV2luYm9uZC9OdXZvdG9uCi0JICBXODNMNzcxVy9HL0FXRy9BU0cgc2Vuc29yIGNoaXBzLgorCSAgTE04NiwgTE04OSBhbmQgTE05OSwgQW5hbG9nIERldmljZXMgQURNMTAzMiwgQURUNzQ2MSwgYW5kIEFEVDc0NjFBLAorCSAgTWF4aW0gTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OCwgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwKKwkgIE1BWDY2ODAsIE1BWDY2ODEsIE1BWDY2OTIsIE1BWDY2OTUsIE1BWDY2OTYsIE9OIFNlbWljb25kdWN0b3IgTkNUMTAwOCwKKwkgIGFuZCBXaW5ib25kL051dm90b24gVzgzTDc3MVcvRy9BV0cvQVNHIHNlbnNvciBjaGlwcy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgbG05MC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04NS5jIGIvZHJpdmVycy9od21vbi9sbTg1LmMKaW5kZXggMjUwZDA5OS4uZGE3MmRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg1LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg1LmMKQEAgLTEwOTQsNiArMTA5NCw3IEBACiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcHdtX21pbmN0bC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3B3bV9taW5jdGwuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wd21fbWluY3RsLmRldl9hdHRyLmF0dHIsCisJTlVMTAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG04NV9ncm91cF9taW5jdGwgPSB7CkBAIC0xMTA0LDYgKzExMDUsNyBAQAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfYXV0b190ZW1wX29mZi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYXV0b190ZW1wX29mZi5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYXV0b190ZW1wX29mZi5kZXZfYXR0ci5hdHRyLAorCU5VTEwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtODVfZ3JvdXBfdGVtcF9vZmYgPSB7CkBAIC0xMzI5LDExICsxMzMxLDExIEBACiAJaWYgKGRhdGEtPnR5cGUgIT0gZW1jNmQxMDNzKSB7CiAJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfbWluY3RsKTsKIAkJaWYgKGVycikKLQkJCWdvdG8gZXJyX2tmcmVlOworCQkJZ290byBlcnJfcmVtb3ZlX2ZpbGVzOwogCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCiAJCQkJCSAmbG04NV9ncm91cF90ZW1wX29mZik7CiAJCWlmIChlcnIpCi0JCQlnb3RvIGVycl9rZnJlZTsKKwkJCWdvdG8gZXJyX3JlbW92ZV9maWxlczsKIAl9CiAKIAkvKiBUaGUgQURUNzQ2My82OCBoYXZlIGFuIG9wdGlvbmFsIFZSTSAxMCBtb2RlIHdoZXJlIHBpbiAyMSBpcyB1c2VkCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IGM0M2I0ZTkuLjJmOTRmOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC00OSwxMCArNDksMTAgQEAKICAqIGNoaXBzLCBidXQgc3VwcG9ydCB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzIGluc3RlYWQgb2YgdHdvLiBNQVg2Njk1CiAgKiBhbmQgTUFYNjY5NiBvbmx5IGRpZmZlciBpbiB0aGUgcGlub3V0IHNvIHRoZXkgY2FuIGJlIHRyZWF0ZWQgaWRlbnRpY2FsbHkuCiAgKgotICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgQURUNzQ2MSBjaGlwIGZyb20gQW5hbG9nIERldmljZXMuCi0gKiBJdCdzIHN1cHBvcnRlZCBpbiBib3RoIGNvbXBhdGliaWxpdHkgYW5kIGV4dGVuZGVkIG1vZGUuIEl0IGlzIG1vc3RseQotICogY29tcGF0aWJsZSB3aXRoIExNOTAgZXhjZXB0IGZvciBhIGRhdGEgZm9ybWF0IGRpZmZlcmVuY2UgZm9yIHRoZQotICogdGVtcGVyYXR1cmUgdmFsdWUgcmVnaXN0ZXJzLgorICogVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBBRFQ3NDYxIGFuZCBBRFQ3NDYxQSBmcm9tIEFuYWxvZyBEZXZpY2VzIGFzIHdlbGwgYXMKKyAqIE5DVDEwMDggZnJvbSBPTiBTZW1pY29uZHVjdG9yLiBUaGUgY2hpcHMgYXJlIHN1cHBvcnRlZCBpbiBib3RoIGNvbXBhdGliaWxpdHkKKyAqIGFuZCBleHRlbmRlZCBtb2RlLiBUaGV5IGFyZSBtb3N0bHkgY29tcGF0aWJsZSB3aXRoIExNOTAgZXhjZXB0IGZvciBhIGRhdGEKKyAqIGZvcm1hdCBkaWZmZXJlbmNlIGZvciB0aGUgdGVtcGVyYXR1cmUgdmFsdWUgcmVnaXN0ZXJzLgogICoKICAqIFNpbmNlIHRoZSBMTTkwIHdhcyB0aGUgZmlyc3QgY2hpcHNldCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIsIG1vc3QKICAqIGNvbW1lbnRzIHdpbGwgcmVmZXIgdG8gdGhpcyBjaGlwc2V0LCBidXQgYXJlIGFjdHVhbGx5IGdlbmVyYWwgYW5kCkBAIC04OCw5ICs4OCwxMCBAQAogICogQWRkcmVzc2VzIHRvIHNjYW4KICAqIEFkZHJlc3MgaXMgZnVsbHkgZGVmaW5lZCBpbnRlcm5hbGx5IGFuZCBjYW5ub3QgYmUgY2hhbmdlZCBleGNlcHQgZm9yCiAgKiBNQVg2NjU5LCBNQVg2NjgwIGFuZCBNQVg2NjgxLgotICogTE04NiwgTE04OSwgTE05MCwgTE05OSwgQURNMTAzMiwgQURNMTAzMi0xLCBBRFQ3NDYxLCBNQVg2NjQ5LCBNQVg2NjU3LAotICogTUFYNjY1OCBhbmQgVzgzTDc3MSBoYXZlIGFkZHJlc3MgMHg0Yy4KLSAqIEFETTEwMzItMiwgQURUNzQ2MS0yLCBMTTg5LTEsIExNOTktMSBhbmQgTUFYNjY0NiBoYXZlIGFkZHJlc3MgMHg0ZC4KKyAqIExNODYsIExNODksIExNOTAsIExNOTksIEFETTEwMzIsIEFETTEwMzItMSwgQURUNzQ2MSwgQURUNzQ2MUEsIE1BWDY2NDksCisgKiBNQVg2NjU3LCBNQVg2NjU4LCBOQ1QxMDA4IGFuZCBXODNMNzcxIGhhdmUgYWRkcmVzcyAweDRjLgorICogQURNMTAzMi0yLCBBRFQ3NDYxLTIsIEFEVDc0NjFBLTIsIExNODktMSwgTE05OS0xLCBNQVg2NjQ2LCBhbmQgTkNUMTAwOEQKKyAqIGhhdmUgYWRkcmVzcyAweDRkLgogICogTUFYNjY0NyBoYXMgYWRkcmVzcyAweDRlLgogICogTUFYNjY1OSBjYW4gaGF2ZSBhZGRyZXNzIDB4NGMsIDB4NGQgb3IgMHg0ZS4KICAqIE1BWDY2ODAgYW5kIE1BWDY2ODEgY2FuIGhhdmUgYWRkcmVzcyAweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLApAQCAtMTc0LDYgKzE3NSw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgbG05MF9pZFtdID0gewogCXsgImFkbTEwMzIiLCBhZG0xMDMyIH0sCiAJeyAiYWR0NzQ2MSIsIGFkdDc0NjEgfSwKKwl7ICJhZHQ3NDYxYSIsIGFkdDc0NjEgfSwKIAl7ICJsbTkwIiwgbG05MCB9LAogCXsgImxtODYiLCBsbTg2IH0sCiAJeyAibG04OSIsIGxtODYgfSwKQEAgLTE4OCw2ICsxOTAsNyBAQAogCXsgIm1heDY2ODEiLCBtYXg2NjgwIH0sCiAJeyAibWF4NjY5NSIsIG1heDY2OTYgfSwKIAl7ICJtYXg2Njk2IiwgbWF4NjY5NiB9LAorCXsgIm5jdDEwMDgiLCBhZHQ3NDYxIH0sCiAJeyAidzgzbDc3MSIsIHc4M2w3NzEgfSwKIAl7IH0KIH07CkBAIC0xMTUzLDYgKzExNTYsMTEgQEAKIAkJICYmIChyZWdfY29uZmlnMSAmIDB4MUIpID09IDB4MDAKIAkJICYmIHJlZ19jb252cmF0ZSA8PSAweDBBKSB7CiAJCQluYW1lID0gImFkdDc0NjEiOworCQl9IGVsc2UKKwkJaWYgKGNoaXBfaWQgPT0gMHg1NyAvKiBBRFQ3NDYxQSwgTkNUMTAwOCAqLworCQkgJiYgKHJlZ19jb25maWcxICYgMHgxQikgPT0gMHgwMAorCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MEEpIHsKKwkJCW5hbWUgPSAiYWR0NzQ2MWEiOwogCQl9CiAJfSBlbHNlCiAJaWYgKG1hbl9pZCA9PSAweDREKSB7IC8qIE1heGltICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3BtYnVzX2NvcmUuYyBiL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCmluZGV4IGVkZmI5MmUuLjE5NmZmYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCisrKyBiL2RyaXZlcnMvaHdtb24vcG1idXNfY29yZS5jCkBAIC0xMzksNyArMTM5LDYgQEAKIAkgKiBBIHNpbmdsZSBzdGF0dXMgcmVnaXN0ZXIgY292ZXJzIG11bHRpcGxlIGF0dHJpYnV0ZXMsCiAJICogc28gd2Uga2VlcCB0aGVtIGFsbCB0b2dldGhlci4KIAkgKi8KLQl1OCBzdGF0dXNfYml0czsKIAl1OCBzdGF0dXNbUEJfTlVNX1NUQVRVU19SRUddOwogCiAJdTggY3VycnBhZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3R3bDQwMzAtbWFkYy1od21vbi5jIGIvZHJpdmVycy9od21vbi90d2w0MDMwLW1hZGMtaHdtb24uYwppbmRleCBkZTU4MTkxLi41NzI0MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3R3bDQwMzAtbWFkYy1od21vbi5jCisrKyBiL2RyaXZlcnMvaHdtb24vdHdsNDAzMC1tYWRjLWh3bW9uLmMKQEAgLTk4LDcgKzk4LDYgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHR3bDQwMzBfbWFkY19od21vbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7Ci0JaW50IHN0YXR1czsKIAlzdHJ1Y3QgZGV2aWNlICpod21vbjsKIAogCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZ0d2w0MDMwX21hZGNfZ3JvdXApOwpAQCAtMTA3LDcgKzEwNiw3IEBACiAJaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7CiAJaWYgKElTX0VSUihod21vbikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiaHdtb25fZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZC5cbiIpOwotCQlzdGF0dXMgPSBQVFJfRVJSKGh3bW9uKTsKKwkJcmV0ID0gUFRSX0VSUihod21vbik7CiAJCWdvdG8gZXJyX3JlZzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggNzJjMDQxNS4uNDU1ZTkwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKQEAgLTEzNCwxMCArMTM0LDE1IEBACiAJCQkJIFNNQkhTVFNUU19CVVNfRVJSIHwgU01CSFNUU1RTX0RFVl9FUlIgfCBcCiAJCQkJIFNNQkhTVFNUU19JTlRSKQogCisvKiBPbGRlciBkZXZpY2VzIGhhdmUgdGhlaXIgSUQgZGVmaW5lZCBpbiA8bGludXgvcGNpX2lkcy5oPiAqLworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX1NNQlVTCTB4MWMyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTCTB4MWQyMgogLyogUGF0c2J1cmcgYWxzbyBoYXMgdGhyZWUgJ0ludGVncmF0ZWQgRGV2aWNlIEZ1bmN0aW9uJyBTTUJ1cyBjb250cm9sbGVycyAqLwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BBVFNCVVJHX1NNQlVTX0lERjAJMHgxZDcwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUEFUU0JVUkdfU01CVVNfSURGMQkweDFkNzEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19TTUJVU19JREYyCTB4MWQ3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX1NNQlVTCTB4MjMzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfU01CVVMJMHgzYjMwCiAKIHN0cnVjdCBpODAxX3ByaXYgewogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggNzViOTg0Yy4uMTA3Mzk3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC01NjAsMTUgKzU2MCwxOCBAQAogCS50aW1lb3V0ID0gSFosCiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtcGNfaTJjX29mX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfaTJjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBtcGNfaTJjICppMmM7CiAJY29uc3QgdTMyICpwcm9wOwogCXUzMiBjbG9jayA9IE1QQ19JMkNfQ0xPQ0tfTEVHQUNZOwogCWludCByZXN1bHQgPSAwOwogCWludCBwbGVuOwogCi0JaWYgKCFvcC0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG1wY19pMmNfb2ZfbWF0Y2gsICZvcC0+ZGV2KTsKKwlpZiAoIW1hdGNoKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWkyYyA9IGt6YWxsb2Moc2l6ZW9mKCppMmMpLCBHRlBfS0VSTkVMKTsKQEAgLTYwNSw4ICs2MDgsOCBAQAogCQkJY2xvY2sgPSAqcHJvcDsKIAl9CiAKLQlpZiAob3AtPmRldi5vZl9tYXRjaC0+ZGF0YSkgewotCQlzdHJ1Y3QgbXBjX2kyY19kYXRhICpkYXRhID0gb3AtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlpZiAobWF0Y2gtPmRhdGEpIHsKKwkJc3RydWN0IG1wY19pMmNfZGF0YSAqZGF0YSA9IG1hdGNoLT5kYXRhOwogCQlkYXRhLT5zZXR1cChvcC0+ZGV2Lm9mX25vZGUsIGkyYywgY2xvY2ssIGRhdGEtPnByZXNjYWxlcik7CiAJfSBlbHNlIHsKIAkJLyogQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKaW5kZXggMGViMTUxNS4uMmRiYmExNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMKQEAgLTEsNyArMSw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgogICogaTJjLXBhcnBvcnQuYyBJMkMgYnVzIG92ZXIgcGFyYWxsZWwgcG9ydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqCi0gICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMCBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAgIENvcHlyaWdodCAoQykgMjAwMy0yMDExIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICAgCiAgICBCYXNlZCBvbiBvbGRlciBpMmMtcGhpbGlwcy1wYXIuYyBkcml2ZXIKICAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFNpbW9uIEcuIFZvZ2wKQEAgLTMzLDYgKzMzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtc21idXMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSAiaTJjLXBhcnBvcnQuaCIKIAogLyogLS0tLS0gRGV2aWNlIGxpc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC00MywxMCArNDUsMTEgQEAKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYWxnb19kYXRhOwogCXN0cnVjdCBpMmNfc21idXNfYWxlcnRfc2V0dXAgYWxlcnRfZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqYXJhOwotCXN0cnVjdCBpMmNfcGFyICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX3BhciAqYWRhcHRlcl9saXN0Oworc3RhdGljIExJU1RfSEVBRChhZGFwdGVyX2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChhZGFwdGVyX2xpc3RfbG9jayk7CiAKIC8qIC0tLS0tIExvdy1sZXZlbCBwYXJhbGxlbCBwb3J0IGFjY2VzcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yMjgsOCArMjMxLDkgQEAKIAl9CiAKIAkvKiBBZGQgdGhlIG5ldyBhZGFwdGVyIHRvIHRoZSBsaXN0ICovCi0JYWRhcHRlci0+bmV4dCA9IGFkYXB0ZXJfbGlzdDsKLQlhZGFwdGVyX2xpc3QgPSBhZGFwdGVyOworCW11dGV4X2xvY2soJmFkYXB0ZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZhZGFwdGVyLT5ub2RlLCAmYWRhcHRlcl9saXN0KTsKKwltdXRleF91bmxvY2soJmFkYXB0ZXJfbGlzdF9sb2NrKTsKICAgICAgICAgcmV0dXJuOwogCiBFUlJPUjE6CkBAIC0yNDEsMTEgKzI0NSwxMSBAQAogCiBzdGF0aWMgdm9pZCBpMmNfcGFycG9ydF9kZXRhY2ggKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQogewotCXN0cnVjdCBpMmNfcGFyICphZGFwdGVyLCAqcHJldjsKKwlzdHJ1Y3QgaTJjX3BhciAqYWRhcHRlciwgKl9uOwogCiAJLyogV2FsayB0aGUgbGlzdCAqLwotCWZvciAocHJldiA9IE5VTEwsIGFkYXB0ZXIgPSBhZGFwdGVyX2xpc3Q7IGFkYXB0ZXI7Ci0JICAgICBwcmV2ID0gYWRhcHRlciwgYWRhcHRlciA9IGFkYXB0ZXItPm5leHQpIHsKKwltdXRleF9sb2NrKCZhZGFwdGVyX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFkYXB0ZXIsIF9uLCAmYWRhcHRlcl9saXN0LCBub2RlKSB7CiAJCWlmIChhZGFwdGVyLT5wZGV2LT5wb3J0ID09IHBvcnQpIHsKIAkJCWlmIChhZGFwdGVyLT5hcmEpIHsKIAkJCQlwYXJwb3J0X2Rpc2FibGVfaXJxKHBvcnQpOwpAQCAtMjU5LDE0ICsyNjMsMTEgQEAKIAkJCQkKIAkJCXBhcnBvcnRfcmVsZWFzZShhZGFwdGVyLT5wZGV2KTsKIAkJCXBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UoYWRhcHRlci0+cGRldik7Ci0JCQlpZiAocHJldikKLQkJCQlwcmV2LT5uZXh0ID0gYWRhcHRlci0+bmV4dDsKLQkJCWVsc2UKLQkJCQlhZGFwdGVyX2xpc3QgPSBhZGFwdGVyLT5uZXh0OworCQkJbGlzdF9kZWwoJmFkYXB0ZXItPm5vZGUpOwogCQkJa2ZyZWUoYWRhcHRlcik7Ci0JCQlyZXR1cm47CiAJCX0KIAl9CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyX2xpc3RfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFycG9ydF9kcml2ZXIgaTJjX3BhcnBvcnRfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKaW5kZXggYTk3ZTNmZS4uMDRiZTlmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCkBAIC02NSw3ICs2NSw3IEBACiAJCWppZmZpZXMsIGV4cGlyZXMpOwogCiAJdGltZXItPmV4cGlyZXMgPSBqaWZmaWVzICsgZXhwaXJlczsKLQl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKSZhbGdfZGF0YTsKKwl0aW1lci0+ZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFsZ19kYXRhOwogCiAJYWRkX3RpbWVyKHRpbWVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggZmQxZTExNy4uYTVlYzVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTE3ODIsNyArMTc4Miw2IEBACiAJaWRlX2NkX3JlYWRfdG9jKGRyaXZlLCAmc2Vuc2UpOwogCWctPmZvcHMgPSAmaWRlY2Rfb3BzOwogCWctPmZsYWdzIHw9IEdFTkhEX0ZMX1JFTU9WQUJMRTsKLQlnLT5ldmVudHMgPSBESVNLX0VWRU5UX01FRElBX0NIQU5HRTsKIAlhZGRfZGlzayhnKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkX2lvY3RsLmMgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwppbmRleCAyYTZiYzUwLi4wMmNhYTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtY2RfaW9jdGwuYwpAQCAtNzksNiArNzksMTIgQEAKIAlyZXR1cm4gQ0RTX0RSSVZFX05PVF9SRUFEWTsKIH0KIAorLyoKKyAqIGlkZS1jZCBhbHdheXMgZ2VuZXJhdGVzIG1lZGlhIGNoYW5nZWQgZXZlbnQgaWYgbWVkaWEgaXMgbWlzc2luZywgd2hpY2gKKyAqIG1ha2VzIGl0IGltcG9zc2libGUgdG8gdXNlIGZvciBwcm9wZXIgZXZlbnQgcmVwb3J0aW5nLCBzbyBkaXNrLT5ldmVudHMKKyAqIGlzIGNsZWFyZWQgdG8gMCBhbmQgdGhlIGZvbGxvd2luZyBmdW5jdGlvbiBpcyB1c2VkIG9ubHkgdG8gdHJpZ2dlcgorICogcmV2YWxpZGF0aW9uIGFuZCBuZXZlciBwcm9wYWdhdGVkIHRvIHVzZXJsYW5kLgorICovCiB1bnNpZ25lZCBpbnQgaWRlX2Nkcm9tX2NoZWNrX2V2ZW50c19yZWFsKHN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqY2RpLAogCQkJCQkgdW5zaWduZWQgaW50IGNsZWFyaW5nLCBpbnQgc2xvdF9ucikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKaW5kZXggYzRmZmQ0OC4uNzBlYTg3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWdkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdkLmMKQEAgLTI5OCw2ICsyOTgsMTIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIGlzIHVzZWQgdG8gZm9yY2UgcmV2YWxpZGF0aW9uIG9uIHRoZSBmaXJzdCBvcGVuIG9uCisJICogcmVtb3ZlYWJsZSBkZXZpY2VzLCBhbmQgbmV2ZXIgZ2V0cyByZXBvcnRlZCB0byB1c2VybGFuZCBhcworCSAqIGdlbmhkLT5ldmVudHMgaXMgMC4gIFRoaXMgaXMgaW50ZW5kZWQgYXMgcmVtb3ZlYWJsZSBpZGUgZGlzaworCSAqIGNhbid0IHJlYWxseSBkZXRlY3QgTUVESUFfQ0hBTkdFIGV2ZW50cy4KKwkgKi8KIAlyZXQgPSBkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CiAJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX01FRElBX0NIQU5HRUQ7CiAKQEAgLTQxMyw3ICs0MTksNiBAQAogCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1JFTU9WQUJMRSkKIAkJZy0+ZmxhZ3MgPSBHRU5IRF9GTF9SRU1PVkFCTEU7CiAJZy0+Zm9wcyA9ICZpZGVfZ2Rfb3BzOwotCWctPmV2ZW50cyA9IERJU0tfRVZFTlRfTUVESUFfQ0hBTkdFOwogCWFkZF9kaXNrKGcpOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jCmluZGV4IDVlZDlkMjUuLjk5ZGRlODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtYS5jCkBAIC0xNDgsNiArMTQ4LDcgQEAKIAl1MzIJCQlxcF9udW07CiAJdTgJCQlzcnE7CiAJdTgJCQl0b3M7CisJdTgJCQlyZXVzZWFkZHI7CiB9OwogCiBzdHJ1Y3QgY21hX211bHRpY2FzdCB7CkBAIC03MTIsNiArNzEzLDIxIEBACiAJcmV0dXJuIGNtYV96ZXJvX2FkZHIoYWRkcikgfHwgY21hX2xvb3BiYWNrX2FkZHIoYWRkcik7CiB9CiAKK3N0YXRpYyBpbnQgY21hX2FkZHJfY21wKHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCkKK3sKKwlpZiAoc3JjLT5zYV9mYW1pbHkgIT0gZHN0LT5zYV9mYW1pbHkpCisJCXJldHVybiAtMTsKKworCXN3aXRjaCAoc3JjLT5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCXJldHVybiAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBzcmMpLT5zaW5fYWRkci5zX2FkZHIgIT0KKwkJICAgICAgICgoc3RydWN0IHNvY2thZGRyX2luICopIGRzdCktPnNpbl9hZGRyLnNfYWRkcjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gaXB2Nl9hZGRyX2NtcCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIHNyYyktPnNpbjZfYWRkciwKKwkJCQkgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZHN0KS0+c2luNl9hZGRyKTsKKwl9Cit9CisKIHN0YXRpYyBpbmxpbmUgX19iZTE2IGNtYV9wb3J0KHN0cnVjdCBzb2NrYWRkciAqYWRkcikKIHsKIAlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpCkBAIC0xNTY0LDUwICsxNTgwLDYgQEAKIAltdXRleF91bmxvY2soJmxvY2spOwogfQogCi1pbnQgcmRtYV9saXN0ZW4oc3RydWN0IHJkbWFfY21faWQgKmlkLCBpbnQgYmFja2xvZykKLXsKLQlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OwotCWludCByZXQ7Ci0KLQlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7Ci0JaWYgKGlkX3ByaXYtPnN0YXRlID09IENNQV9JRExFKSB7Ci0JCSgoc3RydWN0IHNvY2thZGRyICopICZpZC0+cm91dGUuYWRkci5zcmNfYWRkciktPnNhX2ZhbWlseSA9IEFGX0lORVQ7Ci0JCXJldCA9IHJkbWFfYmluZF9hZGRyKGlkLCAoc3RydWN0IHNvY2thZGRyICopICZpZC0+cm91dGUuYWRkci5zcmNfYWRkcik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCX0KLQotCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQUREUl9CT1VORCwgQ01BX0xJU1RFTikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWRfcHJpdi0+YmFja2xvZyA9IGJhY2tsb2c7Ci0JaWYgKGlkLT5kZXZpY2UpIHsKLQkJc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7Ci0JCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6Ci0JCQlyZXQgPSBjbWFfaWJfbGlzdGVuKGlkX3ByaXYpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGVycjsKLQkJCWJyZWFrOwotCQljYXNlIFJETUFfVFJBTlNQT1JUX0lXQVJQOgotCQkJcmV0ID0gY21hX2l3X2xpc3RlbihpZF9wcml2LCBiYWNrbG9nKTsKLQkJCWlmIChyZXQpCi0JCQkJZ290byBlcnI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldCA9IC1FTk9TWVM7Ci0JCQlnb3RvIGVycjsKLQkJfQotCX0gZWxzZQotCQljbWFfbGlzdGVuX29uX2FsbChpZF9wcml2KTsKLQotCXJldHVybiAwOwotZXJyOgotCWlkX3ByaXYtPmJhY2tsb2cgPSAwOwotCWNtYV9jb21wX2V4Y2goaWRfcHJpdiwgQ01BX0xJU1RFTiwgQ01BX0FERFJfQk9VTkQpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHJkbWFfbGlzdGVuKTsKLQogdm9pZCByZG1hX3NldF9zZXJ2aWNlX3R5cGUoc3RydWN0IHJkbWFfY21faWQgKmlkLCBpbnQgdG9zKQogewogCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CkBAIC0yMDkwLDYgKzIwNjIsMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0wocmRtYV9yZXNvbHZlX2FkZHIpOwogCitpbnQgcmRtYV9zZXRfcmV1c2VhZGRyKHN0cnVjdCByZG1hX2NtX2lkICppZCwgaW50IHJldXNlKQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJaWRfcHJpdiA9IGNvbnRhaW5lcl9vZihpZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpZF9wcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKGlkX3ByaXYtPnN0YXRlID09IENNQV9JRExFKSB7CisJCWlkX3ByaXYtPnJldXNlYWRkciA9IHJldXNlOworCQlyZXQgPSAwOworCX0gZWxzZSB7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChyZG1hX3NldF9yZXVzZWFkZHIpOworCiBzdGF0aWMgdm9pZCBjbWFfYmluZF9wb3J0KHN0cnVjdCByZG1hX2JpbmRfbGlzdCAqYmluZF9saXN0LAogCQkJICBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQogewpAQCAtMjE2NSw0MSArMjE1Niw3MSBAQAogCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIH0KIAotc3RhdGljIGludCBjbWFfdXNlX3BvcnQoc3RydWN0IGlkciAqcHMsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCisvKgorICogQ2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIHBvcnQgaXMgYXZhaWxhYmxlLiAgVGhpcyBpcyBjYWxsZWQgd2hlbiB0cnlpbmcgdG8KKyAqIGJpbmQgdG8gYSBzcGVjaWZpYyBwb3J0LCBvciB3aGVuIHRyeWluZyB0byBsaXN0ZW4gb24gYSBib3VuZCBwb3J0LiAgSW4KKyAqIHRoZSBsYXR0ZXIgY2FzZSwgdGhlIHByb3ZpZGVkIGlkX3ByaXYgbWF5IGFscmVhZHkgYmUgb24gdGhlIGJpbmRfbGlzdCwgYnV0CisgKiB3ZSBzdGlsbCBuZWVkIHRvIGNoZWNrIHRoYXQgaXQncyBva2F5IHRvIHN0YXJ0IGxpc3RlbmluZy4KKyAqLworc3RhdGljIGludCBjbWFfY2hlY2tfcG9ydChzdHJ1Y3QgcmRtYV9iaW5kX2xpc3QgKmJpbmRfbGlzdCwKKwkJCSAgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwgdWludDhfdCByZXVzZWFkZHIpCiB7CiAJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqY3VyX2lkOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAqY3VyX3NpbjsKLQlzdHJ1Y3QgcmRtYV9iaW5kX2xpc3QgKmJpbmRfbGlzdDsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsICpjdXJfYWRkcjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQl1bnNpZ25lZCBzaG9ydCBzbnVtOwogCi0Jc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKLQlzbnVtID0gbnRvaHMoc2luLT5zaW5fcG9ydCk7CisJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHI7CisJaWYgKGNtYV9hbnlfYWRkcihhZGRyKSAmJiAhcmV1c2VhZGRyKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShjdXJfaWQsIG5vZGUsICZiaW5kX2xpc3QtPm93bmVycywgbm9kZSkgeworCQlpZiAoaWRfcHJpdiA9PSBjdXJfaWQpCisJCQljb250aW51ZTsKKworCQlpZiAoKGN1cl9pZC0+c3RhdGUgPT0gQ01BX0xJU1RFTikgfHwKKwkJICAgICFyZXVzZWFkZHIgfHwgIWN1cl9pZC0+cmV1c2VhZGRyKSB7CisJCQljdXJfYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmN1cl9pZC0+aWQucm91dGUuYWRkci5zcmNfYWRkcjsKKwkJCWlmIChjbWFfYW55X2FkZHIoY3VyX2FkZHIpKQorCQkJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKworCQkJaWYgKCFjbWFfYWRkcl9jbXAoYWRkciwgY3VyX2FkZHIpKQorCQkJCXJldHVybiAtRUFERFJJTlVTRTsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjbWFfdXNlX3BvcnQoc3RydWN0IGlkciAqcHMsIHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCit7CisJc3RydWN0IHJkbWFfYmluZF9saXN0ICpiaW5kX2xpc3Q7CisJdW5zaWduZWQgc2hvcnQgc251bTsKKwlpbnQgcmV0OworCisJc251bSA9IG50b2hzKGNtYV9wb3J0KChzdHJ1Y3Qgc29ja2FkZHIgKikgJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIpKTsKIAlpZiAoc251bSA8IFBST1RfU09DSyAmJiAhY2FwYWJsZShDQVBfTkVUX0JJTkRfU0VSVklDRSkpCiAJCXJldHVybiAtRUFDQ0VTOwogCiAJYmluZF9saXN0ID0gaWRyX2ZpbmQocHMsIHNudW0pOwotCWlmICghYmluZF9saXN0KQotCQlyZXR1cm4gY21hX2FsbG9jX3BvcnQocHMsIGlkX3ByaXYsIHNudW0pOwotCi0JLyoKLQkgKiBXZSBkb24ndCBzdXBwb3J0IGJpbmRpbmcgdG8gYW55IGFkZHJlc3MgaWYgYW55b25lIGlzIGJvdW5kIHRvCi0JICogYSBzcGVjaWZpYyBhZGRyZXNzIG9uIHRoZSBzYW1lIHBvcnQuCi0JICovCi0JaWYgKGNtYV9hbnlfYWRkcigoc3RydWN0IHNvY2thZGRyICopICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyKSkKLQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnkoY3VyX2lkLCBub2RlLCAmYmluZF9saXN0LT5vd25lcnMsIG5vZGUpIHsKLQkJaWYgKGNtYV9hbnlfYWRkcigoc3RydWN0IHNvY2thZGRyICopICZjdXJfaWQtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHIpKQotCQkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCi0JCWN1cl9zaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZjdXJfaWQtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHI7Ci0JCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBjdXJfc2luLT5zaW5fYWRkci5zX2FkZHIpCi0JCQlyZXR1cm4gLUVBRERSSU5VU0U7CisJaWYgKCFiaW5kX2xpc3QpIHsKKwkJcmV0ID0gY21hX2FsbG9jX3BvcnQocHMsIGlkX3ByaXYsIHNudW0pOworCX0gZWxzZSB7CisJCXJldCA9IGNtYV9jaGVja19wb3J0KGJpbmRfbGlzdCwgaWRfcHJpdiwgaWRfcHJpdi0+cmV1c2VhZGRyKTsKKwkJaWYgKCFyZXQpCisJCQljbWFfYmluZF9wb3J0KGJpbmRfbGlzdCwgaWRfcHJpdik7CiAJfQorCXJldHVybiByZXQ7Cit9CiAKLQljbWFfYmluZF9wb3J0KGJpbmRfbGlzdCwgaWRfcHJpdik7Ci0JcmV0dXJuIDA7CitzdGF0aWMgaW50IGNtYV9iaW5kX2xpc3RlbihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQoreworCXN0cnVjdCByZG1hX2JpbmRfbGlzdCAqYmluZF9saXN0ID0gaWRfcHJpdi0+YmluZF9saXN0OworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmbG9jayk7CisJaWYgKGJpbmRfbGlzdC0+b3duZXJzLmZpcnN0LT5uZXh0KQorCQlyZXQgPSBjbWFfY2hlY2tfcG9ydChiaW5kX2xpc3QsIGlkX3ByaXYsIDApOworCW11dGV4X3VubG9jaygmbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBjbWFfZ2V0X3BvcnQoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKQEAgLTIyNTMsNiArMjI3NCw1NiBAQAogCXJldHVybiAwOwogfQogCitpbnQgcmRtYV9saXN0ZW4oc3RydWN0IHJkbWFfY21faWQgKmlkLCBpbnQgYmFja2xvZykKK3sKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OworCWludCByZXQ7CisKKwlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CisJaWYgKGlkX3ByaXYtPnN0YXRlID09IENNQV9JRExFKSB7CisJCSgoc3RydWN0IHNvY2thZGRyICopICZpZC0+cm91dGUuYWRkci5zcmNfYWRkciktPnNhX2ZhbWlseSA9IEFGX0lORVQ7CisJCXJldCA9IHJkbWFfYmluZF9hZGRyKGlkLCAoc3RydWN0IHNvY2thZGRyICopICZpZC0+cm91dGUuYWRkci5zcmNfYWRkcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQUREUl9CT1VORCwgQ01BX0xJU1RFTikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlkX3ByaXYtPnJldXNlYWRkcikgeworCQlyZXQgPSBjbWFfYmluZF9saXN0ZW4oaWRfcHJpdik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKKwl9CisKKwlpZF9wcml2LT5iYWNrbG9nID0gYmFja2xvZzsKKwlpZiAoaWQtPmRldmljZSkgeworCQlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkpIHsKKwkJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKKwkJCXJldCA9IGNtYV9pYl9saXN0ZW4oaWRfcHJpdik7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQkJYnJlYWs7CisJCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCQlyZXQgPSBjbWFfaXdfbGlzdGVuKGlkX3ByaXYsIGJhY2tsb2cpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGVycjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0ID0gLUVOT1NZUzsKKwkJCWdvdG8gZXJyOworCQl9CisJfSBlbHNlCisJCWNtYV9saXN0ZW5fb25fYWxsKGlkX3ByaXYpOworCisJcmV0dXJuIDA7CitlcnI6CisJaWRfcHJpdi0+YmFja2xvZyA9IDA7CisJY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfTElTVEVOLCBDTUFfQUREUl9CT1VORCk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocmRtYV9saXN0ZW4pOworCiBpbnQgcmRtYV9iaW5kX2FkZHIoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCiB7CiAJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYwppbmRleCAyYTFlOWFlLi5hOWMwNDIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCkBAIC03MjUsNyArNzI1LDcgQEAKIAkgKi8KIAljbGVhcl9iaXQoSVdDTV9GX0NPTk5FQ1RfV0FJVCwgJmNtX2lkX3ByaXYtPmZsYWdzKTsKIAlCVUdfT04oY21faWRfcHJpdi0+c3RhdGUgIT0gSVdfQ01fU1RBVEVfQ09OTl9TRU5UKTsKLQlpZiAoaXdfZXZlbnQtPnN0YXR1cyA9PSBJV19DTV9FVkVOVF9TVEFUVVNfQUNDRVBURUQpIHsKKwlpZiAoaXdfZXZlbnQtPnN0YXR1cyA9PSAwKSB7CiAJCWNtX2lkX3ByaXYtPmlkLmxvY2FsX2FkZHIgPSBpd19ldmVudC0+bG9jYWxfYWRkcjsKIAkJY21faWRfcHJpdi0+aWQucmVtb3RlX2FkZHIgPSBpd19ldmVudC0+cmVtb3RlX2FkZHI7CiAJCWNtX2lkX3ByaXYtPnN0YXRlID0gSVdfQ01fU1RBVEVfRVNUQUJMSVNIRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y21hLmMKaW5kZXggZWMxZTlkYS4uYjNmYTc5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtYS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbWEuYwpAQCAtODgzLDYgKzg4MywxMyBAQAogCQl9CiAJCXJkbWFfc2V0X3NlcnZpY2VfdHlwZShjdHgtPmNtX2lkLCAqKCh1OCAqKSBvcHR2YWwpKTsKIAkJYnJlYWs7CisJY2FzZSBSRE1BX09QVElPTl9JRF9SRVVTRUFERFI6CisJCWlmIChvcHRsZW4gIT0gc2l6ZW9mKGludCkpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSByZG1hX3NldF9yZXVzZWFkZHIoY3R4LT5jbV9pZCwgKigoaW50ICopIG9wdHZhbCkgPyAxIDogMCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9TWVM7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwppbmRleCA5ZDhkY2ZhLi5kN2VlNzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvY20uYwpAQCAtMTE5OCw5ICsxMTk4LDcgQEAKIAl9CiAJUERCRygiJXMgZXAgJXAgc3RhdHVzICVkIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXAsCiAJICAgICBycGwtPnN0YXR1cywgc3RhdHVzMmVycm5vKHJwbC0+c3RhdHVzKSk7Ci0JZXAtPmNvbS53cl93YWl0LnJldCA9IHN0YXR1czJlcnJubyhycGwtPnN0YXR1cyk7Ci0JZXAtPmNvbS53cl93YWl0LmRvbmUgPSAxOwotCXdha2VfdXAoJmVwLT5jb20ud3Jfd2FpdC53YWl0KTsKKwljNGl3X3dha2VfdXAoJmVwLT5jb20ud3Jfd2FpdCwgc3RhdHVzMmVycm5vKHJwbC0+c3RhdHVzKSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMzQsOSArMTIzMiw3IEBACiAJc3RydWN0IGM0aXdfbGlzdGVuX2VwICplcCA9IGxvb2t1cF9zdGlkKHQsIHN0aWQpOwogCiAJUERCRygiJXMgZXAgJXBcbiIsIF9fZnVuY19fLCBlcCk7Ci0JZXAtPmNvbS53cl93YWl0LnJldCA9IHN0YXR1czJlcnJubyhycGwtPnN0YXR1cyk7Ci0JZXAtPmNvbS53cl93YWl0LmRvbmUgPSAxOwotCXdha2VfdXAoJmVwLT5jb20ud3Jfd2FpdC53YWl0KTsKKwljNGl3X3dha2VfdXAoJmVwLT5jb20ud3Jfd2FpdCwgc3RhdHVzMmVycm5vKHJwbC0+c3RhdHVzKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0NjYsNyArMTQ2Miw3IEBACiAJc3RydWN0IGM0aXdfcXBfYXR0cmlidXRlcyBhdHRyczsKIAlpbnQgZGlzY29ubmVjdCA9IDE7CiAJaW50IHJlbGVhc2UgPSAwOwotCWludCBjbG9zaW5nID0gMDsKKwlpbnQgYWJvcnQgPSAwOwogCXN0cnVjdCB0aWRfaW5mbyAqdCA9IGRldi0+cmRldi5sbGRpLnRpZHM7CiAJdW5zaWduZWQgaW50IHRpZCA9IEdFVF9USUQoaGRyKTsKIApAQCAtMTQ5MiwyMyArMTQ4OCwyMiBAQAogCQkgKiBpbiByZG1hIGNvbm5lY3Rpb24gbWlncmF0aW9uIChzZWUgYzRpd19hY2NlcHRfY3IoKSkuCiAJCSAqLwogCQlfX3N0YXRlX3NldCgmZXAtPmNvbSwgQ0xPU0lORyk7Ci0JCWVwLT5jb20ud3Jfd2FpdC5kb25lID0gMTsKLQkJZXAtPmNvbS53cl93YWl0LnJldCA9IC1FQ09OTlJFU0VUOwogCQlQREJHKCJ3YWtpbmcgdXAgZXAgJXAgdGlkICV1XG4iLCBlcCwgZXAtPmh3dGlkKTsKLQkJd2FrZV91cCgmZXAtPmNvbS53cl93YWl0LndhaXQpOworCQljNGl3X3dha2VfdXAoJmVwLT5jb20ud3Jfd2FpdCwgLUVDT05OUkVTRVQpOwogCQlicmVhazsKIAljYXNlIE1QQV9SRVBfU0VOVDoKIAkJX19zdGF0ZV9zZXQoJmVwLT5jb20sIENMT1NJTkcpOwotCQllcC0+Y29tLndyX3dhaXQuZG9uZSA9IDE7Ci0JCWVwLT5jb20ud3Jfd2FpdC5yZXQgPSAtRUNPTk5SRVNFVDsKIAkJUERCRygid2FraW5nIHVwIGVwICVwIHRpZCAldVxuIiwgZXAsIGVwLT5od3RpZCk7Ci0JCXdha2VfdXAoJmVwLT5jb20ud3Jfd2FpdC53YWl0KTsKKwkJYzRpd193YWtlX3VwKCZlcC0+Y29tLndyX3dhaXQsIC1FQ09OTlJFU0VUKTsKIAkJYnJlYWs7CiAJY2FzZSBGUERVX01PREU6CiAJCXN0YXJ0X2VwX3RpbWVyKGVwKTsKIAkJX19zdGF0ZV9zZXQoJmVwLT5jb20sIENMT1NJTkcpOwotCQljbG9zaW5nID0gMTsKKwkJYXR0cnMubmV4dF9zdGF0ZSA9IEM0SVdfUVBfU1RBVEVfQ0xPU0lORzsKKwkJYWJvcnQgPSBjNGl3X21vZGlmeV9xcChlcC0+Y29tLnFwLT5yaHAsIGVwLT5jb20ucXAsCisJCQkJICAgICAgIEM0SVdfUVBfQVRUUl9ORVhUX1NUQVRFLCAmYXR0cnMsIDEpOwogCQlwZWVyX2Nsb3NlX3VwY2FsbChlcCk7CisJCWRpc2Nvbm5lY3QgPSAxOwogCQlicmVhazsKIAljYXNlIEFCT1JUSU5HOgogCQlkaXNjb25uZWN0ID0gMDsKQEAgLTE1MzYsMTEgKzE1MzEsNiBAQAogCQlCVUdfT04oMSk7CiAJfQogCW11dGV4X3VubG9jaygmZXAtPmNvbS5tdXRleCk7Ci0JaWYgKGNsb3NpbmcpIHsKLQkJYXR0cnMubmV4dF9zdGF0ZSA9IEM0SVdfUVBfU1RBVEVfQ0xPU0lORzsKLQkJYzRpd19tb2RpZnlfcXAoZXAtPmNvbS5xcC0+cmhwLCBlcC0+Y29tLnFwLAotCQkJICAgICAgIEM0SVdfUVBfQVRUUl9ORVhUX1NUQVRFLCAmYXR0cnMsIDEpOwotCX0KIAlpZiAoZGlzY29ubmVjdCkKIAkJYzRpd19lcF9kaXNjb25uZWN0KGVwLCAwLCBHRlBfS0VSTkVMKTsKIAlpZiAocmVsZWFzZSkKQEAgLTE1ODEsOSArMTU3MSw3IEBACiAJLyoKIAkgKiBXYWtlIHVwIGFueSB0aHJlYWRzIGluIHJkbWFfaW5pdCgpIG9yIHJkbWFfZmluaSgpLgogCSAqLwotCWVwLT5jb20ud3Jfd2FpdC5kb25lID0gMTsKLQllcC0+Y29tLndyX3dhaXQucmV0ID0gLUVDT05OUkVTRVQ7Ci0Jd2FrZV91cCgmZXAtPmNvbS53cl93YWl0LndhaXQpOworCWM0aXdfd2FrZV91cCgmZXAtPmNvbS53cl93YWl0LCAtRUNPTk5SRVNFVCk7CiAKIAltdXRleF9sb2NrKCZlcC0+Y29tLm11dGV4KTsKIAlzd2l0Y2ggKGVwLT5jb20uc3RhdGUpIHsKQEAgLTE3MTAsMTQgKzE2OTgsMTQgQEAKIAllcCA9IGxvb2t1cF90aWQodCwgdGlkKTsKIAlCVUdfT04oIWVwKTsKIAotCWlmIChlcC0+Y29tLnFwKSB7CisJaWYgKGVwICYmIGVwLT5jb20ucXApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBNT0QgIlRFUk0gcmVjZWl2ZWQgdGlkICV1IHFwaWQgJXVcbiIsIHRpZCwKIAkJICAgICAgIGVwLT5jb20ucXAtPndxLnNxLnFpZCk7CiAJCWF0dHJzLm5leHRfc3RhdGUgPSBDNElXX1FQX1NUQVRFX1RFUk1JTkFURTsKIAkJYzRpd19tb2RpZnlfcXAoZXAtPmNvbS5xcC0+cmhwLCBlcC0+Y29tLnFwLAogCQkJICAgICAgIEM0SVdfUVBfQVRUUl9ORVhUX1NUQVRFLCAmYXR0cnMsIDEpOwogCX0gZWxzZQotCQlwcmludGsoS0VSTl9XQVJOSU5HIE1PRCAiVEVSTSByZWNlaXZlZCB0aWQgJXUgbm8gcXBcbiIsIHRpZCk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgTU9EICJURVJNIHJlY2VpdmVkIHRpZCAldSBubyBlcC9xcFxuIiwgdGlkKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjI5NiwxNCArMjI4NCw4IEBACiAJCXJldCA9IChpbnQpKChiZTY0X3RvX2NwdShycGwtPmRhdGFbMF0pID4+IDgpICYgMHhmZik7CiAJCXdyX3dhaXRwID0gKHN0cnVjdCBjNGl3X3dyX3dhaXQgKikoX19mb3JjZSB1bnNpZ25lZCBsb25nKSBycGwtPmRhdGFbMV07CiAJCVBEQkcoIiVzIHdyX3dhaXRwICVwIHJldCAldVxuIiwgX19mdW5jX18sIHdyX3dhaXRwLCByZXQpOwotCQlpZiAod3Jfd2FpdHApIHsKLQkJCWlmIChyZXQpCi0JCQkJd3Jfd2FpdHAtPnJldCA9IC1yZXQ7Ci0JCQllbHNlCi0JCQkJd3Jfd2FpdHAtPnJldCA9IDA7Ci0JCQl3cl93YWl0cC0+ZG9uZSA9IDE7Ci0JCQl3YWtlX3VwKCZ3cl93YWl0cC0+d2FpdCk7Ci0JCX0KKwkJaWYgKHdyX3dhaXRwKQorCQkJYzRpd193YWtlX3VwKHdyX3dhaXRwLCByZXQgPyAtcmV0IDogMCk7CiAJCWtmcmVlX3NrYihza2IpOwogCQlicmVhazsKIAljYXNlIDI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvZGV2aWNlLmMKaW5kZXggZTI5MTcyYy4uNDBhMTNjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2RldmljZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9kZXZpY2UuYwpAQCAtNDQsNyArNDQsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCi1zdGF0aWMgTElTVF9IRUFEKGRldl9saXN0KTsKK3N0YXRpYyBMSVNUX0hFQUQodWxkX2N0eF9saXN0KTsKIHN0YXRpYyBERUZJTkVfTVVURVgoZGV2X211dGV4KTsKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmM0aXdfZGVidWdmc19yb290OwpAQCAtMzcwLDE4ICszNzAsMjMgQEAKIAljNGl3X2Rlc3Ryb3lfcmVzb3VyY2UoJnJkZXYtPnJlc291cmNlKTsKIH0KIAotc3RhdGljIHZvaWQgYzRpd19yZW1vdmUoc3RydWN0IGM0aXdfZGV2ICpkZXYpCitzdHJ1Y3QgdWxkX2N0eCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKwlzdHJ1Y3QgY3hnYjRfbGxkX2luZm8gbGxkaTsKKwlzdHJ1Y3QgYzRpd19kZXYgKmRldjsKK307CisKK3N0YXRpYyB2b2lkIGM0aXdfcmVtb3ZlKHN0cnVjdCB1bGRfY3R4ICpjdHgpCiB7Ci0JUERCRygiJXMgYzRpd19kZXYgJXBcbiIsIF9fZnVuY19fLCAgZGV2KTsKLQlsaXN0X2RlbCgmZGV2LT5lbnRyeSk7Ci0JaWYgKGRldi0+cmVnaXN0ZXJlZCkKLQkJYzRpd191bnJlZ2lzdGVyX2RldmljZShkZXYpOwotCWM0aXdfcmRldl9jbG9zZSgmZGV2LT5yZGV2KTsKLQlpZHJfZGVzdHJveSgmZGV2LT5jcWlkcik7Ci0JaWRyX2Rlc3Ryb3koJmRldi0+cXBpZHIpOwotCWlkcl9kZXN0cm95KCZkZXYtPm1taWRyKTsKLQlpb3VubWFwKGRldi0+cmRldi5vY19td19rdmEpOwotCWliX2RlYWxsb2NfZGV2aWNlKCZkZXYtPmliZGV2KTsKKwlQREJHKCIlcyBjNGl3X2RldiAlcFxuIiwgX19mdW5jX18sICBjdHgtPmRldik7CisJYzRpd191bnJlZ2lzdGVyX2RldmljZShjdHgtPmRldik7CisJYzRpd19yZGV2X2Nsb3NlKCZjdHgtPmRldi0+cmRldik7CisJaWRyX2Rlc3Ryb3koJmN0eC0+ZGV2LT5jcWlkcik7CisJaWRyX2Rlc3Ryb3koJmN0eC0+ZGV2LT5xcGlkcik7CisJaWRyX2Rlc3Ryb3koJmN0eC0+ZGV2LT5tbWlkcik7CisJaW91bm1hcChjdHgtPmRldi0+cmRldi5vY19td19rdmEpOworCWliX2RlYWxsb2NfZGV2aWNlKCZjdHgtPmRldi0+aWJkZXYpOworCWN0eC0+ZGV2ID0gTlVMTDsKIH0KIAogc3RhdGljIHN0cnVjdCBjNGl3X2RldiAqYzRpd19hbGxvYyhjb25zdCBzdHJ1Y3QgY3hnYjRfbGxkX2luZm8gKmluZm9wKQpAQCAtMzkyLDcgKzM5Nyw3IEBACiAJZGV2cCA9IChzdHJ1Y3QgYzRpd19kZXYgKilpYl9hbGxvY19kZXZpY2Uoc2l6ZW9mKCpkZXZwKSk7CiAJaWYgKCFkZXZwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBNT0QgIkNhbm5vdCBhbGxvY2F0ZSBpYiBkZXZpY2VcbiIpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCWRldnAtPnJkZXYubGxkaSA9ICppbmZvcDsKIApAQCAtNDAyLDI3ICs0MDcsMjMgQEAKIAlkZXZwLT5yZGV2Lm9jX213X2t2YSA9IGlvcmVtYXBfd2MoZGV2cC0+cmRldi5vY19td19wYSwKIAkJCQkJICAgICAgIGRldnAtPnJkZXYubGxkaS52ci0+b2NxLnNpemUpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBNT0QgIm9jcSBtZW1vcnk6ICIKKwlQREJHKEtFUk5fSU5GTyBNT0QgIm9jcSBtZW1vcnk6ICIKIAkgICAgICAgImh3X3N0YXJ0IDB4JXggc2l6ZSAldSBtd19wYSAweCVseCBtd19rdmEgJXBcbiIsCiAJICAgICAgIGRldnAtPnJkZXYubGxkaS52ci0+b2NxLnN0YXJ0LCBkZXZwLT5yZGV2LmxsZGkudnItPm9jcS5zaXplLAogCSAgICAgICBkZXZwLT5yZGV2Lm9jX213X3BhLCBkZXZwLT5yZGV2Lm9jX213X2t2YSk7CiAKLQltdXRleF9sb2NrKCZkZXZfbXV0ZXgpOwotCiAJcmV0ID0gYzRpd19yZGV2X29wZW4oJmRldnAtPnJkZXYpOwogCWlmIChyZXQpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkZXZfbXV0ZXgpOwogCQlwcmludGsoS0VSTl9FUlIgTU9EICJVbmFibGUgdG8gb3BlbiBDWElPIHJkZXYgZXJyICVkXG4iLCByZXQpOwogCQlpYl9kZWFsbG9jX2RldmljZSgmZGV2cC0+aWJkZXYpOwotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKIAl9CiAKIAlpZHJfaW5pdCgmZGV2cC0+Y3FpZHIpOwogCWlkcl9pbml0KCZkZXZwLT5xcGlkcik7CiAJaWRyX2luaXQoJmRldnAtPm1taWRyKTsKIAlzcGluX2xvY2tfaW5pdCgmZGV2cC0+bG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmZGV2cC0+ZW50cnksICZkZXZfbGlzdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZfbXV0ZXgpOwogCiAJaWYgKGM0aXdfZGVidWdmc19yb290KSB7CiAJCWRldnAtPmRlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcigKQEAgLTQzNSw3ICs0MzYsNyBAQAogCiBzdGF0aWMgdm9pZCAqYzRpd191bGRfYWRkKGNvbnN0IHN0cnVjdCBjeGdiNF9sbGRfaW5mbyAqaW5mb3ApCiB7Ci0Jc3RydWN0IGM0aXdfZGV2ICpkZXY7CisJc3RydWN0IHVsZF9jdHggKmN0eDsKIAlzdGF0aWMgaW50IHZlcnNfcHJpbnRlZDsKIAlpbnQgaTsKIApAQCAtNDQzLDI1ICs0NDQsMzMgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBNT0QgIkNoZWxzaW8gVDQgUkRNQSBEcml2ZXIgLSB2ZXJzaW9uICVzXG4iLAogCQkgICAgICAgRFJWX1ZFUlNJT04pOwogCi0JZGV2ID0gYzRpd19hbGxvYyhpbmZvcCk7Ci0JaWYgKCFkZXYpCisJY3R4ID0ga3phbGxvYyhzaXplb2YgKmN0eCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjdHgpIHsKKwkJY3R4ID0gRVJSX1BUUigtRU5PTUVNKTsKIAkJZ290byBvdXQ7CisJfQorCWN0eC0+bGxkaSA9ICppbmZvcDsKIAogCVBEQkcoIiVzIGZvdW5kIGRldmljZSAlcyBuY2hhbiAldSBucnhxICV1IG50eHEgJXUgbnBvcnRzICV1XG4iLAotCSAgICAgX19mdW5jX18sIHBjaV9uYW1lKGRldi0+cmRldi5sbGRpLnBkZXYpLAotCSAgICAgZGV2LT5yZGV2LmxsZGkubmNoYW4sIGRldi0+cmRldi5sbGRpLm5yeHEsCi0JICAgICBkZXYtPnJkZXYubGxkaS5udHhxLCBkZXYtPnJkZXYubGxkaS5ucG9ydHMpOworCSAgICAgX19mdW5jX18sIHBjaV9uYW1lKGN0eC0+bGxkaS5wZGV2KSwKKwkgICAgIGN0eC0+bGxkaS5uY2hhbiwgY3R4LT5sbGRpLm5yeHEsCisJICAgICBjdHgtPmxsZGkubnR4cSwgY3R4LT5sbGRpLm5wb3J0cyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5yZGV2LmxsZGkubnJ4cTsgaSsrKQotCQlQREJHKCJyeHFpZFsldV0gJXVcbiIsIGksIGRldi0+cmRldi5sbGRpLnJ4cV9pZHNbaV0pOworCW11dGV4X2xvY2soJmRldl9tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmY3R4LT5lbnRyeSwgJnVsZF9jdHhfbGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZkZXZfbXV0ZXgpOworCisJZm9yIChpID0gMDsgaSA8IGN0eC0+bGxkaS5ucnhxOyBpKyspCisJCVBEQkcoInJ4cWlkWyV1XSAldVxuIiwgaSwgY3R4LT5sbGRpLnJ4cV9pZHNbaV0pOwogb3V0OgotCXJldHVybiBkZXY7CisJcmV0dXJuIGN0eDsKIH0KIAogc3RhdGljIGludCBjNGl3X3VsZF9yeF9oYW5kbGVyKHZvaWQgKmhhbmRsZSwgY29uc3QgX19iZTY0ICpyc3AsCiAJCQljb25zdCBzdHJ1Y3QgcGt0X2dsICpnbCkKIHsKLQlzdHJ1Y3QgYzRpd19kZXYgKmRldiA9IGhhbmRsZTsKKwlzdHJ1Y3QgdWxkX2N0eCAqY3R4ID0gaGFuZGxlOworCXN0cnVjdCBjNGl3X2RldiAqZGV2ID0gY3R4LT5kZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAljb25zdCBzdHJ1Y3QgY3BsX2FjdF9lc3RhYmxpc2ggKnJwbDsKIAl1bnNpZ25lZCBpbnQgb3Bjb2RlOwpAQCAtNTAzLDQ3ICs1MTIsNDkgQEAKIAogc3RhdGljIGludCBjNGl3X3VsZF9zdGF0ZV9jaGFuZ2Uodm9pZCAqaGFuZGxlLCBlbnVtIGN4Z2I0X3N0YXRlIG5ld19zdGF0ZSkKIHsKLQlzdHJ1Y3QgYzRpd19kZXYgKmRldiA9IGhhbmRsZTsKKwlzdHJ1Y3QgdWxkX2N0eCAqY3R4ID0gaGFuZGxlOwogCiAJUERCRygiJXMgbmV3X3N0YXRlICV1XG4iLCBfX2Z1bmNfXywgbmV3X3N0YXRlKTsKIAlzd2l0Y2ggKG5ld19zdGF0ZSkgewogCWNhc2UgQ1hHQjRfU1RBVEVfVVA6Ci0JCXByaW50ayhLRVJOX0lORk8gTU9EICIlczogVXBcbiIsIHBjaV9uYW1lKGRldi0+cmRldi5sbGRpLnBkZXYpKTsKLQkJaWYgKCFkZXYtPnJlZ2lzdGVyZWQpIHsKLQkJCWludCByZXQ7Ci0JCQlyZXQgPSBjNGl3X3JlZ2lzdGVyX2RldmljZShkZXYpOwotCQkJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fSU5GTyBNT0QgIiVzOiBVcFxuIiwgcGNpX25hbWUoY3R4LT5sbGRpLnBkZXYpKTsKKwkJaWYgKCFjdHgtPmRldikgeworCQkJaW50IHJldCA9IDA7CisKKwkJCWN0eC0+ZGV2ID0gYzRpd19hbGxvYygmY3R4LT5sbGRpKTsKKwkJCWlmICghSVNfRVJSKGN0eC0+ZGV2KSkKKwkJCQlyZXQgPSBjNGl3X3JlZ2lzdGVyX2RldmljZShjdHgtPmRldik7CisJCQlpZiAoSVNfRVJSKGN0eC0+ZGV2KSB8fCByZXQpCiAJCQkJcHJpbnRrKEtFUk5fRVJSIE1PRAogCQkJCSAgICAgICAiJXM6IFJETUEgcmVnaXN0cmF0aW9uIGZhaWxlZDogJWRcbiIsCi0JCQkJICAgICAgIHBjaV9uYW1lKGRldi0+cmRldi5sbGRpLnBkZXYpLCByZXQpOworCQkJCSAgICAgICBwY2lfbmFtZShjdHgtPmxsZGkucGRldiksIHJldCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWEdCNF9TVEFURV9ET1dOOgogCQlwcmludGsoS0VSTl9JTkZPIE1PRCAiJXM6IERvd25cbiIsCi0JCSAgICAgICBwY2lfbmFtZShkZXYtPnJkZXYubGxkaS5wZGV2KSk7Ci0JCWlmIChkZXYtPnJlZ2lzdGVyZWQpCi0JCQljNGl3X3VucmVnaXN0ZXJfZGV2aWNlKGRldik7CisJCSAgICAgICBwY2lfbmFtZShjdHgtPmxsZGkucGRldikpOworCQlpZiAoY3R4LT5kZXYpCisJCQljNGl3X3JlbW92ZShjdHgpOwogCQlicmVhazsKIAljYXNlIENYR0I0X1NUQVRFX1NUQVJUX1JFQ09WRVJZOgogCQlwcmludGsoS0VSTl9JTkZPIE1PRCAiJXM6IEZhdGFsIEVycm9yXG4iLAotCQkgICAgICAgcGNpX25hbWUoZGV2LT5yZGV2LmxsZGkucGRldikpOwotCQlkZXYtPnJkZXYuZmxhZ3MgfD0gVDRfRkFUQUxfRVJST1I7Ci0JCWlmIChkZXYtPnJlZ2lzdGVyZWQpIHsKKwkJICAgICAgIHBjaV9uYW1lKGN0eC0+bGxkaS5wZGV2KSk7CisJCWlmIChjdHgtPmRldikgewogCQkJc3RydWN0IGliX2V2ZW50IGV2ZW50OwogCisJCQljdHgtPmRldi0+cmRldi5mbGFncyB8PSBUNF9GQVRBTF9FUlJPUjsKIAkJCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZiBldmVudCk7CiAJCQlldmVudC5ldmVudCAgPSBJQl9FVkVOVF9ERVZJQ0VfRkFUQUw7Ci0JCQlldmVudC5kZXZpY2UgPSAmZGV2LT5pYmRldjsKKwkJCWV2ZW50LmRldmljZSA9ICZjdHgtPmRldi0+aWJkZXY7CiAJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOwotCQkJYzRpd191bnJlZ2lzdGVyX2RldmljZShkZXYpOworCQkJYzRpd19yZW1vdmUoY3R4KTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYR0I0X1NUQVRFX0RFVEFDSDoKIAkJcHJpbnRrKEtFUk5fSU5GTyBNT0QgIiVzOiBEZXRhY2hcbiIsCi0JCSAgICAgICBwY2lfbmFtZShkZXYtPnJkZXYubGxkaS5wZGV2KSk7Ci0JCW11dGV4X2xvY2soJmRldl9tdXRleCk7Ci0JCWM0aXdfcmVtb3ZlKGRldik7Ci0JCW11dGV4X3VubG9jaygmZGV2X211dGV4KTsKKwkJICAgICAgIHBjaV9uYW1lKGN0eC0+bGxkaS5wZGV2KSk7CisJCWlmIChjdHgtPmRldikKKwkJCWM0aXdfcmVtb3ZlKGN0eCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTU3NiwxMSArNTg3LDEzIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjNGl3X2V4aXRfbW9kdWxlKHZvaWQpCiB7Ci0Jc3RydWN0IGM0aXdfZGV2ICpkZXYsICp0bXA7CisJc3RydWN0IHVsZF9jdHggKmN0eCwgKnRtcDsKIAogCW11dGV4X2xvY2soJmRldl9tdXRleCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmZGV2X2xpc3QsIGVudHJ5KSB7Ci0JCWM0aXdfcmVtb3ZlKGRldik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGN0eCwgdG1wLCAmdWxkX2N0eF9saXN0LCBlbnRyeSkgeworCQlpZiAoY3R4LT5kZXYpCisJCQljNGl3X3JlbW92ZShjdHgpOworCQlrZnJlZShjdHgpOwogCX0KIAltdXRleF91bmxvY2soJmRldl9tdXRleCk7CiAJY3hnYjRfdW5yZWdpc3Rlcl91bGQoQ1hHQjRfVUxEX1JETUEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L2l3X2N4Z2I0LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvaXdfY3hnYjQuaAppbmRleCA5ZjYxNjZmLi4zNWQyYTVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvaXdfY3hnYjQuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvaXdfY3hnYjQuaApAQCAtMTMxLDQyICsxMzEsNTggQEAKIAogI2RlZmluZSBDNElXX1dSX1RPICgxMCpIWikKIAorZW51bSB7CisJUkVQTFlfUkVBRFkgPSAwLAorfTsKKwogc3RydWN0IGM0aXdfd3Jfd2FpdCB7CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKLQlpbnQgZG9uZTsKKwl1bnNpZ25lZCBsb25nIHN0YXR1czsKIAlpbnQgcmV0OwogfTsKIAogc3RhdGljIGlubGluZSB2b2lkIGM0aXdfaW5pdF93cl93YWl0KHN0cnVjdCBjNGl3X3dyX3dhaXQgKndyX3dhaXRwKQogewogCXdyX3dhaXRwLT5yZXQgPSAwOwotCXdyX3dhaXRwLT5kb25lID0gMDsKKwl3cl93YWl0cC0+c3RhdHVzID0gMDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ3cl93YWl0cC0+d2FpdCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjNGl3X3dha2VfdXAoc3RydWN0IGM0aXdfd3Jfd2FpdCAqd3Jfd2FpdHAsIGludCByZXQpCit7CisJd3Jfd2FpdHAtPnJldCA9IHJldDsKKwlzZXRfYml0KFJFUExZX1JFQURZLCAmd3Jfd2FpdHAtPnN0YXR1cyk7CisJd2FrZV91cCgmd3Jfd2FpdHAtPndhaXQpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBjNGl3X3dhaXRfZm9yX3JlcGx5KHN0cnVjdCBjNGl3X3JkZXYgKnJkZXYsCiAJCQkJIHN0cnVjdCBjNGl3X3dyX3dhaXQgKndyX3dhaXRwLAogCQkJCSB1MzIgaHd0aWQsIHUzMiBxcGlkLAogCQkJCSBjb25zdCBjaGFyICpmdW5jKQogewogCXVuc2lnbmVkIHRvID0gQzRJV19XUl9UTzsKLQlkbyB7CisJaW50IHJldDsKIAotCQl3YWl0X2V2ZW50X3RpbWVvdXQod3Jfd2FpdHAtPndhaXQsIHdyX3dhaXRwLT5kb25lLCB0byk7Ci0JCWlmICghd3Jfd2FpdHAtPmRvbmUpIHsKKwlkbyB7CisJCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dCh3cl93YWl0cC0+d2FpdCwKKwkJCXRlc3RfYW5kX2NsZWFyX2JpdChSRVBMWV9SRUFEWSwgJndyX3dhaXRwLT5zdGF0dXMpLCB0byk7CisJCWlmICghcmV0KSB7CiAJCQlwcmludGsoS0VSTl9FUlIgTU9EICIlcyAtIERldmljZSAlcyBub3QgcmVzcG9uZGluZyAtICIKIAkJCSAgICAgICAidGlkICV1IHFwaWQgJXVcbiIsIGZ1bmMsCiAJCQkgICAgICAgcGNpX25hbWUocmRldi0+bGxkaS5wZGV2KSwgaHd0aWQsIHFwaWQpOworCQkJaWYgKGM0aXdfZmF0YWxfZXJyb3IocmRldikpIHsKKwkJCQl3cl93YWl0cC0+cmV0ID0gLUVJTzsKKwkJCQlicmVhazsKKwkJCX0KIAkJCXRvID0gdG8gPDwgMjsKIAkJfQotCX0gd2hpbGUgKCF3cl93YWl0cC0+ZG9uZSk7CisJfSB3aGlsZSAoIXJldCk7CiAJaWYgKHdyX3dhaXRwLT5yZXQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgTU9EICIlczogRlcgcmVwbHkgJWQgdGlkICV1IHFwaWQgJXVcbiIsCi0JCSAgICAgICBwY2lfbmFtZShyZGV2LT5sbGRpLnBkZXYpLCB3cl93YWl0cC0+cmV0LCBod3RpZCwgcXBpZCk7CisJCVBEQkcoIiVzOiBGVyByZXBseSAlZCB0aWQgJXUgcXBpZCAldVxuIiwKKwkJICAgICBwY2lfbmFtZShyZGV2LT5sbGRpLnBkZXYpLCB3cl93YWl0cC0+cmV0LCBod3RpZCwgcXBpZCk7CiAJcmV0dXJuIHdyX3dhaXRwLT5yZXQ7CiB9CiAKLQogc3RydWN0IGM0aXdfZGV2IHsKIAlzdHJ1Y3QgaWJfZGV2aWNlIGliZGV2OwogCXN0cnVjdCBjNGl3X3JkZXYgcmRldjsKQEAgLTE3NSw5ICsxOTEsNyBAQAogCXN0cnVjdCBpZHIgcXBpZHI7CiAJc3RydWN0IGlkciBtbWlkcjsKIAlzcGlubG9ja190IGxvY2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKIAlzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX3Jvb3Q7Ci0JdTggcmVnaXN0ZXJlZDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGM0aXdfZGV2ICp0b19jNGl3X2RldihzdHJ1Y3QgaWJfZGV2aWNlICppYmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Byb3ZpZGVyLmMKaW5kZXggZjY2ZGQ4Yi4uNWI5ZTQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2I0L3Byb3ZpZGVyLmMKQEAgLTUxNiw3ICs1MTYsNiBAQAogCQlpZiAocmV0KQogCQkJZ290byBiYWlsMjsKIAl9Ci0JZGV2LT5yZWdpc3RlcmVkID0gMTsKIAlyZXR1cm4gMDsKIGJhaWwyOgogCWliX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPmliZGV2KTsKQEAgLTUzNSw2ICs1MzQsNSBAQAogCQkJCSAgIGM0aXdfY2xhc3NfYXR0cmlidXRlc1tpXSk7CiAJaWJfdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+aWJkZXYpOwogCWtmcmVlKGRldi0+aWJkZXYuaXdjbSk7Ci0JZGV2LT5yZWdpc3RlcmVkID0gMDsKIAlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCmluZGV4IDcwYTVhM2MuLjNiNzczYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiNC9xcC5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJVl9GV19SSV9SRVNfV1JfSE9TVEZDTU9ERSgwKSB8CS8qIG5vIGhvc3QgY2lkeCB1cGRhdGVzICovCiAJCVZfRldfUklfUkVTX1dSX0NQUklPKDApIHwJLyogZG9uJ3Qga2VlcCBpbiBjaGlwIGNhY2hlICovCiAJCVZfRldfUklfUkVTX1dSX1BDSUVDSE4oMCkgfAkvKiBzZXQgYnkgdVAgYXQgcmlfaW5pdCB0aW1lICovCi0JCXQ0X3NxX29uY2hpcCgmd3EtPnNxKSA/IEZfRldfUklfUkVTX1dSX09OQ0hJUCA6IDAgfAorCQkodDRfc3Ffb25jaGlwKCZ3cS0+c3EpID8gRl9GV19SSV9SRVNfV1JfT05DSElQIDogMCkgfAogCQlWX0ZXX1JJX1JFU19XUl9JUUlEKHNjcS0+Y3FpZCkpOwogCXJlcy0+dS5zcXJxLmRjYWVuX3RvX2Vxc2l6ZSA9IGNwdV90b19iZTMyKAogCQlWX0ZXX1JJX1JFU19XUl9EQ0FFTigwKSB8CkBAIC0xMjEwLDcgKzEyMTAsNiBAQAogCQkJaWYgKHJldCkgewogCQkJCWlmIChpbnRlcm5hbCkKIAkJCQkJYzRpd19nZXRfZXAoJnFocC0+ZXAtPmNvbSk7Ci0JCQkJZGlzY29ubmVjdCA9IGFib3J0ID0gMTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCmluZGV4IDU4YzBlNDEuLmJlMjRhYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKQEAgLTM5OCw3ICszOTgsNiBAQAogCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgYWRkcjsKIAl1MzIgYmFyMCA9IDAsIGJhcjEgPSAwOwotCXU4IHJldjsKIAogCWRkID0gaXBhdGhfYWxsb2NfZGV2ZGF0YShwZGV2KTsKIAlpZiAoSVNfRVJSKGRkKSkgewpAQCAtNTQwLDEzICs1MzksNyBAQAogCQlnb3RvIGJhaWxfcmVnaW9uczsKIAl9CiAKLQlyZXQgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOwotCWlmIChyZXQpIHsKLQkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCB0byByZWFkIFBDSSByZXZpc2lvbiBJRCB1bml0ICIKLQkJCSAgICAgICIldTogZXJyICVkXG4iLCBkZC0+aXBhdGhfdW5pdCwgLXJldCk7Ci0JCWdvdG8gYmFpbF9yZWdpb25zOwkvKiBzaG91bGRuJ3QgZXZlciBoYXBwZW4gKi8KLQl9Ci0JZGQtPmlwYXRoX3BjaXJldiA9IHJldjsKKwlkZC0+aXBhdGhfcGNpcmV2ID0gcGRldi0+cmV2aXNpb247CiAKICNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKQogCS8qIFRoZXJlIGlzbid0IGEgZ2VuZXJpYyB3YXkgdG8gc3BlY2lmeSB3cml0ZXRocm91Z2ggbWFwcGluZ3MgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCmluZGV4IDMzYzdlZWQuLmU3NGNkZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfY20uYwpAQCAtMjU2Myw3ICsyNTYzLDcgQEAKIAl1MTYgbGFzdF9hZTsKIAl1OCBvcmlnaW5hbF9od190Y3Bfc3RhdGU7CiAJdTggb3JpZ2luYWxfaWJxcF9zdGF0ZTsKLQllbnVtIGl3X2NtX2V2ZW50X3N0YXR1cyBkaXNjb25uX3N0YXR1cyA9IElXX0NNX0VWRU5UX1NUQVRVU19PSzsKKwlpbnQgZGlzY29ubl9zdGF0dXMgPSAwOwogCWludCBpc3N1ZV9kaXNjb25uID0gMDsKIAlpbnQgaXNzdWVfY2xvc2UgPSAwOwogCWludCBpc3N1ZV9mbHVzaCA9IDA7CkBAIC0yNjA1LDcgKzI2MDUsNyBAQAogCQkJKGxhc3RfYWUgPT0gTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVCkpKSB7CiAJCWlzc3VlX2Rpc2Nvbm4gPSAxOwogCQlpZiAobGFzdF9hZSA9PSBORVNfQUVRRV9BRUlEX0xMUF9DT05ORUNUSU9OX1JFU0VUKQotCQkJZGlzY29ubl9zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfUkVTRVQ7CisJCQlkaXNjb25uX3N0YXR1cyA9IC1FQ09OTlJFU0VUOwogCX0KIAogCWlmICgoKG9yaWdpbmFsX2h3X3RjcF9zdGF0ZSA9PSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEKSB8fApAQCAtMjY2Niw3ICsyNjY2LDcgQEAKIAkJCWNtX2lkLT5wcm92aWRlcl9kYXRhID0gbmVzcXA7CiAJCQkvKiBTZW5kIHVwIHRoZSBjbG9zZSBjb21wbGV0ZSBldmVudCAqLwogCQkJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9DTE9TRTsKLQkJCWNtX2V2ZW50LnN0YXR1cyA9IElXX0NNX0VWRU5UX1NUQVRVU19PSzsKKwkJCWNtX2V2ZW50LnN0YXR1cyA9IDA7CiAJCQljbV9ldmVudC5wcm92aWRlcl9kYXRhID0gY21faWQtPnByb3ZpZGVyX2RhdGE7CiAJCQljbV9ldmVudC5sb2NhbF9hZGRyID0gY21faWQtPmxvY2FsX2FkZHI7CiAJCQljbV9ldmVudC5yZW1vdGVfYWRkciA9IGNtX2lkLT5yZW1vdGVfYWRkcjsKQEAgLTI5NjYsNyArMjk2Niw3IEBACiAJbmVzX2FkZF9yZWYoJm5lc3FwLT5pYnFwKTsKIAogCWNtX2V2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfRVNUQUJMSVNIRUQ7Ci0JY21fZXZlbnQuc3RhdHVzID0gSVdfQ01fRVZFTlRfU1RBVFVTX0FDQ0VQVEVEOworCWNtX2V2ZW50LnN0YXR1cyA9IDA7CiAJY21fZXZlbnQucHJvdmlkZXJfZGF0YSA9ICh2b2lkICopbmVzcXA7CiAJY21fZXZlbnQubG9jYWxfYWRkciA9IGNtX2lkLT5sb2NhbF9hZGRyOwogCWNtX2V2ZW50LnJlbW90ZV9hZGRyID0gY21faWQtPnJlbW90ZV9hZGRyOwpAQCAtMzM3Nyw3ICszMzc3LDcgQEAKIAogCS8qIG5vdGlmeSBPRiBsYXllciB3ZSBzdWNjZXNzZnVsbHkgY3JlYXRlZCB0aGUgcmVxdWVzdGVkIGNvbm5lY3Rpb24gKi8KIAljbV9ldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVQTFk7Ci0JY21fZXZlbnQuc3RhdHVzID0gSVdfQ01fRVZFTlRfU1RBVFVTX0FDQ0VQVEVEOworCWNtX2V2ZW50LnN0YXR1cyA9IDA7CiAJY21fZXZlbnQucHJvdmlkZXJfZGF0YSA9IGNtX2lkLT5wcm92aWRlcl9kYXRhOwogCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fcG9ydCA9IGNtX2lkLT5sb2NhbF9hZGRyLnNpbl9wb3J0OwpAQCAtMzQ4NCw3ICszNDg0LDcgQEAKIAluZXNxcC0+Y21faWQgPSBOVUxMOwogCS8qIGNtX2lkLT5wcm92aWRlcl9kYXRhID0gTlVMTDsgKi8KIAljbV9ldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0RJU0NPTk5FQ1Q7Ci0JY21fZXZlbnQuc3RhdHVzID0gSVdfQ01fRVZFTlRfU1RBVFVTX1JFU0VUOworCWNtX2V2ZW50LnN0YXR1cyA9IC1FQ09OTlJFU0VUOwogCWNtX2V2ZW50LnByb3ZpZGVyX2RhdGEgPSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKIAljbV9ldmVudC5sb2NhbF9hZGRyID0gY21faWQtPmxvY2FsX2FkZHI7CiAJY21fZXZlbnQucmVtb3RlX2FkZHIgPSBjbV9pZC0+cmVtb3RlX2FkZHI7CkBAIC0zNDk1LDcgKzM0OTUsNyBAQAogCXJldCA9IGNtX2lkLT5ldmVudF9oYW5kbGVyKGNtX2lkLCAmY21fZXZlbnQpOwogCWF0b21pY19pbmMoJmNtX2Nsb3Nlcyk7CiAJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9DTE9TRTsKLQljbV9ldmVudC5zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfT0s7CisJY21fZXZlbnQuc3RhdHVzID0gMDsKIAljbV9ldmVudC5wcm92aWRlcl9kYXRhID0gY21faWQtPnByb3ZpZGVyX2RhdGE7CiAJY21fZXZlbnQubG9jYWxfYWRkciA9IGNtX2lkLT5sb2NhbF9hZGRyOwogCWNtX2V2ZW50LnJlbW90ZV9hZGRyID0gY21faWQtPnJlbW90ZV9hZGRyOwpAQCAtMzUzNCw3ICszNTM0LDcgQEAKIAkJCWNtX25vZGUsIGNtX2lkLCBqaWZmaWVzKTsKIAogCWNtX2V2ZW50LmV2ZW50ID0gSVdfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNUOwotCWNtX2V2ZW50LnN0YXR1cyA9IElXX0NNX0VWRU5UX1NUQVRVU19PSzsKKwljbV9ldmVudC5zdGF0dXMgPSAwOwogCWNtX2V2ZW50LnByb3ZpZGVyX2RhdGEgPSAodm9pZCAqKWNtX25vZGU7CiAKIAljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKaW5kZXggMjZkODAxOC4uOTVjYTkzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCkBAIC0xNDg0LDcgKzE0ODQsNyBAQAogCQkJKG5lc3FwLT5pYnFwX3N0YXRlID09IElCX1FQU19SVFIpKSAmJiAobmVzcXAtPmNtX2lkKSkgewogCQljbV9pZCA9IG5lc3FwLT5jbV9pZDsKIAkJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9DT05ORUNUX1JFUExZOwotCQljbV9ldmVudC5zdGF0dXMgPSBJV19DTV9FVkVOVF9TVEFUVVNfVElNRU9VVDsKKwkJY21fZXZlbnQuc3RhdHVzID0gLUVUSU1FRE9VVDsKIAkJY21fZXZlbnQubG9jYWxfYWRkciA9IGNtX2lkLT5sb2NhbF9hZGRyOwogCQljbV9ldmVudC5yZW1vdGVfYWRkciA9IGNtX2lkLT5yZW1vdGVfYWRkcjsKIAkJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTYxMjAuYwppbmRleCA3ZGU0YjdlLi5kOGNhMGEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE2MTIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNjEyMC5jCkBAIC0xNzk5LDcgKzE3OTksNyBAQAogCS8qCiAJICogS2VlcCBjaGlwIGZyb20gYmVpbmcgYWNjZXNzZWQgdW50aWwgd2UgYXJlIHJlYWR5LiAgVXNlCiAJICogd3JpdGVxKCkgZGlyZWN0bHksIHRvIGFsbG93IHRoZSB3cml0ZSBldmVuIHRob3VnaCBRSUJfUFJFU0VOVAotCSAqIGlzbid0JyBzZXQuCisJICogaXNuJ3Qgc2V0LgogCSAqLwogCWRkLT5mbGFncyAmPSB+KFFJQl9JTklUVEVEIHwgUUlCX1BSRVNFTlQpOwogCWRkLT5pbnRfY291bnRlciA9IDA7IC8qIHNvIHdlIGNoZWNrIGludGVycnVwdHMgd29yayBhZ2FpbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzIyMC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzIyMC5jCmluZGV4IDc0ZmUwMzYuLmM3NjVhMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTcyMjAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MjIwLmMKQEAgLTIxMTEsNyArMjExMSw3IEBACiAJLyoKIAkgKiBLZWVwIGNoaXAgZnJvbSBiZWluZyBhY2Nlc3NlZCB1bnRpbCB3ZSBhcmUgcmVhZHkuICBVc2UKIAkgKiB3cml0ZXEoKSBkaXJlY3RseSwgdG8gYWxsb3cgdGhlIHdyaXRlIGV2ZW4gdGhvdWdoIFFJQl9QUkVTRU5UCi0JICogaXNuJ3QnIHNldC4KKwkgKiBpc24ndCBzZXQuCiAJICovCiAJZGQtPmZsYWdzICY9IH4oUUlCX0lOSVRURUQgfCBRSUJfUFJFU0VOVCk7CiAJZGQtPmludF9jb3VudGVyID0gMDsgLyogc28gd2UgY2hlY2sgaW50ZXJydXB0cyB3b3JrIGFnYWluICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9pYmE3MzIyLmMKaW5kZXggNTVkZTNjZi4uOWY1M2U2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfaWJhNzMyMi5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX2liYTczMjIuYwpAQCAtMzI5OSw3ICszMjk5LDcgQEAKIAkvKgogCSAqIEtlZXAgY2hpcCBmcm9tIGJlaW5nIGFjY2Vzc2VkIHVudGlsIHdlIGFyZSByZWFkeS4gIFVzZQogCSAqIHdyaXRlcSgpIGRpcmVjdGx5LCB0byBhbGxvdyB0aGUgd3JpdGUgZXZlbiB0aG91Z2ggUUlCX1BSRVNFTlQKLQkgKiBpc24ndCcgc2V0LgorCSAqIGlzbid0IHNldC4KIAkgKi8KIAlkZC0+ZmxhZ3MgJj0gfihRSUJfSU5JVFRFRCB8IFFJQl9QUkVTRU5UIHwgUUlCX0JBRElOVFIpOwogCWRkLT5mbGFncyB8PSBRSUJfRE9JTkdfUkVTRVQ7CkBAIC03NTM0LDcgKzc1MzQsOCBAQAogCWlic2Rfd3JfYWxsY2hhbnMocHBkLCA0LCAoMSA8PCAxMCksIEJNQVNLKDEwLCAxMCkpOwogCXRzdGFydCA9IGdldF9qaWZmaWVzXzY0KCk7CiAJd2hpbGUgKGNoYW5fZG9uZSAmJgotCSAgICAgICAhdGltZV9hZnRlcjY0KHRzdGFydCwgdHN0YXJ0ICsgbXNlY3NfdG9famlmZmllcyg1MDApKSkgeworCSAgICAgICAhdGltZV9hZnRlcjY0KGdldF9qaWZmaWVzXzY0KCksCisJCQl0c3RhcnQgKyBtc2Vjc190b19qaWZmaWVzKDUwMCkpKSB7CiAJCW1zbGVlcCgyMCk7CiAJCWZvciAoY2hhbiA9IDA7IGNoYW4gPCBTRVJERVNfQ0hBTlM7ICsrY2hhbikgewogCQkJcnhjYWxkb25lID0gYWhiX21vZChwcGQtPmRkLCBJQlNEKHBwZC0+aHdfcGlkeCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9wY2llLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvcWliL3FpYl9wY2llLmMKaW5kZXggNDhiNjY3NC4uODkxY2MyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L3FpYi9xaWJfcGNpZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9xaWIvcWliX3BjaWUuYwpAQCAtNTI2LDExICs1MjYsOCBAQAogCSAqLwogCWRldmlkID0gcGFyZW50LT5kZXZpY2U7CiAJaWYgKGRldmlkID49IDB4MjVlMiAmJiBkZXZpZCA8PSAweDI1ZmEpIHsKLQkJdTggcmV2OwotCiAJCS8qIDUwMDAgUC9WL1gvWiAqLwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwYXJlbnQsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7Ci0JCWlmIChyZXYgPD0gMHhiMikKKwkJaWYgKHBhcmVudC0+cmV2aXNpb24gPD0gMHhiMikKIAkJCWJpdHMgPSAxVSA8PCAxMDsKIAkJZWxzZQogCQkJYml0cyA9IDdVIDw8IDEwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IDdmNDJkM2EuLjg4ZDhlNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTM5LDEzICszOSwxMyBAQAogfTsKIAogc3RydWN0IGV2ZGV2X2NsaWVudCB7Ci0JaW50IGhlYWQ7Ci0JaW50IHRhaWw7CisJdW5zaWduZWQgaW50IGhlYWQ7CisJdW5zaWduZWQgaW50IHRhaWw7CiAJc3BpbmxvY2tfdCBidWZmZXJfbG9jazsgLyogcHJvdGVjdHMgYWNjZXNzIHRvIGJ1ZmZlciwgaGVhZCBhbmQgdGFpbCAqLwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CiAJc3RydWN0IGV2ZGV2ICpldmRldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0JaW50IGJ1ZnNpemU7CisJdW5zaWduZWQgaW50IGJ1ZnNpemU7CiAJc3RydWN0IGlucHV0X2V2ZW50IGJ1ZmZlcltdOwogfTsKIApAQCAtNTUsMTYgKzU1LDI1IEBACiBzdGF0aWMgdm9pZCBldmRldl9wYXNzX2V2ZW50KHN0cnVjdCBldmRldl9jbGllbnQgKmNsaWVudCwKIAkJCSAgICAgc3RydWN0IGlucHV0X2V2ZW50ICpldmVudCkKIHsKLQkvKgotCSAqIEludGVycnVwdHMgYXJlIGRpc2FibGVkLCBqdXN0IGFjcXVpcmUgdGhlIGxvY2suCi0JICogTWFrZSBzdXJlIHdlIGRvbid0IGxlYXZlIHdpdGggdGhlIGNsaWVudCBidWZmZXIKLQkgKiAiZW1wdHkiIGJ5IGhhdmluZyBjbGllbnQtPmhlYWQgPT0gY2xpZW50LT50YWlsLgotCSAqLworCS8qIEludGVycnVwdHMgYXJlIGRpc2FibGVkLCBqdXN0IGFjcXVpcmUgdGhlIGxvY2suICovCiAJc3Bpbl9sb2NrKCZjbGllbnQtPmJ1ZmZlcl9sb2NrKTsKLQlkbyB7Ci0JCWNsaWVudC0+YnVmZmVyW2NsaWVudC0+aGVhZCsrXSA9ICpldmVudDsKLQkJY2xpZW50LT5oZWFkICY9IGNsaWVudC0+YnVmc2l6ZSAtIDE7Ci0JfSB3aGlsZSAoY2xpZW50LT5oZWFkID09IGNsaWVudC0+dGFpbCk7CisKKwljbGllbnQtPmJ1ZmZlcltjbGllbnQtPmhlYWQrK10gPSAqZXZlbnQ7CisJY2xpZW50LT5oZWFkICY9IGNsaWVudC0+YnVmc2l6ZSAtIDE7CisKKwlpZiAodW5saWtlbHkoY2xpZW50LT5oZWFkID09IGNsaWVudC0+dGFpbCkpIHsKKwkJLyoKKwkJICogVGhpcyBlZmZlY3RpdmVseSAiZHJvcHMiIGFsbCB1bmNvbnN1bWVkIGV2ZW50cywgbGVhdmluZworCQkgKiBFVl9TWU4vU1lOX0RST1BQRUQgcGx1cyB0aGUgbmV3ZXN0IGV2ZW50IGluIHRoZSBxdWV1ZS4KKwkJICovCisJCWNsaWVudC0+dGFpbCA9IChjbGllbnQtPmhlYWQgLSAyKSAmIChjbGllbnQtPmJ1ZnNpemUgLSAxKTsKKworCQljbGllbnQtPmJ1ZmZlcltjbGllbnQtPnRhaWxdLnRpbWUgPSBldmVudC0+dGltZTsKKwkJY2xpZW50LT5idWZmZXJbY2xpZW50LT50YWlsXS50eXBlID0gRVZfU1lOOworCQljbGllbnQtPmJ1ZmZlcltjbGllbnQtPnRhaWxdLmNvZGUgPSBTWU5fRFJPUFBFRDsKKwkJY2xpZW50LT5idWZmZXJbY2xpZW50LT50YWlsXS52YWx1ZSA9IDA7CisJfQorCiAJc3Bpbl91bmxvY2soJmNsaWVudC0+YnVmZmVyX2xvY2spOwogCiAJaWYgKGV2ZW50LT50eXBlID09IEVWX1NZTikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCBkNmU4YmQ4Li5lYmJjZWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0xNzQ2LDYgKzE3NDYsNDIgQEAKIH0KIEVYUE9SVF9TWU1CT0woaW5wdXRfc2V0X2NhcGFiaWxpdHkpOwogCitzdGF0aWMgdW5zaWduZWQgaW50IGlucHV0X2VzdGltYXRlX2V2ZW50c19wZXJfcGFja2V0KHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlpbnQgbXRfc2xvdHM7CisJaW50IGk7CisJdW5zaWduZWQgaW50IGV2ZW50czsKKworCWlmIChkZXYtPm10c2l6ZSkgeworCQltdF9zbG90cyA9IGRldi0+bXRzaXplOworCX0gZWxzZSBpZiAodGVzdF9iaXQoQUJTX01UX1RSQUNLSU5HX0lELCBkZXYtPmFic2JpdCkpIHsKKwkJbXRfc2xvdHMgPSBkZXYtPmFic2luZm9bQUJTX01UX1RSQUNLSU5HX0lEXS5tYXhpbXVtIC0KKwkJCSAgIGRldi0+YWJzaW5mb1tBQlNfTVRfVFJBQ0tJTkdfSURdLm1pbmltdW0gKyAxLAorCQljbGFtcChtdF9zbG90cywgMiwgMzIpOworCX0gZWxzZSBpZiAodGVzdF9iaXQoQUJTX01UX1BPU0lUSU9OX1gsIGRldi0+YWJzYml0KSkgeworCQltdF9zbG90cyA9IDI7CisJfSBlbHNlIHsKKwkJbXRfc2xvdHMgPSAwOworCX0KKworCWV2ZW50cyA9IG10X3Nsb3RzICsgMTsgLyogY291bnQgU1lOX01UX1JFUE9SVCBhbmQgU1lOX1JFUE9SVCAqLworCisJZm9yIChpID0gMDsgaSA8IEFCU19DTlQ7IGkrKykgeworCQlpZiAodGVzdF9iaXQoaSwgZGV2LT5hYnNiaXQpKSB7CisJCQlpZiAoaW5wdXRfaXNfbXRfYXhpcyhpKSkKKwkJCQlldmVudHMgKz0gbXRfc2xvdHM7CisJCQllbHNlCisJCQkJZXZlbnRzKys7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgUkVMX0NOVDsgaSsrKQorCQlpZiAodGVzdF9iaXQoaSwgZGV2LT5yZWxiaXQpKQorCQkJZXZlbnRzKys7CisKKwlyZXR1cm4gZXZlbnRzOworfQorCiAjZGVmaW5lIElOUFVUX0NMRUFOU0VfQklUTUFTSyhkZXYsIHR5cGUsIGJpdHMpCQkJCVwKIAlkbyB7CQkJCQkJCQlcCiAJCWlmICghdGVzdF9iaXQoRVZfIyN0eXBlLCBkZXYtPmV2Yml0KSkJCQlcCkBAIC0xNzkzLDYgKzE4MjksMTAgQEAKIAkvKiBNYWtlIHN1cmUgdGhhdCBiaXRtYXNrcyBub3QgbWVudGlvbmVkIGluIGRldi0+ZXZiaXQgYXJlIGNsZWFuLiAqLwogCWlucHV0X2NsZWFuc2VfYml0bWFza3MoZGV2KTsKIAorCWlmICghZGV2LT5oaW50X2V2ZW50c19wZXJfcGFja2V0KQorCQlkZXYtPmhpbnRfZXZlbnRzX3Blcl9wYWNrZXQgPQorCQkJCWlucHV0X2VzdGltYXRlX2V2ZW50c19wZXJfcGFja2V0KGRldik7CisKIAkvKgogCSAqIElmIGRlbGF5IGFuZCBwZXJpb2QgYXJlIHByZS1zZXQgYnkgdGhlIGRyaXZlciwgdGhlbiBhdXRvcmVwZWF0aW5nCiAJICogaXMgaGFuZGxlZCBieSB0aGUgZHJpdmVyIGl0c2VsZiBhbmQgd2UgZG9uJ3QgZG8gaXQgaW4gaW5wdXQuYy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRha2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0YWtiZC5jCmluZGV4IDE4MzkxOTQuLjEwYmNkNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRha2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGFrYmQuYwpAQCAtMjIzLDggKzIyMyw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJLy8gbmVlZCB0byBpbml0IGNvcmUgZHJpdmVyIGlmIG5vdCBhbHJlYWR5IGRvbmUgc28KLQlpZiAoYXRhcmlfa2V5Yl9pbml0KCkpCi0JCXJldHVybiAtRU5PREVWOworCWVycm9yID0gYXRhcmlfa2V5Yl9pbml0KCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CiAKIAlhdGFrYmRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFhdGFrYmRfZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC90d2w0MDMwX2tleXBhZC5jCmluZGV4IDA5YmVmNzkuLmEyNjkyMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvdHdsNDAzMF9rZXlwYWQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL3R3bDQwMzBfa2V5cGFkLmMKQEAgLTMzMiwxOCArMzMyLDIwIEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCB0d2w0MDMwX2twX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHR3bDQwMzBfa2V5cGFkX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGEgPSBwZGF0YS0+a2V5bWFwX2RhdGE7CisJY29uc3Qgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSAqa2V5bWFwX2RhdGE7CiAJc3RydWN0IHR3bDQwMzBfa2V5cGFkICprcDsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKIAl1OCByZWc7CiAJaW50IGVycm9yOwogCi0JaWYgKCFwZGF0YSB8fCAhcGRhdGEtPnJvd3MgfHwgIXBkYXRhLT5jb2xzIHx8CisJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPnJvd3MgfHwgIXBkYXRhLT5jb2xzIHx8ICFwZGF0YS0+a2V5bWFwX2RhdGEgfHwKIAkgICAgcGRhdGEtPnJvd3MgPiBUV0w0MDMwX01BWF9ST1dTIHx8IHBkYXRhLT5jb2xzID4gVFdMNDAzMF9NQVhfQ09MUykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJbnZhbGlkIHBsYXRmb3JtX2RhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlrZXltYXBfZGF0YSA9IHBkYXRhLT5rZXltYXBfZGF0YTsKKwogCWtwID0ga3phbGxvYyhzaXplb2YoKmtwKSwgR0ZQX0tFUk5FTCk7CiAJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWtwIHx8ICFpbnB1dCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3hlbi1rYmRmcm9udC5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3hlbi1rYmRmcm9udC5jCmluZGV4IDcwNzdmOWIuLjYyYmFlOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy94ZW4ta2JkZnJvbnQuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2MveGVuLWtiZGZyb250LmMKQEAgLTMwMyw3ICszMDMsNyBAQAogCQkJCSAgIGVudW0geGVuYnVzX3N0YXRlIGJhY2tlbmRfc3RhdGUpCiB7CiAJc3RydWN0IHhlbmtiZF9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKCZkZXYtPmRldik7Ci0JaW50IHZhbDsKKwlpbnQgcmV0LCB2YWw7CiAKIAlzd2l0Y2ggKGJhY2tlbmRfc3RhdGUpIHsKIAljYXNlIFhlbmJ1c1N0YXRlSW5pdGlhbGlzaW5nOgpAQCAtMzE2LDYgKzMxNiwxNyBAQAogCiAJY2FzZSBYZW5idXNTdGF0ZUluaXRXYWl0OgogSW5pdFdhaXQ6CisJCXJldCA9IHhlbmJ1c19zY2FuZihYQlRfTklMLCBpbmZvLT54YmRldi0+b3RoZXJlbmQsCisJCQkJICAgImZlYXR1cmUtYWJzLXBvaW50ZXIiLCAiJWQiLCAmdmFsKTsKKwkJaWYgKHJldCA8IDApCisJCQl2YWwgPSAwOworCQlpZiAodmFsKSB7CisJCQlyZXQgPSB4ZW5idXNfcHJpbnRmKFhCVF9OSUwsIGluZm8tPnhiZGV2LT5ub2RlbmFtZSwKKwkJCQkJICAgICJyZXF1ZXN0LWFicy1wb2ludGVyIiwgIjEiKTsKKwkJCWlmIChyZXQpCisJCQkJcHJfd2FybmluZygieGVua2JkOiBjYW4ndCByZXF1ZXN0IGFicy1wb2ludGVyIik7CisJCX0KKwogCQl4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVDb25uZWN0ZWQpOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9hdGFyaW1vdXNlLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2F0YXJpbW91c2UuYwppbmRleCBhZGY0NWIzLi41YzRhNjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21vdXNlL2F0YXJpbW91c2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL2F0YXJpbW91c2UuYwpAQCAtNzcsMTUgKzc3LDE1IEBACiAjZW5kaWYKIAogCS8qIG9ubHkgcmVsYXRpdmUgZXZlbnRzIGdldCBoZXJlICovCi0JZHggPSAgYnVmWzFdOwotCWR5ID0gLWJ1ZlsyXTsKKwlkeCA9IGJ1ZlsxXTsKKwlkeSA9IGJ1ZlsyXTsKIAogCWlucHV0X3JlcG9ydF9yZWwoYXRhbW91c2VfZGV2LCBSRUxfWCwgZHgpOwogCWlucHV0X3JlcG9ydF9yZWwoYXRhbW91c2VfZGV2LCBSRUxfWSwgZHkpOwogCi0JaW5wdXRfcmVwb3J0X2tleShhdGFtb3VzZV9kZXYsIEJUTl9MRUZULCAgIGJ1dHRvbnMgJiAweDEpOworCWlucHV0X3JlcG9ydF9rZXkoYXRhbW91c2VfZGV2LCBCVE5fTEVGVCwgICBidXR0b25zICYgMHg0KTsKIAlpbnB1dF9yZXBvcnRfa2V5KGF0YW1vdXNlX2RldiwgQlROX01JRERMRSwgYnV0dG9ucyAmIDB4Mik7Ci0JaW5wdXRfcmVwb3J0X2tleShhdGFtb3VzZV9kZXYsIEJUTl9SSUdIVCwgIGJ1dHRvbnMgJiAweDQpOworCWlucHV0X3JlcG9ydF9rZXkoYXRhbW91c2VfZGV2LCBCVE5fUklHSFQsICBidXR0b25zICYgMHgxKTsKIAogCWlucHV0X3N5bmMoYXRhbW91c2VfZGV2KTsKIApAQCAtMTA4LDcgKzEwOCw3IEBACiBzdGF0aWMgdm9pZCBhdGFtb3VzZV9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCiB7CiAJaWtiZF9tb3VzZV9kaXNhYmxlKCk7Ci0JYXRhcmlfbW91c2VfaW50ZXJydXB0X2hvb2sgPSBOVUxMOworCWF0YXJpX2lucHV0X21vdXNlX2ludGVycnVwdF9ob29rID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYXRhbW91c2VfaW5pdCh2b2lkKQpAQCAtMTE4LDggKzExOCw5IEBACiAJaWYgKCFNQUNIX0lTX0FUQVJJIHx8ICFBVEFSSUhXX1BSRVNFTlQoU1RfTUZQKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoIWF0YXJpX2tleWJfaW5pdCgpKQotCQlyZXR1cm4gLUVOT0RFVjsKKwllcnJvciA9IGF0YXJpX2tleWJfaW5pdCgpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCiAJYXRhbW91c2VfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CiAJaWYgKCFhdGFtb3VzZV9kZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2Fkczc4NDYuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCmluZGV4IGMyNDk0NmYuLjFkZTFjMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vYWRzNzg0Ni5jCkBAIC0yODEsMTcgKzI4MSwyNCBAQAogCXU4CQkJY29tbWFuZDsKIAl1OAkJCXJlZl9vZmY7CiAJdTE2CQkJc2NyYXRjaDsKLQlfX2JlMTYJCQlzYW1wbGU7CiAJc3RydWN0IHNwaV9tZXNzYWdlCW1zZzsKIAlzdHJ1Y3Qgc3BpX3RyYW5zZmVyCXhmZXJbNl07CisJLyoKKwkgKiBETUEgKHRodXMgY2FjaGUgY29oZXJlbmN5IG1haW50ZW5hbmNlKSByZXF1aXJlcyB0aGUKKwkgKiB0cmFuc2ZlciBidWZmZXJzIHRvIGxpdmUgaW4gdGhlaXIgb3duIGNhY2hlIGxpbmVzLgorCSAqLworCV9fYmUxNiBzYW1wbGUgX19fX2NhY2hlbGluZV9hbGlnbmVkOwogfTsKIAogc3RydWN0IGFkczc4NDVfc2VyX3JlcSB7CiAJdTgJCQljb21tYW5kWzNdOwotCXU4CQkJcHdyZG93blszXTsKLQl1OAkJCXNhbXBsZVszXTsKIAlzdHJ1Y3Qgc3BpX21lc3NhZ2UJbXNnOwogCXN0cnVjdCBzcGlfdHJhbnNmZXIJeGZlclsyXTsKKwkvKgorCSAqIERNQSAodGh1cyBjYWNoZSBjb2hlcmVuY3kgbWFpbnRlbmFuY2UpIHJlcXVpcmVzIHRoZQorCSAqIHRyYW5zZmVyIGJ1ZmZlcnMgdG8gbGl2ZSBpbiB0aGVpciBvd24gY2FjaGUgbGluZXMuCisJICovCisJdTggc2FtcGxlWzNdIF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIH07CiAKIHN0YXRpYyBpbnQgYWRzNzg0Nl9yZWFkMTJfc2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgY29tbWFuZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaDM2MDBfdHNfaW5wdXQuYwppbmRleCBlZmEwNjg4Li40NWY5M2QwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2gzNjAwX3RzX2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9oMzYwMF90c19pbnB1dC5jCkBAIC0zOTksMzEgKzM5OSwzNCBAQAogCQkJSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCAiaDM2MDBfYWN0aW9uIiwgJnRzLT5kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaDM2MDB0cy5jOiBDb3VsZCBub3QgYWxsb2NhdGUgQWN0aW9uIEJ1dHRvbiBJUlEhXG4iKTsKIAkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGZhaWwyOworCQlnb3RvIGZhaWwxOwogCX0KIAogCWlmIChyZXF1ZXN0X2lycShJUlFfR1BJT19CSVRTWV9OUE9XRVJfQlVUVE9OLCBucG93ZXJfYnV0dG9uX2hhbmRsZXIsCiAJCQlJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsICJoMzYwMF9zdXNwZW5kIiwgJnRzLT5kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaDM2MDB0cy5jOiBDb3VsZCBub3QgYWxsb2NhdGUgUG93ZXIgQnV0dG9uIElSUSFcbiIpOwogCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gZmFpbDM7CisJCWdvdG8gZmFpbDI7CiAJfQogCiAJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIHRzKTsKIAogCWVyciA9IHNlcmlvX29wZW4oc2VyaW8sIGRydik7CiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKKwkJZ290byBmYWlsMzsKIAogCS8vaDM2MDBfZmxpdGVfY29udHJvbCgxLCAyNSk7ICAgICAvKiBkZWZhdWx0IGJyaWdodG5lc3MgKi8KLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UodHMtPmRldik7CisJZXJyID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRzLT5kZXYpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDQ7CiAKIAlyZXR1cm4gMDsKIAotZmFpbDM6CWZyZWVfaXJxKElSUV9HUElPX0JJVFNZX05QT1dFUl9CVVRUT04sIHRzLT5kZXYpOworZmFpbDQ6CXNlcmlvX2Nsb3NlKHNlcmlvKTsKK2ZhaWwzOglzZXJpb19zZXRfZHJ2ZGF0YShzZXJpbywgTlVMTCk7CisJZnJlZV9pcnEoSVJRX0dQSU9fQklUU1lfTlBPV0VSX0JVVFRPTiwgdHMtPmRldik7CiBmYWlsMjoJZnJlZV9pcnEoSVJRX0dQSU9fQklUU1lfQUNUSU9OX0JVVFRPTiwgdHMtPmRldik7Ci1mYWlsMToJc2VyaW9fc2V0X2RydmRhdGEoc2VyaW8sIE5VTEwpOwotCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CitmYWlsMToJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKIAlrZnJlZSh0cyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd204MzF4LXRzLmMgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL3dtODMxeC10cy5jCmluZGV4IDZhZTA1NGYuLjkxNzVkNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vd204MzF4LXRzLmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi93bTgzMXgtdHMuYwpAQCAtNjgsOCArNjgsMjMgQEAKIAl1bnNpZ25lZCBpbnQgcGRfaXJxOwogCWJvb2wgcHJlc3N1cmU7CiAJYm9vbCBwZW5fZG93bjsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcGRfZGF0YV93b3JrOwogfTsKIAorc3RhdGljIHZvaWQgd204MzF4X3BkX2RhdGFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHdtODMxeF90cyAqd204MzF4X3RzID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3bTgzMXhfdHMsIHBkX2RhdGFfd29yayk7CisKKwlpZiAod204MzF4X3RzLT5wZW5fZG93bikgeworCQllbmFibGVfaXJxKHdtODMxeF90cy0+ZGF0YV9pcnEpOworCQlkZXZfZGJnKHdtODMxeF90cy0+d204MzF4LT5kZXYsICJJUlEgUEQtPkRBVEEgZG9uZVxuIik7CisJfSBlbHNlIHsKKwkJZW5hYmxlX2lycSh3bTgzMXhfdHMtPnBkX2lycSk7CisJCWRldl9kYmcod204MzF4X3RzLT53bTgzMXgtPmRldiwgIklSUSBEQVRBLT5QRCBkb25lXG4iKTsKKwl9Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCB3bTgzMXhfdHNfZGF0YV9pcnEoaW50IGlycSwgdm9pZCAqaXJxX2RhdGEpCiB7CiAJc3RydWN0IHdtODMxeF90cyAqd204MzF4X3RzID0gaXJxX2RhdGE7CkBAIC0xMTAsNiArMTI1LDkgQEAKIAl9CiAKIAlpZiAoIXdtODMxeF90cy0+cGVuX2Rvd24pIHsKKwkJLyogU3dpdGNoIGZyb20gZGF0YSB0byBwZW4gZG93biAqLworCQlkZXZfZGJnKHdtODMxeC0+ZGV2LCAiSVJRIERBVEEtPlBEXG4iKTsKKwogCQlkaXNhYmxlX2lycV9ub3N5bmMod204MzF4X3RzLT5kYXRhX2lycSk7CiAKIAkJLyogRG9uJ3QgbmVlZCBkYXRhIGFueSBtb3JlICovCkBAIC0xMjgsNiArMTQ2LDEwIEBACiAJCQkJCSBBQlNfUFJFU1NVUkUsIDApOwogCiAJCWlucHV0X3JlcG9ydF9rZXkod204MzF4X3RzLT5pbnB1dF9kZXYsIEJUTl9UT1VDSCwgMCk7CisKKwkJc2NoZWR1bGVfd29yaygmd204MzF4X3RzLT5wZF9kYXRhX3dvcmspOworCX0gZWxzZSB7CisJCWlucHV0X3JlcG9ydF9rZXkod204MzF4X3RzLT5pbnB1dF9kZXYsIEJUTl9UT1VDSCwgMSk7CiAJfQogCiAJaW5wdXRfc3luYyh3bTgzMXhfdHMtPmlucHV0X2Rldik7CkBAIC0xNDEsNiArMTYzLDExIEBACiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gd204MzF4X3RzLT53bTgzMXg7CiAJaW50IGVuYSA9IDA7CiAKKwlpZiAod204MzF4X3RzLT5wZW5fZG93bikKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJZGlzYWJsZV9pcnFfbm9zeW5jKHdtODMxeF90cy0+cGRfaXJxKTsKKwogCS8qIFN0YXJ0IGNvbGxlY3RpbmcgZGF0YSAqLwogCWlmICh3bTgzMXhfdHMtPnByZXNzdXJlKQogCQllbmEgfD0gV004MzFYX1RDSF9aX0VOQTsKQEAgLTE0OSwxNCArMTc2LDE0IEBACiAJCQlXTTgzMVhfVENIX1hfRU5BIHwgV004MzFYX1RDSF9ZX0VOQSB8IFdNODMxWF9UQ0hfWl9FTkEsCiAJCQlXTTgzMVhfVENIX1hfRU5BIHwgV004MzFYX1RDSF9ZX0VOQSB8IGVuYSk7CiAKLQlpbnB1dF9yZXBvcnRfa2V5KHdtODMxeF90cy0+aW5wdXRfZGV2LCBCVE5fVE9VQ0gsIDEpOwotCWlucHV0X3N5bmMod204MzF4X3RzLT5pbnB1dF9kZXYpOwotCiAJd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0lOVEVSUlVQVF9TVEFUVVNfMSwKIAkJCVdNODMxWF9UQ0hQRF9FSU5ULCBXTTgzMVhfVENIUERfRUlOVCk7CiAKIAl3bTgzMXhfdHMtPnBlbl9kb3duID0gdHJ1ZTsKLQllbmFibGVfaXJxKHdtODMxeF90cy0+ZGF0YV9pcnEpOworCisJLyogU3dpdGNoIGZyb20gcGVuIGRvd24gdG8gZGF0YSAqLworCWRldl9kYmcod204MzF4LT5kZXYsICJJUlEgUEQtPkRBVEFcbiIpOworCXNjaGVkdWxlX3dvcmsoJndtODMxeF90cy0+cGRfZGF0YV93b3JrKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE4MiwxMyArMjA5LDI4IEBACiAJc3RydWN0IHdtODMxeF90cyAqd204MzF4X3RzID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gd204MzF4X3RzLT53bTgzMXg7CiAKKwkvKiBTaHV0IHRoZSBjb250cm9sbGVyIGRvd24sIGRpc2FibGluZyBhbGwgb3RoZXIgZnVuY3Rpb25hbGl0eSB0b28gKi8KIAl3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfVE9VQ0hfQ09OVFJPTF8xLAotCQkJV004MzFYX1RDSF9FTkEgfCBXTTgzMVhfVENIX0NWVF9FTkEgfAotCQkJV004MzFYX1RDSF9YX0VOQSB8IFdNODMxWF9UQ0hfWV9FTkEgfAotCQkJV004MzFYX1RDSF9aX0VOQSwgMCk7CisJCQlXTTgzMVhfVENIX0VOQSB8IFdNODMxWF9UQ0hfWF9FTkEgfAorCQkJV004MzFYX1RDSF9ZX0VOQSB8IFdNODMxWF9UQ0hfWl9FTkEsIDApOwogCi0JaWYgKHdtODMxeF90cy0+cGVuX2Rvd24pCisJLyogTWFrZSBzdXJlIGFueSBwZW5kaW5nIElSUXMgYXJlIGRvbmUsIHRoZSBhYm92ZSB3aWxsIHByZXZlbnQKKwkgKiBuZXcgb25lcyBmaXJpbmcuCisJICovCisJc3luY2hyb25pemVfaXJxKHdtODMxeF90cy0+ZGF0YV9pcnEpOworCXN5bmNocm9uaXplX2lycSh3bTgzMXhfdHMtPnBkX2lycSk7CisKKwkvKiBNYWtlIHN1cmUgdGhlIElSUSBjb21wbGV0aW9uIHdvcmsgaXMgcXVpZXNjZWQgKi8KKwlmbHVzaF93b3JrX3N5bmMoJndtODMxeF90cy0+cGRfZGF0YV93b3JrKTsKKworCS8qIElmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHBlbiBkb3duIHRoZW4gbWFrZSBzdXJlIHdlIHJldmVydCBiYWNrCisJICogdG8gcGVuIGRldGVjdGlvbiBzdGF0ZSBmb3IgdGhlIG5leHQgdGltZSB3ZSBzdGFydCB1cC4KKwkgKi8KKwlpZiAod204MzF4X3RzLT5wZW5fZG93bikgewogCQlkaXNhYmxlX2lycSh3bTgzMXhfdHMtPmRhdGFfaXJxKTsKKwkJZW5hYmxlX2lycSh3bTgzMXhfdHMtPnBkX2lycSk7CisJCXdtODMxeF90cy0+cGVuX2Rvd24gPSBmYWxzZTsKKwl9CiB9CiAKIHN0YXRpYyBfX2RldmluaXQgaW50IHdtODMxeF90c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQpAQCAtMTk4LDcgKzI0MCw3IEBACiAJc3RydWN0IHdtODMxeF9wZGF0YSAqY29yZV9wZGF0YSA9IGRldl9nZXRfcGxhdGRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHdtODMxeF90b3VjaF9wZGF0YSAqcGRhdGEgPSBOVUxMOwogCXN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2RldjsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yLCBpcnFmOwogCiAJaWYgKGNvcmVfcGRhdGEpCiAJCXBkYXRhID0gY29yZV9wZGF0YS0+dG91Y2g7CkBAIC0yMTIsNiArMjU0LDcgQEAKIAogCXdtODMxeF90cy0+d204MzF4ID0gd204MzF4OwogCXdtODMxeF90cy0+aW5wdXRfZGV2ID0gaW5wdXRfZGV2OworCUlOSVRfV09SSygmd204MzF4X3RzLT5wZF9kYXRhX3dvcmssIHdtODMxeF9wZF9kYXRhX3dvcmspOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGEgZGlyZWN0IElSUSB1c2UgaXQsIG90aGVyd2lzZSB1c2UgdGhlIGludGVycnVwdApAQCAtMjcwLDkgKzMxMywxNCBAQAogCXdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9UT1VDSF9DT05UUk9MXzEsCiAJCQlXTTgzMVhfVENIX1JBVEVfTUFTSywgNik7CiAKKwlpZiAocGRhdGEgJiYgcGRhdGEtPmRhdGFfaXJxZikKKwkJaXJxZiA9IHBkYXRhLT5kYXRhX2lycWY7CisJZWxzZQorCQlpcnFmID0gSVJRRl9UUklHR0VSX0hJR0g7CisKIAllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHdtODMxeF90cy0+ZGF0YV9pcnEsCiAJCQkJICAgICBOVUxMLCB3bTgzMXhfdHNfZGF0YV9pcnEsCi0JCQkJICAgICBJUlFGX09ORVNIT1QsCisJCQkJICAgICBpcnFmIHwgSVJRRl9PTkVTSE9ULAogCQkJCSAgICAgIlRvdWNoc2NyZWVuIGRhdGEiLCB3bTgzMXhfdHMpOwogCWlmIChlcnJvcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBkYXRhIElSUSAlZDogJWRcbiIsCkBAIC0yODEsOSArMzI5LDE0IEBACiAJfQogCWRpc2FibGVfaXJxKHdtODMxeF90cy0+ZGF0YV9pcnEpOwogCisJaWYgKHBkYXRhICYmIHBkYXRhLT5wZF9pcnFmKQorCQlpcnFmID0gcGRhdGEtPnBkX2lycWY7CisJZWxzZQorCQlpcnFmID0gSVJRRl9UUklHR0VSX0hJR0g7CisKIAllcnJvciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHdtODMxeF90cy0+cGRfaXJxLAogCQkJCSAgICAgTlVMTCwgd204MzF4X3RzX3Blbl9kb3duX2lycSwKLQkJCQkgICAgIElSUUZfT05FU0hPVCwKKwkJCQkgICAgIGlycWYgfCBJUlFGX09ORVNIT1QsCiAJCQkJICAgICAiVG91Y2hzY3JlZW4gcGVuIGRvd24iLCB3bTgzMXhfdHMpOwogCWlmIChlcnJvcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBwZW4gZG93biBJUlEgJWQ6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtbG0zNTMwLmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1sbTM1MzAuYwppbmRleCBlNzA4OWExLi5iMzdlNjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkcy1sbTM1MzAuYworKysgYi9kcml2ZXJzL2xlZHMvbGVkcy1sbTM1MzAuYwpAQCAtMzQ5LDYgKzM0OSw3IEBACiAJe0xNMzUzMF9OQU1FLCAwfSwKIAl7fQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBsbTM1MzBfaWQpOwogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG0zNTMwX2kyY19kcml2ZXIgPSB7CiAJLnByb2JlID0gbG0zNTMwX3Byb2JlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZ3Vlc3QvS2NvbmZpZyBiL2RyaXZlcnMvbGd1ZXN0L0tjb25maWcKaW5kZXggMGFhYTA1OS4uMzRhZTQ5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZ3Vlc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL2xndWVzdC9LY29uZmlnCkBAIC01LDggKzUsMTAgQEAKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmVyeSBzaW1wbGUgbW9kdWxlIHdoaWNoIGFsbG93cyB5b3UgdG8gcnVuCiAJICBtdWx0aXBsZSBpbnN0YW5jZXMgb2YgdGhlIHNhbWUgTGludXgga2VybmVsLCB1c2luZyB0aGUKLQkgICJsZ3Vlc3QiIGNvbW1hbmQgZm91bmQgaW4gdGhlIERvY3VtZW50YXRpb24vbGd1ZXN0IGRpcmVjdG9yeS4KKwkgICJsZ3Vlc3QiIGNvbW1hbmQgZm91bmQgaW4gdGhlIERvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QKKwkgIGRpcmVjdG9yeS4KKwogCSAgTm90ZSB0aGF0ICJsZ3Vlc3QiIGlzIHByb25vdW5jZWQgdG8gcmh5bWUgd2l0aCAiZmVsbCBxdWVzdCIsCi0JICBub3QgInJ1c3R5dmlzb3IiLiAgU2VlIERvY3VtZW50YXRpb24vbGd1ZXN0L2xndWVzdC50eHQuCisJICBub3QgInJ1c3R5dmlzb3IiLiBTZWUgRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QudHh0LgogCiAJICBJZiB1bnN1cmUsIHNheSBOLiAgSWYgY3VyaW91cywgc2F5IE0uICBJZiBtYXNvY2hpc3RpYywgc2F5IFkuCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xndWVzdC9NYWtlZmlsZSBiL2RyaXZlcnMvbGd1ZXN0L01ha2VmaWxlCmluZGV4IDdkNDYzYzIuLjhhYzk0N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGd1ZXN0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbGd1ZXN0L01ha2VmaWxlCkBAIC0xOCw3ICsxOCw3IEBACiBCZWVyOgogCUBmb3IgZiBpbiBQcmVwYXJhdGlvbiBHdWVzdCBEcml2ZXJzIExhdW5jaGVyIEhvc3QgU3dpdGNoZXIgTWFzdGVyeTsgZG8gZWNobyAiez09LSAkJGYgLT09fSI7IG1ha2UgLXMgJCRmOyBkb25lOyBlY2hvICJ7PT0tPT19IgogUHJlcGFyYXRpb24gUHJlcGFyYXRpb24hIEd1ZXN0IERyaXZlcnMgTGF1bmNoZXIgSG9zdCBTd2l0Y2hlciBNYXN0ZXJ5OgotCUBzaCAuLi8uLi9Eb2N1bWVudGF0aW9uL2xndWVzdC9leHRyYWN0ICQoUFJFRklYKSBgZmluZCAuLi8uLi8qIC1uYW1lICcqLltjaFNdJyAtd2hvbGVuYW1lICcqbGd1ZXN0KidgCisJQHNoIC4uLy4uL0RvY3VtZW50YXRpb24vdmlydHVhbC9sZ3Vlc3QvZXh0cmFjdCAkKFBSRUZJWCkgYGZpbmQgLi4vLi4vKiAtbmFtZSAnKi5bY2hTXScgLXdob2xlbmFtZSAnKmxndWVzdConYAogUHVwcHk6CiAJQGNsZWFyCiAJQHByaW50ZiAiICAgICAgX18gIFxuIChfX18oKSdcYDtcbiAvLCAgICAvXGBcbiBcXFxcXFxcIi0tXFxcXFxcICAgXG4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXJhaWQuYyBiL2RyaXZlcnMvbWQvZG0tcmFpZC5jCmluZGV4IDVlZjEzNmMuLmU1ZDg5MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tcmFpZC5jCkBAIC0zOTAsMTMgKzM5MCw2IEBACiAJcmV0dXJuIG1kX3JhaWQ1X2Nvbmdlc3RlZCgmcnMtPm1kLCBiaXRzKTsKIH0KIAotc3RhdGljIHZvaWQgcmFpZF91bnBsdWcoc3RydWN0IGRtX3RhcmdldF9jYWxsYmFja3MgKmNiKQotewotCXN0cnVjdCByYWlkX3NldCAqcnMgPSBjb250YWluZXJfb2YoY2IsIHN0cnVjdCByYWlkX3NldCwgY2FsbGJhY2tzKTsKLQotCW1kX3JhaWQ1X2tpY2tfZGV2aWNlKHJzLT5tZC5wcml2YXRlKTsKLX0KLQogLyoKICAqIENvbnN0cnVjdCBhIFJBSUQ0LzUvNiBtYXBwaW5nOgogICogQXJnczoKQEAgLTQ4Nyw3ICs0ODAsNiBAQAogCX0KIAogCXJzLT5jYWxsYmFja3MuY29uZ2VzdGVkX2ZuID0gcmFpZF9pc19jb25nZXN0ZWQ7Ci0JcnMtPmNhbGxiYWNrcy51bnBsdWdfZm4gPSByYWlkX3VucGx1ZzsKIAlkbV90YWJsZV9hZGRfdGFyZ2V0X2NhbGxiYWNrcyh0aS0+dGFibGUsICZycy0+Y2FsbGJhY2tzKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IGIxMmIzNzcuLjdkNmY3ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTQ0Nyw0OCArNDQ3LDU5IEBACiAKIC8qIFN1cHBvcnQgZm9yIHBsdWdnaW5nLgogICogVGhpcyBtaXJyb3JzIHRoZSBwbHVnZ2luZyBzdXBwb3J0IGluIHJlcXVlc3RfcXVldWUsIGJ1dCBkb2VzIG5vdAotICogcmVxdWlyZSBoYXZpbmcgYSB3aG9sZSBxdWV1ZQorICogcmVxdWlyZSBoYXZpbmcgYSB3aG9sZSBxdWV1ZSBvciByZXF1ZXN0IHN0cnVjdHVyZXMuCisgKiBXZSBhbGxvY2F0ZSBhbiBtZF9wbHVnX2NiIGZvciBlYWNoIG1kIGRldmljZSBhbmQgZWFjaCB0aHJlYWQgaXQgZ2V0cworICogcGx1Z2dlZCBvbi4gIFRoaXMgbGlua3MgdG90IHRoZSBwcml2YXRlIHBsdWdfaGFuZGxlIHN0cnVjdHVyZSBpbiB0aGUKKyAqIHBlcnNvbmFsaXR5IGRhdGEgd2hlcmUgd2Uga2VlcCBhIGNvdW50IG9mIHRoZSBudW1iZXIgb2Ygb3V0c3RhbmRpbmcKKyAqIHBsdWdzIHNvIG90aGVyIGNvZGUgY2FuIHNlZSBpZiBhIHBsdWcgaXMgYWN0aXZlLgogICovCi1zdGF0aWMgdm9pZCBwbHVnZ2VyX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZyA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcGx1Z19oYW5kbGUsIHVucGx1Z193b3JrKTsKLQlwbHVnLT51bnBsdWdfZm4ocGx1Zyk7Ci19Ci1zdGF0aWMgdm9pZCBwbHVnZ2VyX3RpbWVvdXQodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZyA9ICh2b2lkICopZGF0YTsKLQlrYmxvY2tkX3NjaGVkdWxlX3dvcmsoTlVMTCwgJnBsdWctPnVucGx1Z193b3JrKTsKLX0KLXZvaWQgcGx1Z2dlcl9pbml0KHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZywKLQkJICB2b2lkICgqdW5wbHVnX2ZuKShzdHJ1Y3QgcGx1Z19oYW5kbGUgKikpCi17Ci0JcGx1Zy0+dW5wbHVnX2ZsYWcgPSAwOwotCXBsdWctPnVucGx1Z19mbiA9IHVucGx1Z19mbjsKLQlpbml0X3RpbWVyKCZwbHVnLT51bnBsdWdfdGltZXIpOwotCXBsdWctPnVucGx1Z190aW1lci5mdW5jdGlvbiA9IHBsdWdnZXJfdGltZW91dDsKLQlwbHVnLT51bnBsdWdfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXBsdWc7Ci0JSU5JVF9XT1JLKCZwbHVnLT51bnBsdWdfd29yaywgcGx1Z2dlcl93b3JrKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBsdWdnZXJfaW5pdCk7CitzdHJ1Y3QgbWRfcGx1Z19jYiB7CisJc3RydWN0IGJsa19wbHVnX2NiIGNiOworCW1kZGV2X3QgKm1kZGV2OworfTsKIAotdm9pZCBwbHVnZ2VyX3NldF9wbHVnKHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZykKK3N0YXRpYyB2b2lkIHBsdWdnZXJfdW5wbHVnKHN0cnVjdCBibGtfcGx1Z19jYiAqY2IpCiB7Ci0JaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFBMVUdHRURfRkxBRywgJnBsdWctPnVucGx1Z19mbGFnKSkKLQkJbW9kX3RpbWVyKCZwbHVnLT51bnBsdWdfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDMpKzEpOworCXN0cnVjdCBtZF9wbHVnX2NiICptZGNiID0gY29udGFpbmVyX29mKGNiLCBzdHJ1Y3QgbWRfcGx1Z19jYiwgY2IpOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtZGNiLT5tZGRldi0+cGx1Z19jbnQpKQorCQltZF93YWtldXBfdGhyZWFkKG1kY2ItPm1kZGV2LT50aHJlYWQpOworCWtmcmVlKG1kY2IpOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocGx1Z2dlcl9zZXRfcGx1Zyk7CiAKLWludCBwbHVnZ2VyX3JlbW92ZV9wbHVnKHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZykKKy8qIENoZWNrIHRoYXQgYW4gdW5wbHVnIHdha2V1cCB3aWxsIGNvbWUgc2hvcnRseS4KKyAqIElmIG5vdCwgd2FrZXVwIHRoZSBtZCB0aHJlYWQgaW1tZWRpYXRlbHkKKyAqLworaW50IG1kZGV2X2NoZWNrX3BsdWdnZWQobWRkZXZfdCAqbWRkZXYpCiB7Ci0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChQTFVHR0VEX0ZMQUcsICZwbHVnLT51bnBsdWdfZmxhZykpIHsKLQkJZGVsX3RpbWVyKCZwbHVnLT51bnBsdWdfdGltZXIpOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UKKwlzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcgPSBjdXJyZW50LT5wbHVnOworCXN0cnVjdCBtZF9wbHVnX2NiICptZGNiOworCisJaWYgKCFwbHVnKQogCQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBsdWdnZXJfcmVtb3ZlX3BsdWcpOwogCisJbGlzdF9mb3JfZWFjaF9lbnRyeShtZGNiLCAmcGx1Zy0+Y2JfbGlzdCwgY2IubGlzdCkgeworCQlpZiAobWRjYi0+Y2IuY2FsbGJhY2sgPT0gcGx1Z2dlcl91bnBsdWcgJiYKKwkJICAgIG1kY2ItPm1kZGV2ID09IG1kZGV2KSB7CisJCQkvKiBBbHJlYWR5IG9uIHRoZSBsaXN0LCBtb3ZlIHRvIHRvcCAqLworCQkJaWYgKG1kY2IgIT0gbGlzdF9maXJzdF9lbnRyeSgmcGx1Zy0+Y2JfbGlzdCwKKwkJCQkJCSAgICBzdHJ1Y3QgbWRfcGx1Z19jYiwKKwkJCQkJCSAgICBjYi5saXN0KSkKKwkJCQlsaXN0X21vdmUoJm1kY2ItPmNiLmxpc3QsICZwbHVnLT5jYl9saXN0KTsKKwkJCXJldHVybiAxOworCQl9CisJfQorCS8qIE5vdCBjdXJyZW50bHkgb24gdGhlIGNhbGxiYWNrIGxpc3QgKi8KKwltZGNiID0ga21hbGxvYyhzaXplb2YoKm1kY2IpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW1kY2IpCisJCXJldHVybiAwOworCisJbWRjYi0+bWRkZXYgPSBtZGRldjsKKwltZGNiLT5jYi5jYWxsYmFjayA9IHBsdWdnZXJfdW5wbHVnOworCWF0b21pY19pbmMoJm1kZGV2LT5wbHVnX2NudCk7CisJbGlzdF9hZGQoJm1kY2ItPmNiLmxpc3QsICZwbHVnLT5jYl9saXN0KTsKKwlyZXR1cm4gMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1kZGV2X2NoZWNrX3BsdWdnZWQpOwogCiBzdGF0aWMgaW5saW5lIG1kZGV2X3QgKm1kZGV2X2dldChtZGRldl90ICptZGRldikKIHsKQEAgLTUzOCw2ICs1NDksNyBAQAogCWF0b21pY19zZXQoJm1kZGV2LT5hY3RpdmUsIDEpOwogCWF0b21pY19zZXQoJm1kZGV2LT5vcGVuZXJzLCAwKTsKIAlhdG9taWNfc2V0KCZtZGRldi0+YWN0aXZlX2lvLCAwKTsKKwlhdG9taWNfc2V0KCZtZGRldi0+cGx1Z19jbnQsIDApOwogCXNwaW5fbG9ja19pbml0KCZtZGRldi0+d3JpdGVfbG9jayk7CiAJYXRvbWljX3NldCgmbWRkZXYtPmZsdXNoX3BlbmRpbmcsIDApOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1kZGV2LT5zYl93YWl0KTsKQEAgLTMxNTgsNiArMzE3MCw3IEBACiAJbWRkZXYtPmxheW91dCA9IG1kZGV2LT5uZXdfbGF5b3V0OwogCW1kZGV2LT5jaHVua19zZWN0b3JzID0gbWRkZXYtPm5ld19jaHVua19zZWN0b3JzOwogCW1kZGV2LT5kZWx0YV9kaXNrcyA9IDA7CisJbWRkZXYtPmRlZ3JhZGVkID0gMDsKIAlpZiAobWRkZXYtPnBlcnMtPnN5bmNfcmVxdWVzdCA9PSBOVUxMKSB7CiAJCS8qIHRoaXMgaXMgbm93IGFuIGFycmF5IHdpdGhvdXQgcmVkdW5kYW5jeSwgc28KIAkJICogaXQgbXVzdCBhbHdheXMgYmUgaW5fc3luYwpAQCAtNDcyMyw3ICs0NzM2LDYgQEAKIAltZGRldi0+Yml0bWFwX2luZm8uY2h1bmtzaXplID0gMDsKIAltZGRldi0+Yml0bWFwX2luZm8uZGFlbW9uX3NsZWVwID0gMDsKIAltZGRldi0+Yml0bWFwX2luZm8ubWF4X3dyaXRlX2JlaGluZCA9IDA7Ci0JbWRkZXYtPnBsdWcgPSBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBfX21kX3N0b3Bfd3JpdGVzKG1kZGV2X3QgKm1kZGV2KQpAQCAtNjY4OCwxMiArNjcwMCw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChtZF9hbGxvd193cml0ZSk7CiAKLXZvaWQgbWRfdW5wbHVnKG1kZGV2X3QgKm1kZGV2KQotewotCWlmIChtZGRldi0+cGx1ZykKLQkJbWRkZXYtPnBsdWctPnVucGx1Z19mbihtZGRldi0+cGx1Zyk7Ci19Ci0KICNkZWZpbmUgU1lOQ19NQVJLUwkxMAogI2RlZmluZQlTWU5DX01BUktfU1RFUAkoMypIWikKIHZvaWQgbWRfZG9fc3luYyhtZGRldl90ICptZGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvbWQuaCBiL2RyaXZlcnMvbWQvbWQuaAppbmRleCA1MmI0MDczLi4wYjFmZDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL21kLmgKKysrIGIvZHJpdmVycy9tZC9tZC5oCkBAIC0yOSwyNiArMjksNiBAQAogdHlwZWRlZiBzdHJ1Y3QgbWRkZXZfcyBtZGRldl90OwogdHlwZWRlZiBzdHJ1Y3QgbWRrX3JkZXZfcyBtZGtfcmRldl90OwogCi0vKiBnZW5lcmljIHBsdWdnaW5nIHN1cHBvcnQgLSBsaWtlIHRoYXQgcHJvdmlkZWQgd2l0aCByZXF1ZXN0X3F1ZXVlLAotICogYnV0IGRvZXMgbm90IHJlcXVpcmUgYSByZXF1ZXN0X3F1ZXVlCi0gKi8KLXN0cnVjdCBwbHVnX2hhbmRsZSB7Ci0Jdm9pZAkJCSgqdW5wbHVnX2ZuKShzdHJ1Y3QgcGx1Z19oYW5kbGUgKik7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJdW5wbHVnX3RpbWVyOwotCXN0cnVjdCB3b3JrX3N0cnVjdAl1bnBsdWdfd29yazsKLQl1bnNpZ25lZCBsb25nCQl1bnBsdWdfZmxhZzsKLX07Ci0jZGVmaW5lCVBMVUdHRURfRkxBRyAxCi12b2lkIHBsdWdnZXJfaW5pdChzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcsCi0JCSAgdm9pZCAoKnVucGx1Z19mbikoc3RydWN0IHBsdWdfaGFuZGxlICopKTsKLXZvaWQgcGx1Z2dlcl9zZXRfcGx1ZyhzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcpOwotaW50IHBsdWdnZXJfcmVtb3ZlX3BsdWcoc3RydWN0IHBsdWdfaGFuZGxlICpwbHVnKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBwbHVnZ2VyX2ZsdXNoKHN0cnVjdCBwbHVnX2hhbmRsZSAqcGx1ZykKLXsKLQlkZWxfdGltZXJfc3luYygmcGx1Zy0+dW5wbHVnX3RpbWVyKTsKLQljYW5jZWxfd29ya19zeW5jKCZwbHVnLT51bnBsdWdfd29yayk7Ci19Ci0KIC8qCiAgKiBNRCdzICdleHRlbmRlZCcgZGV2aWNlCiAgKi8KQEAgLTE5OSw2ICsxNzksOSBAQAogCWludAkJCQlkZWx0YV9kaXNrcywgbmV3X2xldmVsLCBuZXdfbGF5b3V0OwogCWludAkJCQluZXdfY2h1bmtfc2VjdG9yczsKIAorCWF0b21pY190CQkJcGx1Z19jbnQ7CS8qIElmIGRldmljZSBpcyBleHBlY3RpbmcKKwkJCQkJCQkgKiBtb3JlIGJpb3Mgc29vbi4KKwkJCQkJCQkgKi8KIAlzdHJ1Y3QgbWRrX3RocmVhZF9zCQkqdGhyZWFkOwkvKiBtYW5hZ2VtZW50IHRocmVhZCAqLwogCXN0cnVjdCBtZGtfdGhyZWFkX3MJCSpzeW5jX3RocmVhZDsJLyogZG9pbmcgcmVzeW5jIG9yIHJlY29uc3RydWN0ICovCiAJc2VjdG9yX3QJCQljdXJyX3Jlc3luYzsJLyogbGFzdCBibG9jayBzY2hlZHVsZWQgKi8KQEAgLTMzNiw3ICszMTksNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJCWFsbF9tZGRldnM7CiAKIAlzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwCQkqdG9fcmVtb3ZlOwotCXN0cnVjdCBwbHVnX2hhbmRsZQkJKnBsdWc7IC8qIGlmIHVzZWQgYnkgcGVyc29uYWxpdHkgKi8KIAogCXN0cnVjdCBiaW9fc2V0CQkJKmJpb19zZXQ7CiAKQEAgLTUxNiw3ICs0OTgsNiBAQAogZXh0ZXJuIHZvaWQgbWRfaW50ZWdyaXR5X2FkZF9yZGV2KG1ka19yZGV2X3QgKnJkZXYsIG1kZGV2X3QgKm1kZGV2KTsKIGV4dGVybiBpbnQgc3RyaWN0X3N0cnRvdWxfc2NhbGVkKGNvbnN0IGNoYXIgKmNwLCB1bnNpZ25lZCBsb25nICpyZXMsIGludCBzY2FsZSk7CiBleHRlcm4gdm9pZCByZXN0b3JlX2JpdG1hcF93cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbGUpOwotZXh0ZXJuIHZvaWQgbWRfdW5wbHVnKG1kZGV2X3QgKm1kZGV2KTsKIAogZXh0ZXJuIHZvaWQgbWRkZXZfaW5pdChtZGRldl90ICptZGRldik7CiBleHRlcm4gaW50IG1kX3J1bihtZGRldl90ICptZGRldik7CkBAIC01MzAsNCArNTExLDUgQEAKIAkJCQkgICBtZGRldl90ICptZGRldik7CiBleHRlcm4gc3RydWN0IGJpbyAqYmlvX2FsbG9jX21kZGV2KGdmcF90IGdmcF9tYXNrLCBpbnQgbnJfaW92ZWNzLAogCQkJCSAgIG1kZGV2X3QgKm1kZGV2KTsKK2V4dGVybiBpbnQgbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldl90ICptZGRldik7CiAjZW5kaWYgLyogX01EX01EX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCBjMmEyMWFlLi4yYjdhN2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC01NjUsMTIgKzU2NSw2IEBACiAJCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBtZF9raWNrX2RldmljZShtZGRldl90ICptZGRldikKLXsKLQlibGtfZmx1c2hfcGx1ZyhjdXJyZW50KTsKLQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotfQotCiAvKiBCYXJyaWVycy4uLi4KICAqIFNvbWV0aW1lcyB3ZSBuZWVkIHRvIHN1c3BlbmQgSU8gd2hpbGUgd2UgZG8gc29tZXRoaW5nIGVsc2UsCiAgKiBlaXRoZXIgc29tZSByZXN5bmMvcmVjb3ZlcnksIG9yIHJlY29uZmlndXJlIHRoZSBhcnJheS4KQEAgLTYwMCw3ICs1OTQsNyBAQAogCiAJLyogV2FpdCB1bnRpbCBubyBibG9jayBJTyBpcyB3YWl0aW5nICovCiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsICFjb25mLT5ucl93YWl0aW5nLAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCApOwogCiAJLyogYmxvY2sgYW55IG5ldyBJTyBmcm9tIHN0YXJ0aW5nICovCiAJY29uZi0+YmFycmllcisrOwpAQCAtNjA4LDcgKzYwMiw3IEBACiAJLyogTm93IHdhaXQgZm9yIGFsbCBwZW5kaW5nIElPIHRvIGNvbXBsZXRlICovCiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsCiAJCQkgICAgIWNvbmYtPm5yX3BlbmRpbmcgJiYgY29uZi0+YmFycmllciA8IFJFU1lOQ19ERVBUSCwKLQkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgbWRfa2lja19kZXZpY2UoY29uZi0+bWRkZXYpKTsKKwkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywgKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+cmVzeW5jX2xvY2spOwogfQpAQCAtNjMwLDcgKzYyNCw3IEBACiAJCWNvbmYtPm5yX3dhaXRpbmcrKzsKIAkJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsICFjb25mLT5iYXJyaWVyLAogCQkJCSAgICBjb25mLT5yZXN5bmNfbG9jaywKLQkJCQkgICAgbWRfa2lja19kZXZpY2UoY29uZi0+bWRkZXYpKTsKKwkJCQkgICAgKTsKIAkJY29uZi0+bnJfd2FpdGluZy0tOwogCX0KIAljb25mLT5ucl9wZW5kaW5nKys7CkBAIC02NjYsOCArNjYwLDcgQEAKIAl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwKIAkJCSAgICBjb25mLT5ucl9wZW5kaW5nID09IGNvbmYtPm5yX3F1ZXVlZCsxLAogCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLAotCQkJICAgICh7IGZsdXNoX3BlbmRpbmdfd3JpdGVzKGNvbmYpOwotCQkJICAgICAgIG1kX2tpY2tfZGV2aWNlKGNvbmYtPm1kZGV2KTsgfSkpOworCQkJICAgIGZsdXNoX3BlbmRpbmdfd3JpdGVzKGNvbmYpKTsKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPnJlc3luY19sb2NrKTsKIH0KIHN0YXRpYyB2b2lkIHVuZnJlZXplX2FycmF5KGNvbmZfdCAqY29uZikKQEAgLTcyOSw2ICs3MjIsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fc3luYyA9IChiaW8tPmJpX3J3ICYgUkVRX1NZTkMpOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fZmx1c2hfZnVhID0gKGJpby0+YmlfcncgJiAoUkVRX0ZMVVNIIHwgUkVRX0ZVQSkpOwogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldjsKKwlpbnQgcGx1Z2dlZDsKIAogCS8qCiAJICogUmVnaXN0ZXIgdGhlIG5ldyByZXF1ZXN0IGFuZCB3YWl0IGlmIHRoZSByZWNvbnN0cnVjdGlvbgpAQCAtODIwLDYgKzgxNCw4IEBACiAJICogaW5jIHJlZmNvdW50IG9uIHRoZWlyIHJkZXYuICBSZWNvcmQgdGhlbSBieSBzZXR0aW5nCiAJICogYmlvc1t4XSB0byBiaW8KIAkgKi8KKwlwbHVnZ2VkID0gbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldik7CisKIAlkaXNrcyA9IGNvbmYtPnJhaWRfZGlza3M7CiAgcmV0cnlfd3JpdGU6CiAJYmxvY2tlZF9yZGV2ID0gTlVMTDsKQEAgLTkyNSw3ICs5MjEsNyBAQAogCS8qIEluIGNhc2UgcmFpZDFkIHNudWNrIGluIHRvIGZyZWV6ZV9hcnJheSAqLwogCXdha2VfdXAoJmNvbmYtPndhaXRfYmFycmllcik7CiAKLQlpZiAoZG9fc3luYyB8fCAhYml0bWFwKQorCWlmIChkb19zeW5jIHx8ICFiaXRtYXAgfHwgIXBsdWdnZWQpCiAJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MTYsMTMgKzE1MTIsMTYgQEAKIAljb25mX3QgKmNvbmYgPSBtZGRldi0+cHJpdmF0ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmNvbmYtPnJldHJ5X2xpc3Q7CiAJbWRrX3JkZXZfdCAqcmRldjsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKIAogCW1kX2NoZWNrX3JlY292ZXJ5KG1kZGV2KTsKLQkKKworCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIAlmb3IgKDs7KSB7CiAJCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKIAotCQlmbHVzaF9wZW5kaW5nX3dyaXRlcyhjb25mKTsKKwkJaWYgKGF0b21pY19yZWFkKCZtZGRldi0+cGx1Z19jbnQpID09IDApCisJCQlmbHVzaF9wZW5kaW5nX3dyaXRlcyhjb25mKTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uZi0+ZGV2aWNlX2xvY2ssIGZsYWdzKTsKIAkJaWYgKGxpc3RfZW1wdHkoaGVhZCkpIHsKQEAgLTE1OTMsNiArMTU5Miw3IEBACiAJCX0KIAkJY29uZF9yZXNjaGVkKCk7CiAJfQorCWJsa19maW5pc2hfcGx1ZygmcGx1Zyk7CiB9CiAKIApAQCAtMjAzOSw3ICsyMDM5LDYgQEAKIAogCW1kX3VucmVnaXN0ZXJfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwogCW1kZGV2LT50aHJlYWQgPSBOVUxMOwotCWJsa19zeW5jX3F1ZXVlKG1kZGV2LT5xdWV1ZSk7IC8qIHRoZSB1bnBsdWcgZm4gcmVmZXJlbmNlcyAnY29uZicqLwogCWlmIChjb25mLT5yMWJpb19wb29sKQogCQltZW1wb29sX2Rlc3Ryb3koY29uZi0+cjFiaW9fcG9vbCk7CiAJa2ZyZWUoY29uZi0+bWlycm9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQxMC5jIGIvZHJpdmVycy9tZC9yYWlkMTAuYwppbmRleCAyZGE4M2Q1Li44ZTk0NjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxMC5jCisrKyBiL2RyaXZlcnMvbWQvcmFpZDEwLmMKQEAgLTYzNCwxMiArNjM0LDYgQEAKIAkJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1kX2tpY2tfZGV2aWNlKG1kZGV2X3QgKm1kZGV2KQotewotCWJsa19mbHVzaF9wbHVnKGN1cnJlbnQpOwotCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7Ci19Ci0KIC8qIEJhcnJpZXJzLi4uLgogICogU29tZXRpbWVzIHdlIG5lZWQgdG8gc3VzcGVuZCBJTyB3aGlsZSB3ZSBkbyBzb21ldGhpbmcgZWxzZSwKICAqIGVpdGhlciBzb21lIHJlc3luYy9yZWNvdmVyeSwgb3IgcmVjb25maWd1cmUgdGhlIGFycmF5LgpAQCAtNjY5LDE1ICs2NjMsMTUgQEAKIAogCS8qIFdhaXQgdW50aWwgbm8gYmxvY2sgSU8gaXMgd2FpdGluZyAodW5sZXNzICdmb3JjZScpICovCiAJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2JhcnJpZXIsIGZvcmNlIHx8ICFjb25mLT5ucl93YWl0aW5nLAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCApOwogCiAJLyogYmxvY2sgYW55IG5ldyBJTyBmcm9tIHN0YXJ0aW5nICovCiAJY29uZi0+YmFycmllcisrOwogCi0JLyogTm8gd2FpdCBmb3IgYWxsIHBlbmRpbmcgSU8gdG8gY29tcGxldGUgKi8KKwkvKiBOb3cgd2FpdCBmb3IgYWxsIHBlbmRpbmcgSU8gdG8gY29tcGxldGUgKi8KIAl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwKIAkJCSAgICAhY29uZi0+bnJfcGVuZGluZyAmJiBjb25mLT5iYXJyaWVyIDwgUkVTWU5DX0RFUFRILAotCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLCApOwogCiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiB9CkBAIC02OTgsNyArNjkyLDcgQEAKIAkJY29uZi0+bnJfd2FpdGluZysrOwogCQl3YWl0X2V2ZW50X2xvY2tfaXJxKGNvbmYtPndhaXRfYmFycmllciwgIWNvbmYtPmJhcnJpZXIsCiAJCQkJICAgIGNvbmYtPnJlc3luY19sb2NrLAotCQkJCSAgICBtZF9raWNrX2RldmljZShjb25mLT5tZGRldikpOworCQkJCSAgICApOwogCQljb25mLT5ucl93YWl0aW5nLS07CiAJfQogCWNvbmYtPm5yX3BlbmRpbmcrKzsKQEAgLTczNCw4ICs3MjgsOCBAQAogCXdhaXRfZXZlbnRfbG9ja19pcnEoY29uZi0+d2FpdF9iYXJyaWVyLAogCQkJICAgIGNvbmYtPm5yX3BlbmRpbmcgPT0gY29uZi0+bnJfcXVldWVkKzEsCiAJCQkgICAgY29uZi0+cmVzeW5jX2xvY2ssCi0JCQkgICAgKHsgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZik7Ci0JCQkgICAgICAgbWRfa2lja19kZXZpY2UoY29uZi0+bWRkZXYpOyB9KSk7CisJCQkgICAgZmx1c2hfcGVuZGluZ193cml0ZXMoY29uZikpOworCiAJc3Bpbl91bmxvY2tfaXJxKCZjb25mLT5yZXN5bmNfbG9jayk7CiB9CiAKQEAgLTc2Miw2ICs3NTYsNyBAQAogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZG9fZnVhID0gKGJpby0+YmlfcncgJiBSRVFfRlVBKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCW1ka19yZGV2X3QgKmJsb2NrZWRfcmRldjsKKwlpbnQgcGx1Z2dlZDsKIAogCWlmICh1bmxpa2VseShiaW8tPmJpX3J3ICYgUkVRX0ZMVVNIKSkgewogCQltZF9mbHVzaF9yZXF1ZXN0KG1kZGV2LCBiaW8pOwpAQCAtODcwLDYgKzg2NSw4IEBACiAJICogaW5jIHJlZmNvdW50IG9uIHRoZWlyIHJkZXYuICBSZWNvcmQgdGhlbSBieSBzZXR0aW5nCiAJICogYmlvc1t4XSB0byBiaW8KIAkgKi8KKwlwbHVnZ2VkID0gbWRkZXZfY2hlY2tfcGx1Z2dlZChtZGRldik7CisKIAlyYWlkMTBfZmluZF9waHlzKGNvbmYsIHIxMF9iaW8pOwogIHJldHJ5X3dyaXRlOgogCWJsb2NrZWRfcmRldiA9IE5VTEw7CkBAIC05NDYsOSArOTQzLDggQEAKIAkvKiBJbiBjYXNlIHJhaWQxMGQgc251Y2sgaW4gdG8gZnJlZXplX2FycmF5ICovCiAJd2FrZV91cCgmY29uZi0+d2FpdF9iYXJyaWVyKTsKIAotCWlmIChkb19zeW5jIHx8ICFtZGRldi0+Yml0bWFwKQorCWlmIChkb19zeW5jIHx8ICFtZGRldi0+Yml0bWFwIHx8ICFwbHVnZ2VkKQogCQltZF93YWtldXBfdGhyZWFkKG1kZGV2LT50aHJlYWQpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NDAsOSArMTYzNiwxMSBAQAogCWNvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOwogCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSAmY29uZi0+cmV0cnlfbGlzdDsKIAltZGtfcmRldl90ICpyZGV2OworCXN0cnVjdCBibGtfcGx1ZyBwbHVnOwogCiAJbWRfY2hlY2tfcmVjb3ZlcnkobWRkZXYpOwogCisJYmxrX3N0YXJ0X3BsdWcoJnBsdWcpOwogCWZvciAoOzspIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCkBAIC0xNzE2LDYgKzE3MTQsNyBAQAogCQl9CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KKwlibGtfZmluaXNoX3BsdWcoJnBsdWcpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCBlODY3ZWU0Li40OWJmNWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC0yNywxMiArMjcsMTIgQEAKICAqCiAgKiBXZSBncm91cCBiaXRtYXAgdXBkYXRlcyBpbnRvIGJhdGNoZXMuICBFYWNoIGJhdGNoIGhhcyBhIG51bWJlci4KICAqIFdlIG1heSB3cml0ZSBvdXQgc2V2ZXJhbCBiYXRjaGVzIGF0IG9uY2UsIGJ1dCB0aGF0IGlzbid0IHZlcnkgaW1wb3J0YW50LgotICogY29uZi0+Ym1fd3JpdGUgaXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBiYXRjaCBzdWNjZXNzZnVsbHkgd3JpdHRlbi4KLSAqIGNvbmYtPmJtX2ZsdXNoIGlzIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgYmF0Y2ggdGhhdCB3YXMgY2xvc2VkIHRvCisgKiBjb25mLT5zZXFfd3JpdGUgaXMgdGhlIG51bWJlciBvZiB0aGUgbGFzdCBiYXRjaCBzdWNjZXNzZnVsbHkgd3JpdHRlbi4KKyAqIGNvbmYtPnNlcV9mbHVzaCBpcyB0aGUgbnVtYmVyIG9mIHRoZSBsYXN0IGJhdGNoIHRoYXQgd2FzIGNsb3NlZCB0bwogICogICAgbmV3IGFkZGl0aW9ucy4KICAqIFdoZW4gd2UgZGlzY292ZXIgdGhhdCB3ZSB3aWxsIG5lZWQgdG8gd3JpdGUgdG8gYW55IGJsb2NrIGluIGEgc3RyaXBlCiAgKiAoaW4gYWRkX3N0cmlwZV9iaW8pIHdlIHVwZGF0ZSB0aGUgaW4tbWVtb3J5IGJpdG1hcCBhbmQgcmVjb3JkIGluIHNoLT5ibV9zZXEKLSAqIHRoZSBudW1iZXIgb2YgdGhlIGJhdGNoIGl0IHdpbGwgYmUgaW4uIFRoaXMgaXMgYm1fZmx1c2grMS4KKyAqIHRoZSBudW1iZXIgb2YgdGhlIGJhdGNoIGl0IHdpbGwgYmUgaW4uIFRoaXMgaXMgc2VxX2ZsdXNoKzEuCiAgKiBXaGVuIHdlIGFyZSByZWFkeSB0byBkbyBhIHdyaXRlLCBpZiB0aGF0IGJhdGNoIGhhc24ndCBiZWVuIHdyaXR0ZW4geWV0LAogICogICB3ZSBwbHVnIHRoZSBhcnJheSBhbmQgcXVldWUgdGhlIHN0cmlwZSBmb3IgbGF0ZXIuCiAgKiBXaGVuIGFuIHVucGx1ZyBoYXBwZW5zLCB3ZSBpbmNyZW1lbnQgYm1fZmx1c2gsIHRodXMgY2xvc2luZyB0aGUgY3VycmVudApAQCAtMTk5LDE0ICsxOTksMTIgQEAKIAkJQlVHX09OKCFsaXN0X2VtcHR5KCZzaC0+bHJ1KSk7CiAJCUJVR19PTihhdG9taWNfcmVhZCgmY29uZi0+YWN0aXZlX3N0cmlwZXMpPT0wKTsKIAkJaWYgKHRlc3RfYml0KFNUUklQRV9IQU5ETEUsICZzaC0+c3RhdGUpKSB7Ci0JCQlpZiAodGVzdF9iaXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUpKSB7CisJCQlpZiAodGVzdF9iaXQoU1RSSVBFX0RFTEFZRUQsICZzaC0+c3RhdGUpKQogCQkJCWxpc3RfYWRkX3RhaWwoJnNoLT5scnUsICZjb25mLT5kZWxheWVkX2xpc3QpOwotCQkJCXBsdWdnZXJfc2V0X3BsdWcoJmNvbmYtPnBsdWcpOwotCQkJfSBlbHNlIGlmICh0ZXN0X2JpdChTVFJJUEVfQklUX0RFTEFZLCAmc2gtPnN0YXRlKSAmJgotCQkJCSAgIHNoLT5ibV9zZXEgLSBjb25mLT5zZXFfd3JpdGUgPiAwKSB7CisJCQllbHNlIGlmICh0ZXN0X2JpdChTVFJJUEVfQklUX0RFTEFZLCAmc2gtPnN0YXRlKSAmJgorCQkJCSAgIHNoLT5ibV9zZXEgLSBjb25mLT5zZXFfd3JpdGUgPiAwKQogCQkJCWxpc3RfYWRkX3RhaWwoJnNoLT5scnUsICZjb25mLT5iaXRtYXBfbGlzdCk7Ci0JCQkJcGx1Z2dlcl9zZXRfcGx1ZygmY29uZi0+cGx1Zyk7Ci0JCQl9IGVsc2UgeworCQkJZWxzZSB7CiAJCQkJY2xlYXJfYml0KFNUUklQRV9CSVRfREVMQVksICZzaC0+c3RhdGUpOwogCQkJCWxpc3RfYWRkX3RhaWwoJnNoLT5scnUsICZjb25mLT5oYW5kbGVfbGlzdCk7CiAJCQl9CkBAIC00NjEsNyArNDU5LDcgQEAKIAkJCQkJCSAgICAgPCAoY29uZi0+bWF4X25yX3N0cmlwZXMgKjMvNCkKIAkJCQkJCSAgICAgfHwgIWNvbmYtPmluYWN0aXZlX2Jsb2NrZWQpLAogCQkJCQkJICAgIGNvbmYtPmRldmljZV9sb2NrLAotCQkJCQkJICAgIG1kX3JhaWQ1X2tpY2tfZGV2aWNlKGNvbmYpKTsKKwkJCQkJCSAgICApOwogCQkJCWNvbmYtPmluYWN0aXZlX2Jsb2NrZWQgPSAwOwogCQkJfSBlbHNlCiAJCQkJaW5pdF9zdHJpcGUoc2gsIHNlY3RvciwgcHJldmlvdXMpOwpAQCAtMTQ3MCw3ICsxNDY4LDcgQEAKIAkJd2FpdF9ldmVudF9sb2NrX2lycShjb25mLT53YWl0X2Zvcl9zdHJpcGUsCiAJCQkJICAgICFsaXN0X2VtcHR5KCZjb25mLT5pbmFjdGl2ZV9saXN0KSwKIAkJCQkgICAgY29uZi0+ZGV2aWNlX2xvY2ssCi0JCQkJICAgIGJsa19mbHVzaF9wbHVnKGN1cnJlbnQpKTsKKwkJCQkgICAgKTsKIAkJb3NoID0gZ2V0X2ZyZWVfc3RyaXBlKGNvbmYpOwogCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJYXRvbWljX3NldCgmbnNoLT5jb3VudCwgMSk7CkBAIC0zNjIzLDggKzM2MjEsNyBAQAogCQkJCWF0b21pY19pbmMoJmNvbmYtPnByZXJlYWRfYWN0aXZlX3N0cmlwZXMpOwogCQkJbGlzdF9hZGRfdGFpbCgmc2gtPmxydSwgJmNvbmYtPmhvbGRfbGlzdCk7CiAJCX0KLQl9IGVsc2UKLQkJcGx1Z2dlcl9zZXRfcGx1ZygmY29uZi0+cGx1Zyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBhY3RpdmF0ZV9iaXRfZGVsYXkocmFpZDVfY29uZl90ICpjb25mKQpAQCAtMzY0MSwyMSArMzYzOCw2IEBACiAJfQogfQogCi12b2lkIG1kX3JhaWQ1X2tpY2tfZGV2aWNlKHJhaWQ1X2NvbmZfdCAqY29uZikKLXsKLQlibGtfZmx1c2hfcGx1ZyhjdXJyZW50KTsKLQlyYWlkNV9hY3RpdmF0ZV9kZWxheWVkKGNvbmYpOwotCW1kX3dha2V1cF90aHJlYWQoY29uZi0+bWRkZXYtPnRocmVhZCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChtZF9yYWlkNV9raWNrX2RldmljZSk7Ci0KLXN0YXRpYyB2b2lkIHJhaWQ1X3VucGx1ZyhzdHJ1Y3QgcGx1Z19oYW5kbGUgKnBsdWcpCi17Ci0JcmFpZDVfY29uZl90ICpjb25mID0gY29udGFpbmVyX29mKHBsdWcsIHJhaWQ1X2NvbmZfdCwgcGx1Zyk7Ci0KLQltZF9yYWlkNV9raWNrX2RldmljZShjb25mKTsKLX0KLQogaW50IG1kX3JhaWQ1X2Nvbmdlc3RlZChtZGRldl90ICptZGRldiwgaW50IGJpdHMpCiB7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CkBAIC0zOTQ1LDYgKzM5MjcsNyBAQAogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAJY29uc3QgaW50IHJ3ID0gYmlvX2RhdGFfZGlyKGJpKTsKIAlpbnQgcmVtYWluaW5nOworCWludCBwbHVnZ2VkOwogCiAJaWYgKHVubGlrZWx5KGJpLT5iaV9ydyAmIFJFUV9GTFVTSCkpIHsKIAkJbWRfZmx1c2hfcmVxdWVzdChtZGRldiwgYmkpOwpAQCAtMzk2Myw2ICszOTQ2LDcgQEAKIAliaS0+YmlfbmV4dCA9IE5VTEw7CiAJYmktPmJpX3BoeXNfc2VnbWVudHMgPSAxOwkvKiBvdmVyLWxvYWRlZCB0byBjb3VudCBhY3RpdmUgc3RyaXBlcyAqLwogCisJcGx1Z2dlZCA9IG1kZGV2X2NoZWNrX3BsdWdnZWQobWRkZXYpOwogCWZvciAoO2xvZ2ljYWxfc2VjdG9yIDwgbGFzdF9zZWN0b3I7IGxvZ2ljYWxfc2VjdG9yICs9IFNUUklQRV9TRUNUT1JTKSB7CiAJCURFRklORV9XQUlUKHcpOwogCQlpbnQgZGlza3MsIGRhdGFfZGlza3M7CkBAIC00MDU3LDcgKzQwNDEsNyBAQAogCQkJCSAqIGFkZCBmYWlsZWQgZHVlIHRvIG92ZXJsYXAuICBGbHVzaCBldmVyeXRoaW5nCiAJCQkJICogYW5kIHdhaXQgYSB3aGlsZQogCQkJCSAqLwotCQkJCW1kX3JhaWQ1X2tpY2tfZGV2aWNlKGNvbmYpOworCQkJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CiAJCQkJcmVsZWFzZV9zdHJpcGUoc2gpOwogCQkJCXNjaGVkdWxlKCk7CiAJCQkJZ290byByZXRyeTsKQEAgLTQwNzcsNiArNDA2MSw5IEBACiAJCX0KIAkJCQogCX0KKwlpZiAoIXBsdWdnZWQpCisJCW1kX3dha2V1cF90aHJlYWQobWRkZXYtPnRocmVhZCk7CisKIAlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7CiAJcmVtYWluaW5nID0gcmFpZDVfZGVjX2JpX3BoeXNfc2VnbWVudHMoYmkpOwogCXNwaW5fdW5sb2NrX2lycSgmY29uZi0+ZGV2aWNlX2xvY2spOwpAQCAtNDQ3OCwyNCArNDQ2NSwzMCBAQAogCXN0cnVjdCBzdHJpcGVfaGVhZCAqc2g7CiAJcmFpZDVfY29uZl90ICpjb25mID0gbWRkZXYtPnByaXZhdGU7CiAJaW50IGhhbmRsZWQ7CisJc3RydWN0IGJsa19wbHVnIHBsdWc7CiAKIAlwcl9kZWJ1ZygiKysrIHJhaWQ1ZCBhY3RpdmVcbiIpOwogCiAJbWRfY2hlY2tfcmVjb3ZlcnkobWRkZXYpOwogCisJYmxrX3N0YXJ0X3BsdWcoJnBsdWcpOwogCWhhbmRsZWQgPSAwOwogCXNwaW5fbG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAl3aGlsZSAoMSkgewogCQlzdHJ1Y3QgYmlvICpiaW87CiAKLQkJaWYgKGNvbmYtPnNlcV9mbHVzaCAhPSBjb25mLT5zZXFfd3JpdGUpIHsKLQkJCWludCBzZXEgPSBjb25mLT5zZXFfZmx1c2g7CisJCWlmIChhdG9taWNfcmVhZCgmbWRkZXYtPnBsdWdfY250KSA9PSAwICYmCisJCSAgICAhbGlzdF9lbXB0eSgmY29uZi0+Yml0bWFwX2xpc3QpKSB7CisJCQkvKiBOb3cgaXMgYSBnb29kIHRpbWUgdG8gZmx1c2ggc29tZSBiaXRtYXAgdXBkYXRlcyAqLworCQkJY29uZi0+c2VxX2ZsdXNoKys7CiAJCQlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAkJCWJpdG1hcF91bnBsdWcobWRkZXYtPmJpdG1hcCk7CiAJCQlzcGluX2xvY2tfaXJxKCZjb25mLT5kZXZpY2VfbG9jayk7Ci0JCQljb25mLT5zZXFfd3JpdGUgPSBzZXE7CisJCQljb25mLT5zZXFfd3JpdGUgPSBjb25mLT5zZXFfZmx1c2g7CiAJCQlhY3RpdmF0ZV9iaXRfZGVsYXkoY29uZik7CiAJCX0KKwkJaWYgKGF0b21pY19yZWFkKCZtZGRldi0+cGx1Z19jbnQpID09IDApCisJCQlyYWlkNV9hY3RpdmF0ZV9kZWxheWVkKGNvbmYpOwogCiAJCXdoaWxlICgoYmlvID0gcmVtb3ZlX2Jpb19mcm9tX3JldHJ5KGNvbmYpKSkgewogCQkJaW50IG9rOwpAQCAtNDUyNSw2ICs0NTE4LDcgQEAKIAlzcGluX3VubG9ja19pcnEoJmNvbmYtPmRldmljZV9sb2NrKTsKIAogCWFzeW5jX3R4X2lzc3VlX3BlbmRpbmdfYWxsKCk7CisJYmxrX2ZpbmlzaF9wbHVnKCZwbHVnKTsKIAogCXByX2RlYnVnKCItLS0gcmFpZDVkIGluYWN0aXZlXG4iKTsKIH0KQEAgLTUxNDEsOCArNTEzNSw2IEBACiAJCSAgICAgICBtZG5hbWUobWRkZXYpKTsKIAltZF9zZXRfYXJyYXlfc2VjdG9ycyhtZGRldiwgcmFpZDVfc2l6ZShtZGRldiwgMCwgMCkpOwogCi0JcGx1Z2dlcl9pbml0KCZjb25mLT5wbHVnLCByYWlkNV91bnBsdWcpOwotCW1kZGV2LT5wbHVnID0gJmNvbmYtPnBsdWc7CiAJaWYgKG1kZGV2LT5xdWV1ZSkgewogCQlpbnQgY2h1bmtfc2l6ZTsKIAkJLyogcmVhZC1haGVhZCBzaXplIG11c3QgY292ZXIgdHdvIHdob2xlIHN0cmlwZXMsIHdoaWNoCkBAIC01MTU5LDcgKzUxNTEsNiBAQAogCiAJCW1kZGV2LT5xdWV1ZS0+YmFja2luZ19kZXZfaW5mby5jb25nZXN0ZWRfZGF0YSA9IG1kZGV2OwogCQltZGRldi0+cXVldWUtPmJhY2tpbmdfZGV2X2luZm8uY29uZ2VzdGVkX2ZuID0gcmFpZDVfY29uZ2VzdGVkOwotCQltZGRldi0+cXVldWUtPnF1ZXVlX2xvY2sgPSAmY29uZi0+ZGV2aWNlX2xvY2s7CiAKIAkJY2h1bmtfc2l6ZSA9IG1kZGV2LT5jaHVua19zZWN0b3JzIDw8IDk7CiAJCWJsa19xdWV1ZV9pb19taW4obWRkZXYtPnF1ZXVlLCBjaHVua19zaXplKTsKQEAgLTUxOTIsNyArNTE4Myw2IEBACiAJbWRkZXYtPnRocmVhZCA9IE5VTEw7CiAJaWYgKG1kZGV2LT5xdWV1ZSkKIAkJbWRkZXYtPnF1ZXVlLT5iYWNraW5nX2Rldl9pbmZvLmNvbmdlc3RlZF9mbiA9IE5VTEw7Ci0JcGx1Z2dlcl9mbHVzaCgmY29uZi0+cGx1Zyk7IC8qIHRoZSB1bnBsdWcgZm4gcmVmZXJlbmNlcyAnY29uZicqLwogCWZyZWVfY29uZihjb25mKTsKIAltZGRldi0+cHJpdmF0ZSA9IE5VTEw7CiAJbWRkZXYtPnRvX3JlbW92ZSA9ICZyYWlkNV9hdHRyc19ncm91cDsKQEAgLTU2ODgsNiArNTY3OCw3IEBACiBzdGF0aWMgdm9pZCAqcmFpZDQ1X3Rha2VvdmVyX3JhaWQwKG1kZGV2X3QgKm1kZGV2LCBpbnQgbGV2ZWwpCiB7CiAJc3RydWN0IHJhaWQwX3ByaXZhdGVfZGF0YSAqcmFpZDBfcHJpdiA9IG1kZGV2LT5wcml2YXRlOworCXNlY3Rvcl90IHNlY3RvcnM7CiAKIAkvKiBmb3IgcmFpZDAgdGFrZW92ZXIgb25seSBvbmUgem9uZSBpcyBzdXBwb3J0ZWQgKi8KIAlpZiAocmFpZDBfcHJpdi0+bnJfc3RyaXBfem9uZXMgPiAxKSB7CkBAIC01Njk2LDYgKzU2ODcsOSBAQAogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKKwlzZWN0b3JzID0gcmFpZDBfcHJpdi0+c3RyaXBfem9uZVswXS56b25lX2VuZDsKKwlzZWN0b3JfZGl2KHNlY3RvcnMsIHJhaWQwX3ByaXYtPnN0cmlwX3pvbmVbMF0ubmJfZGV2KTsKKwltZGRldi0+ZGV2X3NlY3RvcnMgPSBzZWN0b3JzOwogCW1kZGV2LT5uZXdfbGV2ZWwgPSBsZXZlbDsKIAltZGRldi0+bmV3X2xheW91dCA9IEFMR09SSVRITV9QQVJJVFlfTjsKIAltZGRldi0+bmV3X2NodW5rX3NlY3RvcnMgPSBtZGRldi0+Y2h1bmtfc2VjdG9yczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuaCBiL2RyaXZlcnMvbWQvcmFpZDUuaAppbmRleCA4ZDU2M2E0Li4zY2E3N2EyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmgKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5oCkBAIC00MDAsOCArNDAwLDYgQEAKIAkJCQkJICAgICogQ2xlYXJlZCB3aGVuIGEgc3luYyBjb21wbGV0ZXMuCiAJCQkJCSAgICAqLwogCi0Jc3RydWN0IHBsdWdfaGFuZGxlCXBsdWc7Ci0KIAkvKiBwZXIgY3B1IHZhcmlhYmxlcyAqLwogCXN0cnVjdCByYWlkNV9wZXJjcHUgewogCQlzdHJ1Y3QgcGFnZQkqc3BhcmVfcGFnZTsgLyogVXNlZCB3aGVuIGNoZWNraW5nIFAvUSBpbiByYWlkNiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jCmluZGV4IDU0NjZkNDcuLmFhZTQwZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMKQEAgLTUzMywxNiArNTMzLDcgQEAKIAlpZiAodGRhX2ZhaWwocmV0KSkKIAkJZ290byBmYWlsOwogCi0JcmVnc1tSX01QRF0gICA9ICgweDc3ICYgcGQpOwotCi0Jc3dpdGNoIChwcml2LT5tb2RlKSB7Ci0JY2FzZSBUREExODI3MV9BTkFMT0c6Ci0JCXJlZ3NbUl9NUERdICAmPSB+MHgwODsKLQkJYnJlYWs7Ci0JY2FzZSBUREExODI3MV9ESUdJVEFMOgotCQlyZWdzW1JfTVBEXSAgfD0gIDB4MDg7Ci0JCWJyZWFrOwotCX0KKwlyZWdzW1JfTVBEXSAgID0gKDB4N2YgJiBwZCk7CiAKIAlkaXYgPSAgKChkICogKGZyZXEgLyAxMDAwKSkgPDwgNykgLyAxMjU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKaW5kZXggOWFkNDQ1NC4uZDg4NGY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTU3OSw4ICs1NzksOCBAQAogI2RlZmluZSBSRjMgMgogCXUzMiByZl9kZWZhdWx0WzNdOwogCXUzMiByZl9mcmVxWzNdOwotCXU4IHByb2dfY2FsWzNdOwotCXU4IHByb2dfdGFiWzNdOworCXMzMiBwcm9nX2NhbFszXTsKKwlzMzIgcHJvZ190YWJbM107CiAKIAlpID0gdGRhMTgyNzFfbG9va3VwX3JmX2JhbmQoZmUsICZmcmVxLCBOVUxMKTsKIApAQCAtNjAyLDMyICs2MDIsMzMgQEAKIAkJCXJldHVybiBiY2FsOwogCiAJCXRkYTE4MjcxX2NhbGNfcmZfY2FsKGZlLCAmcmZfZnJlcVtyZl0pOwotCQlwcm9nX3RhYltyZl0gPSByZWdzW1JfRUIxNF07CisJCXByb2dfdGFiW3JmXSA9IChzMzIpcmVnc1tSX0VCMTRdOwogCiAJCWlmICgxID09IGJjYWwpCi0JCQlwcm9nX2NhbFtyZl0gPSB0ZGExODI3MV9jYWxpYnJhdGVfcmYoZmUsIHJmX2ZyZXFbcmZdKTsKKwkJCXByb2dfY2FsW3JmXSA9CisJCQkJKHMzMil0ZGExODI3MV9jYWxpYnJhdGVfcmYoZmUsIHJmX2ZyZXFbcmZdKTsKIAkJZWxzZQogCQkJcHJvZ19jYWxbcmZdID0gcHJvZ190YWJbcmZdOwogCiAJCXN3aXRjaCAocmYpIHsKIAkJY2FzZSBSRjE6CiAJCQltYXBbaV0ucmZfYTEgPSAwOwotCQkJbWFwW2ldLnJmX2IxID0gKHMzMikocHJvZ19jYWxbUkYxXSAtIHByb2dfdGFiW1JGMV0pOworCQkJbWFwW2ldLnJmX2IxID0gKHByb2dfY2FsW1JGMV0gLSBwcm9nX3RhYltSRjFdKTsKIAkJCW1hcFtpXS5yZjEgICA9IHJmX2ZyZXFbUkYxXSAvIDEwMDA7CiAJCQlicmVhazsKIAkJY2FzZSBSRjI6Ci0JCQlkaXZpZGVuZCA9IChzMzIpKHByb2dfY2FsW1JGMl0gLSBwcm9nX3RhYltSRjJdKSAtCi0JCQkJICAgKHMzMikocHJvZ19jYWxbUkYxXSArIHByb2dfdGFiW1JGMV0pOworCQkJZGl2aWRlbmQgPSAocHJvZ19jYWxbUkYyXSAtIHByb2dfdGFiW1JGMl0gLQorCQkJCSAgICBwcm9nX2NhbFtSRjFdICsgcHJvZ190YWJbUkYxXSk7CiAJCQlkaXZpc29yID0gKHMzMikocmZfZnJlcVtSRjJdIC0gcmZfZnJlcVtSRjFdKSAvIDEwMDA7CiAJCQltYXBbaV0ucmZfYTEgPSAoZGl2aWRlbmQgLyBkaXZpc29yKTsKIAkJCW1hcFtpXS5yZjIgICA9IHJmX2ZyZXFbUkYyXSAvIDEwMDA7CiAJCQlicmVhazsKIAkJY2FzZSBSRjM6Ci0JCQlkaXZpZGVuZCA9IChzMzIpKHByb2dfY2FsW1JGM10gLSBwcm9nX3RhYltSRjNdKSAtCi0JCQkJICAgKHMzMikocHJvZ19jYWxbUkYyXSArIHByb2dfdGFiW1JGMl0pOworCQkJZGl2aWRlbmQgPSAocHJvZ19jYWxbUkYzXSAtIHByb2dfdGFiW1JGM10gLQorCQkJCSAgICBwcm9nX2NhbFtSRjJdICsgcHJvZ190YWJbUkYyXSk7CiAJCQlkaXZpc29yID0gKHMzMikocmZfZnJlcVtSRjNdIC0gcmZfZnJlcVtSRjJdKSAvIDEwMDA7CiAJCQltYXBbaV0ucmZfYTIgPSAoZGl2aWRlbmQgLyBkaXZpc29yKTsKLQkJCW1hcFtpXS5yZl9iMiA9IChzMzIpKHByb2dfY2FsW1JGMl0gLSBwcm9nX3RhYltSRjJdKTsKKwkJCW1hcFtpXS5yZl9iMiA9IChwcm9nX2NhbFtSRjJdIC0gcHJvZ190YWJbUkYyXSk7CiAJCQltYXBbaV0ucmYzICAgPSByZl9mcmVxW1JGM10gLyAxMDAwOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLW1hcHMuYwppbmRleCBlN2Y4NGM3Li4zZDViNmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtbWFwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1tYXBzLmMKQEAgLTIyOSw4ICsyMjksNyBAQAogc3RhdGljIHN0cnVjdCB0ZGExODI3MV9tYXAgdGRhMTgyNzFfcmZfYmFuZFtdID0gewogCXsgLnJmbWF4ID0gIDQ3OTAwLCAudmFsID0gMHgwMCB9LAogCXsgLnJmbWF4ID0gIDYxMTAwLCAudmFsID0gMHgwMSB9LAotLyoJeyAucmZtYXggPSAxNTI2MDAsIC52YWwgPSAweDAyIH0sICovCi0JeyAucmZtYXggPSAxMjEyMDAsIC52YWwgPSAweDAyIH0sCisJeyAucmZtYXggPSAxNTI2MDAsIC52YWwgPSAweDAyIH0sCiAJeyAucmZtYXggPSAxNjQ3MDAsIC52YWwgPSAweDAzIH0sCiAJeyAucmZtYXggPSAyMDM1MDAsIC52YWwgPSAweDA0IH0sCiAJeyAucmZtYXggPSA0NTc4MDAsIC52YWwgPSAweDA1IH0sCkBAIC00NDgsNyArNDQ3LDcgQEAKIAl7IC5yZm1heCA9IDE1MDAwMCwgLnZhbCA9IDB4YjAgfSwKIAl7IC5yZm1heCA9IDE1MTAwMCwgLnZhbCA9IDB4YjEgfSwKIAl7IC5yZm1heCA9IDE1MjAwMCwgLnZhbCA9IDB4YjcgfSwKLQl7IC5yZm1heCA9IDE1MzAwMCwgLnZhbCA9IDB4YmQgfSwKKwl7IC5yZm1heCA9IDE1MjYwMCwgLnZhbCA9IDB4YmQgfSwKIAl7IC5yZm1heCA9IDE1NDAwMCwgLnZhbCA9IDB4MjAgfSwKIAl7IC5yZm1heCA9IDE1NTAwMCwgLnZhbCA9IDB4MjIgfSwKIAl7IC5yZm1heCA9IDE1NjAwMCwgLnZhbCA9IDB4MjQgfSwKQEAgLTQ1OSw3ICs0NTgsNyBAQAogCXsgLnJmbWF4ID0gMTYxMDAwLCAudmFsID0gMHgyZCB9LAogCXsgLnJmbWF4ID0gMTYzMDAwLCAudmFsID0gMHgyZSB9LAogCXsgLnJmbWF4ID0gMTY0MDAwLCAudmFsID0gMHgyZiB9LAotCXsgLnJmbWF4ID0gMTY1MDAwLCAudmFsID0gMHgzMCB9LAorCXsgLnJmbWF4ID0gMTY0NzAwLCAudmFsID0gMHgzMCB9LAogCXsgLnJmbWF4ID0gMTY2MDAwLCAudmFsID0gMHgxMSB9LAogCXsgLnJmbWF4ID0gMTY3MDAwLCAudmFsID0gMHgxMiB9LAogCXsgLnJmbWF4ID0gMTY4MDAwLCAudmFsID0gMHgxMyB9LApAQCAtNTEwLDcgKzUwOSw4IEBACiAJeyAucmZtYXggPSAyMzYwMDAsIC52YWwgPSAweDFiIH0sCiAJeyAucmZtYXggPSAyMzcwMDAsIC52YWwgPSAweDFjIH0sCiAJeyAucmZtYXggPSAyNDAwMDAsIC52YWwgPSAweDFkIH0sCi0JeyAucmZtYXggPSAyNDIwMDAsIC52YWwgPSAweDFmIH0sCisJeyAucmZtYXggPSAyNDIwMDAsIC52YWwgPSAweDFlIH0sCisJeyAucmZtYXggPSAyNDQwMDAsIC52YWwgPSAweDFmIH0sCiAJeyAucmZtYXggPSAyNDcwMDAsIC52YWwgPSAweDIwIH0sCiAJeyAucmZtYXggPSAyNDkwMDAsIC52YWwgPSAweDIxIH0sCiAJeyAucmZtYXggPSAyNTIwMDAsIC52YWwgPSAweDIyIH0sCkBAIC02MjQsNyArNjI0LDcgQEAKIAl7IC5yZm1heCA9IDQ1MzAwMCwgLnZhbCA9IDB4OTMgfSwKIAl7IC5yZm1heCA9IDQ1NDAwMCwgLnZhbCA9IDB4OTQgfSwKIAl7IC5yZm1heCA9IDQ1NjAwMCwgLnZhbCA9IDB4OTYgfSwKLQl7IC5yZm1heCA9IDQ1NzAwMCwgLnZhbCA9IDB4OTggfSwKKwl7IC5yZm1heCA9IDQ1NzgwMCwgLnZhbCA9IDB4OTggfSwKIAl7IC5yZm1heCA9IDQ2MTAwMCwgLnZhbCA9IDB4MTEgfSwKIAl7IC5yZm1heCA9IDQ2ODAwMCwgLnZhbCA9IDB4MTIgfSwKIAl7IC5yZm1heCA9IDQ3MjAwMCwgLnZhbCA9IDB4MTMgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYwppbmRleCA5NTUyNTQwLi4wM2Y5NmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCkBAIC0zOCw3ICszOCw3IEBACiAJREVCU1RBVFVTKTsKIAogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xIgotI2RlZmluZSBEUklWRVJfTkFNRSAiVGVjaG5pc2F0L0IyQzIgRmxleENvcCBJSS9JSWIvSUlJIERpZ2l0YWwgVFYgUENJIERyaXZlciIKKyNkZWZpbmUgRFJJVkVSX05BTUUgImZsZXhjb3AtcGNpIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJQYXRyaWNrIEJvZXR0Y2hlciA8cGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZT4iCiAKIHN0cnVjdCBmbGV4Y29wX3BjaSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggZmU0Zjg5NC4uYzU0NTAzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtMzU2LDEzICszNTYsMTUgQEAKIAlzZWxlY3QgRFZCX1REQTgyNlggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NUVjAyODggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0lYMjUwNVYgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjAyOTkgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgTE1FIERNMDQvUVFCT1ggRFZCLVMgVVNCMi4wIC4KIAogY29uZmlnIERWQl9VU0JfVEVDSE5JU0FUX1VTQjIKIAl0cmlzdGF0ZSAiVGVjaG5pc2F0IERWQi1TL1MyIFVTQjIuMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgotCXNlbGVjdCBEVkJfU1RCMDg5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBEVkJfU1RCNjEwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDkweCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWNjExMHggaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIFRlY2huaXNhdCBVU0IyIERWQi1TL1MyIGRldmljZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKaW5kZXggOTdhZjI2Ni4uNjUyMTRhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCkBAIC0yMTYyLDcgKzIxNjIsNyBAQAogCQkuYWdjMV9wdDMgICAgICAgPSA5OCwKIAkJLmFnYzFfc2xvcGUxICAgID0gMCwKIAkJLmFnYzFfc2xvcGUyICAgID0gMTY3LAotCQkuYWdjMV9wdDEgICAgICAgPSA5OCwKKwkJLmFnYzJfcHQxICAgICAgID0gOTgsCiAJCS5hZ2MyX3B0MiAgICAgICA9IDI1NSwKIAkJLmFnYzJfc2xvcGUxICAgID0gMTA0LAogCQkuYWdjMl9zbG9wZTIgICAgPSAwLApAQCAtMjQ0MCwxMSArMjQ0MCwxMSBAQAogCWRpYjA3MDBfc2V0X2kyY19zcGVlZChhZGFwLT5kZXYsIDM0MCk7CiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4OTAsICZ0ZmU3MDkwcHZyX2RpYjcwMDBwX2NvbmZpZ1swXSk7CiAKLQlkaWI3MDkwX3NsYXZlX3Jlc2V0KGFkYXAtPmZlKTsKLQogCWlmIChhZGFwLT5mZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWRpYjcwOTBfc2xhdmVfcmVzZXQoYWRhcC0+ZmUpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL25nZW5lL25nZW5lLWNvcmUuYwppbmRleCBjY2MyZDFhLi42OTI3YzcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9uZ2VuZS9uZ2VuZS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvbmdlbmUvbmdlbmUtY29yZS5jCkBAIC0xNTIwLDYgKzE1MjAsNyBAQAogCWlmIChkZXYtPmNpLmVuICYmIChpbyAmIE5HRU5FX0lPX1RTT1VUKSkgewogCQlkdmJfY2FfZW41MDIyMV9pbml0KGFkYXB0ZXIsIGRldi0+Y2kuZW4sIDAsIDEpOwogCQlzZXRfdHJhbnNmZXIoY2hhbiwgMSk7CisJCWNoYW4tPmRldi0+Y2hhbm5lbFsyXS5EYXRhRm9ybWF0RmxhZ3MgPSBERl9TV0FQMzI7CiAJCXNldF90cmFuc2ZlcigmY2hhbi0+ZGV2LT5jaGFubmVsWzJdLCAxKTsKIAkJZHZiX3JlZ2lzdGVyX2RldmljZShhZGFwdGVyLCAmY2hhbi0+Y2lfZGV2LAogCQkJCSAgICAmbmdlbmVfZHZiZGV2X2NpLCAodm9pZCAqKSBjaGFuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9tZWRpYS1lbnRpdHkuYyBiL2RyaXZlcnMvbWVkaWEvbWVkaWEtZW50aXR5LmMKaW5kZXggMjM2NDBlZC4uMDU2MTM4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9tZWRpYS1lbnRpdHkuYworKysgYi9kcml2ZXJzL21lZGlhL21lZGlhLWVudGl0eS5jCkBAIC0zNzgsNyArMzc4LDYgQEAKIAogc3RhdGljIGludCBfX21lZGlhX2VudGl0eV9zZXR1cF9saW5rX25vdGlmeShzdHJ1Y3QgbWVkaWFfbGluayAqbGluaywgdTMyIGZsYWdzKQogewotCWNvbnN0IHUzMiBtYXNrID0gTUVESUFfTE5LX0ZMX0VOQUJMRUQ7CiAJaW50IHJldDsKIAogCS8qIE5vdGlmeSBib3RoIGVudGl0aWVzLiAqLwpAQCAtMzk1LDcgKzM5NCw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCi0JbGluay0+ZmxhZ3MgPSAobGluay0+ZmxhZ3MgJiB+bWFzaykgfCAoZmxhZ3MgJiBtYXNrKTsKKwlsaW5rLT5mbGFncyA9IGZsYWdzOwogCWxpbmstPnJldmVyc2UtPmZsYWdzID0gbGluay0+ZmxhZ3M7CiAKIAlyZXR1cm4gMDsKQEAgLTQxNyw2ICs0MTYsNyBAQAogICovCiBpbnQgX19tZWRpYV9lbnRpdHlfc2V0dXBfbGluayhzdHJ1Y3QgbWVkaWFfbGluayAqbGluaywgdTMyIGZsYWdzKQogeworCWNvbnN0IHUzMiBtYXNrID0gTUVESUFfTE5LX0ZMX0VOQUJMRUQ7CiAJc3RydWN0IG1lZGlhX2RldmljZSAqbWRldjsKIAlzdHJ1Y3QgbWVkaWFfZW50aXR5ICpzb3VyY2UsICpzaW5rOwogCWludCByZXQgPSAtRUJVU1k7CkBAIC00MjQsNiArNDI0LDEwIEBACiAJaWYgKGxpbmsgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBUaGUgbm9uLW1vZGlmaWFibGUgbGluayBmbGFncyBtdXN0IG5vdCBiZSBtb2RpZmllZC4gKi8KKwlpZiAoKGxpbmstPmZsYWdzICYgfm1hc2spICE9IChmbGFncyAmIH5tYXNrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAobGluay0+ZmxhZ3MgJiBNRURJQV9MTktfRkxfSU1NVVRBQkxFKQogCQlyZXR1cm4gbGluay0+ZmxhZ3MgPT0gZmxhZ3MgPyAwIDogLUVJTlZBTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCmluZGV4IGRjM2YwNGMuLjg3YmFkNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiAhISEgbm90IHRlc3RlZCwgaW4gbXkgY2FyZCB0aGlzIGRvZXMndCB3b3JrICEhISAqLworLyogISEhIG5vdCB0ZXN0ZWQsIGluIG15IGNhcmQgdGhpcyBkb2Vzbid0IHdvcmsgISEhICovCiBzdGF0aWMgaW50IGZtcjJfc2V0dm9sdW1lKHN0cnVjdCBmbXIyICpkZXYpCiB7CiAJaW50IHZvbFsxNl0gPSB7IDB4MDIxLCAweDA4NCwgMHgwOTAsIDB4MTA0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9zYWE3NzA2aC5jCmluZGV4IDU4NTY4MGYuLmIxMTkzZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vc2FhNzcwNmguYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3NhYTc3MDZoLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCUwMnggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0Jc3RhdGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzcwNmhfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3NzA2aF9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzZCA9ICZzdGF0ZS0+c2Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3RlZjY4NjIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vdGVmNjg2Mi5jCmluZGV4IDdjMGQ3NzcuLjA5OTFlMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vdGVmNjg2Mi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vdGVmNjg2Mi5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHRlZjY4NjJfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZWY2ODYyX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHN0YXRlID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXN0YXRlLT5mcmVxID0gVEVGNjg2Ml9MT19GUkVROwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYy9pbW9uLmMgYi9kcml2ZXJzL21lZGlhL3JjL2ltb24uYwppbmRleCBlYmQ2OGVkLi44ZmMwZjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JjL2ltb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JjL2ltb24uYwpAQCAtNDYsNyArNDYsNyBAQAogI2RlZmluZSBNT0RfQVVUSE9SCSJKYXJvZCBXaWxzb24gPGphcm9kQHdpbHNvbmV0LmNvbT4iCiAjZGVmaW5lIE1PRF9ERVNDCSJEcml2ZXIgZm9yIFNvdW5kR3JhcGggaU1PTiBNdWx0aU1lZGlhIElSL0Rpc3BsYXkiCiAjZGVmaW5lIE1PRF9OQU1FCSJpbW9uIgotI2RlZmluZSBNT0RfVkVSU0lPTgkiMC45LjIiCisjZGVmaW5lIE1PRF9WRVJTSU9OCSIwLjkuMyIKIAogI2RlZmluZSBESVNQTEFZX01JTk9SX0JBU0UJMTQ0CiAjZGVmaW5lIERFVklDRV9OQU1FCSJsY2QlZCIKQEAgLTQ2MCw4ICs0NjAsOSBAQAogfQogCiAvKioKLSAqIFNlbmRzIGEgcGFja2V0IHRvIHRoZSBkZXZpY2UgLS0gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZAotICogd2l0aCBpY3R4LT5sb2NrIGhlbGQuCisgKiBTZW5kcyBhIHBhY2tldCB0byB0aGUgZGV2aWNlIC0tIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aAorICogaWN0eC0+bG9jayBoZWxkLCBvciBpdHMgdW5sb2NrL2xvY2sgc2VxdWVuY2Ugd2hpbGUgd2FpdGluZyBmb3IgdHgKKyAqIHRvIGNvbXBsZXRlIGNhbi93aWxsIGxlYWQgdG8gYSBkZWFkbG9jay4KICAqLwogc3RhdGljIGludCBzZW5kX3BhY2tldChzdHJ1Y3QgaW1vbl9jb250ZXh0ICppY3R4KQogewpAQCAtOTkxLDEyICs5OTIsMjEgQEAKICAqIHRoZSBpTU9OIHJlbW90ZXMsIGFuZCB0aG9zZSB1c2VkIGJ5IHRoZSBXaW5kb3dzIE1DRSByZW1vdGVzICh3aGljaCBpcwogICogcmVhbGx5IGp1c3QgUkMtNiksIGJ1dCBvbmx5IG9uZSBvciB0aGUgb3RoZXIgYXQgYSB0aW1lLCBhcyB0aGUgc2lnbmFscwogICogYXJlIGRlY29kZWQgb25ib2FyZCB0aGUgcmVjZWl2ZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB0d28gZGlmZmVyZW50IHdheXMsIG9uZSB3YXkgaXMgZnJvbQorICogcmNfcmVnaXN0ZXJfZGV2aWNlLCBmb3IgaW5pdGlhbCBwcm90b2NvbCBzZWxlY3Rpb24vc2V0dXAsIGFuZCB0aGUgb3RoZXIgaXMKKyAqIHZpYSBhIHVzZXJzcGFjZS1pbml0aWF0ZWQgcHJvdG9jb2wgY2hhbmdlIHJlcXVlc3QsIGVpdGhlciBieSBkaXJlY3Qgc3lzZnMKKyAqIHByb2RkaW5nIG9yIGJ5IHNvbWV0aGluZyBsaWtlIGlyLWtleXRhYmxlLiBJbiB0aGUgcmNfcmVnaXN0ZXJfZGV2aWNlIGNhc2UsCisgKiB0aGUgaW1vbiBjb250ZXh0IGxvY2sgaXMgYWxyZWFkeSBoZWxkLCBidXQgd2hlbiBpbml0aWF0ZWQgZnJvbSB1c2Vyc3BhY2UsCisgKiBpdCBpcyBub3QsIHNvIHdlIG11c3QgYWNxdWlyZSBpdCBwcmlvciB0byBjYWxsaW5nIHNlbmRfcGFja2V0LCB3aGljaAorICogcmVxdWlyZXMgdGhhdCB0aGUgbG9jayBpcyBoZWxkLgogICovCiBzdGF0aWMgaW50IGltb25faXJfY2hhbmdlX3Byb3RvY29sKHN0cnVjdCByY19kZXYgKnJjLCB1NjQgcmNfdHlwZSkKIHsKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBpbW9uX2NvbnRleHQgKmljdHggPSByYy0+cHJpdjsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBpY3R4LT5kZXY7CisJYm9vbCB1bmxvY2sgPSBmYWxzZTsKIAl1bnNpZ25lZCBjaGFyIGlyX3Byb3RvX3BhY2tldFtdID0gewogCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDg2IH07CiAKQEAgLTEwMjksNiArMTAzOSwxMSBAQAogCiAJbWVtY3B5KGljdHgtPnVzYl90eF9idWYsICZpcl9wcm90b19wYWNrZXQsIHNpemVvZihpcl9wcm90b19wYWNrZXQpKTsKIAorCWlmICghbXV0ZXhfaXNfbG9ja2VkKCZpY3R4LT5sb2NrKSkgeworCQl1bmxvY2sgPSB0cnVlOworCQltdXRleF9sb2NrKCZpY3R4LT5sb2NrKTsKKwl9CisKIAlyZXR2YWwgPSBzZW5kX3BhY2tldChpY3R4KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKQEAgLTEwMzcsNiArMTA1Miw5IEBACiAJaWN0eC0+cGFkX21vdXNlID0gZmFsc2U7CiAKIG91dDoKKwlpZiAodW5sb2NrKQorCQltdXRleF91bmxvY2soJmljdHgtPmxvY2spOworCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjEzNCw2ICsyMTUyLDcgQEAKIAkJZ290byByZGV2X3NldHVwX2ZhaWxlZDsKIAl9CiAKKwltdXRleF91bmxvY2soJmljdHgtPmxvY2spOwogCXJldHVybiBpY3R4OwogCiByZGV2X3NldHVwX2ZhaWxlZDoKQEAgLTIyMDUsNiArMjIyNCw3IEBACiAJCWdvdG8gdXJiX3N1Ym1pdF9mYWlsZWQ7CiAJfQogCisJbXV0ZXhfdW5sb2NrKCZpY3R4LT5sb2NrKTsKIAlyZXR1cm4gaWN0eDsKIAogdXJiX3N1Ym1pdF9mYWlsZWQ6CkBAIC0yMjk5LDYgKzIzMTksOCBAQAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBpY3R4KTsKIAogCWlmIChpZm51bSA9PSAwKSB7CisJCW11dGV4X2xvY2soJmljdHgtPmxvY2spOworCiAJCWlmIChwcm9kdWN0ID09IDB4ZmZkYyAmJiBpY3R4LT5yZl9kZXZpY2UpIHsKIAkJCXN5c2ZzX2VyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50ZXJmYWNlLT5kZXYua29iaiwKIAkJCQkJCSAgICAgICAmaW1vbl9yZl9hdHRyX2dyb3VwKTsKQEAgLTIzMDksMTMgKzIzMzEsMTQgQEAKIAogCQlpZiAoaWN0eC0+ZGlzcGxheV9zdXBwb3J0ZWQpCiAJCQlpbW9uX2luaXRfZGlzcGxheShpY3R4LCBpbnRlcmZhY2UpOworCisJCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CiAJfQogCiAJZGV2X2luZm8oZGV2LCAiaU1PTiBkZXZpY2UgKCUwNHg6JTA0eCwgaW50ZiVkKSBvbiAiCiAJCSAidXNiPCVkOiVkPiBpbml0aWFsaXplZFxuIiwgdmVuZG9yLCBwcm9kdWN0LCBpZm51bSwKIAkJIHVzYmRldi0+YnVzLT5idXNudW0sIHVzYmRldi0+ZGV2bnVtKTsKIAotCW11dGV4X3VubG9jaygmaWN0eC0+bG9jayk7CiAJbXV0ZXhfdW5sb2NrKCZkcml2ZXJfbG9jayk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvaXRlLWNpci5jIGIvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKaW5kZXggYWNjYWY2Yy4uNDM5MDhhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9pdGUtY2lyLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMgYi9kcml2ZXJzL21lZGlhL3JjL21jZXVzYi5jCmluZGV4IDA0NGZiN2EuLjBjMjczZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvbWNldXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYy9tY2V1c2IuYwpAQCAtMjIwLDYgKzIyMCw4IEBACiAJeyBVU0JfREVWSUNFKFZFTkRPUl9QSElMSVBTLCAweDIwNmMpIH0sCiAJLyogUGhpbGlwcy9TcGluZWwgcGx1cyBJUiB0cmFuc2NlaXZlciBmb3IgQVNVUyAqLwogCXsgVVNCX0RFVklDRShWRU5ET1JfUEhJTElQUywgMHgyMDg4KSB9LAorCS8qIFBoaWxpcHMgSVIgdHJhbnNjZWl2ZXIgKERlbGwgYnJhbmRlZCkgKi8KKwl7IFVTQl9ERVZJQ0UoVkVORE9SX1BISUxJUFMsIDB4MjA5MykgfSwKIAkvKiBSZWFsdGVrIE1DRSBJUiBSZWNlaXZlciBhbmQgY2FyZCByZWFkZXIgKi8KIAl7IFVTQl9ERVZJQ0UoVkVORE9SX1JFQUxURUssIDB4MDE2MSksCiAJICAuZHJpdmVyX2luZm8gPSBNVUxUSUZVTkNUSU9OIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JjL3JjLW1haW4uYyBiL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jCmluZGV4IGY1M2Y5YzYuLmEyNzA2NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmMvcmMtbWFpbi5jCkBAIC03MDcsNyArNzA3LDggQEAKIHsKIAlzdHJ1Y3QgcmNfZGV2ICpyZGV2ID0gaW5wdXRfZ2V0X2RydmRhdGEoaWRldik7CiAKLQlyZGV2LT5jbG9zZShyZGV2KTsKKwkgaWYgKHJkZXYpCisJCXJkZXYtPmNsb3NlKHJkZXYpOwogfQogCiAvKiBjbGFzcyBmb3IgL3N5cy9jbGFzcy9yYyAqLwpAQCAtNzMzLDYgKzczNCw3IEBACiAJeyBSQ19UWVBFX1NPTlksCQkic29ueSIJCX0sCiAJeyBSQ19UWVBFX1JDNV9TWiwJInJjLTUtc3oiCX0sCiAJeyBSQ19UWVBFX0xJUkMsCQkibGlyYyIJCX0sCisJeyBSQ19UWVBFX09USEVSLAkib3RoZXIiCQl9LAogfTsKIAogI2RlZmluZSBQUk9UT19OT05FCSJub25lIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IDQ0OThiOTQuLjAwZjUxZGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTg3NSw3ICs4NzUsNyBAQAogY29uZmlnIFZJREVPX01YMwogCXRyaXN0YXRlICJpLk1YM3ggQ2FtZXJhIFNlbnNvciBJbnRlcmZhY2UgZHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIE1YM19JUFUgJiYgU09DX0NBTUVSQQotCXNlbGVjdCBWSURFT0JVRl9ETUFfQ09OVElHCisJc2VsZWN0IFZJREVPQlVGMl9ETUFfQ09OVElHCiAJc2VsZWN0IE1YM19WSURFTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2NGwyIGRyaXZlciBmb3IgdGhlIGkuTVgzeCBDYW1lcmEgU2Vuc29yIEludGVyZmFjZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCmluZGV4IGM2ZTJjYTMuLjZmYmMzNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKQEAgLTM1MCw5ICszNTAsMTcgQEAKIAogCQkvKiBObyBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBidXQgY2FuIGhhdmUgYnVmZmVycyBhbGxvY2F0ZWQgKi8KIAkJaWYgKHR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYKSB7CisJCQkvKiBJZiB0aGUgbW9kdWxlIHBhcmFtcyBkaWRuJ3QgaW5oaWJpdCBJRFggLi4uICovCiAJCQlpZiAoY3gtPnN0cmVhbV9idWZmZXJzW3R5cGVdICE9IDApIHsKIAkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbdHlwZV0gPSAwOwotCQkJCWN4MThfc3RyZWFtX2ZyZWUoJmN4LT5zdHJlYW1zW3R5cGVdKTsKKwkJCQkvKgorCQkJCSAqIEJlZm9yZSBjYWxsaW5nIGN4MThfc3RyZWFtX2ZyZWUoKSwKKwkJCQkgKiBjaGVjayBpZiB0aGUgSURYIHN0cmVhbSB3YXMgYWN0dWFsbHkgc2V0IHVwLgorCQkJCSAqIE5lZWRlZCwgc2luY2UgdGhlIGN4MThfcHJvYmUoKSBlcnJvciBwYXRoCisJCQkJICogZXhpdHMgdGhyb3VnaCBoZXJlIGFzIHdlbGwgYXMgbm9ybWFsIGNsZWFuIHVwCisJCQkJICovCisJCQkJaWYgKGN4LT5zdHJlYW1zW3R5cGVdLmJ1ZmZlcnMgIT0gMCkKKwkJCQkJY3gxOF9zdHJlYW1fZnJlZSgmY3gtPnN0cmVhbXNbdHlwZV0pOwogCQkJfQogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKaW5kZXggM2I2ZTdmMi4uY2FhYjFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L0tjb25maWcKQEAgLTIyLDYgKzIyLDcgQEAKIAlzZWxlY3QgRFZCX0NYMjQxMTYgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1NUVjA5MDAgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0RTMzAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDM2NyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIxMzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCmluZGV4IGM4MjBlMmYuLjNmNDQyMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwpAQCAtNTI0LDcgKzUyNCw3IEBACiAJZm9yICh0b2RvID0gMzI7IHRvZG8gPiAwOyB0b2RvIC09IGJpdHMpIHsKIAkJZXYucHVsc2UgPSBzYW1wbGVzICYgMHg4MDAwMDAwMCA/IGZhbHNlIDogdHJ1ZTsKIAkJYml0cyA9IG1pbih0b2RvLCAzMlUgLSBmbHMoZXYucHVsc2UgPyBzYW1wbGVzIDogfnNhbXBsZXMpKTsKLQkJZXYuZHVyYXRpb24gPSAoYml0cyAqIE5TRUNfUEVSX1NFQykgLyAoMTAwMCAqIGlyX3NhbXBsZXJhdGUpOworCQlldi5kdXJhdGlvbiA9IChiaXRzICogKE5TRUNfUEVSX1NFQyAvIDEwMDApKSAvIGlyX3NhbXBsZXJhdGU7CiAJCWlyX3Jhd19ldmVudF9zdG9yZV93aXRoX2ZpbHRlcihpci0+ZGV2LCAmZXYpOwogCQlzYW1wbGVzIDw8PSBiaXRzOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW14MDc0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2lteDA3NC5jCmluZGV4IDFhMTE2OTEuLjAzODJlYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW14MDc0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbXgwNzQuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiBzdGF0aWMgaW50IGlteDA3NF9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJCSB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX29wcyBpbXgwNzRfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMKaW5kZXggNWUxYzlhOC4uMzAzZmZhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtNTI3OTBfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtNTI3OTBfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5jCmluZGV4IDUwM2JkNzkuLjQ3MmE2OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuYwpAQCAtMjE1LDIwICsyMTUsMjEgQEAKIAl9CiAKIAlzd2l0Y2ggKHhjbGtzZWwpIHsKLQljYXNlIDA6CisJY2FzZSBJU1BfWENMS19BOgogCQlpc3BfcmVnX2Nscl9zZXQoaXNwLCBPTUFQM19JU1BfSU9NRU1fTUFJTiwgSVNQX1RDVFJMX0NUUkwsCiAJCQkJSVNQVENUUkxfQ1RSTF9ESVZBX01BU0ssCiAJCQkJZGl2aXNvciA8PCBJU1BUQ1RSTF9DVFJMX0RJVkFfU0hJRlQpOwogCQlkZXZfZGJnKGlzcC0+ZGV2LCAiaXNwX3NldF94Y2xrKCk6IGNhbV94Y2xrYSBzZXQgdG8gJWQgSHpcbiIsCiAJCQljdXJyZW50eGNsayk7CiAJCWJyZWFrOwotCWNhc2UgMToKKwljYXNlIElTUF9YQ0xLX0I6CiAJCWlzcF9yZWdfY2xyX3NldChpc3AsIE9NQVAzX0lTUF9JT01FTV9NQUlOLCBJU1BfVENUUkxfQ1RSTCwKIAkJCQlJU1BUQ1RSTF9DVFJMX0RJVkJfTUFTSywKIAkJCQlkaXZpc29yIDw8IElTUFRDVFJMX0NUUkxfRElWQl9TSElGVCk7CiAJCWRldl9kYmcoaXNwLT5kZXYsICJpc3Bfc2V0X3hjbGsoKTogY2FtX3hjbGtiIHNldCB0byAlZCBIelxuIiwKIAkJCWN1cnJlbnR4Y2xrKTsKIAkJYnJlYWs7CisJY2FzZSBJU1BfWENMS19OT05FOgogCWRlZmF1bHQ6CiAJCW9tYXAzaXNwX3B1dChpc3ApOwogCQlkZXZfZGJnKGlzcC0+ZGV2LCAiSVNQX0VSUjogaXNwX3NldF94Y2xrKCk6IEludmFsaWQgcmVxdWVzdGVkICIKQEAgLTIzNywxMyArMjM4LDEzIEBACiAJfQogCiAJLyogRG8gd2UgZ28gZnJvbSBzdGFibGUgd2hhdGV2ZXIgdG8gY2xvY2s/ICovCi0JaWYgKGRpdmlzb3IgPj0gMiAmJiBpc3AtPnhjbGtfZGl2aXNvclt4Y2xrc2VsXSA8IDIpCisJaWYgKGRpdmlzb3IgPj0gMiAmJiBpc3AtPnhjbGtfZGl2aXNvclt4Y2xrc2VsIC0gMV0gPCAyKQogCQlvbWFwM2lzcF9nZXQoaXNwKTsKIAkvKiBTdG9wcGluZyB0aGUgY2xvY2suICovCi0JZWxzZSBpZiAoZGl2aXNvciA8IDIgJiYgaXNwLT54Y2xrX2Rpdmlzb3JbeGNsa3NlbF0gPj0gMikKKwllbHNlIGlmIChkaXZpc29yIDwgMiAmJiBpc3AtPnhjbGtfZGl2aXNvclt4Y2xrc2VsIC0gMV0gPj0gMikKIAkJb21hcDNpc3BfcHV0KGlzcCk7CiAKLQlpc3AtPnhjbGtfZGl2aXNvclt4Y2xrc2VsXSA9IGRpdmlzb3I7CisJaXNwLT54Y2xrX2Rpdmlzb3JbeGNsa3NlbCAtIDFdID0gZGl2aXNvcjsKIAogCW9tYXAzaXNwX3B1dChpc3ApOwogCkBAIC0yODUsNyArMjg2LDggQEAKICAqLwogdm9pZCBvbWFwM2lzcF9jb25maWd1cmVfYnJpZGdlKHN0cnVjdCBpc3BfZGV2aWNlICppc3AsCiAJCQkgICAgICAgZW51bSBjY2RjX2lucHV0X2VudGl0eSBpbnB1dCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXNwX3BhcmFsbGVsX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpc3BfcGFyYWxsZWxfcGxhdGZvcm1fZGF0YSAqcGRhdGEsCisJCQkgICAgICAgdW5zaWduZWQgaW50IHNoaWZ0KQogewogCXUzMiBpc3BjdHJsX3ZhbDsKIApAQCAtMjk4LDkgKzMwMCw5IEBACiAJc3dpdGNoIChpbnB1dCkgewogCWNhc2UgQ0NEQ19JTlBVVF9QQVJBTExFTDoKIAkJaXNwY3RybF92YWwgfD0gSVNQQ1RSTF9QQVJfU0VSX0NMS19TRUxfUEFSQUxMRUw7Ci0JCWlzcGN0cmxfdmFsIHw9IHBkYXRhLT5kYXRhX2xhbmVfc2hpZnQgPDwgSVNQQ1RSTF9TSElGVF9TSElGVDsKIAkJaXNwY3RybF92YWwgfD0gcGRhdGEtPmNsa19wb2wgPDwgSVNQQ1RSTF9QQVJfQ0xLX1BPTF9TSElGVDsKIAkJaXNwY3RybF92YWwgfD0gcGRhdGEtPmJyaWRnZSA8PCBJU1BDVFJMX1BBUl9CUklER0VfU0hJRlQ7CisJCXNoaWZ0ICs9IHBkYXRhLT5kYXRhX2xhbmVfc2hpZnQgKiAyOwogCQlicmVhazsKIAogCWNhc2UgQ0NEQ19JTlBVVF9DU0kyQToKQEAgLTMxOSw2ICszMjEsOCBAQAogCQlyZXR1cm47CiAJfQogCisJaXNwY3RybF92YWwgfD0gKChzaGlmdC8yKSA8PCBJU1BDVFJMX1NISUZUX1NISUZUKSAmIElTUENUUkxfU0hJRlRfTUFTSzsKKwogCWlzcGN0cmxfdmFsICY9IH5JU1BDVFJMX1NZTkNfREVURUNUX01BU0s7CiAJaXNwY3RybF92YWwgfD0gSVNQQ1RSTF9TWU5DX0RFVEVDVF9WU1JJU0U7CiAKQEAgLTY1OCw2ICs2NjIsOCBAQAogCiAJLyogQXBwbHkgcG93ZXIgY2hhbmdlIHRvIGNvbm5lY3RlZCBub24tbm9kZXMuICovCiAJcmV0ID0gaXNwX3BpcGVsaW5lX3BtX3Bvd2VyKGVudGl0eSwgY2hhbmdlKTsKKwlpZiAocmV0IDwgMCkKKwkJZW50aXR5LT51c2VfY291bnQgLT0gY2hhbmdlOwogCiAJbXV0ZXhfdW5sb2NrKCZlbnRpdHktPnBhcmVudC0+Z3JhcGhfbXV0ZXgpOwogCkBAIC04NzIsNiArODc4LDkgQEAKIAkJfQogCX0KIAorCWlmIChmYWlsdXJlIDwgMCkKKwkJaXNwLT5uZWVkc19yZXNldCA9IHRydWU7CisKIAlyZXR1cm4gZmFpbHVyZTsKIH0KIApAQCAtODg0LDcgKzg5Myw4IEBACiAgKiBzaW5nbGUtc2hvdCBvciBjb250aW51b3VzIG1vZGUuCiAgKgogICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bCwgb3IgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZmFpbGVkIHZpZGVvOjpzX3N0cmVhbQotICogb3BlcmF0aW9uIG90aGVyd2lzZS4KKyAqIG9wZXJhdGlvbiBvdGhlcndpc2UuIFRoZSBwaXBlbGluZSBzdGF0ZSBpcyBub3QgdXBkYXRlZCB3aGVuIHRoZSBvcGVyYXRpb24KKyAqIGZhaWxzLCBleGNlcHQgd2hlbiBzdG9wcGluZyB0aGUgcGlwZWxpbmUuCiAgKi8KIGludCBvbWFwM2lzcF9waXBlbGluZV9zZXRfc3RyZWFtKHN0cnVjdCBpc3BfcGlwZWxpbmUgKnBpcGUsCiAJCQkJIGVudW0gaXNwX3BpcGVsaW5lX3N0cmVhbV9zdGF0ZSBzdGF0ZSkKQEAgLTg5NSw3ICs5MDUsOSBAQAogCQlyZXQgPSBpc3BfcGlwZWxpbmVfZGlzYWJsZShwaXBlKTsKIAllbHNlCiAJCXJldCA9IGlzcF9waXBlbGluZV9lbmFibGUocGlwZSwgc3RhdGUpOwotCXBpcGUtPnN0cmVhbV9zdGF0ZSA9IHN0YXRlOworCisJaWYgKHJldCA9PSAwIHx8IHN0YXRlID09IElTUF9QSVBFTElORV9TVFJFQU1fU1RPUFBFRCkKKwkJcGlwZS0+c3RyZWFtX3N0YXRlID0gc3RhdGU7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ4MSw2ICsxNDkzLDEwIEBACiAJaWYgKC0taXNwLT5yZWZfY291bnQgPT0gMCkgewogCQlpc3BfZGlzYWJsZV9pbnRlcnJ1cHRzKGlzcCk7CiAJCWlzcF9zYXZlX2N0eChpc3ApOworCQlpZiAoaXNwLT5uZWVkc19yZXNldCkgeworCQkJaXNwX3Jlc2V0KGlzcCk7CisJCQlpc3AtPm5lZWRzX3Jlc2V0ID0gZmFsc2U7CisJCX0KIAkJaXNwX2Rpc2FibGVfY2xvY2tzKGlzcCk7CiAJfQogCW11dGV4X3VubG9jaygmaXNwLT5pc3BfbXV0ZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwLmgKaW5kZXggY2Y1MjE0ZS4uMjYyMGM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3AuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcC5oCkBAIC0xMzIsNyArMTMyLDYgQEAKIAogLyoqCiAgKiBzdHJ1Y3QgaXNwX3BhcmFsbGVsX3BsYXRmb3JtX2RhdGEgLSBQYXJhbGxlbCBpbnRlcmZhY2UgcGxhdGZvcm0gZGF0YQotICogQHdpZHRoOiBQYXJhbGxlbCBidXMgd2lkdGggaW4gYml0cyAoOCwgMTAsIDExIG9yIDEyKQogICogQGRhdGFfbGFuZV9zaGlmdDogRGF0YSBsYW5lIHNoaWZ0ZXIKICAqCQkwIC0gQ0FNRVhUWzEzOjBdIC0+IENBTVsxMzowXQogICoJCTEgLSBDQU1FWFRbMTM6Ml0gLT4gQ0FNWzExOjBdCkBAIC0xNDYsNyArMTQ1LDYgQEAKICAqCQlJU1BDVFJMX1BBUl9CUklER0VfQkVORElBTiAtIEJpZyBlbmRpYW4KICAqLwogc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhIHsKLQl1bnNpZ25lZCBpbnQgd2lkdGg7CiAJdW5zaWduZWQgaW50IGRhdGFfbGFuZV9zaGlmdDoyOwogCXVuc2lnbmVkIGludCBjbGtfcG9sOjE7CiAJdW5zaWduZWQgaW50IGJyaWRnZTo0OwpAQCAtMjYyLDYgKzI2MCw3IEBACiAJLyogSVNQIE9iaiAqLwogCXNwaW5sb2NrX3Qgc3RhdF9sb2NrOwkvKiBjb21tb24gbG9jayBmb3Igc3RhdGlzdGljIGRyaXZlcnMgKi8KIAlzdHJ1Y3QgbXV0ZXggaXNwX211dGV4OwkvKiBGb3IgaGFuZGxpbmcgcmVmX2NvdW50IGZpZWxkICovCisJYm9vbCBuZWVkc19yZXNldDsKIAlpbnQgaGFzX2NvbnRleHQ7CiAJaW50IHJlZl9jb3VudDsKIAl1bnNpZ25lZCBpbnQgYXV0b2lkbGU7CkBAIC0zMTEsMTEgKzMxMCwxMiBAQAogCQkJCSBlbnVtIGlzcF9waXBlbGluZV9zdHJlYW1fc3RhdGUgc3RhdGUpOwogdm9pZCBvbWFwM2lzcF9jb25maWd1cmVfYnJpZGdlKHN0cnVjdCBpc3BfZGV2aWNlICppc3AsCiAJCQkgICAgICAgZW51bSBjY2RjX2lucHV0X2VudGl0eSBpbnB1dCwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXNwX3BhcmFsbGVsX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXNwX3BhcmFsbGVsX3BsYXRmb3JtX2RhdGEgKnBkYXRhLAorCQkJICAgICAgIHVuc2lnbmVkIGludCBzaGlmdCk7CiAKLSNkZWZpbmUgSVNQX1hDTEtfTk9ORQkJCS0xCi0jZGVmaW5lIElTUF9YQ0xLX0EJCQkwCi0jZGVmaW5lIElTUF9YQ0xLX0IJCQkxCisjZGVmaW5lIElTUF9YQ0xLX05PTkUJCQkwCisjZGVmaW5lIElTUF9YQ0xLX0EJCQkxCisjZGVmaW5lIElTUF9YQ0xLX0IJCQkyCiAKIHN0cnVjdCBpc3BfZGV2aWNlICpvbWFwM2lzcF9nZXQoc3RydWN0IGlzcF9kZXZpY2UgKmlzcCk7CiB2b2lkIG9tYXAzaXNwX3B1dChzdHJ1Y3QgaXNwX2RldmljZSAqaXNwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwY2NkYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmMKaW5kZXggNWZmOWQxNC4uMzlkNTAxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BjY2RjLmMKQEAgLTQzLDYgKzQzLDEyIEBACiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgY2NkY19mbXRzW10gPSB7CiAJVjRMMl9NQlVTX0ZNVF9ZOF8xWDgsCisJVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCwKKwlWNEwyX01CVVNfRk1UX1kxMl8xWDEyLAorCVY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCwKKwlWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDgsCisJVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4LAorCVY0TDJfTUJVU19GTVRfU0dCUkc4XzFYOCwKIAlWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCwKIAlWNEwyX01CVVNfRk1UX1NSR0dCMTBfMVgxMCwKIAlWNEwyX01CVVNfRk1UX1NCR0dSMTBfMVgxMCwKQEAgLTExMTAsMjEgKzExMTYsMzggQEAKIAlzdHJ1Y3QgaXNwX3BhcmFsbGVsX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gTlVMTDsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNlbnNvcjsKIAlzdHJ1Y3QgdjRsMl9tYnVzX2ZyYW1lZm10ICpmb3JtYXQ7CisJY29uc3Qgc3RydWN0IGlzcF9mb3JtYXRfaW5mbyAqZm10X2luZm87CisJc3RydWN0IHY0bDJfc3ViZGV2X2Zvcm1hdCBmbXRfc3JjOworCXVuc2lnbmVkIGludCBkZXB0aF9vdXQ7CisJdW5zaWduZWQgaW50IGRlcHRoX2luID0gMDsKIAlzdHJ1Y3QgbWVkaWFfcGFkICpwYWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc2hpZnQ7CiAJdTMyIHN5bl9tb2RlOwogCXUzMiBjY2RjX3BhdHRlcm47CiAKLQlpZiAoY2NkYy0+aW5wdXQgPT0gQ0NEQ19JTlBVVF9QQVJBTExFTCkgewotCQlwYWQgPSBtZWRpYV9lbnRpdHlfcmVtb3RlX3NvdXJjZSgmY2NkYy0+cGFkc1tDQ0RDX1BBRF9TSU5LXSk7Ci0JCXNlbnNvciA9IG1lZGlhX2VudGl0eV90b192NGwyX3N1YmRldihwYWQtPmVudGl0eSk7CisJcGFkID0gbWVkaWFfZW50aXR5X3JlbW90ZV9zb3VyY2UoJmNjZGMtPnBhZHNbQ0NEQ19QQURfU0lOS10pOworCXNlbnNvciA9IG1lZGlhX2VudGl0eV90b192NGwyX3N1YmRldihwYWQtPmVudGl0eSk7CisJaWYgKGNjZGMtPmlucHV0ID09IENDRENfSU5QVVRfUEFSQUxMRUwpCiAJCXBkYXRhID0gJigoc3RydWN0IGlzcF92NGwyX3N1YmRldnNfZ3JvdXAgKilzZW5zb3ItPmhvc3RfcHJpdikKIAkJCS0+YnVzLnBhcmFsbGVsOworCisJLyogQ29tcHV0ZSBzaGlmdCB2YWx1ZSBmb3IgbGFuZSBzaGlmdGVyIHRvIGNvbmZpZ3VyZSB0aGUgYnJpZGdlLiAqLworCWZtdF9zcmMucGFkID0gcGFkLT5pbmRleDsKKwlmbXRfc3JjLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRTsKKwlpZiAoIXY0bDJfc3ViZGV2X2NhbGwoc2Vuc29yLCBwYWQsIGdldF9mbXQsIE5VTEwsICZmbXRfc3JjKSkgeworCQlmbXRfaW5mbyA9IG9tYXAzaXNwX3ZpZGVvX2Zvcm1hdF9pbmZvKGZtdF9zcmMuZm9ybWF0LmNvZGUpOworCQlkZXB0aF9pbiA9IGZtdF9pbmZvLT5icHA7CiAJfQogCi0Jb21hcDNpc3BfY29uZmlndXJlX2JyaWRnZShpc3AsIGNjZGMtPmlucHV0LCBwZGF0YSk7CisJZm10X2luZm8gPSBvbWFwM2lzcF92aWRlb19mb3JtYXRfaW5mbworCQkoaXNwLT5pc3BfY2NkYy5mb3JtYXRzW0NDRENfUEFEX1NJTktdLmNvZGUpOworCWRlcHRoX291dCA9IGZtdF9pbmZvLT5icHA7CiAKLQljY2RjLT5zeW5jaWYuZGF0c3ogPSBwZGF0YSA/IHBkYXRhLT53aWR0aCA6IDEwOworCXNoaWZ0ID0gZGVwdGhfaW4gLSBkZXB0aF9vdXQ7CisJb21hcDNpc3BfY29uZmlndXJlX2JyaWRnZShpc3AsIGNjZGMtPmlucHV0LCBwZGF0YSwgc2hpZnQpOworCisJY2NkYy0+c3luY2lmLmRhdHN6ID0gZGVwdGhfb3V0OwogCWNjZGNfY29uZmlnX3N5bmNfaWYoY2NkYywgJmNjZGMtPnN5bmNpZik7CiAKIAkvKiBDQ0RDX1BBRF9TSU5LICovCkBAIC0xMzM4LDcgKzEzNjEsNyBAQAogICogQGNjZGM6IFBvaW50ZXIgdG8gSVNQIENDREMgZGV2aWNlLgogICogQGV2ZW50OiBQb2ludGluZyB3aGljaCBldmVudCB0cmlnZ2VyIGhhbmRsZXIKICAqCi0gKiBSZXR1cm4gMSB3aGVuIHRoZSBldmVudCBhbmQgc3RvcHBpbmcgcmVxdWVzdCBjb21iaW5hdGlvbiBpcyBzYXRpc2Z5aWVkLAorICogUmV0dXJuIDEgd2hlbiB0aGUgZXZlbnQgYW5kIHN0b3BwaW5nIHJlcXVlc3QgY29tYmluYXRpb24gaXMgc2F0aXNmaWVkLAogICogemVybyBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBpbnQgX19jY2RjX2hhbmRsZV9zdG9wcGluZyhzdHJ1Y3QgaXNwX2NjZGNfZGV2aWNlICpjY2RjLCB1MzIgZXZlbnQpCkBAIC0xNjE4LDcgKzE2NDEsNyBAQAogCiAJY2NkY19zZXRfb3V0YWRkcihjY2RjLCBidWZmZXItPmlzcF9hZGRyKTsKIAotCS8qIFdlIG5vdyBoYXZlIGEgYnVmZmVyIHF1ZXVlZCBvbiB0aGUgb3V0cHV0LCByZXN0YXJ0IHRoZSBwaXBlbGluZSBpbgorCS8qIFdlIG5vdyBoYXZlIGEgYnVmZmVyIHF1ZXVlZCBvbiB0aGUgb3V0cHV0LCByZXN0YXJ0IHRoZSBwaXBlbGluZQogCSAqIG9uIHRoZSBuZXh0IENDREMgaW50ZXJydXB0IGlmIHJ1bm5pbmcgaW4gY29udGludW91cyBtb2RlIChvciB3aGVuCiAJICogc3RhcnRpbmcgdGhlIHN0cmVhbSkuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHByZXZpZXcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5jCmluZGV4IDJiMTY5ODguLmFiYTUzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcHJldmlldy5jCkBAIC03NTUsNyArNzU1LDcgQEAKICAqIEBjb25maWdzIC0gcG9pbnRlciB0byB1cGRhdGUgY29uZmlnIHN0cnVjdHVyZS4KICAqIEBjb25maWcgLSByZXR1cm4gcG9pbnRlciB0byBhcHByb3ByaWF0ZSBzdHJ1Y3R1cmUgZmllbGQuCiAgKiBAYml0IC0gZm9yIHdoaWNoIGZlYXR1cmUgdG8gcmV0dXJuIHBvaW50ZXJzLgotICogUmV0dXJuIHNpemUgb2YgY29yZXNwb25kaW5nIHByZXZfcGFyYW1zIG1lbWJlcgorICogUmV0dXJuIHNpemUgb2YgY29ycmVzcG9uZGluZyBwcmV2X3BhcmFtcyBtZW1iZXIKICAqLwogc3RhdGljIHUzMgogX19wcmV2aWV3X2dldF9wdHJzKHN0cnVjdCBwcmV2X3BhcmFtcyAqcGFyYW1zLCB2b2lkICoqcGFyYW0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHF1ZXVlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHF1ZXVlLmMKaW5kZXggOGZkZGM1OC4uOWMzMTcxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3BxdWV1ZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwcXVldWUuYwpAQCAtMzM5LDcgKzMzOSw3IEBACiAJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAogCWlmIChyZXQgIT0gYnVmLT5ucGFnZXMpIHsKLQkJYnVmLT5ucGFnZXMgPSByZXQ7CisJCWJ1Zi0+bnBhZ2VzID0gcmV0IDwgMCA/IDAgOiByZXQ7CiAJCWlzcF92aWRlb19idWZmZXJfY2xlYW51cChidWYpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CkBAIC00MDgsOCArNDA4LDggQEAKICAqIGlzcF92aWRlb19idWZmZXJfcHJlcGFyZV92bV9mbGFncyAtIEdldCBWTUEgZmxhZ3MgZm9yIGEgdXNlcnNwYWNlIGFkZHJlc3MKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGxvY2F0ZXMgdGhlIFZNQXMgZm9yIHRoZSBidWZmZXIncyB1c2Vyc3BhY2UgYWRkcmVzcyBhbmQgY2hlY2tzCi0gKiB0aGF0IHRoZWlyIGZsYWdzIG1hdGNoLiBUaGUgb25sZmxhZyB0aGF0IHdlIG5lZWQgdG8gY2FyZSBmb3IgYXQgdGhlIG1vbWVudCBpcwotICogVk1fUEZOTUFQLgorICogdGhhdCB0aGVpciBmbGFncyBtYXRjaC4gVGhlIG9ubHkgZmxhZyB0aGF0IHdlIG5lZWQgdG8gY2FyZSBmb3IgYXQgdGhlIG1vbWVudAorICogaXMgVk1fUEZOTUFQLgogICoKICAqIFRoZSBidWZmZXIgdm1fZmxhZ3MgZmllbGQgaXMgc2V0IHRvIHRoZSBmaXJzdCBWTUEgZmxhZ3MuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3ByZXNpemVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHJlc2l6ZXIuYwppbmRleCA2NTNmODhiLi4wYmIwZjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHJlc2l6ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHJlc2l6ZXIuYwpAQCAtNzE0LDE5ICs3MTQsNTAgQEAKICAqIGl3IGFuZCBpaCBhcmUgdGhlIGlucHV0IHdpZHRoIGFuZCBoZWlnaHQgYWZ0ZXIgY3JvcHBpbmcuIFRob3NlIGVxdWF0aW9ucyBuZWVkCiAgKiB0byBiZSBzYXRpc2ZpZWQgZXhhY3RseSBmb3IgdGhlIHJlc2l6ZXIgdG8gd29yayBjb3JyZWN0bHkuCiAgKgotICogUmV2ZXJ0aW5nIHRoZSBlcXVhdGlvbnMsIHdlIGNhbiBjb21wdXRlIHRoZSByZXNpemluZyByYXRpb3Mgd2l0aAorICogVGhlIGVxdWF0aW9ucyBjYW4ndCBiZSBlYXNpbHkgcmV2ZXJ0ZWQsIGFzIHRoZSA+PiA4IG9wZXJhdGlvbiBpcyBub3QgbGluZWFyLgorICogSW4gYWRkaXRpb24sIG5vdCBhbGwgaW5wdXQgc2l6ZXMgY2FuIGJlIGFjaGlldmVkIGZvciBhIGdpdmVuIG91dHB1dCBzaXplLiBUbworICogZ2V0IHRoZSBoaWdoZXN0IGlucHV0IHNpemUgbG93ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgcmVxdWVzdGVkIGlucHV0IHNpemUsCisgKiB3ZSBuZWVkIHRvIGNvbXB1dGUgdGhlIGhpZ2hlc3QgcmVzaXppbmcgcmF0aW8gdGhhdCBzYXRpc2ZpZXMgdGhlIGZvbGxvd2luZworICogaW5lcXVhbGl0eSAodGFraW5nIHRoZSA0LXRhcCBtb2RlIHdpZHRoIGVxdWF0aW9uIGFzIGFuIGV4YW1wbGUpCisgKgorICoJaXcgPj0gKDMyICogc3BoICsgKG93IC0gMSkgKiBocnN6ICsgMTYpID4+IDggLSA3CisgKgorICogKHdoZXJlIGl3IGlzIHRoZSByZXF1ZXN0ZWQgaW5wdXQgd2lkdGgpIHdoaWNoIGNhbiBiZSByZXdyaXR0ZW4gYXMKKyAqCisgKgkgIGl3IC0gNyAgICAgICAgICAgID49ICgzMiAqIHNwaCArIChvdyAtIDEpICogaHJzeiArIDE2KSA+PiA4CisgKgkgKGl3IC0gNykgPDwgOCAgICAgID49ICAzMiAqIHNwaCArIChvdyAtIDEpICogaHJzeiArIDE2IC0gYgorICoJKChpdyAtIDcpIDw8IDgpICsgYiA+PSAgMzIgKiBzcGggKyAob3cgLSAxKSAqIGhyc3ogKyAxNgorICoKKyAqIHdoZXJlIGIgaXMgdGhlIHZhbHVlIG9mIHRoZSA4IGxlYXN0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlIHJpZ2h0IGhhbmQgc2lkZQorICogZXhwcmVzc2lvbiBvZiB0aGUgbGFzdCBpbmVxdWFsaXR5LiBUaGUgaGlnaGVzdCByZXNpemluZyByYXRpbyB2YWx1ZSB3aWxsIGJlCisgKiBhY2hpZXZlZCB3aGVuIGIgaXMgZXF1YWwgdG8gaXRzIG1heGltdW0gdmFsdWUgb2YgMjU1LiBUaGF0IHJlc2l6aW5nIHJhdGlvCisgKiB2YWx1ZSB3aWxsIHN0aWxsIHNhdGlzZnkgdGhlIG9yaWdpbmFsIGluZXF1YWxpdHksIGFzIGIgd2lsbCBkaXNhcHBlYXIgd2hlbgorICogdGhlIGV4cHJlc3Npb24gd2lsbCBiZSBzaGlmdGVkIHJpZ2h0IGJ5IDguCisgKgorICogVGhlIHJldmVydGVkIHRoZSBlcXVhdGlvbnMgdGh1cyBiZWNvbWUKICAqCiAgKiAtIDgtcGhhc2UsIDQtdGFwIG1vZGUKLSAqCWhyc3ogPSAoKGl3IC0gNykgKiAyNTYgLSAxNiAtIDMyICogc3BoKSAvIChvdyAtIDEpCi0gKgl2cnN6ID0gKChpaCAtIDQpICogMjU2IC0gMTYgLSAzMiAqIHNwdikgLyAob2ggLSAxKQorICoJaHJzeiA9ICgoaXcgLSA3KSAqIDI1NiArIDI1NSAtIDE2IC0gMzIgKiBzcGgpIC8gKG93IC0gMSkKKyAqCXZyc3ogPSAoKGloIC0gNCkgKiAyNTYgKyAyNTUgLSAxNiAtIDMyICogc3B2KSAvIChvaCAtIDEpCiAgKiAtIDQtcGhhc2UsIDctdGFwIG1vZGUKLSAqCWhyc3ogPSAoKGl3IC0gNykgKiAyNTYgLSAzMiAtIDY0ICogc3BoKSAvIChvdyAtIDEpCi0gKgl2cnN6ID0gKChpaCAtIDcpICogMjU2IC0gMzIgLSA2NCAqIHNwdikgLyAob2ggLSAxKQorICoJaHJzeiA9ICgoaXcgLSA3KSAqIDI1NiArIDI1NSAtIDMyIC0gNjQgKiBzcGgpIC8gKG93IC0gMSkKKyAqCXZyc3ogPSAoKGloIC0gNykgKiAyNTYgKyAyNTUgLSAzMiAtIDY0ICogc3B2KSAvIChvaCAtIDEpCiAgKgotICogVGhlIHJhdGlvcyBhcmUgaW50ZWdlciB2YWx1ZXMsIGFuZCBtdXN0IGJlIHJvdW5kZWQgZG93biB0byBlbnN1cmUgdGhhdCB0aGUKLSAqIGNyb3BwZWQgaW5wdXQgc2l6ZSBpcyBub3QgYmlnZ2VyIHRoYW4gdGhlIHVuY3JvcHBlZCBpbnB1dCBzaXplLiBBcyB0aGUgcmF0aW8KLSAqIGluIDctdGFwIG1vZGUgaXMgYWx3YXlzIHNtYWxsZXIgdGhhbiB0aGUgcmF0aW8gaW4gNC10YXAgbW9kZSwgd2UgY2FuIHVzZSB0aGUKLSAqIDctdGFwIG1vZGUgZXF1YXRpb25zIHRvIGNvbXB1dGUgYSByYXRpbyBhcHByb3hpbWF0aW9uLgorICogVGhlIHJhdGlvcyBhcmUgaW50ZWdlciB2YWx1ZXMsIGFuZCBhcmUgcm91bmRlZCBkb3duIHRvIGVuc3VyZSB0aGF0IHRoZQorICogY3JvcHBlZCBpbnB1dCBzaXplIGlzIG5vdCBiaWdnZXIgdGhhbiB0aGUgdW5jcm9wcGVkIGlucHV0IHNpemUuCisgKgorICogQXMgdGhlIG51bWJlciBvZiBwaGFzZXMvdGFwcywgdXNlZCB0byBzZWxlY3QgdGhlIGNvcnJlY3QgZXF1YXRpb25zIHRvIGNvbXB1dGUKKyAqIHRoZSByYXRpbywgZGVwZW5kcyBvbiB0aGUgcmF0aW8sIHdlIHN0YXJ0IHdpdGggdGhlIDQtdGFwIG1vZGUgZXF1YXRpb25zIHRvCisgKiBjb21wdXRlIGFuIGFwcHJveGltYXRpb24gb2YgdGhlIHJhdGlvLCBhbmQgc3dpdGNoIHRvIHRoZSA3LXRhcCBtb2RlIGVxdWF0aW9ucworICogaWYgdGhlIGFwcHJveGltYXRpb24gaXMgaGlnaGVyIHRoYW4gdGhlIHJhdGlvIHRocmVzaG9sZC4KKyAqCisgKiBBcyB0aGUgNy10YXAgbW9kZSBlcXVhdGlvbnMgd2lsbCByZXR1cm4gYSByYXRpbyBzbWFsbGVyIHRoYW4gb3IgZXF1YWwgdG8gdGhlCisgKiA0LXRhcCBtb2RlIGVxdWF0aW9ucywgdGhlIHJlc3VsdGluZyByYXRpbyBjb3VsZCBiZWNvbWUgbG93ZXIgdGhhbiBvciBlcXVhbCB0bworICogdGhlIHJhdGlvIHRocmVzaG9sZC4gVGhpcyAnZXF1YXRpb25zIGxvb3AnIGlzbid0IGFuIGlzc3VlIGFzIGxvbmcgYXMgdGhlCisgKiBjb3JyZWN0IGVxdWF0aW9ucyBhcmUgdXNlZCB0byBjb21wdXRlIHRoZSBmaW5hbCBpbnB1dCBzaXplLiBTdGFydGluZyB3aXRoIHRoZQorICogNC10YXAgbW9kZSBlcXVhdGlvbnMgZW5zdXJlIHRoYXQsIGluIGNhc2Ugb2YgdmFsdWVzIHJlc3VsdGluZyBpbiBhICdyYXRpbworICogbG9vcCcsIHRoZSBzbWFsbGVzdCBvZiB0aGUgcmF0aW8gdmFsdWVzIHdpbGwgYmUgdXNlZCwgbmV2ZXIgZXhjZWVkaW5nIHRoZQorICogcmVxdWVzdGVkIGlucHV0IHNpemUuCiAgKgogICogV2UgZmlyc3QgY2xhbXAgdGhlIG91dHB1dCBzaXplIGFjY29yZGluZyB0byB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWUgdG8gYXZvaWQKICAqIGF1dG8tY3JvcHBpbmcgdGhlIGlucHV0IG1vcmUgdGhhbiByZXF1aXJlZCB0byBzYXRpc2Z5IHRoZSBUUk0gZXF1YXRpb25zLiBUaGUKQEAgLTc3NSw2ICs4MDYsOCBAQAogCXVuc2lnbmVkIGludCBtYXhfd2lkdGg7CiAJdW5zaWduZWQgaW50IG1heF9oZWlnaHQ7CiAJdW5zaWduZWQgaW50IHdpZHRoX2FsaWdubWVudDsKKwl1bnNpZ25lZCBpbnQgd2lkdGg7CisJdW5zaWduZWQgaW50IGhlaWdodDsKIAogCS8qCiAJICogQ2xhbXAgdGhlIG91dHB1dCBoZWlnaHQgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGNhcGFiaWxpdGllcyBhbmQKQEAgLTc4NiwxOSArODE5LDIyIEBACiAJbWF4X2hlaWdodCA9IG1pbl90KHVuc2lnbmVkIGludCwgbWF4X2hlaWdodCwgTUFYX09VVF9IRUlHSFQpOwogCW91dHB1dC0+aGVpZ2h0ID0gY2xhbXAob3V0cHV0LT5oZWlnaHQsIG1pbl9oZWlnaHQsIG1heF9oZWlnaHQpOwogCi0JcmF0aW8tPnZlcnQgPSAoKGlucHV0LT5oZWlnaHQgLSA3KSAqIDI1NiAtIDMyIC0gNjQgKiBzcHYpCisJcmF0aW8tPnZlcnQgPSAoKGlucHV0LT5oZWlnaHQgLSA0KSAqIDI1NiArIDI1NSAtIDE2IC0gMzIgKiBzcHYpCiAJCSAgICAvIChvdXRwdXQtPmhlaWdodCAtIDEpOworCWlmIChyYXRpby0+dmVydCA+IE1JRF9SRVNJWkVfVkFMVUUpCisJCXJhdGlvLT52ZXJ0ID0gKChpbnB1dC0+aGVpZ2h0IC0gNykgKiAyNTYgKyAyNTUgLSAzMiAtIDY0ICogc3B2KQorCQkJICAgIC8gKG91dHB1dC0+aGVpZ2h0IC0gMSk7CiAJcmF0aW8tPnZlcnQgPSBjbGFtcF90KHVuc2lnbmVkIGludCwgcmF0aW8tPnZlcnQsCiAJCQkgICAgICBNSU5fUkVTSVpFX1ZBTFVFLCBNQVhfUkVTSVpFX1ZBTFVFKTsKIAogCWlmIChyYXRpby0+dmVydCA8PSBNSURfUkVTSVpFX1ZBTFVFKSB7CiAJCXVwc2NhbGVkX2hlaWdodCA9IChvdXRwdXQtPmhlaWdodCAtIDEpICogcmF0aW8tPnZlcnQKIAkJCQkrIDMyICogc3B2ICsgMTY7Ci0JCWlucHV0LT5oZWlnaHQgPSAodXBzY2FsZWRfaGVpZ2h0ID4+IDgpICsgNDsKKwkJaGVpZ2h0ID0gKHVwc2NhbGVkX2hlaWdodCA+PiA4KSArIDQ7CiAJfSBlbHNlIHsKIAkJdXBzY2FsZWRfaGVpZ2h0ID0gKG91dHB1dC0+aGVpZ2h0IC0gMSkgKiByYXRpby0+dmVydAogCQkJCSsgNjQgKiBzcHYgKyAzMjsKLQkJaW5wdXQtPmhlaWdodCA9ICh1cHNjYWxlZF9oZWlnaHQgPj4gOCkgKyA3OworCQloZWlnaHQgPSAodXBzY2FsZWRfaGVpZ2h0ID4+IDgpICsgNzsKIAl9CiAKIAkvKgpAQCAtODU0LDIwICs4OTAsMjkgQEAKIAkJCSAgICAgIG1heF93aWR0aCAmIH4od2lkdGhfYWxpZ25tZW50IC0gMSkpOwogCW91dHB1dC0+d2lkdGggPSBBTElHTihvdXRwdXQtPndpZHRoLCB3aWR0aF9hbGlnbm1lbnQpOwogCi0JcmF0aW8tPmhvcnogPSAoKGlucHV0LT53aWR0aCAtIDcpICogMjU2IC0gMzIgLSA2NCAqIHNwaCkKKwlyYXRpby0+aG9yeiA9ICgoaW5wdXQtPndpZHRoIC0gNykgKiAyNTYgKyAyNTUgLSAxNiAtIDMyICogc3BoKQogCQkgICAgLyAob3V0cHV0LT53aWR0aCAtIDEpOworCWlmIChyYXRpby0+aG9yeiA+IE1JRF9SRVNJWkVfVkFMVUUpCisJCXJhdGlvLT5ob3J6ID0gKChpbnB1dC0+d2lkdGggLSA3KSAqIDI1NiArIDI1NSAtIDMyIC0gNjQgKiBzcGgpCisJCQkgICAgLyAob3V0cHV0LT53aWR0aCAtIDEpOwogCXJhdGlvLT5ob3J6ID0gY2xhbXBfdCh1bnNpZ25lZCBpbnQsIHJhdGlvLT5ob3J6LAogCQkJICAgICAgTUlOX1JFU0laRV9WQUxVRSwgTUFYX1JFU0laRV9WQUxVRSk7CiAKIAlpZiAocmF0aW8tPmhvcnogPD0gTUlEX1JFU0laRV9WQUxVRSkgewogCQl1cHNjYWxlZF93aWR0aCA9IChvdXRwdXQtPndpZHRoIC0gMSkgKiByYXRpby0+aG9yegogCQkJICAgICAgICsgMzIgKiBzcGggKyAxNjsKLQkJaW5wdXQtPndpZHRoID0gKHVwc2NhbGVkX3dpZHRoID4+IDgpICsgNzsKKwkJd2lkdGggPSAodXBzY2FsZWRfd2lkdGggPj4gOCkgKyA3OwogCX0gZWxzZSB7CiAJCXVwc2NhbGVkX3dpZHRoID0gKG91dHB1dC0+d2lkdGggLSAxKSAqIHJhdGlvLT5ob3J6CiAJCQkgICAgICAgKyA2NCAqIHNwaCArIDMyOwotCQlpbnB1dC0+d2lkdGggPSAodXBzY2FsZWRfd2lkdGggPj4gOCkgKyA3OworCQl3aWR0aCA9ICh1cHNjYWxlZF93aWR0aCA+PiA4KSArIDc7CiAJfQorCisJLyogQ2VudGVyIHRoZSBuZXcgY3JvcCByZWN0YW5nbGUuICovCisJaW5wdXQtPmxlZnQgKz0gKGlucHV0LT53aWR0aCAtIHdpZHRoKSAvIDI7CisJaW5wdXQtPnRvcCArPSAoaW5wdXQtPmhlaWdodCAtIGhlaWdodCkgLyAyOworCWlucHV0LT53aWR0aCA9IHdpZHRoOworCWlucHV0LT5oZWlnaHQgPSBoZWlnaHQ7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHN0YXQuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwc3RhdC5oCmluZGV4IDgyMDk1MGMuLmQ4NmRhOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwc3RhdC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwc3RhdC5oCkBAIC0xMzEsOSArMTMxLDkgQEAKIHN0cnVjdCBpc3BzdGF0X2dlbmVyaWNfY29uZmlnIHsKIAkvKgogCSAqIEZpZWxkcyBtdXN0IGJlIGluIHRoZSBzYW1lIG9yZGVyIGFzIGluOgotCSAqICAtIGlzcGgzYV9hZXdiX2NvbmZpZwotCSAqICAtIGlzcGgzYV9hZl9jb25maWcKLQkgKiAgLSBpc3BoaXN0X2NvbmZpZworCSAqICAtIG9tYXAzaXNwX2gzYV9hZXdiX2NvbmZpZworCSAqICAtIG9tYXAzaXNwX2gzYV9hZl9jb25maWcKKwkgKiAgLSBvbWFwM2lzcF9oaXN0X2NvbmZpZwogCSAqLwogCXUzMiBidWZfc2l6ZTsKIAl1MTYgY29uZmlnX2NvdW50ZXI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmMKaW5kZXggMjA4YTdlYy4uOWNkOGYxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uYwpAQCAtNDcsMjkgKzQ3LDU5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXNwX2Zvcm1hdF9pbmZvIGZvcm1hdHNbXSA9IHsKIAl7IFY0TDJfTUJVU19GTVRfWThfMVg4LCBWNEwyX01CVVNfRk1UX1k4XzFYOCwKLQkgIFY0TDJfTUJVU19GTVRfWThfMVg4LCBWNEwyX1BJWF9GTVRfR1JFWSwgOCwgfSwKKwkgIFY0TDJfTUJVU19GTVRfWThfMVg4LCBWNEwyX01CVVNfRk1UX1k4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9HUkVZLCA4LCB9LAorCXsgVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCwgVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCwKKwkgIFY0TDJfTUJVU19GTVRfWTEwXzFYMTAsIFY0TDJfTUJVU19GTVRfWThfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1kxMCwgMTAsIH0sCisJeyBWNEwyX01CVVNfRk1UX1kxMl8xWDEyLCBWNEwyX01CVVNfRk1UX1kxMF8xWDEwLAorCSAgVjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9ZOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfWTEyLCAxMiwgfSwKKwl7IFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwgVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4LAorCSAgVjRMMl9NQlVTX0ZNVF9TQkdHUjhfMVg4LCBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU0JHR1I4LCA4LCB9LAorCXsgVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4LCBWNEwyX01CVVNfRk1UX1NHQlJHOF8xWDgsCisJICBWNEwyX01CVVNfRk1UX1NHQlJHOF8xWDgsIFY0TDJfTUJVU19GTVRfU0dCUkc4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TR0JSRzgsIDgsIH0sCisJeyBWNEwyX01CVVNfRk1UX1NHUkJHOF8xWDgsIFY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCwKKwkgIFY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCwgVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NHUkJHOCwgOCwgfSwKKwl7IFY0TDJfTUJVU19GTVRfU1JHR0I4XzFYOCwgVjRMMl9NQlVTX0ZNVF9TUkdHQjhfMVg4LAorCSAgVjRMMl9NQlVTX0ZNVF9TUkdHQjhfMVg4LCBWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU1JHR0I4LCA4LCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwX0RQQ004XzFYOCwgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwX0RQQ004XzFYOCwKLQkgIFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLCBWNEwyX1BJWF9GTVRfU0dSQkcxMERQQ004LCA4LCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TR1JCRzEwXzFYMTAsIDAsCisJICBWNEwyX1BJWF9GTVRfU0dSQkcxMERQQ004LCA4LCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAsIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLAotCSAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAsIFY0TDJfUElYX0ZNVF9TQkdHUjEwLCAxMCwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU0JHR1IxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU0JHR1IxMCwgMTAsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1NHQlJHMTBfMVgxMCwgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwXzFYMTAsCi0JICBWNEwyX01CVVNfRk1UX1NHQlJHMTBfMVgxMCwgVjRMMl9QSVhfRk1UX1NHQlJHMTAsIDEwLCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TR0JSRzEwXzFYMTAsIFY0TDJfTUJVU19GTVRfU0dCUkc4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TR0JSRzEwLCAxMCwgfSwKIAl7IFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCwKLQkgIFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLCBWNEwyX1BJWF9GTVRfU0dSQkcxMCwgMTAsIH0sCisJICBWNEwyX01CVVNfRk1UX1NHUkJHMTBfMVgxMCwgVjRMMl9NQlVTX0ZNVF9TR1JCRzhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NHUkJHMTAsIDEwLCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TUkdHQjEwXzFYMTAsIFY0TDJfTUJVU19GTVRfU1JHR0IxMF8xWDEwLAotCSAgVjRMMl9NQlVTX0ZNVF9TUkdHQjEwXzFYMTAsIFY0TDJfUElYX0ZNVF9TUkdHQjEwLCAxMCwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU1JHR0IxMF8xWDEwLCBWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU1JHR0IxMCwgMTAsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1NCR0dSMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9TQkdHUjEwXzFYMTAsCi0JICBWNEwyX01CVVNfRk1UX1NCR0dSMTJfMVgxMiwgVjRMMl9QSVhfRk1UX1NCR0dSMTIsIDEyLCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TQkdHUjEyXzFYMTIsIFY0TDJfTUJVU19GTVRfU0JHR1I4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TQkdHUjEyLCAxMiwgfSwKIAl7IFY0TDJfTUJVU19GTVRfU0dCUkcxMl8xWDEyLCBWNEwyX01CVVNfRk1UX1NHQlJHMTBfMVgxMCwKLQkgIFY0TDJfTUJVU19GTVRfU0dCUkcxMl8xWDEyLCBWNEwyX1BJWF9GTVRfU0dCUkcxMiwgMTIsIH0sCisJICBWNEwyX01CVVNfRk1UX1NHQlJHMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4LAorCSAgVjRMMl9QSVhfRk1UX1NHQlJHMTIsIDEyLCB9LAogCXsgVjRMMl9NQlVTX0ZNVF9TR1JCRzEyXzFYMTIsIFY0TDJfTUJVU19GTVRfU0dSQkcxMF8xWDEwLAotCSAgVjRMMl9NQlVTX0ZNVF9TR1JCRzEyXzFYMTIsIFY0TDJfUElYX0ZNVF9TR1JCRzEyLCAxMiwgfSwKKwkgIFY0TDJfTUJVU19GTVRfU0dSQkcxMl8xWDEyLCBWNEwyX01CVVNfRk1UX1NHUkJHOF8xWDgsCisJICBWNEwyX1BJWF9GTVRfU0dSQkcxMiwgMTIsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1NSR0dCMTJfMVgxMiwgVjRMMl9NQlVTX0ZNVF9TUkdHQjEwXzFYMTAsCi0JICBWNEwyX01CVVNfRk1UX1NSR0dCMTJfMVgxMiwgVjRMMl9QSVhfRk1UX1NSR0dCMTIsIDEyLCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9TUkdHQjEyXzFYMTIsIFY0TDJfTUJVU19GTVRfU1JHR0I4XzFYOCwKKwkgIFY0TDJfUElYX0ZNVF9TUkdHQjEyLCAxMiwgfSwKIAl7IFY0TDJfTUJVU19GTVRfVVlWWThfMVgxNiwgVjRMMl9NQlVTX0ZNVF9VWVZZOF8xWDE2LAotCSAgVjRMMl9NQlVTX0ZNVF9VWVZZOF8xWDE2LCBWNEwyX1BJWF9GTVRfVVlWWSwgMTYsIH0sCisJICBWNEwyX01CVVNfRk1UX1VZVlk4XzFYMTYsIDAsCisJICBWNEwyX1BJWF9GTVRfVVlWWSwgMTYsIH0sCiAJeyBWNEwyX01CVVNfRk1UX1lVWVY4XzFYMTYsIFY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiwKLQkgIFY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiwgVjRMMl9QSVhfRk1UX1lVWVYsIDE2LCB9LAorCSAgVjRMMl9NQlVTX0ZNVF9ZVVlWOF8xWDE2LCAwLAorCSAgVjRMMl9QSVhfRk1UX1lVWVYsIDE2LCB9LAogfTsKIAogY29uc3Qgc3RydWN0IGlzcF9mb3JtYXRfaW5mbyAqCkBAIC04Niw2ICsxMTYsMzcgQEAKIH0KIAogLyoKKyAqIERlY2lkZSB3aGV0aGVyIGRlc2lyZWQgb3V0cHV0IHBpeGVsIGNvZGUgY2FuIGJlIG9idGFpbmVkIHdpdGgKKyAqIHRoZSBsYW5lIHNoaWZ0ZXIgYnkgc2hpZnRpbmcgdGhlIGlucHV0IHBpeGVsIGNvZGUuCisgKiBAaW46IGlucHV0IHBpeGVsY29kZSB0byBzaGlmdGVyCisgKiBAb3V0OiBvdXRwdXQgcGl4ZWxjb2RlIGZyb20gc2hpZnRlcgorICogQGFkZGl0aW9uYWxfc2hpZnQ6ICMgb2YgYml0cyB0aGUgc2Vuc29yJ3MgTFNCIGlzIG9mZnNldCBmcm9tIENBTUVYVFswXQorICoKKyAqIHJldHVybiB0cnVlIGlmIHRoZSBjb21iaW5hdGlvbiBpcyBwb3NzaWJsZQorICogcmV0dXJuIGZhbHNlIG90aGVyd2lzZQorICovCitzdGF0aWMgYm9vbCBpc3BfdmlkZW9faXNfc2hpZnRhYmxlKGVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSBpbiwKKwkJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIG91dCwKKwkJdW5zaWduZWQgaW50IGFkZGl0aW9uYWxfc2hpZnQpCit7CisJY29uc3Qgc3RydWN0IGlzcF9mb3JtYXRfaW5mbyAqaW5faW5mbywgKm91dF9pbmZvOworCisJaWYgKGluID09IG91dCkKKwkJcmV0dXJuIHRydWU7CisKKwlpbl9pbmZvID0gb21hcDNpc3BfdmlkZW9fZm9ybWF0X2luZm8oaW4pOworCW91dF9pbmZvID0gb21hcDNpc3BfdmlkZW9fZm9ybWF0X2luZm8ob3V0KTsKKworCWlmICgoaW5faW5mby0+Zmxhdm9yID09IDApIHx8IChvdXRfaW5mby0+Zmxhdm9yID09IDApKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoaW5faW5mby0+Zmxhdm9yICE9IG91dF9pbmZvLT5mbGF2b3IpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiBpbl9pbmZvLT5icHAgLSBvdXRfaW5mby0+YnBwICsgYWRkaXRpb25hbF9zaGlmdCA8PSA2OworfQorCisvKgogICogaXNwX3ZpZGVvX21idXNfdG9fcGl4IC0gQ29udmVydCB2NGwyX21idXNfZnJhbWVmbXQgdG8gdjRsMl9waXhfZm9ybWF0CiAgKiBAdmlkZW86IElTUCB2aWRlbyBpbnN0YW5jZQogICogQG1idXM6IHY0bDJfbWJ1c19mcmFtZWZtdCBmb3JtYXQgKGlucHV0KQpAQCAtMjM1LDYgKzI5Niw3IEBACiAJCXJldHVybiAtRVBJUEU7CiAKIAl3aGlsZSAoMSkgeworCQl1bnNpZ25lZCBpbnQgc2hpZnRlcl9saW5rOwogCQkvKiBSZXRyaWV2ZSB0aGUgc2luayBmb3JtYXQgKi8KIAkJcGFkID0gJnN1YmRldi0+ZW50aXR5LnBhZHNbMF07CiAJCWlmICghKHBhZC0+ZmxhZ3MgJiBNRURJQV9QQURfRkxfU0lOSykpCkBAIC0yNjMsNiArMzI1LDEwIEBACiAJCQkJcmV0dXJuIC1FTk9TUEM7CiAJCX0KIAorCQkvKiBJZiBzaW5rIHBhZCBpcyBvbiBDQ0RDLCB0aGUgbGluayBoYXMgdGhlIGxhbmUgc2hpZnRlcgorCQkgKiBpbiB0aGUgbWlkZGxlIG9mIGl0LiAqLworCQlzaGlmdGVyX2xpbmsgPSBzdWJkZXYgPT0gJmlzcC0+aXNwX2NjZGMuc3ViZGV2OworCiAJCS8qIFJldHJpZXZlIHRoZSBzb3VyY2UgZm9ybWF0ICovCiAJCXBhZCA9IG1lZGlhX2VudGl0eV9yZW1vdGVfc291cmNlKHBhZCk7CiAJCWlmIChwYWQgPT0gTlVMTCB8fApAQCAtMjc4LDEwICszNDQsMjQgQEAKIAkJCXJldHVybiAtRVBJUEU7CiAKIAkJLyogQ2hlY2sgaWYgdGhlIHR3byBlbmRzIG1hdGNoICovCi0JCWlmIChmbXRfc291cmNlLmZvcm1hdC5jb2RlICE9IGZtdF9zaW5rLmZvcm1hdC5jb2RlIHx8Ci0JCSAgICBmbXRfc291cmNlLmZvcm1hdC53aWR0aCAhPSBmbXRfc2luay5mb3JtYXQud2lkdGggfHwKKwkJaWYgKGZtdF9zb3VyY2UuZm9ybWF0LndpZHRoICE9IGZtdF9zaW5rLmZvcm1hdC53aWR0aCB8fAogCQkgICAgZm10X3NvdXJjZS5mb3JtYXQuaGVpZ2h0ICE9IGZtdF9zaW5rLmZvcm1hdC5oZWlnaHQpCiAJCQlyZXR1cm4gLUVQSVBFOworCisJCWlmIChzaGlmdGVyX2xpbmspIHsKKwkJCXVuc2lnbmVkIGludCBwYXJhbGxlbF9zaGlmdCA9IDA7CisJCQlpZiAoaXNwLT5pc3BfY2NkYy5pbnB1dCA9PSBDQ0RDX0lOUFVUX1BBUkFMTEVMKSB7CisJCQkJc3RydWN0IGlzcF9wYXJhbGxlbF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9CisJCQkJCSYoKHN0cnVjdCBpc3BfdjRsMl9zdWJkZXZzX2dyb3VwICopCisJCQkJCSAgICAgIHN1YmRldi0+aG9zdF9wcml2KS0+YnVzLnBhcmFsbGVsOworCQkJCXBhcmFsbGVsX3NoaWZ0ID0gcGRhdGEtPmRhdGFfbGFuZV9zaGlmdCAqIDI7CisJCQl9CisJCQlpZiAoIWlzcF92aWRlb19pc19zaGlmdGFibGUoZm10X3NvdXJjZS5mb3JtYXQuY29kZSwKKwkJCQkJCWZtdF9zaW5rLmZvcm1hdC5jb2RlLAorCQkJCQkJcGFyYWxsZWxfc2hpZnQpKQorCQkJCXJldHVybiAtRVBJUEU7CisJCX0gZWxzZSBpZiAoZm10X3NvdXJjZS5mb3JtYXQuY29kZSAhPSBmbXRfc2luay5mb3JtYXQuY29kZSkKKwkJCXJldHVybiAtRVBJUEU7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAzaXNwL2lzcHZpZGVvLmgKaW5kZXggNTI0YTFhYy4uOTExYmVhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwM2lzcC9pc3B2aWRlby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDNpc3AvaXNwdmlkZW8uaApAQCAtNDksNiArNDksOCBAQAogICoJYml0cy4gSWRlbnRpY2FsIHRvIEBjb2RlIGlmIHRoZSBmb3JtYXQgaXMgMTAgYml0cyB3aWRlIG9yIGxlc3MuCiAgKiBAdW5jb21wcmVzc2VkOiBWNEwyIG1lZGlhIGJ1cyBmb3JtYXQgY29kZSBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgdW5jb21wcmVzc2VkCiAgKglmb3JtYXQuIElkZW50aWNhbCB0byBAY29kZSBpZiB0aGUgZm9ybWF0IGlzIG5vdCBEUENNIGNvbXByZXNzZWQuCisgKiBAZmxhdm9yOiBWNEwyIG1lZGlhIGJ1cyBmb3JtYXQgY29kZSBmb3IgdGhlIHNhbWUgcGl4ZWwgbGF5b3V0IGJ1dAorICoJc2hpZnRlZCB0byBiZSA4IGJpdHMgcGVyIHBpeGVsLiA9MCBpZiBmb3JtYXQgaXMgbm90IHNoaWZ0YWJsZS4KICAqIEBwaXhlbGZvcm1hdDogVjRMMiBwaXhlbCBmb3JtYXQgRkNDIGlkZW50aWZpZXIKICAqIEBicHA6IEJpdHMgcGVyIHBpeGVsCiAgKi8KQEAgLTU2LDYgKzU4LDcgQEAKIAllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgY29kZTsKIAllbnVtIHY0bDJfbWJ1c19waXhlbGNvZGUgdHJ1bmNhdGVkOwogCWVudW0gdjRsMl9tYnVzX3BpeGVsY29kZSB1bmNvbXByZXNzZWQ7CisJZW51bSB2NGwyX21idXNfcGl4ZWxjb2RlIGZsYXZvcjsKIAl1MzIgcGl4ZWxmb3JtYXQ7CiAJdW5zaWduZWQgaW50IGJwcDsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY2FwdHVyZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNhcHR1cmUuYwppbmRleCA5NWY4YjRlMS4uZDE0MmI0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNhcHR1cmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY2FwdHVyZS5jCkBAIC01MjcsNyArNTI3LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKHZiMl9pc19zdHJlYW1pbmcoJmZpbWMtPnZpZF9jYXAudmJxKSB8fCBmaW1jX2NhcHR1cmVfYWN0aXZlKGZpbWMpKQorCWlmICh2YjJfaXNfYnVzeSgmZmltYy0+dmlkX2NhcC52YnEpIHx8IGZpbWNfY2FwdHVyZV9hY3RpdmUoZmltYykpCiAJCXJldHVybiAtRUJVU1k7CiAKIAlmcmFtZSA9ICZjdHgtPmRfZnJhbWU7CkBAIC01MzksOCArNTM5LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+Zm10LT5jb2xwbGFuZXM7IGkrKykKLQkJZnJhbWUtPnBheWxvYWRbaV0gPSBwaXgtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUgKiBwaXgtPmhlaWdodDsKKwlmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmZtdC0+Y29scGxhbmVzOyBpKyspIHsKKwkJZnJhbWUtPnBheWxvYWRbaV0gPQorCQkJKHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodCAqIGZyYW1lLT5mbXQtPmRlcHRoW2ldKSA+PiAzOworCX0KIAogCS8qIE91dHB1dCBETUEgZnJhbWUgcGl4ZWwgc2l6ZSBhbmQgb2Zmc2V0cy4gKi8KIAlmcmFtZS0+Zl93aWR0aCA9IHBpeC0+cGxhbmVfZm10WzBdLmJ5dGVzcGVybGluZSAqIDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3M1cC1maW1jL2ZpbWMtY29yZS5jCmluZGV4IDZjOTE5YjMuLmRjOTFhODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczVwLWZpbWMvZmltYy1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zNXAtZmltYy9maW1jLWNvcmUuYwpAQCAtMzYxLDEwICszNjEsMjAgQEAKIHsKIAlzdHJ1Y3QgZmltY192aWRfY2FwICpjYXAgPSAmZmltYy0+dmlkX2NhcDsKIAlzdHJ1Y3QgZmltY192aWRfYnVmZmVyICp2X2J1ZjsKKwlzdHJ1Y3QgdGltZXZhbCAqdHY7CisJc3RydWN0IHRpbWVzcGVjIHRzOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZjYXAtPmFjdGl2ZV9idWZfcSkgJiYKIAkgICAgdGVzdF9iaXQoU1RfQ0FQVF9SVU4sICZmaW1jLT5zdGF0ZSkpIHsKKwkJa3RpbWVfZ2V0X3JlYWxfdHMoJnRzKTsKKwogCQl2X2J1ZiA9IGFjdGl2ZV9xdWV1ZV9wb3AoY2FwKTsKKworCQl0diA9ICZ2X2J1Zi0+dmIudjRsMl9idWYudGltZXN0YW1wOworCQl0di0+dHZfc2VjID0gdHMudHZfc2VjOworCQl0di0+dHZfdXNlYyA9IHRzLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDOworCQl2X2J1Zi0+dmIudjRsMl9idWYuc2VxdWVuY2UgPSBjYXAtPmZyYW1lX2NvdW50Kys7CisKIAkJdmIyX2J1ZmZlcl9kb25lKCZ2X2J1Zi0+dmIsIFZCMl9CVUZfU1RBVEVfRE9ORSk7CiAJfQogCkBAIC03NTgsNyArNzY4LDcgQEAKIAltdXRleF91bmxvY2soJmN0eC0+ZmltY19kZXYtPmxvY2spOwogfQogCi1zdHJ1Y3QgdmIyX29wcyBmaW1jX3FvcHMgPSB7CitzdGF0aWMgc3RydWN0IHZiMl9vcHMgZmltY19xb3BzID0gewogCS5xdWV1ZV9zZXR1cAkgPSBmaW1jX3F1ZXVlX3NldHVwLAogCS5idWZfcHJlcGFyZQkgPSBmaW1jX2J1Zl9wcmVwYXJlLAogCS5idWZfcXVldWUJID0gZmltY19idWZfcXVldWUsCkBAIC05MjcsMjMgKzkzNywyMyBAQAogCXBpeC0+bnVtX3BsYW5lcyA9IGZtdC0+bWVtcGxhbmVzOwogCXBpeC0+Y29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9KUEVHOwogCisKIAlmb3IgKGkgPSAwOyBpIDwgcGl4LT5udW1fcGxhbmVzOyArK2kpIHsKLQkJaW50IGJwbCA9IHBpeC0+cGxhbmVfZm10W2ldLmJ5dGVzcGVybGluZTsKKwkJdTMyIGJwbCA9IHBpeC0+cGxhbmVfZm10W2ldLmJ5dGVzcGVybGluZTsKKwkJdTMyICpzaXplaW1hZ2UgPSAmcGl4LT5wbGFuZV9mbXRbaV0uc2l6ZWltYWdlOwogCi0JCWRiZygiWyVkXSBicGw6ICVkLCBkZXB0aDogJWQsIHc6ICVkLCBoOiAlZCIsCi0JCSAgICBpLCBicGwsIGZtdC0+ZGVwdGhbaV0sIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwkJaWYgKGZtdC0+Y29scGxhbmVzID4gMSAmJiAoYnBsID09IDAgfHwgYnBsIDwgcGl4LT53aWR0aCkpCisJCQlicGwgPSBwaXgtPndpZHRoOyAvKiBQbGFuYXIgKi8KIAotCQlpZiAoIWJwbCB8fCAoYnBsICogOCAvIGZtdC0+ZGVwdGhbaV0pID4gcGl4LT53aWR0aCkKLQkJCWJwbCA9IChwaXgtPndpZHRoICogZm10LT5kZXB0aFswXSkgPj4gMzsKKwkJaWYgKGZtdC0+Y29scGxhbmVzID09IDEgJiYgLyogUGFja2VkICovCisJCSAgICAoYnBsID09IDAgfHwgKChicGwgKiA4KSAvIGZtdC0+ZGVwdGhbaV0pIDwgcGl4LT53aWR0aCkpCisJCQlicGwgPSAocGl4LT53aWR0aCAqIGZtdC0+ZGVwdGhbMF0pIC8gODsKIAotCQlpZiAoIXBpeC0+cGxhbmVfZm10W2ldLnNpemVpbWFnZSkKLQkJCXBpeC0+cGxhbmVfZm10W2ldLnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogYnBsOworCQlpZiAoaSA9PSAwKSAvKiBTYW1lIGJ5dGVzcGVybGluZSBmb3IgZWFjaCBwbGFuZS4gKi8KKwkJCW1vZF94ID0gYnBsOwogCi0JCXBpeC0+cGxhbmVfZm10W2ldLmJ5dGVzcGVybGluZSA9IGJwbDsKLQotCQlkYmcoIlslZF06IGJwbDogJWQsIHNpemVpbWFnZTogJWQiLAotCQkgICAgaSwgcGl4LT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lLAotCQkgICAgcGl4LT5wbGFuZV9mbXRbaV0uc2l6ZWltYWdlKTsKKwkJcGl4LT5wbGFuZV9mbXRbaV0uYnl0ZXNwZXJsaW5lID0gbW9kX3g7CisJCSpzaXplaW1hZ2UgPSAocGl4LT53aWR0aCAqIHBpeC0+aGVpZ2h0ICogZm10LT5kZXB0aFtpXSkgLyA4OwogCX0KIAogCXJldHVybiAwOwpAQCAtOTY1LDcgKzk3NSw3IEBACiAKIAl2cSA9IHY0bDJfbTJtX2dldF92cShjdHgtPm0ybV9jdHgsIGYtPnR5cGUpOwogCi0JaWYgKHZiMl9pc19zdHJlYW1pbmcodnEpKSB7CisJaWYgKHZiMl9pc19idXN5KHZxKSkgewogCQl2NGwyX2VycigmZmltYy0+bTJtLnY0bDJfZGV2LCAicXVldWUgKCVkKSBidXN5XG4iLCBmLT50eXBlKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC05ODUsOCArOTk1LDEwIEBACiAJaWYgKCFmcmFtZS0+Zm10KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAoaSA9IDA7IGkgPCBmcmFtZS0+Zm10LT5jb2xwbGFuZXM7IGkrKykKLQkJZnJhbWUtPnBheWxvYWRbaV0gPSBwaXgtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUgKiBwaXgtPmhlaWdodDsKKwlmb3IgKGkgPSAwOyBpIDwgZnJhbWUtPmZtdC0+Y29scGxhbmVzOyBpKyspIHsKKwkJZnJhbWUtPnBheWxvYWRbaV0gPQorCQkJKHBpeC0+d2lkdGggKiBwaXgtPmhlaWdodCAqIGZyYW1lLT5mbXQtPmRlcHRoW2ldKSAvIDg7CisJfQogCiAJZnJhbWUtPmZfd2lkdGgJPSBwaXgtPnBsYW5lX2ZtdFswXS5ieXRlc3BlcmxpbmUgKiA4IC8KIAkJZnJhbWUtPmZtdC0+ZGVwdGhbMF07CkBAIC0xNzUwLDcgKzE3NjIsNyBAQAogfQogCiAvKiBJbWFnZSBwaXhlbCBsaW1pdHMsIHNpbWlsYXIgYWNyb3NzIHNldmVyYWwgRklNQyBIVyByZXZpc2lvbnMuICovCi1zdGF0aWMgc3RydWN0IGZpbWNfcGl4X2xpbWl0IHM1cF9waXhfbGltaXRbM10gPSB7CitzdGF0aWMgc3RydWN0IGZpbWNfcGl4X2xpbWl0IHM1cF9waXhfbGltaXRbNF0gPSB7CiAJWzBdID0gewogCQkuc2NhbGVyX2VuX3cJPSAzMjY0LAogCQkuc2NhbGVyX2Rpc193CT0gODE5MiwKQEAgLTE3NzUsNiArMTc4NywxNCBAQAogCQkub3V0X3JvdF9lbl93CT0gMTI4MCwKIAkJLm91dF9yb3RfZGlzX3cJPSAxOTIwLAogCX0sCisJWzNdID0geworCQkuc2NhbGVyX2VuX3cJPSAxOTIwLAorCQkuc2NhbGVyX2Rpc193CT0gODE5MiwKKwkJLmluX3JvdF9lbl9oCT0gMTM2NiwKKwkJLmluX3JvdF9kaXNfdwk9IDgxOTIsCisJCS5vdXRfcm90X2VuX3cJPSAxMzY2LAorCQkub3V0X3JvdF9kaXNfdwk9IDE5MjAsCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgZmltYzBfdmFyaWFudF9zNXAgPSB7CkBAIC0xODI3LDcgKzE4NDcsNyBAQAogCS5waXhfbGltaXQJID0gJnM1cF9waXhfbGltaXRbMl0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHNhbXN1bmdfZmltY192YXJpYW50IGZpbWMwX3ZhcmlhbnRfczVwdjMxMCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maW1jX3ZhcmlhbnQgZmltYzBfdmFyaWFudF9leHlub3M0ID0gewogCS5waXhfaG9mZgkgPSAxLAogCS5oYXNfaW5wX3JvdAkgPSAxLAogCS5oYXNfb3V0X3JvdAkgPSAxLApAQCAtMTg0MCw3ICsxODYwLDcgQEAKIAkucGl4X2xpbWl0CSA9ICZzNXBfcGl4X2xpbWl0WzFdLAogfTsKIAotc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfdmFyaWFudCBmaW1jMl92YXJpYW50X3M1cHYzMTAgPSB7CitzdGF0aWMgc3RydWN0IHNhbXN1bmdfZmltY192YXJpYW50IGZpbWMyX3ZhcmlhbnRfZXh5bm9zNCA9IHsKIAkucGl4X2hvZmYJID0gMSwKIAkuaGFzX2Npc3RhdHVzMgkgPSAxLAogCS5oYXNfbWFpbnNjYWxlcl9leHQgPSAxLApAQCAtMTg0OCw3ICsxODY4LDcgQEAKIAkubWluX291dF9waXhzaXplID0gMTYsCiAJLmhvcl9vZmZzX2FsaWduCSA9IDEsCiAJLm91dF9idWZfY291bnQJID0gMzIsCi0JLnBpeF9saW1pdAkgPSAmczVwX3BpeF9saW1pdFsyXSwKKwkucGl4X2xpbWl0CSA9ICZzNXBfcGl4X2xpbWl0WzNdLAogfTsKIAogLyogUzVQQzEwMCAqLwpAQCAtMTg3NCwxMiArMTg5NCwxMiBAQAogfTsKIAogLyogUzVQVjMxMCwgUzVQQzIxMCAqLwotc3RhdGljIHN0cnVjdCBzYW1zdW5nX2ZpbWNfZHJpdmVyZGF0YSBmaW1jX2RydmRhdGFfczVwdjMxMCA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Ftc3VuZ19maW1jX2RyaXZlcmRhdGEgZmltY19kcnZkYXRhX2V4eW5vczQgPSB7CiAJLnZhcmlhbnQgPSB7Ci0JCVswXSA9ICZmaW1jMF92YXJpYW50X3M1cHYzMTAsCi0JCVsxXSA9ICZmaW1jMF92YXJpYW50X3M1cHYzMTAsCi0JCVsyXSA9ICZmaW1jMF92YXJpYW50X3M1cHYzMTAsCi0JCVszXSA9ICZmaW1jMl92YXJpYW50X3M1cHYzMTAsCisJCVswXSA9ICZmaW1jMF92YXJpYW50X2V4eW5vczQsCisJCVsxXSA9ICZmaW1jMF92YXJpYW50X2V4eW5vczQsCisJCVsyXSA9ICZmaW1jMF92YXJpYW50X2V4eW5vczQsCisJCVszXSA9ICZmaW1jMl92YXJpYW50X2V4eW5vczQsCiAJfSwKIAkubnVtX2VudGl0aWVzID0gNCwKIAkubGNsa19mcmVxdWVuY3kgPSAxNjYwMDAwMDBVTCwKQEAgLTE4OTMsOCArMTkxMyw4IEBACiAJCS5uYW1lCQk9ICJzNXB2MjEwLWZpbWMiLAogCQkuZHJpdmVyX2RhdGEJPSAodW5zaWduZWQgbG9uZykmZmltY19kcnZkYXRhX3M1cHYyMTAsCiAJfSwgewotCQkubmFtZQkJPSAiczVwdjMxMC1maW1jIiwKLQkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJmZpbWNfZHJ2ZGF0YV9zNXB2MzEwLAorCQkubmFtZQkJPSAiZXh5bm9zNC1maW1jIiwKKwkJLmRyaXZlcl9kYXRhCT0gKHVuc2lnbmVkIGxvbmcpJmZpbWNfZHJ2ZGF0YV9leHlub3M0LAogCX0sCiAJe30sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCmluZGV4IDNmZTU0YmYuLjEzNGU4NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKQEAgLTkyMiw3ICs5MjIsNyBAQAogCQkJLyogVHJ5IDI1NjB4MTkyMCwgMTI4MHg5NjAsIDY0MHg0ODAsIDMyMHgyNDAgKi8KIAkJCW1mLndpZHRoCT0gMjU2MCA+PiBzaGlmdDsKIAkJCW1mLmhlaWdodAk9IDE5MjAgPj4gc2hpZnQ7Ci0JCQlyZXQgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycihzZC0+djRsMl9kZXYsIDAsIHZpZGVvLAorCQkJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAobG9uZylpY2QsIHZpZGVvLAogCQkJCQkJCSBzX21idXNfZm10LCAmbWYpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJcmV0dXJuIHJldDsKQEAgLTEyMjQsNyArMTIyNCw3IEBACiAJc3RydWN0IHY0bDJfY3JvcGNhcCBjYXA7CiAJaW50IHJldDsKIAotCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgMCwgdmlkZW8sCisJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAobG9uZylpY2QsIHZpZGVvLAogCQkJCQkgc19tYnVzX2ZtdCwgbWYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwpAQCAtMTI1NCw3ICsxMjU0LDcgQEAKIAkJdG1wX2ggPSBtaW4oMiAqIHRtcF9oLCBtYXhfaGVpZ2h0KTsKIAkJbWYtPndpZHRoID0gdG1wX3c7CiAJCW1mLT5oZWlnaHQgPSB0bXBfaDsKLQkJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAwLCB2aWRlbywKKwkJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAobG9uZylpY2QsIHZpZGVvLAogCQkJCQkJIHNfbWJ1c19mbXQsIG1mKTsKIAkJZGV2X2dlbyhkZXYsICJDYW1lcmEgc2NhbGVkIHRvICV1eCV1XG4iLAogCQkJbWYtPndpZHRoLCBtZi0+aGVpZ2h0KTsKQEAgLTE2NTgsNyArMTY1OCw3IEBACiAJbWYuY29kZQkJPSB4bGF0ZS0+Y29kZTsKIAltZi5jb2xvcnNwYWNlCT0gcGl4LT5jb2xvcnNwYWNlOwogCi0JcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAwLCB2aWRlbywgdHJ5X21idXNfZm10LCAmbWYpOworCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgKGxvbmcpaWNkLCB2aWRlbywgdHJ5X21idXNfZm10LCAmbWYpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCkBAIC0xNjgyLDcgKzE2ODIsNyBAQAogCQkJICovCiAJCQltZi53aWR0aCA9IDI1NjA7CiAJCQltZi5oZWlnaHQgPSAxOTIwOwotCQkJcmV0ID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIoc2QtPnY0bDJfZGV2LCAwLCB2aWRlbywKKwkJCXJldCA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKHNkLT52NGwyX2RldiwgKGxvbmcpaWNkLCB2aWRlbywKIAkJCQkJCQkgdHJ5X21idXNfZm10LCAmbWYpOwogCQkJaWYgKHJldCA8IDApIHsKIAkJCQkvKiBTaG91bGRuJ3QgYWN0dWFsbHkgaGFwcGVuLi4uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jc2kyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jc2kyLmMKaW5kZXggZGQxYjgxYi4uOThiODc0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY3NpMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NzaTIuYwpAQCAtMzgsNiArMzgsOCBAQAogCXZvaWQgX19pb21lbQkJCSpiYXNlOwogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OwogCXN0cnVjdCBzaF9jc2kyX2NsaWVudF9jb25maWcJKmNsaWVudDsKKwl1bnNpZ25lZCBsb25nICgqcXVlcnlfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CisJaW50ICgqc2V0X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOwogfTsKIAogc3RhdGljIGludCBzaF9jc2kyX3RyeV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKQEAgLTIwOCw2ICsyMTAsNyBAQAogCWNhc2UgQlVTX05PVElGWV9CT1VORF9EUklWRVI6CiAJCXNucHJpbnRmKHByaXYtPnN1YmRldi5uYW1lLCBWNEwyX1NVQkRFVl9OQU1FX1NJWkUsICIlcyVzIiwKIAkJCSBkZXZfbmFtZSh2NGwyX2Rldi0+ZGV2KSwgIi5taXBpLWNzaSIpOworCQlwcml2LT5zdWJkZXYuZ3JwX2lkID0gKGxvbmcpaWNkOwogCQlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYodjRsMl9kZXYsICZwcml2LT5zdWJkZXYpOwogCQlkZXZfZGJnKGRldiwgIiVzKCVwKTogcmV0KHJlZ2lzdGVyX3N1YmRldikgPSAlZFxuIiwgX19mdW5jX18sIHByaXYsIHJldCk7CiAJCWlmIChyZXQgPCAwKQpAQCAtMjE1LDYgKzIxOCw4IEBACiAKIAkJcHJpdi0+Y2xpZW50ID0gcGRhdGEtPmNsaWVudHMgKyBpOwogCisJCXByaXYtPnNldF9idXNfcGFyYW0JCT0gaWNkLT5vcHMtPnNldF9idXNfcGFyYW07CisJCXByaXYtPnF1ZXJ5X2J1c19wYXJhbQkJPSBpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtOwogCQlpY2QtPm9wcy0+c2V0X2J1c19wYXJhbQkJPSBzaF9jc2kyX3NldF9idXNfcGFyYW07CiAJCWljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0JPSBzaF9jc2kyX3F1ZXJ5X2J1c19wYXJhbTsKIApAQCAtMjI2LDggKzIzMSwxMCBAQAogCQlwcml2LT5jbGllbnQgPSBOVUxMOwogCiAJCS8qIERyaXZlciBpcyBhYm91dCB0byBiZSB1bmJvdW5kICovCi0JCWljZC0+b3BzLT5zZXRfYnVzX3BhcmFtCQk9IE5VTEw7Ci0JCWljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0JPSBOVUxMOworCQlpY2QtPm9wcy0+c2V0X2J1c19wYXJhbQkJPSBwcml2LT5zZXRfYnVzX3BhcmFtOworCQlpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtCT0gcHJpdi0+cXVlcnlfYnVzX3BhcmFtOworCQlwcml2LT5zZXRfYnVzX3BhcmFtCQk9IE5VTEw7CisJCXByaXYtPnF1ZXJ5X2J1c19wYXJhbQkJPSBOVUxMOwogCiAJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KCZwcml2LT5zdWJkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IDQ2Mjg0NDguLmRkYjRjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0xMzYsMTEgKzEzNiw1MCBAQAogfQogRVhQT1JUX1NZTUJPTChzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyk7CiAKKyNkZWZpbmUgcGl4Zm10c3RyKHgpICh4KSAmIDB4ZmYsICgoeCkgPj4gOCkgJiAweGZmLCAoKHgpID4+IDE2KSAmIDB4ZmYsIFwKKwkoKHgpID4+IDI0KSAmIDB4ZmYKKworc3RhdGljIGludCBzb2NfY2FtZXJhX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJaW50IHJldDsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAiVFJZX0ZNVCglYyVjJWMlYywgJXV4JXUpXG4iLAorCQlwaXhmbXRzdHIocGl4LT5waXhlbGZvcm1hdCksIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gMDsKKwlwaXgtPnNpemVpbWFnZSA9IDA7CisKKwlyZXQgPSBpY2ktPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKCFwaXgtPnNpemVpbWFnZSkgeworCQlpZiAoIXBpeC0+Ynl0ZXNwZXJsaW5lKSB7CisJCQljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCisJCQl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CisJCQlpZiAoIXhsYXRlKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlyZXQgPSBzb2NfbWJ1c19ieXRlc19wZXJfbGluZShwaXgtPndpZHRoLAorCQkJCQkJICAgICAgeGxhdGUtPmhvc3RfZm10KTsKKwkJCWlmIChyZXQgPiAwKQorCQkJCXBpeC0+Ynl0ZXNwZXJsaW5lID0gcmV0OworCQl9CisJCWlmIChwaXgtPmJ5dGVzcGVybGluZSkKKwkJCXBpeC0+c2l6ZWltYWdlID0gcGl4LT5ieXRlc3BlcmxpbmUgKiBwaXgtPmhlaWdodDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzb2NfY2FtZXJhX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAKIAlXQVJOX09OKHByaXYgIT0gZmlsZS0+cHJpdmF0ZV9kYXRhKTsKIApAQCAtMTQ5LDcgKzE4OCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogbGltaXQgZm9ybWF0IHRvIGhhcmR3YXJlIGNhcGFiaWxpdGllcyAqLwotCXJldHVybiBpY2ktPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCXJldHVybiBzb2NfY2FtZXJhX3RyeV9mbXQoaWNkLCBmKTsKIH0KIAogc3RhdGljIGludCBzb2NfY2FtZXJhX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC0zNjIsOSArNDAxLDYgQEAKIAlpY2QtPnVzZXJfZm9ybWF0cyA9IE5VTEw7CiB9CiAKLSNkZWZpbmUgcGl4Zm10c3RyKHgpICh4KSAmIDB4ZmYsICgoeCkgPj4gOCkgJiAweGZmLCAoKHgpID4+IDE2KSAmIDB4ZmYsIFwKLQkoKHgpID4+IDI0KSAmIDB4ZmYKLQogLyogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZCwgb3IgZnJvbSB0aGUgZmlyc3Qgb3BlbigyKSwgc2VlIGNvbW1lbnQgdGhlcmUgKi8KIHN0YXRpYyBpbnQgc29jX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAogCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQpAQCAtMzc3LDcgKzQxMyw3IEBACiAJCXBpeGZtdHN0cihwaXgtPnBpeGVsZm9ybWF0KSwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwogCiAJLyogV2UgYWx3YXlzIGNhbGwgdHJ5X2ZtdCgpIGJlZm9yZSBzZXRfZm10KCkgb3Igc2V0X2Nyb3AoKSAqLwotCXJldCA9IGljaS0+b3BzLT50cnlfZm10KGljZCwgZik7CisJcmV0ID0gc29jX2NhbWVyYV90cnlfZm10KGljZCwgZik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTk5NiwxMCArMTAzMiwxMSBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPQogCQl0b19pMmNfY2xpZW50KHRvX3NvY19jYW1lcmFfY29udHJvbChpY2QpKTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSBjbGllbnQtPmFkYXB0ZXI7CiAJZGV2X3NldF9kcnZkYXRhKCZpY2QtPmRldiwgTlVMTCk7CiAJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwogCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOwotCWkyY19wdXRfYWRhcHRlcihjbGllbnQtPmFkYXB0ZXIpOworCWkyY19wdXRfYWRhcHRlcihhZGFwKTsKIH0KICNlbHNlCiAjZGVmaW5lIHNvY19jYW1lcmFfaW5pdF9pMmMoaWNkLCBpY2wpCSgtRU5PREVWKQpAQCAtMTA3MSw2ICsxMTA4LDkgQEAKIAkJfQogCX0KIAorCXNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKKwlzZC0+Z3JwX2lkID0gKGxvbmcpaWNkOworCiAJLyogQXQgdGhpcyBwb2ludCBjbGllbnQgLnByb2JlKCkgc2hvdWxkIGhhdmUgcnVuIGFscmVhZHkgKi8KIAlyZXQgPSBzb2NfY2FtZXJhX2luaXRfdXNlcl9mb3JtYXRzKGljZCk7CiAJaWYgKHJldCA8IDApCkBAIC0xMDkyLDcgKzExMzIsNiBAQAogCQlnb3RvIGV2aWRzdGFydDsKIAogCS8qIFRyeSB0byBpbXByb3ZlIG91ciBndWVzcyBvZiBhIHJlYXNvbmFibGUgd2luZG93IGZvcm1hdCAqLwotCXNkID0gc29jX2NhbWVyYV90b19zdWJkZXYoaWNkKTsKIAlpZiAoIXY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX21idXNfZm10LCAmbWYpKSB7CiAJCWljZC0+dXNlcl93aWR0aAkJPSBtZi53aWR0aDsKIAkJaWNkLT51c2VyX2hlaWdodAk9IG1mLmhlaWdodDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKaW5kZXggNWQ0Y2YzYi4uMjJmYTgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXNkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CisJc2QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc2QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRkYTk4NDBfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYwppbmRleCAxOTYyMWVkLi44Mjc0MjVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCkBAIC0xNTIsNyArMTUyLDcgQEAKIAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKLQlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOworCXNkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHY0bDJfc3ViZGV2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNkID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0ZWE2NDE1Y19vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwppbmRleCA1ZWE4NDA0Li5mMzUwYjZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0Jc2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKKwlzZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOwogCWlmIChzZCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGVhNjQyMF9vcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMKaW5kZXggZjgxMzhjNy4uMWFhYjk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1cGQ2NDAzMWFfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1cGQ2NDAzMWFfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc2QgPSAmc3RhdGUtPnNkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCmluZGV4IDI4ZTBlNmIuLjliYmU2MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCiAJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVwZDY0MDgzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXBkNjQwODNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc2QgPSAmc3RhdGUtPnNkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCmluZGV4IDQ5OGU2NzQuLjZkYzcxOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKQEAgLTM4OSw3ICszODksOCBAQAogCXZpZGVvX2dldCh2ZGV2KTsKIAltdXRleF91bmxvY2soJnZpZGVvZGV2X2xvY2spOwogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX0NPTlRST0xMRVIpCi0JaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2KSB7CisJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2ICYmCisJICAgIHZkZXYtPnZmbF90eXBlICE9IFZGTF9UWVBFX1NVQkRFVikgewogCQllbnRpdHkgPSBtZWRpYV9lbnRpdHlfZ2V0KCZ2ZGV2LT5lbnRpdHkpOwogCQlpZiAoIWVudGl0eSkgewogCQkJcmV0ID0gLUVCVVNZOwpAQCAtNDE1LDcgKzQxNiw4IEBACiAJLyogZGVjcmVhc2UgdGhlIHJlZmNvdW50IGluIGNhc2Ugb2YgYW4gZXJyb3IgKi8KIAlpZiAocmV0KSB7CiAjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfQ09OVFJPTExFUikKLQkJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2KQorCQlpZiAodmRldi0+djRsMl9kZXYgJiYgdmRldi0+djRsMl9kZXYtPm1kZXYgJiYKKwkJICAgIHZkZXYtPnZmbF90eXBlICE9IFZGTF9UWVBFX1NVQkRFVikKIAkJCW1lZGlhX2VudGl0eV9wdXQoZW50aXR5KTsKICNlbmRpZgogCQl2aWRlb19wdXQodmRldik7CkBAIC00MzcsNyArNDM5LDggQEAKIAkJCW11dGV4X3VubG9jayh2ZGV2LT5sb2NrKTsKIAl9CiAjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfQ09OVFJPTExFUikKLQlpZiAodmRldi0+djRsMl9kZXYgJiYgdmRldi0+djRsMl9kZXYtPm1kZXYpCisJaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2ICYmCisJICAgIHZkZXYtPnZmbF90eXBlICE9IFZGTF9UWVBFX1NVQkRFVikKIAkJbWVkaWFfZW50aXR5X3B1dCgmdmRldi0+ZW50aXR5KTsKICNlbmRpZgogCS8qIGRlY3JlYXNlIHRoZSByZWZjb3VudCB1bmNvbmRpdGlvbmFsbHkgc2luY2UgdGhlIHJlbGVhc2UoKQpAQCAtNjg2LDcgKzY4OSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19NRURJQV9DT05UUk9MTEVSKQogCS8qIFBhcnQgNTogUmVnaXN0ZXIgdGhlIGVudGl0eS4gKi8KLQlpZiAodmRldi0+djRsMl9kZXYgJiYgdmRldi0+djRsMl9kZXYtPm1kZXYpIHsKKwlpZiAodmRldi0+djRsMl9kZXYgJiYgdmRldi0+djRsMl9kZXYtPm1kZXYgJiYKKwkgICAgdmRldi0+dmZsX3R5cGUgIT0gVkZMX1RZUEVfU1VCREVWKSB7CiAJCXZkZXYtPmVudGl0eS50eXBlID0gTUVESUFfRU5UX1RfREVWTk9ERV9WNEw7CiAJCXZkZXYtPmVudGl0eS5uYW1lID0gdmRldi0+bmFtZTsKIAkJdmRldi0+ZW50aXR5LnY0bC5tYWpvciA9IFZJREVPX01BSk9SOwpAQCAtNzMzLDcgKzczNyw4IEBACiAJCXJldHVybjsKIAogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX0NPTlRST0xMRVIpCi0JaWYgKHZkZXYtPnY0bDJfZGV2ICYmIHZkZXYtPnY0bDJfZGV2LT5tZGV2KQorCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+bWRldiAmJgorCSAgICB2ZGV2LT52ZmxfdHlwZSAhPSBWRkxfVFlQRV9TVUJERVYpCiAJCW1lZGlhX2RldmljZV91bnJlZ2lzdGVyX2VudGl0eSgmdmRldi0+ZW50aXR5KTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKaW5kZXggNWFlYWY4Ny4uNGFhZTUwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYwpAQCAtMTU1LDggKzE1NSwxMCBAQAogCXNkLT52NGwyX2RldiA9IHY0bDJfZGV2OwogCWlmIChzZC0+aW50ZXJuYWxfb3BzICYmIHNkLT5pbnRlcm5hbF9vcHMtPnJlZ2lzdGVyZWQpIHsKIAkJZXJyID0gc2QtPmludGVybmFsX29wcy0+cmVnaXN0ZXJlZChzZCk7Ci0JCWlmIChlcnIpCisJCWlmIChlcnIpIHsKKwkJCW1vZHVsZV9wdXQoc2QtPm93bmVyKTsKIAkJCXJldHVybiBlcnI7CisJCX0KIAl9CiAKIAkvKiBUaGlzIGp1c3QgcmV0dXJucyAwIGlmIGVpdGhlciBvZiB0aGUgdHdvIGFyZ3MgaXMgTlVMTCAqLwpAQCAtMTY0LDYgKzE2Niw3IEBACiAJaWYgKGVycikgewogCQlpZiAoc2QtPmludGVybmFsX29wcyAmJiBzZC0+aW50ZXJuYWxfb3BzLT51bnJlZ2lzdGVyZWQpCiAJCQlzZC0+aW50ZXJuYWxfb3BzLT51bnJlZ2lzdGVyZWQoc2QpOworCQltb2R1bGVfcHV0KHNkLT5vd25lcik7CiAJCXJldHVybiBlcnI7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMKaW5kZXggMGI4MDY0NC4uODEyNzI5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYwpAQCAtMTU1LDI1ICsxNTUsMjUgQEAKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBWSURJT0NfUVVFUllDVFJMOgotCQlyZXR1cm4gdjRsMl9zdWJkZXZfcXVlcnljdHJsKHNkLCBhcmcpOworCQlyZXR1cm4gdjRsMl9xdWVyeWN0cmwoc2QtPmN0cmxfaGFuZGxlciwgYXJnKTsKIAogCWNhc2UgVklESU9DX1FVRVJZTUVOVToKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X3F1ZXJ5bWVudShzZCwgYXJnKTsKKwkJcmV0dXJuIHY0bDJfcXVlcnltZW51KHNkLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19HX0NUUkw6Ci0JCXJldHVybiB2NGwyX3N1YmRldl9nX2N0cmwoc2QsIGFyZyk7CisJCXJldHVybiB2NGwyX2dfY3RybChzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfU19DVFJMOgotCQlyZXR1cm4gdjRsMl9zdWJkZXZfc19jdHJsKHNkLCBhcmcpOworCQlyZXR1cm4gdjRsMl9zX2N0cmwoc2QtPmN0cmxfaGFuZGxlciwgYXJnKTsKIAogCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgotCQlyZXR1cm4gdjRsMl9zdWJkZXZfZ19leHRfY3RybHMoc2QsIGFyZyk7CisJCXJldHVybiB2NGwyX2dfZXh0X2N0cmxzKHNkLT5jdHJsX2hhbmRsZXIsIGFyZyk7CiAKIAljYXNlIFZJRElPQ19TX0VYVF9DVFJMUzoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X3NfZXh0X2N0cmxzKHNkLCBhcmcpOworCQlyZXR1cm4gdjRsMl9zX2V4dF9jdHJscyhzZC0+Y3RybF9oYW5kbGVyLCBhcmcpOwogCiAJY2FzZSBWSURJT0NfVFJZX0VYVF9DVFJMUzoKLQkJcmV0dXJuIHY0bDJfc3ViZGV2X3RyeV9leHRfY3RybHMoc2QsIGFyZyk7CisJCXJldHVybiB2NGwyX3RyeV9leHRfY3RybHMoc2QtPmN0cmxfaGFuZGxlciwgYXJnKTsKIAogCWNhc2UgVklESU9DX0RRRVZFTlQ6CiAJCWlmICghKHNkLT5mbGFncyAmIFY0TDJfU1VCREVWX0ZMX0hBU19FVkVOVFMpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwppbmRleCBjNDc0MmZjLi5jOTY5MTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLWRtYS1jb250aWcuYwpAQCAtMzAwLDcgKzMwMCw3IEBACiAKIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOwogCXJldHZhbCA9IHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCi0JCQkJIFBGTl9ET1dOKHZpcnRfdG9fcGh5cyhtZW0tPnZhZGRyKSksCisJCQkJIG1lbS0+ZG1hX2hhbmRsZSA+PiBQQUdFX1NISUZULAogCQkJCSBzaXplLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKHEtPmRldiwgIm1tYXA6IHJlbWFwIGZhaWxlZCB3aXRoIGVycm9yICVkLiAiLCByZXR2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItY29yZS5jCmluZGV4IDY2OThjNzcuLjZiYTE0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi1jb3JlLmMKQEAgLTM3LDYgKzM3LDkgQEAKICNkZWZpbmUgY2FsbF9xb3AocSwgb3AsIGFyZ3MuLi4pCQkJCQlcCiAJKCgocSktPm9wcy0+b3ApID8gKChxKS0+b3BzLT5vcChhcmdzKSkgOiAwKQogCisjZGVmaW5lIFY0TDJfQlVGRkVSX1NUQVRFX0ZMQUdTCShWNEwyX0JVRl9GTEFHX01BUFBFRCB8IFY0TDJfQlVGX0ZMQUdfUVVFVUVEIHwgXAorCQkJCSBWNEwyX0JVRl9GTEFHX0RPTkUgfCBWNEwyX0JVRl9GTEFHX0VSUk9SKQorCiAvKioKICAqIF9fdmIyX2J1Zl9tZW1fYWxsb2MoKSAtIGFsbG9jYXRlIHZpZGVvIG1lbW9yeSBmb3IgdGhlIGdpdmVuIGJ1ZmZlcgogICovCkBAIC01MSw3ICs1NCw3IEBACiAJZm9yIChwbGFuZSA9IDA7IHBsYW5lIDwgdmItPm51bV9wbGFuZXM7ICsrcGxhbmUpIHsKIAkJbWVtX3ByaXYgPSBjYWxsX21lbW9wKHEsIHBsYW5lLCBhbGxvYywgcS0+YWxsb2NfY3R4W3BsYW5lXSwKIAkJCQkJcGxhbmVfc2l6ZXNbcGxhbmVdKTsKLQkJaWYgKCFtZW1fcHJpdikKKwkJaWYgKElTX0VSUl9PUl9OVUxMKG1lbV9wcml2KSkKIAkJCWdvdG8gZnJlZTsKIAogCQkvKiBBc3NvY2lhdGUgYWxsb2NhdG9yIHByaXZhdGUgZGF0YSB3aXRoIHRoaXMgcGxhbmUgKi8KQEAgLTI4NCw3ICsyODcsNyBAQAogCXN0cnVjdCB2YjJfcXVldWUgKnEgPSB2Yi0+dmIyX3F1ZXVlOwogCWludCByZXQgPSAwOwogCi0JLyogQ29weSBiYWNrIGRhdGEgc3VjaCBhcyB0aW1lc3RhbXAsIGlucHV0LCBldGMuICovCisJLyogQ29weSBiYWNrIGRhdGEgc3VjaCBhcyB0aW1lc3RhbXAsIGZsYWdzLCBpbnB1dCwgZXRjLiAqLwogCW1lbWNweShiLCAmdmItPnY0bDJfYnVmLCBvZmZzZXRvZihzdHJ1Y3QgdjRsMl9idWZmZXIsIG0pKTsKIAliLT5pbnB1dCA9IHZiLT52NGwyX2J1Zi5pbnB1dDsKIAliLT5yZXNlcnZlZCA9IHZiLT52NGwyX2J1Zi5yZXNlcnZlZDsKQEAgLTMxMyw3ICszMTYsMTAgQEAKIAkJCWItPm0udXNlcnB0ciA9IHZiLT52NGwyX3BsYW5lc1swXS5tLnVzZXJwdHI7CiAJfQogCi0JYi0+ZmxhZ3MgPSAwOworCS8qCisJICogQ2xlYXIgYW55IGJ1ZmZlciBzdGF0ZSByZWxhdGVkIGZsYWdzLgorCSAqLworCWItPmZsYWdzICY9IH5WNEwyX0JVRkZFUl9TVEFURV9GTEFHUzsKIAogCXN3aXRjaCAodmItPnN0YXRlKSB7CiAJY2FzZSBWQjJfQlVGX1NUQVRFX1FVRVVFRDoKQEAgLTUxOSw2ICs1MjUsNyBAQAogCW51bV9idWZmZXJzID0gbWluX3QodW5zaWduZWQgaW50LCByZXEtPmNvdW50LCBWSURFT19NQVhfRlJBTUUpOwogCW1lbXNldChwbGFuZV9zaXplcywgMCwgc2l6ZW9mKHBsYW5lX3NpemVzKSk7CiAJbWVtc2V0KHEtPmFsbG9jX2N0eCwgMCwgc2l6ZW9mKHEtPmFsbG9jX2N0eCkpOworCXEtPm1lbW9yeSA9IHJlcS0+bWVtb3J5OwogCiAJLyoKIAkgKiBBc2sgdGhlIGRyaXZlciBob3cgbWFueSBidWZmZXJzIGFuZCBwbGFuZXMgcGVyIGJ1ZmZlciBpdCByZXF1aXJlcy4KQEAgLTU2MCw4ICs1NjcsNiBAQAogCQlyZXQgPSBudW1fYnVmZmVyczsKIAl9CiAKLQlxLT5tZW1vcnkgPSByZXEtPm1lbW9yeTsKLQogCS8qCiAJICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc3VjY2Vzc2Z1bGx5IGFsbG9jYXRlZCBidWZmZXJzCiAJICogdG8gdGhlIHVzZXJzcGFjZS4KQEAgLTcxNSw2ICs3MjAsOCBAQAogCiAJdmItPnY0bDJfYnVmLmZpZWxkID0gYi0+ZmllbGQ7CiAJdmItPnY0bDJfYnVmLnRpbWVzdGFtcCA9IGItPnRpbWVzdGFtcDsKKwl2Yi0+djRsMl9idWYuaW5wdXQgPSBiLT5pbnB1dDsKKwl2Yi0+djRsMl9idWYuZmxhZ3MgPSBiLT5mbGFncyAmIH5WNEwyX0JVRkZFUl9TVEFURV9GTEFHUzsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItZG1hLWNvbnRpZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1ZjItZG1hLWNvbnRpZy5jCmluZGV4IDU4MjA1ZDUuLmE3OTBhNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYyLWRtYS1jb250aWcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmMi1kbWEtY29udGlnLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkJCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYtPnZhZGRyKSB7CiAJCWRldl9lcnIoY29uZi0+ZGV2LCAiZG1hX2FsbG9jX2NvaGVyZW50IG9mIHNpemUgJWxkIGZhaWxlZFxuIiwKLQkJCWJ1Zi0+c2l6ZSk7CisJCQlzaXplKTsKIAkJa2ZyZWUoYnVmKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKaW5kZXggNjQzYWQ1Mi4uNDc5NmJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCkBAIC0xMDAwLDcgKzEwMDAsNiBAQAogCWdkLT5tYWpvciA9IEkyT19NQUpPUjsKIAlnZC0+cXVldWUgPSBxdWV1ZTsKIAlnZC0+Zm9wcyA9ICZpMm9fYmxvY2tfZm9wczsKLQlnZC0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJZ2QtPnByaXZhdGVfZGF0YSA9IGRldjsKIAogCWRldi0+Z2QgPSBnZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL2FzaWMzLmMgYi9kcml2ZXJzL21mZC9hc2ljMy5jCmluZGV4IGQ0YTg1MWMuLjBiNGQ1YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL2FzaWMzLmMKKysrIGIvZHJpdmVycy9tZmQvYXNpYzMuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJaW50IGl0ZXIsIGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRhdGEtPmNoaXAtPmlycV9hY2soaXJxX2RhdGEpOworCWRhdGEtPmNoaXAtPmlycV9hY2soZGF0YSk7CiAKIAlmb3IgKGl0ZXIgPSAwIDsgaXRlciA8IE1BWF9BU0lDX0lTUl9MT09QUzsgaXRlcisrKSB7CiAJCXUzMiBzdGF0dXM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9vbWFwLXVzYi1ob3N0LmMgYi9kcml2ZXJzL21mZC9vbWFwLXVzYi1ob3N0LmMKaW5kZXggNTM0NTBmNC4uM2FiOWZmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvb21hcC11c2ItaG9zdC5jCisrKyBiL2RyaXZlcnMvbWZkL29tYXAtdXNiLWhvc3QuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAogI2RlZmluZSBVU0JIU19EUklWRVJfTkFNRQkidXNiaHMtb21hcCIKQEAgLTcwMCw4ICs2OTksNyBAQAogCWRldl9kYmcoZGV2LCAic3RhcnRpbmcgVEkgSFNVU0IgQ29udHJvbGxlclxuIik7CiAJaWYgKCFwZGF0YSkgewogCQlkZXZfZGJnKGRldiwgIm1pc3NpbmcgcGxhdGZvcm1fZGF0YVxuIik7Ci0JCXJldCA9ICAtRU5PREVWOwotCQlnb3RvIGVuZF9lbmFibGU7CisJCXJldHVybiAgLUVOT0RFVjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb21hcC0+bG9jaywgZmxhZ3MpOwpAQCAtNzE5LDE0ICs3MTcsMTQgQEAKIAkJCWdwaW9fcmVxdWVzdChwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMF0sCiAJCQkJCQkiVVNCMSBQSFkgcmVzZXQiKTsKIAkJCWdwaW9fZGlyZWN0aW9uX291dHB1dAotCQkJCShwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMF0sIDEpOworCQkJCShwZGF0YS0+ZWhjaV9kYXRhLT5yZXNldF9ncGlvX3BvcnRbMF0sIDApOwogCQl9CiAKIAkJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdKSkgewogCQkJZ3Bpb19yZXF1ZXN0KHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwKIAkJCQkJCSJVU0IyIFBIWSByZXNldCIpOwogCQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0Ci0JCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwgMSk7CisJCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwgMCk7CiAJCX0KIAogCQkvKiBIb2xkIHRoZSBQSFkgaW4gUkVTRVQgZm9yIGVub3VnaCB0aW1lIHRpbGwgRElSIGlzIGhpZ2ggKi8KQEAgLTkwNiwxNiArOTA0LDE3IEBACiAKIAkJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzBdKSkKIAkJCWdwaW9fc2V0X3ZhbHVlCi0JCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwgMCk7CisJCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFswXSwgMSk7CiAKIAkJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPmVoY2lfZGF0YS0+cmVzZXRfZ3Bpb19wb3J0WzFdKSkKIAkJCWdwaW9fc2V0X3ZhbHVlCi0JCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwgMCk7CisJCQkJKHBkYXRhLT5laGNpX2RhdGEtPnJlc2V0X2dwaW9fcG9ydFsxXSwgMSk7CiAJfQogCiBlbmRfY291bnQ6CiAJb21hcC0+Y291bnQrKzsKLQlnb3RvIGVuZF9lbmFibGU7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb21hcC0+bG9jaywgZmxhZ3MpOworCXJldHVybiAwOwogCiBlcnJfdGxsOgogCWlmIChwZGF0YS0+ZWhjaV9kYXRhLT5waHlfcmVzZXQpIHsKQEAgLTkzMSw4ICs5MzAsNiBAQAogCWNsa19kaXNhYmxlKG9tYXAtPnVzYmhvc3RfZnNfZmNrKTsKIAljbGtfZGlzYWJsZShvbWFwLT51c2Job3N0X2hzX2Zjayk7CiAJY2xrX2Rpc2FibGUob21hcC0+dXNiaG9zdF9pY2spOwotCi1lbmRfZW5hYmxlOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9tYXAtPmxvY2ssIGZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jCmluZGV4IDE2NDIyZGUwLi4yYzBkNGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jCkBAIC00NDcsMTIgKzQ0NywxMyBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7CiAJfQotCWlmICh0c2NyaXB0LT5mbGFncyAmIFRXTDQwMzBfU0xFRVBfU0NSSVBUKQorCWlmICh0c2NyaXB0LT5mbGFncyAmIFRXTDQwMzBfU0xFRVBfU0NSSVBUKSB7CiAJCWlmIChvcmRlcikKIAkJCXByX3dhcm5pbmcoIlRXTDQwMzA6IEJhZCBvcmRlciBvZiBzY3JpcHRzIChzbGVlcCAiXAogCQkJCQkic2NyaXB0IGJlZm9yZSB3YWtldXApIExlYWRzIHRvIGJvb3QiXAogCQkJCQkiZmFpbHVyZSBvbiBzb21lIGJvYXJkc1xuIik7CiAJCWVyciA9IHR3bDQwMzBfY29uZmlnX3NsZWVwX3NlcXVlbmNlKGFkZHJlc3MpOworCX0KIG91dDoKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9idXMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvYnVzLmMKaW5kZXggNjM2NjdhOC4uZDZkNjJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9idXMuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2J1cy5jCkBAIC0yODQsNiArMjg0LDcgQEAKIAkJdHlwZSA9ICJTRC1jb21ibyI7CiAJCWlmIChtbWNfY2FyZF9ibG9ja2FkZHIoY2FyZCkpCiAJCQl0eXBlID0gIlNESEMtY29tYm8iOworCQlicmVhazsKIAlkZWZhdWx0OgogCQl0eXBlID0gIj8iOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcC5jIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKaW5kZXggMmUwMzJmMC4uYTZjMzI5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9vbWFwLmMKQEAgLTgzMiw3ICs4MzIsNyBAQAogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCi0JaWYgKGVuZF9jb21tYW5kKQorCWlmIChlbmRfY29tbWFuZCAmJiBob3N0LT5jbWQpCiAJCW1tY19vbWFwX2NtZF9kb25lKGhvc3QsIGhvc3QtPmNtZCk7CiAJaWYgKGhvc3QtPmRhdGEgIT0gTlVMTCkgewogCQlpZiAodHJhbnNmZXJfZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLW9mLWNvcmUuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCmluZGV4IGY5YjYxMWYuLjYwZTQxODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktb2YtY29yZS5jCkBAIC0xMjQsOCArMTI0LDEwIEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2RoY2lfb2ZfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNkaGNpX29mX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IHNkaGNpX29mX2RhdGEgKnNkaGNpX29mX2RhdGE7CiAJc3RydWN0IHNkaGNpX2hvc3QgKmhvc3Q7CkBAIC0xMzQsOSArMTM2LDEwIEBACiAJaW50IHNpemU7CiAJaW50IHJldDsKIAotCWlmICghb2ZkZXYtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShzZGhjaV9vZl9tYXRjaCwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXNkaGNpX29mX2RhdGEgPSBvZmRldi0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCXNkaGNpX29mX2RhdGEgPSBtYXRjaC0+ZGF0YTsKIAogCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShucCkpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKaW5kZXggYTEzNmJlNy4uZjhiNWYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCkBAIC05NTcsNiArOTU3LDcgQEAKIAlob3N0LT5pb2FkZHIgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgYmFyKTsKIAlpZiAoIWhvc3QtPmlvYWRkcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKIAkJZ290byByZWxlYXNlOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCmluZGV4IDllMTVmNDEuLjVkMjA2NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKQEAgLTEzMzQsNiArMTMzNCwxMyBAQAogCiAJaG9zdCA9IChzdHJ1Y3Qgc2RoY2lfaG9zdCopcGFyYW07CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgdGhpcyB0YXNrbGV0IGdldHMgcmVzY2hlZHVsZWQgd2hpbGUgcnVubmluZywgaXQgd2lsbAorICAgICAgICAgKiBiZSBydW4gYWdhaW4gYWZ0ZXJ3YXJkcyBidXQgd2l0aG91dCBhbnkgYWN0aXZlIHJlcXVlc3QuCisgICAgICAgICAqLworCWlmICghaG9zdC0+bXJxKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+bG9jaywgZmxhZ3MpOwogCiAJZGVsX3RpbWVyKCZob3N0LT50aW1lcik7CkBAIC0xMzQ1LDcgKzEzNTIsNyBAQAogCSAqIHVwb24gZXJyb3IgY29uZGl0aW9ucy4KIAkgKi8KIAlpZiAoIShob3N0LT5mbGFncyAmIFNESENJX0RFVklDRV9ERUFEKSAmJgotCQkobXJxLT5jbWQtPmVycm9yIHx8CisJICAgICgobXJxLT5jbWQgJiYgbXJxLT5jbWQtPmVycm9yKSB8fAogCQkgKG1ycS0+ZGF0YSAmJiAobXJxLT5kYXRhLT5lcnJvciB8fAogCQkgIChtcnEtPmRhdGEtPnN0b3AgJiYgbXJxLT5kYXRhLT5zdG9wLT5lcnJvcikpKSB8fAogCQkgICAoaG9zdC0+cXVpcmtzICYgU0RIQ0lfUVVJUktfUkVTRVRfQUZURVJfUkVRVUVTVCkpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jX3Bpby5jIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tY19waW8uYwppbmRleCA2MmQzN2RlLi43MTAzMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jX3Bpby5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWNfcGlvLmMKQEAgLTcyOCwxNSArNzI4LDE1IEBACiAJCXRtaW9fbW1jX3NldF9jbG9jayhob3N0LCBpb3MtPmNsb2NrKTsKIAogCS8qIFBvd2VyIHNlcXVlbmNlIC0gT0ZGIC0+IFVQIC0+IE9OICovCi0JaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGIHx8ICFpb3MtPmNsb2NrKSB7CisJaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfVVApIHsKKwkJLyogcG93ZXIgdXAgU0QgYnVzICovCisJCWlmIChob3N0LT5zZXRfcHdyKQorCQkJaG9zdC0+c2V0X3B3cihob3N0LT5wZGV2LCAxKTsKKwl9IGVsc2UgaWYgKGlvcy0+cG93ZXJfbW9kZSA9PSBNTUNfUE9XRVJfT0ZGIHx8ICFpb3MtPmNsb2NrKSB7CiAJCS8qIHBvd2VyIGRvd24gU0QgYnVzICovCiAJCWlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX09GRiAmJiBob3N0LT5zZXRfcHdyKQogCQkJaG9zdC0+c2V0X3B3cihob3N0LT5wZGV2LCAwKTsKIAkJdG1pb19tbWNfY2xrX3N0b3AoaG9zdCk7Ci0JfSBlbHNlIGlmIChpb3MtPnBvd2VyX21vZGUgPT0gTU1DX1BPV0VSX1VQKSB7Ci0JCS8qIHBvd2VyIHVwIFNEIGJ1cyAqLwotCQlpZiAoaG9zdC0+c2V0X3B3cikKLQkJCWhvc3QtPnNldF9wd3IoaG9zdC0+cGRldiwgMSk7CiAJfSBlbHNlIHsKIAkJLyogc3RhcnQgYnVzIGNsb2NrICovCiAJCXRtaW9fbW1jX2Nsa19zdGFydChob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCA0NGIxZjQ2Li41MDY5MTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC0yNjAsNiArMjYwLDEzIEBACiAJICBTdXBwb3J0IGZvciBwYXJzaW5nIENGRSBpbWFnZSB0YWcgYW5kIGNyZWF0aW5nIE1URCBwYXJ0aXRpb25zIG9uCiAJICBCcm9hZGNvbSBCQ002M3h4IGJvYXJkcy4KIAorY29uZmlnIE1URF9MQU5USVEKKwl0cmlzdGF0ZSAiTGFudGlxIFNvQyBOT1Igc3VwcG9ydCIKKwlkZXBlbmRzIG9uIExBTlRJUQorCXNlbGVjdCBNVERfUEFSVElUSU9OUworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIE5PUiBmbGFzaCBhdHRhY2hlZCB0byB0aGUgTGFudGlxIFNvQydzIEV4dGVybmFsIEJ1cyBVbml0LgorCiBjb25maWcgTVREX0RJTE5FVFBDCiAJdHJpc3RhdGUgIkNGSSBGbGFzaCBkZXZpY2UgbWFwcGVkIG9uIERJTC9OZXQgUEMiCiAJZGVwZW5kcyBvbiBYODYgJiYgTVREX1BBUlRJVElPTlMgJiYgTVREX0NGSV9JTlRFTEVYVCAmJiBCUk9LRU4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IDA4NTMzYmQuLjZhZGY0YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNjAsMyArNjAsNCBAQAogb2JqLSQoQ09ORklHX01URF9HUElPX0FERFIpCSs9IGdwaW8tYWRkci1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0JDTTk2M1hYKQkrPSBiY205NjN4eC1mbGFzaC5vCiBvYmotJChDT05GSUdfTVREX0xBVENIX0FERFIpCSs9IGxhdGNoLWFkZHItZmxhc2gubworb2JqLSQoQ09ORklHX01URF9MQU5USVEpCSs9IGxhbnRpcS1mbGFzaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2xhbnRpcS1mbGFzaC5jIGIvZHJpdmVycy9tdGQvbWFwcy9sYW50aXEtZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTBjYWJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9sYW50aXEtZmxhc2guYwpAQCAtMCwwICsxLDI1MSBAQAorLyoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCBMaXUgUGVuZyBJbmZpbmVvbiBJRkFQIERDIENPTSBDUEUKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTAgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvY2ZpLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKyNpbmNsdWRlIDxsYW50aXFfcGxhdGZvcm0uaD4KKworLyoKKyAqIFRoZSBOT1IgZmxhc2ggaXMgY29ubmVjdGVkIHRvIHRoZSBzYW1lIGV4dGVybmFsIGJ1cyB1bml0IChFQlUpIGFzIFBDSS4KKyAqIFRvIG1ha2UgUENJIHdvcmsgd2UgbmVlZCB0byBlbmFibGUgdGhlIGVuZGlhbm5lc3Mgc3dhcHBpbmcgZm9yIHRoZSBhZGRyZXNzCisgKiB3cml0dGVuIHRvIHRoZSBFQlUuIFRoaXMgZW5kaWFubmVzcyBzd2FwcGluZyB3b3JrcyBmb3IgUENJIGNvcnJlY3RseSBidXQKKyAqIGZhaWxzIGZvciBhdHRhY2hlZCBOT1IgZGV2aWNlcy4gVG8gd29ya2Fyb3VuZCB0aGlzIHdlIG5lZWQgdG8gdXNlIGEgY29tcGxleAorICogbWFwLiBUaGUgd29ya2Fyb3VuZCBpbnZvbHZlcyBzd2FwcGluZyBhbGwgYWRkcmVzc2VzIHdoaWxzdCBwcm9iaW5nIHRoZSBjaGlwLgorICogT25jZSBwcm9iaW5nIGlzIGNvbXBsZXRlIHdlIHN0b3Agc3dhcHBpbmcgdGhlIGFkZHJlc3NlcyBidXQgc3dpenpsZSB0aGUKKyAqIHVubG9jayBhZGRyZXNzZXMgdG8gZW5zdXJlIHRoYXQgYWNjZXNzIHRvIHRoZSBOT1IgZGV2aWNlIHdvcmtzIGNvcnJlY3RseS4KKyAqLworCitlbnVtIHsKKwlMVFFfTk9SX1BST0JJTkcsCisJTFRRX05PUl9OT1JNQUwKK307CisKK3N0cnVjdCBsdHFfbXRkIHsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKwlzdHJ1Y3QgbWFwX2luZm8gKm1hcDsKK307CisKK3N0YXRpYyBjaGFyIGx0cV9tYXBfbmFtZVtdID0gImx0cV9ub3IiOworCitzdGF0aWMgbWFwX3dvcmQKK2x0cV9yZWFkMTYoc3RydWN0IG1hcF9pbmZvICptYXAsIHVuc2lnbmVkIGxvbmcgYWRyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJbWFwX3dvcmQgdGVtcDsKKworCWlmIChtYXAtPm1hcF9wcml2XzEgPT0gTFRRX05PUl9QUk9CSU5HKQorCQlhZHIgXj0gMjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKwl0ZW1wLnhbMF0gPSAqKHUxNiAqKShtYXAtPnZpcnQgKyBhZHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7CisJcmV0dXJuIHRlbXA7Cit9CisKK3N0YXRpYyB2b2lkCitsdHFfd3JpdGUxNihzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgbWFwX3dvcmQgZCwgdW5zaWduZWQgbG9uZyBhZHIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChtYXAtPm1hcF9wcml2XzEgPT0gTFRRX05PUl9QUk9CSU5HKQorCQlhZHIgXj0gMjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKwkqKHUxNiAqKShtYXAtPnZpcnQgKyBhZHIpID0gZC54WzBdOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIDIgZnVuY3Rpb25zIGNvcHkgZGF0YSBiZXR3ZWVuIGlvbWVtIGFuZCBhIGNhY2hlZCBtZW1vcnkKKyAqIHNlY3Rpb24uIEFzIG1lbWNweSgpIG1ha2VzIHVzZSBvZiBwcmUtZmV0Y2hpbmcgd2UgY2Fubm90IHVzZSBpdCBoZXJlLgorICogVGhlIG5vcm1hbCBhbHRlcm5hdGl2ZSBvZiB1c2luZyBtZW1jcHlfe3RvLGZyb219aW8gYWxzbyBtYWtlcyB1c2Ugb2YKKyAqIG1lbWNweSgpIG9uIE1JUFMgc28gaXQgaXMgbm90IGFwcGxpY2FibGUgZWl0aGVyLiBXZSBhcmUgdGhlcmVmb3JlIHN0dWNrCisgKiB3aXRoIGhhdmluZyB0byB1c2Ugb3VyIG93biBsb29wLgorICovCitzdGF0aWMgdm9pZAorbHRxX2NvcHlfZnJvbShzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdm9pZCAqdG8sCisJdW5zaWduZWQgbG9uZyBmcm9tLCBzc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpmID0gKHVuc2lnbmVkIGNoYXIgKiltYXAtPnZpcnQgKyBmcm9tOworCXVuc2lnbmVkIGNoYXIgKnQgPSAodW5zaWduZWQgY2hhciAqKXRvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAobGVuLS0pCisJCSp0KysgPSAqZisrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkCitsdHFfY29weV90byhzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgdW5zaWduZWQgbG9uZyB0bywKKwljb25zdCB2b2lkICpmcm9tLCBzc2l6ZV90IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyICpmID0gKHVuc2lnbmVkIGNoYXIgKilmcm9tOworCXVuc2lnbmVkIGNoYXIgKnQgPSAodW5zaWduZWQgY2hhciAqKW1hcC0+dmlydCArIHRvOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWJ1X2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAobGVuLS0pCisJCSp0KysgPSAqZisrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVidV9sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyIGNvbnN0ICpwYXJ0X3Byb2JlX3R5cGVzW10gPSB7ICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKKworc3RhdGljIGludCBfX2luaXQKK2x0cV9tdGRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhICpsdHFfbXRkX2RhdGEgPSBkZXZfZ2V0X3BsYXRkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBsdHFfbXRkICpsdHFfbXRkOworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgbnJfcGFydHMgPSAwOworCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpOworCWludCBlcnI7CisKKwlsdHFfbXRkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGx0cV9tdGQpLCBHRlBfS0VSTkVMKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBsdHFfbXRkKTsKKworCWx0cV9tdGQtPnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFsdHFfbXRkLT5yZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2UiKTsKKwkJZXJyID0gLUVOT0VOVDsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXJlcyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIGx0cV9tdGQtPnJlcy0+c3RhcnQsCisJCXJlc291cmNlX3NpemUobHRxX210ZC0+cmVzKSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghbHRxX210ZC0+cmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXF1ZXN0IG1lbSByZXNvdXJjZSIpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlsdHFfbXRkLT5tYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWFwX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlsdHFfbXRkLT5tYXAtPnBoeXMgPSByZXMtPnN0YXJ0OworCWx0cV9tdGQtPm1hcC0+c2l6ZSA9IHJlc291cmNlX3NpemUocmVzKTsKKwlsdHFfbXRkLT5tYXAtPnZpcnQgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LAorCQkJCWx0cV9tdGQtPm1hcC0+cGh5cywgbHRxX210ZC0+bWFwLT5zaXplKTsKKwlpZiAoIWx0cV9tdGQtPm1hcC0+dmlydCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW9yZW1hcCFcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9mcmVlOworCX0KKworCWx0cV9tdGQtPm1hcC0+bmFtZSA9IGx0cV9tYXBfbmFtZTsKKwlsdHFfbXRkLT5tYXAtPmJhbmt3aWR0aCA9IDI7CisJbHRxX210ZC0+bWFwLT5yZWFkID0gbHRxX3JlYWQxNjsKKwlsdHFfbXRkLT5tYXAtPndyaXRlID0gbHRxX3dyaXRlMTY7CisJbHRxX210ZC0+bWFwLT5jb3B5X2Zyb20gPSBsdHFfY29weV9mcm9tOworCWx0cV9tdGQtPm1hcC0+Y29weV90byA9IGx0cV9jb3B5X3RvOworCisJbHRxX210ZC0+bWFwLT5tYXBfcHJpdl8xID0gTFRRX05PUl9QUk9CSU5HOworCWx0cV9tdGQtPm10ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgbHRxX210ZC0+bWFwKTsKKwlsdHFfbXRkLT5tYXAtPm1hcF9wcml2XzEgPSBMVFFfTk9SX05PUk1BTDsKKworCWlmICghbHRxX210ZC0+bXRkKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInByb2JpbmcgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisKKwlsdHFfbXRkLT5tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7CisKKwljZmkgPSBsdHFfbXRkLT5tYXAtPmZsZHJ2X3ByaXY7CisJY2ZpLT5hZGRyX3VubG9jazEgXj0gMTsKKwljZmktPmFkZHJfdW5sb2NrMiBePSAxOworCisJbnJfcGFydHMgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhsdHFfbXRkLT5tdGQsCisJCQkJcGFydF9wcm9iZV90eXBlcywgJnBhcnRzLCAwKTsKKwlpZiAobnJfcGFydHMgPiAwKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCQkidXNpbmcgJWQgcGFydGl0aW9ucyBmcm9tIGNtZGxpbmUiLCBucl9wYXJ0cyk7CisJfSBlbHNlIHsKKwkJbnJfcGFydHMgPSBsdHFfbXRkX2RhdGEtPm5yX3BhcnRzOworCQlwYXJ0cyA9IGx0cV9tdGRfZGF0YS0+cGFydHM7CisJfQorCisJZXJyID0gYWRkX210ZF9wYXJ0aXRpb25zKGx0cV9tdGQtPm10ZCwgcGFydHMsIG5yX3BhcnRzKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhZGQgcGFydGl0aW9uc1xuIik7CisJCWdvdG8gZXJyX2Rlc3Ryb3k7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9kZXN0cm95OgorCW1hcF9kZXN0cm95KGx0cV9tdGQtPm10ZCk7CitlcnJfdW5tYXA6CisJaW91bm1hcChsdHFfbXRkLT5tYXAtPnZpcnQpOworZXJyX2ZyZWU6CisJa2ZyZWUobHRxX210ZC0+bWFwKTsKK2Vycl9vdXQ6CisJa2ZyZWUobHRxX210ZCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQKK2x0cV9tdGRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGx0cV9tdGQgKmx0cV9tdGQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChsdHFfbXRkKSB7CisJCWlmIChsdHFfbXRkLT5tdGQpIHsKKwkJCWRlbF9tdGRfcGFydGl0aW9ucyhsdHFfbXRkLT5tdGQpOworCQkJbWFwX2Rlc3Ryb3kobHRxX210ZC0+bXRkKTsKKwkJfQorCQlpZiAobHRxX210ZC0+bWFwLT52aXJ0KQorCQkJaW91bm1hcChsdHFfbXRkLT5tYXAtPnZpcnQpOworCQlrZnJlZShsdHFfbXRkLT5tYXApOworCQlrZnJlZShsdHFfbXRkKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGx0cV9tdGRfZHJpdmVyID0geworCS5yZW1vdmUgPSBfX2RldmV4aXRfcChsdHFfbXRkX3JlbW92ZSksCisJLmRyaXZlciA9IHsKKwkJLm5hbWUgPSAibHRxX25vciIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdAoraW5pdF9sdHFfbXRkKHZvaWQpCit7CisJaW50IHJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbHRxX210ZF9kcml2ZXIsIGx0cV9tdGRfcHJvYmUpOworCisJaWYgKHJldCkKKwkJcHJfZXJyKCJsdHFfbm9yOiBlcnJvciByZWdpc3RlcmluZyBwbGF0Zm9ybSBkcml2ZXIiKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQKK2V4aXRfbHRxX210ZCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsdHFfbXRkX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGluaXRfbHRxX210ZCk7Cittb2R1bGVfZXhpdChleGl0X2x0cV9tdGQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKb2huIENyaXNwaW4gPGJsb2dpY0BvcGVud3J0Lm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiTGFudGlxIFNvQyBOT1IiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcF9vZi5jIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKaW5kZXggYmQ0ODNmMC4uYzFkMzM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9waHlzbWFwX29mLmMKQEAgLTIxNCwxMSArMjE0LDEzIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZmxhc2hfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IG9mX2ZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKIAljb25zdCBjaGFyICoqcGFydF9wcm9iZV90eXBlczsKICNlbmRpZgorCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJc3RydWN0IG9mX2ZsYXNoICppbmZvOwpAQCAtMjMyLDkgKzIzNCwxMCBAQAogCXN0cnVjdCBtdGRfaW5mbyAqKm10ZF9saXN0ID0gTlVMTDsKIAlyZXNvdXJjZV9zaXplX3QgcmVzX3NpemU7CiAKLQlpZiAoIWRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG9mX2ZsYXNoX21hdGNoLCAmZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXByb2JlX3R5cGUgPSBkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlwcm9iZV90eXBlID0gbWF0Y2gtPmRhdGE7CiAKIAlyZWdfdHVwbGVfc2l6ZSA9IChvZl9uX2FkZHJfY2VsbHMoZHApICsgb2Zfbl9zaXplX2NlbGxzKGRwKSkgKiBzaXplb2YodTMyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCmluZGV4IDNmZmUwNWQuLjVkNTEzYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKQEAgLTEwLDYgKzEwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC00NzAsNyArNDcxLDcgQEAKIAogI2lmZGVmIENPTkZJR19NSVBTX1BCMTU1MAogCS8qIHNldCBncGlvMjA2IGhpZ2ggKi8KLQlhdV93cml0ZWwoYXVfcmVhZGwoR1BJTzJfRElSKSAmIH4oMSA8PCA2KSwgR1BJTzJfRElSKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dCgyMDYpOwogCiAJYm9vdF9zd2FwYm9vdCA9IChhdV9yZWFkbChNRU1fU1RTVEFUKSAmICgweDcgPDwgMSkpIHwgKChiY3NyX3JlYWQoQkNTUl9TVEFUVVMpID4+IDYpICYgMHgxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9kaXNrb25jaGlwLmMgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwppbmRleCA5NmMwYjM0Li42NTdiOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2Rpc2tvbmNoaXAuYwpAQCAtNDAwLDcgKzQwMCw3IEBACiAJZG9jMjAweF9od2NvbnRyb2wobXRkLCAwLCBOQU5EX0NUUkxfQUxFIHwgTkFORF9DVFJMX0NIQU5HRSk7CiAJZG9jMjAweF9od2NvbnRyb2wobXRkLCBOQU5EX0NNRF9OT05FLCBOQU5EX05DRSB8IE5BTkRfQ1RSTF9DSEFOR0UpOwogCi0JLyogV2UgY2FuJ3QnIHVzZSBkZXZfcmVhZHkgaGVyZSwgYnV0IGF0IGxlYXN0IHdlIHdhaXQgZm9yIHRoZQorCS8qIFdlIGNhbid0IHVzZSBkZXZfcmVhZHkgaGVyZSwgYnV0IGF0IGxlYXN0IHdlIHdhaXQgZm9yIHRoZQogCSAqIGNvbW1hbmQgdG8gY29tcGxldGUKIAkgKi8KIAl1ZGVsYXkoNTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggZGMyODBiYy4uMTlmMDRhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC0yMDE3LDYgKzIwMTcsMTMgQEAKIAkgIGZyb20gRmFyYWRheS4gSXQgaXMgdXNlZCBvbiBGYXJhZGF5IEEzMjAsIEFuZGVzIEFHMTAxIGFuZCBzb21lCiAJICBvdGhlciBBUk0vTkRTMzIgU29DJ3MuCiAKK2NvbmZpZyBMQU5USVFfRVRPUAorCXRyaXN0YXRlICJMYW50aXEgU29DIEVUT1AgZHJpdmVyIgorCWRlcGVuZHMgb24gU09DX1RZUEVfWFdBWQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoZSBNSUkwIGluc2lkZSB0aGUgTGFudGlxIFNvQworCisKIHNvdXJjZSAiZHJpdmVycy9uZXQvZnNfZW5ldC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvbmV0L29jdGVvbi9LY29uZmlnIgpAQCAtMjUzNiw3ICsyNTQzLDcgQEAKIHNvdXJjZSAiZHJpdmVycy9uZXQvc3RtbWFjL0tjb25maWciCiAKIGNvbmZpZyBQQ0hfR0JFCi0JdHJpc3RhdGUgIlBDSCBHaWdhYml0IEV0aGVybmV0IgorCXRyaXN0YXRlICJJbnRlbCBFRzIwVCBQQ0ggLyBPS0kgU0VNSUNPTkRVQ1RPUiBNTDcyMjMgSU9IIEdiRSIKIAlkZXBlbmRzIG9uIFBDSQogCXNlbGVjdCBNSUkKIAktLS1oZWxwLS0tCkBAIC0yNTQ4LDYgKzI1NTUsMTIgQEAKIAkgIHRvIEdpZ2FiaXQgRXRoZXJuZXQuCiAJICBUaGlzIGRyaXZlciBlbmFibGVzIEdpZ2FiaXQgRXRoZXJuZXQgZnVuY3Rpb24uCiAKKwkgIFRoaXMgZHJpdmVyIGFsc28gY2FuIGJlIHVzZWQgZm9yIE9LSSBTRU1JQ09ORFVDVE9SIElPSChJbnB1dC8KKwkgIE91dHB1dCBIdWIpLCBNTDcyMjMuCisJICBNTDcyMjMgSU9IIGlzIGZvciBNUChNZWRpYSBQaG9uZSkgdXNlLgorCSAgTUw3MjIzIGlzIGNvbXBhbmlvbiBjaGlwIGZvciBJbnRlbCBBdG9tIEU2eHggc2VyaWVzLgorCSAgTUw3MjIzIGlzIGNvbXBsZXRlbHkgY29tcGF0aWJsZSBmb3IgSW50ZWwgRUcyMFQgUENILgorCiBlbmRpZiAjIE5FVERFVl8xMDAwCiAKICMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggMDFiNjA0YS4uMjA5ZmJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTE0NCw3ICsxNDQsNyBAQAogb2JqLSQoQ09ORklHX1NCMTI1MF9NQUMpICs9IHNiMTI1MC1tYWMubwogb2JqLSQoQ09ORklHX0I0NCkgKz0gYjQ0Lm8KIG9iai0kKENPTkZJR19GT1JDRURFVEgpICs9IGZvcmNlZGV0aC5vCi1vYmotJChDT05GSUdfTkVfSDgzMDApICs9IG5lLWg4MzAwLm8gODM5MC5vCitvYmotJChDT05GSUdfTkVfSDgzMDApICs9IG5lLWg4MzAwLm8KIG9iai0kKENPTkZJR19BWDg4Nzk2KSArPSBheDg4Nzk2Lm8KIG9iai0kKENPTkZJR19CQ002M1hYX0VORVQpICs9IGJjbTYzeHhfZW5ldC5vCiBvYmotJChDT05GSUdfRlRNQUMxMDApICs9IGZ0bWFjMTAwLm8KQEAgLTIxOSw3ICsyMTksNyBAQAogb2JqLSQoQ09ORklHX0xQNDg2RSkgKz0gbHA0ODZlLm8KIAogb2JqLSQoQ09ORklHX0VUSDE2SSkgKz0gZXRoMTZpLm8KLW9iai0kKENPTkZJR19aT1JSTzgzOTApICs9IHpvcnJvODM5MC5vIDgzOTAubworb2JqLSQoQ09ORklHX1pPUlJPODM5MCkgKz0gem9ycm84MzkwLm8KIG9iai0kKENPTkZJR19IUExBTkNFKSArPSBocGxhbmNlLm8gNzk5MC5vCiBvYmotJChDT05GSUdfTVZNRTE0N19ORVQpICs9IG12bWUxNDcubyA3OTkwLm8KIG9iai0kKENPTkZJR19FUVVBTElaRVIpICs9IGVxbC5vCkBAIC0yMzEsNyArMjMxLDcgQEAKIG9iai0kKENPTkZJR19ERUNMQU5DRSkgKz0gZGVjbGFuY2Uubwogb2JqLSQoQ09ORklHX0FUQVJJTEFOQ0UpICs9IGF0YXJpbGFuY2Uubwogb2JqLSQoQ09ORklHX0EyMDY1KSArPSBhMjA2NS5vCi1vYmotJChDT05GSUdfSFlEUkEpICs9IGh5ZHJhLm8gODM5MC5vCitvYmotJChDT05GSUdfSFlEUkEpICs9IGh5ZHJhLm8KIG9iai0kKENPTkZJR19BUklBRE5FKSArPSBhcmlhZG5lLm8KIG9iai0kKENPTkZJR19DUzg5eDApICs9IGNzODl4MC5vCiBvYmotJChDT05GSUdfTUFDU09OSUMpICs9IG1hY3NvbmljLm8KQEAgLTI1OSw2ICsyNTksNyBAQAogb2JqLSQoQ09ORklHX0VOQzI4SjYwKSArPSBlbmMyOGo2MC5vCiBvYmotJChDT05GSUdfRVRIT0MpICs9IGV0aG9jLm8KIG9iai0kKENPTkZJR19HUkVUSCkgKz0gZ3JldGgubworb2JqLSQoQ09ORklHX0xBTlRJUV9FVE9QKSArPSBsYW50aXFfZXRvcC5vCiAKIG9iai0kKENPTkZJR19YVEVOU0FfWFQyMDAwX1NPTklDKSArPSB4dHNvbmljLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggODg0OTVjNC4uMjQxYjE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhbWQ4MTExZV9wY2lfdGJsKTsKIG1vZHVsZV9wYXJhbV9hcnJheShzcGVlZF9kdXBsZXgsIGludCwgTlVMTCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKHNwZWVkX2R1cGxleCwgIlNldCBkZXZpY2Ugc3BlZWQgYW5kIGR1cGxleCBtb2RlcywgMDogQXV0byBOZWdvdGl0YXRlLCAxOiAxME1icHMgSGFsZiBEdXBsZXgsIDI6IDEwTWJwcyBGdWxsIER1cGxleCwgMzogMTAwTWJwcyBIYWxmIER1cGxleCwgNDogMTAwTWJwcyBGdWxsIER1cGxleCIpOworTU9EVUxFX1BBUk1fREVTQyhzcGVlZF9kdXBsZXgsICJTZXQgZGV2aWNlIHNwZWVkIGFuZCBkdXBsZXggbW9kZXMsIDA6IEF1dG8gTmVnb3RpYXRlLCAxOiAxME1icHMgSGFsZiBEdXBsZXgsIDI6IDEwTWJwcyBGdWxsIER1cGxleCwgMzogMTAwTWJwcyBIYWxmIER1cGxleCwgNDogMTAwTWJwcyBGdWxsIER1cGxleCIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGNvYWxlc2NlLCBib29sLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoY29hbGVzY2UsICJFbmFibGUgb3IgRGlzYWJsZSBpbnRlcnJ1cHQgY29hbGVzY2luZywgMTogRW5hYmxlLCAwOiBEaXNhYmxlIik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZHluYW1pY19pcGcsIGJvb2wsIE5VTEwsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCmluZGV4IDRhZjIzNWQuLmZiZmI1YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogICogUmVhZCB0aGUgZXRoZXJuZXQgYWRkcmVzcyBzdHJpbmcgZnJvbSB0aGUgb24gYm9hcmQgcm9tLgogICogVGhpcyBpcyBhbiBhc2NpaSBzdHJpbmcuLi4KICAqLwotc3RhdGljIGludCBfX2luaXQgZXRoZXJoX2FkZHIoY2hhciAqYWRkciwgc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGV0aGVyaF9hZGRyKGNoYXIgKmFkZHIsIHN0cnVjdCBleHBhbnNpb25fY2FyZCAqZWMpCiB7CiAJc3RydWN0IGluX2NodW5rX2RpciBjZDsKIAljaGFyICpzOwpAQCAtNjU1LDcgKzY1NSw3IEBACiBzdGF0aWMgdTMyIGV0aGVyaF9yZWdvZmZzZXRzWzE2XTsKIHN0YXRpYyB1MzIgZXRoZXJtX3JlZ29mZnNldHNbMTZdOwogCi1zdGF0aWMgaW50IF9faW5pdAorc3RhdGljIGludCBfX2RldmluaXQKIGV0aGVyaF9wcm9iZShzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLCBjb25zdCBzdHJ1Y3QgZWNhcmRfaWQgKmlkKQogewogCWNvbnN0IHN0cnVjdCBldGhlcmhfZGF0YSAqZGF0YSA9IGlkLT5kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCmluZGV4IGNlMDA5MWUuLjEyNjRkNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKQEAgLTU1NCw3ICs1NTQsNyBAQAogCQltZW1hZGRyID09ICh1bnNpZ25lZCBzaG9ydCAqKTB4ZmZlMDAwMDApIHsKIAkJLyogUEFNcyBjYXJkIGFuZCBSaWVibCBvbiBTVCB1c2UgbGV2ZWwgNSBhdXRvdmVjdG9yICovCiAJCWlmIChyZXF1ZXN0X2lycShJUlFfQVVUT181LCBsYW5jZV9pbnRlcnJ1cHQsIElSUV9UWVBFX1BSSU8sCi0JCSAgICAgICAgICAgICJQQU0vUmllYmwtU1QgRXRoZXJuZXQiLCBkZXYpKSB7CisJCSAgICAgICAgICAgICJQQU0sUmllYmwtU1QgRXRoZXJuZXQiLCBkZXYpKSB7CiAJCQlwcmludGsoICJMYW5jZTogcmVxdWVzdCBmb3IgaXJxICVkIGZhaWxlZFxuIiwgSVJRX0FVVE9fNSApOwogCQkJcmV0dXJuIDA7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmggYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCmluZGV4IDdjYjM3NWUuLjkyNTkyOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaApAQCAtNTY2LDkgKzU2Niw5IEBACiAjZGVmaW5lIF9fQVRfVEVTVElORyAgICAgICAgMHgwMDAxCiAjZGVmaW5lIF9fQVRfUkVTRVRUSU5HICAgICAgMHgwMDAyCiAjZGVmaW5lIF9fQVRfRE9XTiAgICAgICAgICAgMHgwMDAzCi0JdTggd29ya19ldmVudDsKLSNkZWZpbmUgQVRMMUNfV09SS19FVkVOVF9SRVNFVCAJCTB4MDEKLSNkZWZpbmUgQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRQkweDAyCisJdW5zaWduZWQgbG9uZyB3b3JrX2V2ZW50OworI2RlZmluZQlBVEwxQ19XT1JLX0VWRU5UX1JFU0VUCQkwCisjZGVmaW5lCUFUTDFDX1dPUktfRVZFTlRfTElOS19DSEFOR0UJMQogCXUzMiBtc2dfZW5hYmxlOwogCiAJYm9vbCBoYXZlX21zaTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwppbmRleCA3ZDlkNTA2Li5hNmUxYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJfQogCX0KIAotCWFkYXB0ZXItPndvcmtfZXZlbnQgfD0gQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRTsKKwlzZXRfYml0KEFUTDFDX1dPUktfRVZFTlRfTElOS19DSEFOR0UsICZhZGFwdGVyLT53b3JrX2V2ZW50KTsKIAlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5jb21tb25fdGFzayk7CiB9CiAKQEAgLTMzNywyMCArMzM3LDE2IEBACiAJYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgYXRsMWNfYWRhcHRlciwgY29tbW9uX3Rhc2spOwogCW5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAotCWlmIChhZGFwdGVyLT53b3JrX2V2ZW50ICYgQVRMMUNfV09SS19FVkVOVF9SRVNFVCkgewotCQlhZGFwdGVyLT53b3JrX2V2ZW50ICY9IH5BVEwxQ19XT1JLX0VWRU5UX1JFU0VUOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRMMUNfV09SS19FVkVOVF9SRVNFVCwgJmFkYXB0ZXItPndvcmtfZXZlbnQpKSB7CiAJCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAkJYXRsMWNfZG93bihhZGFwdGVyKTsKIAkJYXRsMWNfdXAoYWRhcHRlcik7CiAJCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKLQkJcmV0dXJuOwogCX0KIAotCWlmIChhZGFwdGVyLT53b3JrX2V2ZW50ICYgQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRSkgewotCQlhZGFwdGVyLT53b3JrX2V2ZW50ICY9IH5BVEwxQ19XT1JLX0VWRU5UX0xJTktfQ0hBTkdFOworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQVRMMUNfV09SS19FVkVOVF9MSU5LX0NIQU5HRSwKKwkJJmFkYXB0ZXItPndvcmtfZXZlbnQpKQogCQlhdGwxY19jaGVja19saW5rX3N0YXR1cyhhZGFwdGVyKTsKLQl9Ci0JcmV0dXJuOwogfQogCiAKQEAgLTM2OSw3ICszNjUsNyBAQAogCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAogCS8qIERvIHRoZSByZXNldCBvdXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCi0JYWRhcHRlci0+d29ya19ldmVudCB8PSBBVEwxQ19XT1JLX0VWRU5UX1JFU0VUOworCXNldF9iaXQoQVRMMUNfV09SS19FVkVOVF9SRVNFVCwgJmFkYXB0ZXItPndvcmtfZXZlbnQpOwogCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPmNvbW1vbl90YXNrKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaCBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKaW5kZXggNjY4MjNlZC4uMjM1M2VjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAorKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCkBAIC0yMTMsNyArMjEzLDcgQEAKIAogc3RydWN0IGJlX3J4X2NvbXBsX2luZm8gewogCXUzMiByc3NfaGFzaDsKLQl1MTYgdmlkOworCXUxNiB2bGFuX3RhZzsKIAl1MTYgcGt0X3NpemU7CiAJdTE2IHJ4cV9pZHg7CiAJdTE2IG1hY19pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuYwppbmRleCAxZTJkODI1Li45ZGM5Mzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJc3RydWN0IGJlX2FzeW5jX2V2ZW50X2dycDVfcHZpZF9zdGF0ZSAqZXZ0KQogewogCWlmIChldnQtPmVuYWJsZWQpCi0JCWFkYXB0ZXItPnB2aWQgPSBldnQtPnRhZzsKKwkJYWRhcHRlci0+cHZpZCA9IGxlMTZfdG9fY3B1KGV2dC0+dGFnKTsKIAllbHNlCiAJCWFkYXB0ZXItPnB2aWQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCmluZGV4IDdjYjVhMTEuLjkxODdmYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKQEAgLTEwMTgsNyArMTAxOCw4IEBACiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybjsKIAkJfQotCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGFuX2dycCwgcnhjcC0+dmlkKTsKKwkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxhbl9ncnAsCisJCQkJCXJ4Y3AtPnZsYW5fdGFnKTsKIAl9IGVsc2UgewogCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCX0KQEAgLTEwNzYsNyArMTA3Nyw4IEBACiAJaWYgKGxpa2VseSghcnhjcC0+dmxhbmYpKQogCQluYXBpX2dyb19mcmFncygmZXFfb2JqLT5uYXBpKTsKIAllbHNlCi0JCXZsYW5fZ3JvX2ZyYWdzKCZlcV9vYmotPm5hcGksIGFkYXB0ZXItPnZsYW5fZ3JwLCByeGNwLT52aWQpOworCQl2bGFuX2dyb19mcmFncygmZXFfb2JqLT5uYXBpLCBhZGFwdGVyLT52bGFuX2dycCwKKwkJCQlyeGNwLT52bGFuX3RhZyk7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3BhcnNlX3J4X2NvbXBsX3YxKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLApAQCAtMTEwMiw3ICsxMTA0LDggQEAKIAlyeGNwLT5wa3RfdHlwZSA9CiAJCUFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCBjYXN0X2VuYywgY29tcGwpOwogCXJ4Y3AtPnZ0bSA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2dG0sIGNvbXBsKTsKLQlyeGNwLT52aWQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MSwgdmxhbl90YWcsIGNvbXBsKTsKKwlyeGNwLT52bGFuX3RhZyA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsX3YxLCB2bGFuX3RhZywKKwkJCQkJY29tcGwpOwogfQogCiBzdGF0aWMgdm9pZCBiZV9wYXJzZV9yeF9jb21wbF92MChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTExMjgsNyArMTEzMSw4IEBACiAJcnhjcC0+cGt0X3R5cGUgPQogCQlBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgY2FzdF9lbmMsIGNvbXBsKTsKIAlyeGNwLT52dG0gPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgdnRtLCBjb21wbCk7Ci0JcnhjcC0+dmlkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGxfdjAsIHZsYW5fdGFnLCBjb21wbCk7CisJcnhjcC0+dmxhbl90YWcgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbF92MCwgdmxhbl90YWcsCisJCQkJCWNvbXBsKTsKIH0KIAogc3RhdGljIHN0cnVjdCBiZV9yeF9jb21wbF9pbmZvICpiZV9yeF9jb21wbF9nZXQoc3RydWN0IGJlX3J4X29iaiAqcnhvKQpAQCAtMTE1NSw5ICsxMTU5LDExIEBACiAJCXJ4Y3AtPnZsYW5mID0gMDsKIAogCWlmICghbGFuY2VyX2NoaXAoYWRhcHRlcikpCi0JCXJ4Y3AtPnZpZCA9IHN3YWIxNihyeGNwLT52aWQpOworCQlyeGNwLT52bGFuX3RhZyA9IHN3YWIxNihyeGNwLT52bGFuX3RhZyk7CiAKLQlpZiAoKGFkYXB0ZXItPnB2aWQgPT0gcnhjcC0+dmlkKSAmJiAhYWRhcHRlci0+dmxhbl90YWdbcnhjcC0+dmlkXSkKKwlpZiAoKChhZGFwdGVyLT5wdmlkICYgVkxBTl9WSURfTUFTSykgPT0KKwkJKHJ4Y3AtPnZsYW5fdGFnICYgVkxBTl9WSURfTUFTSykpICYmCisJCSFhZGFwdGVyLT52bGFuX3RhZ1tyeGNwLT52bGFuX3RhZ10pCiAJCXJ4Y3AtPnZsYW5mID0gMDsKIAogCS8qIEFzIHRoZSBjb21wbCBoYXMgYmVlbiBwYXJzZWQsIHJlc2V0IGl0OyB3ZSB3b250IHRvdWNoIGl0IGFnYWluICovCkBAIC0xODczLDYgKzE4NzksNyBAQAogCQliZV9kZXRlY3RfZHVtcF91ZShhZGFwdGVyKTsKIAogcmVzY2hlZHVsZToKKwlhZGFwdGVyLT53b3JrX2NvdW50ZXIrKzsKIAlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFkYXB0ZXItPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuYwppbmRleCBlM2RlMGI4Li43NTgxNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmMKQEAgLTM4LDYgKzM4LDggQEAKICNkZWZpbmUgYmZhX2lvY19tYXBfcG9ydChfX2lvYykgKChfX2lvYyktPmlvY19od2lmLT5pb2NfbWFwX3BvcnQoX19pb2MpKQogI2RlZmluZSBiZmFfaW9jX25vdGlmeV9mYWlsKF9faW9jKQkJCVwKIAkJCSgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX25vdGlmeV9mYWlsKF9faW9jKSkKKyNkZWZpbmUgYmZhX2lvY19zeW5jX3N0YXJ0KF9faW9jKSAgICAgICAgICAgICAgIFwKKwkJCSgoX19pb2MpLT5pb2NfaHdpZi0+aW9jX3N5bmNfc3RhcnQoX19pb2MpKQogI2RlZmluZSBiZmFfaW9jX3N5bmNfam9pbihfX2lvYykJCQlcCiAJCQkoKF9faW9jKS0+aW9jX2h3aWYtPmlvY19zeW5jX2pvaW4oX19pb2MpKQogI2RlZmluZSBiZmFfaW9jX3N5bmNfbGVhdmUoX19pb2MpCQkJXApAQCAtNjAyLDcgKzYwNCw3IEBACiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgSU9DUEZfRV9TRU1MT0NLRUQ6CiAJCWlmIChiZmFfaW9jX2Zpcm13YXJlX2xvY2soaW9jKSkgewotCQkJaWYgKGJmYV9pb2Nfc3luY19jb21wbGV0ZShpb2MpKSB7CisJCQlpZiAoYmZhX2lvY19zeW5jX3N0YXJ0KGlvYykpIHsKIAkJCQlpb2NwZi0+cmV0cnlfY291bnQgPSAwOwogCQkJCWJmYV9pb2Nfc3luY19qb2luKGlvYyk7CiAJCQkJYmZhX2ZzbV9zZXRfc3RhdGUoaW9jcGYsIGJmYV9pb2NwZl9zbV9od2luaXQpOwpAQCAtMTMxNCw3ICsxMzE2LDcgQEAKICAqIGV4ZWN1dGlvbiBjb250ZXh0IChkcml2ZXIvYmlvcykgbXVzdCBtYXRjaC4KICAqLwogc3RhdGljIGJvb2wKLWJmYV9pb2NfZnd2ZXJfdmFsaWQoc3RydWN0IGJmYV9pb2MgKmlvYykKK2JmYV9pb2NfZnd2ZXJfdmFsaWQoc3RydWN0IGJmYV9pb2MgKmlvYywgdTMyIGJvb3RfZW52KQogewogCXN0cnVjdCBiZmlfaW9jX2ltYWdlX2hkciBmd2hkciwgKmRydl9md2hkcjsKIApAQCAtMTMyNSw3ICsxMzI3LDcgQEAKIAlpZiAoZndoZHIuc2lnbmF0dXJlICE9IGRydl9md2hkci0+c2lnbmF0dXJlKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoZndoZHIuZXhlYyAhPSBkcnZfZndoZHItPmV4ZWMpCisJaWYgKHN3YWIzMihmd2hkci5wYXJhbSkgIT0gYm9vdF9lbnYpCiAJCXJldHVybiBmYWxzZTsKIAogCXJldHVybiBiZmFfbndfaW9jX2Z3dmVyX2NtcChpb2MsICZmd2hkcik7CkBAIC0xMzUyLDkgKzEzNTQsMTIgQEAKIHsKIAllbnVtIGJmaV9pb2Nfc3RhdGUgaW9jX2Z3c3RhdGU7CiAJYm9vbCBmd3ZhbGlkOworCXUzMiBib290X2VudjsKIAogCWlvY19md3N0YXRlID0gcmVhZGwoaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSk7CiAKKwlib290X2VudiA9IEJGSV9CT09UX0xPQURFUl9PUzsKKwogCWlmIChmb3JjZSkKIAkJaW9jX2Z3c3RhdGUgPSBCRklfSU9DX1VOSU5JVDsKIApAQCAtMTM2MiwxMCArMTM2NywxMCBAQAogCSAqIGNoZWNrIGlmIGZpcm13YXJlIGlzIHZhbGlkCiAJICovCiAJZnd2YWxpZCA9IChpb2NfZndzdGF0ZSA9PSBCRklfSU9DX1VOSU5JVCkgPwotCQlmYWxzZSA6IGJmYV9pb2NfZnd2ZXJfdmFsaWQoaW9jKTsKKwkJZmFsc2UgOiBiZmFfaW9jX2Z3dmVyX3ZhbGlkKGlvYywgYm9vdF9lbnYpOwogCiAJaWYgKCFmd3ZhbGlkKSB7Ci0JCWJmYV9pb2NfYm9vdChpb2MsIEJGSV9CT09UX1RZUEVfTk9STUFMLCBpb2MtPnBjaWRldi5kZXZpY2VfaWQpOworCQliZmFfaW9jX2Jvb3QoaW9jLCBCRklfQk9PVF9UWVBFX05PUk1BTCwgYm9vdF9lbnYpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMzk2LDcgKzE0MDEsNyBAQAogCS8qKgogCSAqIEluaXRpYWxpemUgdGhlIGgvdyBmb3IgYW55IG90aGVyIHN0YXRlcy4KIAkgKi8KLQliZmFfaW9jX2Jvb3QoaW9jLCBCRklfQk9PVF9UWVBFX05PUk1BTCwgaW9jLT5wY2lkZXYuZGV2aWNlX2lkKTsKKwliZmFfaW9jX2Jvb3QoaW9jLCBCRklfQk9PVF9UWVBFX05PUk1BTCwgYm9vdF9lbnYpOwogfQogCiB2b2lkCkBAIC0xNTA2LDcgKzE1MTEsNyBAQAogICovCiBzdGF0aWMgdm9pZAogYmZhX2lvY19kb3dubG9hZF9mdyhzdHJ1Y3QgYmZhX2lvYyAqaW9jLCB1MzIgYm9vdF90eXBlLAotCQkgICAgdTMyIGJvb3RfcGFyYW0pCisJCSAgICB1MzIgYm9vdF9lbnYpCiB7CiAJdTMyICpmd2ltZzsKIAl1MzIgcGdudW0sIHBnb2ZmOwpAQCAtMTU1OCwxMCArMTU2MywxMCBAQAogCS8qCiAJICogU2V0IGJvb3QgdHlwZSBhbmQgYm9vdCBwYXJhbSBhdCB0aGUgZW5kLgogCSovCi0Jd3JpdGVsKChzd2FiMzIoc3dhYjMyKGJvb3RfdHlwZSkpKSwgKChpb2MtPmlvY19yZWdzLnNtZW1fcGFnZV9zdGFydCkKKwl3cml0ZWwoYm9vdF90eXBlLCAoKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0KQogCQkJKyAoQkZJX0JPT1RfVFlQRV9PRkYpKSk7Ci0Jd3JpdGVsKChzd2FiMzIoc3dhYjMyKGJvb3RfcGFyYW0pKSksICgoaW9jLT5pb2NfcmVncy5zbWVtX3BhZ2Vfc3RhcnQpCi0JCQkrIChCRklfQk9PVF9QQVJBTV9PRkYpKSk7CisJd3JpdGVsKGJvb3RfZW52LCAoKGlvYy0+aW9jX3JlZ3Muc21lbV9wYWdlX3N0YXJ0KQorCQkJKyAoQkZJX0JPT1RfTE9BREVSX09GRikpKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTE3MjEsNyArMTcyNiw3IEBACiAgKiBhcyB0aGUgZW50cnkgdmVjdG9yLgogICovCiBzdGF0aWMgdm9pZAotYmZhX2lvY19ib290KHN0cnVjdCBiZmFfaW9jICppb2MsIHUzMiBib290X3R5cGUsIHUzMiBib290X3BhcmFtKQorYmZhX2lvY19ib290KHN0cnVjdCBiZmFfaW9jICppb2MsIHUzMiBib290X3R5cGUsIHUzMiBib290X2VudikKIHsKIAl2b2lkIF9faW9tZW0gKnJiOwogCkBAIC0xNzM0LDcgKzE3MzksNyBAQAogCSAqIEluaXRpYWxpemUgSU9DIHN0YXRlIG9mIGFsbCBmdW5jdGlvbnMgb24gYSBjaGlwIHJlc2V0LgogCSAqLwogCXJiID0gaW9jLT5wY2lkZXYucGNpX2Jhcl9rdmE7Ci0JaWYgKGJvb3RfcGFyYW0gPT0gQkZJX0JPT1RfVFlQRV9NRU1URVNUKSB7CisJaWYgKGJvb3RfdHlwZSA9PSBCRklfQk9PVF9UWVBFX01FTVRFU1QpIHsKIAkJd3JpdGVsKEJGSV9JT0NfTUVNVEVTVCwgKHJiICsgQkZBX0lPQzBfU1RBVEVfUkVHKSk7CiAJCXdyaXRlbChCRklfSU9DX01FTVRFU1QsIChyYiArIEJGQV9JT0MxX1NUQVRFX1JFRykpOwogCX0gZWxzZSB7CkBAIC0xNzQzLDcgKzE3NDgsNyBAQAogCX0KIAogCWJmYV9pb2NfbXNnZmx1c2goaW9jKTsKLQliZmFfaW9jX2Rvd25sb2FkX2Z3KGlvYywgYm9vdF90eXBlLCBib290X3BhcmFtKTsKKwliZmFfaW9jX2Rvd25sb2FkX2Z3KGlvYywgYm9vdF90eXBlLCBib290X2Vudik7CiAKIAkvKioKIAkgKiBFbmFibGUgaW50ZXJydXB0cyBqdXN0IGJlZm9yZSBzdGFydGluZyBMUFUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmggYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvYy5oCmluZGV4IGU0OTc0YmMuLmJkNDhhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jLmgKKysrIGIvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2MuaApAQCAtMTk0LDYgKzE5NCw3IEBACiAJCQkJCWJvb2wgbXNpeCk7CiAJdm9pZAkJKCppb2Nfbm90aWZ5X2ZhaWwpCShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIAl2b2lkCQkoKmlvY19vd25lcnNoaXBfcmVzZXQpCShzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKKwlib29sCQkoKmlvY19zeW5jX3N0YXJ0KSAgICAgICAoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiAJdm9pZAkJKCppb2Nfc3luY19qb2luKQkoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiAJdm9pZAkJKCppb2Nfc3luY19sZWF2ZSkJKHN0cnVjdCBiZmFfaW9jICppb2MpOwogCXZvaWQJCSgqaW9jX3N5bmNfYWNrKQkJKHN0cnVjdCBiZmFfaW9jICppb2MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2NfY3QuYyBiL2RyaXZlcnMvbmV0L2JuYS9iZmFfaW9jX2N0LmMKaW5kZXggNDY5OTk3Yy4uODdhZWNkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm5hL2JmYV9pb2NfY3QuYworKysgYi9kcml2ZXJzL25ldC9ibmEvYmZhX2lvY19jdC5jCkBAIC00MSw2ICs0MSw3IEBACiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X2lzcl9tb2RlX3NldChzdHJ1Y3QgYmZhX2lvYyAqaW9jLCBib29sIG1zaXgpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9ub3RpZnlfZmFpbChzdHJ1Y3QgYmZhX2lvYyAqaW9jKTsKIHN0YXRpYyB2b2lkIGJmYV9pb2NfY3Rfb3duZXJzaGlwX3Jlc2V0KHN0cnVjdCBiZmFfaW9jICppb2MpOworc3RhdGljIGJvb2wgYmZhX2lvY19jdF9zeW5jX3N0YXJ0KHN0cnVjdCBiZmFfaW9jICppb2MpOwogc3RhdGljIHZvaWQgYmZhX2lvY19jdF9zeW5jX2pvaW4oc3RydWN0IGJmYV9pb2MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X3N5bmNfbGVhdmUoc3RydWN0IGJmYV9pb2MgKmlvYyk7CiBzdGF0aWMgdm9pZCBiZmFfaW9jX2N0X3N5bmNfYWNrKHN0cnVjdCBiZmFfaW9jICppb2MpOwpAQCAtNjMsNiArNjQsNyBAQAogCW53X2h3aWZfY3QuaW9jX2lzcl9tb2RlX3NldCA9IGJmYV9pb2NfY3RfaXNyX21vZGVfc2V0OwogCW53X2h3aWZfY3QuaW9jX25vdGlmeV9mYWlsID0gYmZhX2lvY19jdF9ub3RpZnlfZmFpbDsKIAlud19od2lmX2N0LmlvY19vd25lcnNoaXBfcmVzZXQgPSBiZmFfaW9jX2N0X293bmVyc2hpcF9yZXNldDsKKwlud19od2lmX2N0LmlvY19zeW5jX3N0YXJ0ID0gYmZhX2lvY19jdF9zeW5jX3N0YXJ0OwogCW53X2h3aWZfY3QuaW9jX3N5bmNfam9pbiA9IGJmYV9pb2NfY3Rfc3luY19qb2luOwogCW53X2h3aWZfY3QuaW9jX3N5bmNfbGVhdmUgPSBiZmFfaW9jX2N0X3N5bmNfbGVhdmU7CiAJbndfaHdpZl9jdC5pb2Nfc3luY19hY2sgPSBiZmFfaW9jX2N0X3N5bmNfYWNrOwpAQCAtMzQ1LDYgKzM0NywzMiBAQAogLyoqCiAgKiBTeW5jaHJvbml6ZWQgSU9DIGZhaWx1cmUgcHJvY2Vzc2luZyByb3V0aW5lcwogICovCitzdGF0aWMgYm9vbAorYmZhX2lvY19jdF9zeW5jX3N0YXJ0KHN0cnVjdCBiZmFfaW9jICppb2MpCit7CisJdTMyIHIzMiA9IHJlYWRsKGlvYy0+aW9jX3JlZ3MuaW9jX2ZhaWxfc3luYyk7CisJdTMyIHN5bmNfcmVxZCA9IGJmYV9pb2NfY3RfZ2V0X3N5bmNfcmVxZChyMzIpOworCisJLyoKKwkgKiBEcml2ZXIgbG9hZCB0aW1lLiAgSWYgdGhlIHN5bmMgcmVxdWlyZWQgYml0IGZvciB0aGlzIFBDSSBmbgorCSAqIGlzIHNldCwgaXQgaXMgZHVlIHRvIGFuIHVuY2xlYW4gZXhpdCBieSB0aGUgZHJpdmVyIGZvciB0aGlzCisJICogUENJIGZuIGluIHRoZSBwcmV2aW91cyBpbmNhcm5hdGlvbi4gV2hvZXZlciBjb21lcyBoZXJlIGZpcnN0CisJICogc2hvdWxkIGNsZWFuIGl0IHVwLCBubyBtYXR0ZXIgd2hpY2ggUENJIGZuLgorCSAqLworCisJaWYgKHN5bmNfcmVxZCAmIGJmYV9pb2NfY3Rfc3luY19wb3MoaW9jKSkgeworCQl3cml0ZWwoMCwgaW9jLT5pb2NfcmVncy5pb2NfZmFpbF9zeW5jKTsKKwkJd3JpdGVsKDEsIGlvYy0+aW9jX3JlZ3MuaW9jX3VzYWdlX3JlZyk7CisJCXdyaXRlbChCRklfSU9DX1VOSU5JVCwgaW9jLT5pb2NfcmVncy5pb2NfZndzdGF0ZSk7CisJCXdyaXRlbChCRklfSU9DX1VOSU5JVCwgaW9jLT5pb2NfcmVncy5hbHRfaW9jX2Z3c3RhdGUpOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gYmZhX2lvY19jdF9zeW5jX2NvbXBsZXRlKGlvYyk7Cit9CisvKioKKyAqIFN5bmNocm9uaXplZCBJT0MgZmFpbHVyZSBwcm9jZXNzaW5nIHJvdXRpbmVzCisgKi8KIHN0YXRpYyB2b2lkCiBiZmFfaW9jX2N0X3N5bmNfam9pbihzdHJ1Y3QgYmZhX2lvYyAqaW9jKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm5hL2JmaS5oIGIvZHJpdmVycy9uZXQvYm5hL2JmaS5oCmluZGV4IGE5NzM5NjguLjYwNTAzNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JuYS9iZmkuaAorKysgYi9kcml2ZXJzL25ldC9ibmEvYmZpLmgKQEAgLTE4NCwxMiArMTg0LDE0IEBACiAjZGVmaW5lIEJGSV9JT0NfTVNHTEVOX01BWAkzMgkvKiAzMiBieXRlcyAqLwogCiAjZGVmaW5lIEJGSV9CT09UX1RZUEVfT0ZGCQk4Ci0jZGVmaW5lIEJGSV9CT09UX1BBUkFNX09GRgkJMTIKKyNkZWZpbmUgQkZJX0JPT1RfTE9BREVSX09GRgkJMTIKIAotI2RlZmluZSBCRklfQk9PVF9UWVBFX05PUk1BTCAJCTAJLyogcGFyYW0gaXMgZGV2aWNlIGlkICovCisjZGVmaW5lIEJGSV9CT09UX1RZUEVfTk9STUFMIAkJMAogI2RlZmluZQlCRklfQk9PVF9UWVBFX0ZMQVNICQkxCiAjZGVmaW5lCUJGSV9CT09UX1RZUEVfTUVNVEVTVAkJMgogCisjZGVmaW5lIEJGSV9CT09UX0xPQURFUl9PUwkJMAorCiAjZGVmaW5lIEJGSV9CT09UX01FTVRFU1RfUkVTX0FERFIgICAweDkwMAogI2RlZmluZSBCRklfQk9PVF9NRU1URVNUX1JFU19TSUcgICAgMHhBMEExQTJBMwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibmEvYm5hZC5jIGIvZHJpdmVycy9uZXQvYm5hL2JuYWQuYwppbmRleCA5ZjM1NmQ1Li44ZTZjZWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibmEvYm5hZC5jCisrKyBiL2RyaXZlcnMvbmV0L2JuYS9ibmFkLmMKQEAgLTE4MzcsNyArMTgzNyw2IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgUnggZXZlbnQgaGFuZGxlcnMgKi8KIAlyeF9jYmZuLnJjYl9zZXR1cF9jYmZuID0gYm5hZF9jYl9yY2Jfc2V0dXA7CiAJcnhfY2Jmbi5yY2JfZGVzdHJveV9jYmZuID0gYm5hZF9jYl9yY2JfZGVzdHJveTsKLQlyeF9jYmZuLnJjYl9kZXN0cm95X2NiZm4gPSBOVUxMOwogCXJ4X2NiZm4uY2NiX3NldHVwX2NiZm4gPSBibmFkX2NiX2NjYl9zZXR1cDsKIAlyeF9jYmZuLmNjYl9kZXN0cm95X2NiZm4gPSBibmFkX2NiX2NjYl9kZXN0cm95OwogCXJ4X2NiZm4ucnhfY2xlYW51cF9jYmZuID0gYm5hZF9jYl9yeF9jbGVhbnVwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IDhlNmQ2MTguLmQ4MzgzYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTg0MTMsNiArODQxMyw4IEBACiAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCisJZGVsX3RpbWVyX3N5bmMoJmJwLT50aW1lcik7CisKIAlpZiAoYnAtPm1pcHNfZmlybXdhcmUpCiAJCXJlbGVhc2VfZmlybXdhcmUoYnAtPm1pcHNfZmlybXdhcmUpOwogCWlmIChicC0+cnYycF9maXJtd2FyZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2Ntbi5jIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKaW5kZXggZTgzYWM2ZC4uMTY1ODFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfY21uLmMKQEAgLTIwMTksMTUgKzIwMTksMjMgQEAKIHN0YXRpYyBpbmxpbmUgIHU4IGJueDJ4X3NldF9wYmRfY3N1bV9lMihzdHJ1Y3QgYm54MnggKmJwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXUzMiAqcGFyc2luZ19kYXRhLCB1MzIgeG1pdF90eXBlKQogewotCSpwYXJzaW5nX2RhdGEgfD0gKCh0Y3BfaGRybGVuKHNrYikvNCkgPDwKLQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfTEVOR1RIX0RXX1NISUZUKSAmCi0JCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX0xFTkdUSF9EVzsKKwkqcGFyc2luZ19kYXRhIHw9CisJCQkoKCgodTggKilza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiLT5kYXRhKSA+PiAxKSA8PAorCQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfU1RBUlRfT0ZGU0VUX1dfU0hJRlQpICYKKwkJCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX1NUQVJUX09GRlNFVF9XOwogCi0JKnBhcnNpbmdfZGF0YSB8PSAoKCgodTggKil0Y3BfaGRyKHNrYikgLSBza2ItPmRhdGEpIC8gMikgPDwKLQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfU1RBUlRfT0ZGU0VUX1dfU0hJRlQpICYKLQkJRVRIX1RYX1BBUlNFX0JEX0UyX1RDUF9IRFJfU1RBUlRfT0ZGU0VUX1c7CisJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9UQ1ApIHsKKwkJKnBhcnNpbmdfZGF0YSB8PSAoKHRjcF9oZHJsZW4oc2tiKSAvIDQpIDw8CisJCQlFVEhfVFhfUEFSU0VfQkRfRTJfVENQX0hEUl9MRU5HVEhfRFdfU0hJRlQpICYKKwkJCUVUSF9UWF9QQVJTRV9CRF9FMl9UQ1BfSERSX0xFTkdUSF9EVzsKIAotCXJldHVybiBza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpICsgdGNwX2hkcmxlbihza2IpIC0gc2tiLT5kYXRhOworCQlyZXR1cm4gc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSArIHRjcF9oZHJsZW4oc2tiKSAtIHNrYi0+ZGF0YTsKKwl9IGVsc2UKKwkJLyogV2Ugc3VwcG9ydCBjaGVja3N1bSBvZmZsb2FkIGZvciBUQ1AgYW5kIFVEUCBvbmx5LgorCQkgKiBObyBuZWVkIHRvIHBhc3MgdGhlIFVEUCBoZWFkZXIgbGVuZ3RoIC0gaXQncyBhIGNvbnN0YW50LgorCQkgKi8KKwkJcmV0dXJuIHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgKworCQkJCXNpemVvZihzdHJ1Y3QgdWRwaGRyKSAtIHNrYi0+ZGF0YTsKIH0KIAogLyoqCkBAIC0yMDQzLDcgKzIwNTEsNyBAQAogCXN0cnVjdCBldGhfdHhfcGFyc2VfYmRfZTF4ICpwYmQsCiAJdTMyIHhtaXRfdHlwZSkKIHsKLQl1OCBobGVuID0gKHNrYl9uZXR3b3JrX2hlYWRlcihza2IpIC0gc2tiLT5kYXRhKSAvIDI7CisJdTggaGxlbiA9IChza2JfbmV0d29ya19oZWFkZXIoc2tiKSAtIHNrYi0+ZGF0YSkgPj4gMTsKIAogCS8qIGZvciBub3cgTlMgZmxhZyBpcyBub3QgdXNlZCBpbiBMaW51eCAqLwogCXBiZC0+Z2xvYmFsX2RhdGEgPQpAQCAtMjA1MSw5ICsyMDU5LDE1IEBACiAJCQkgRVRIX1RYX1BBUlNFX0JEX0UxWF9MTENfU05BUF9FTl9TSElGVCkpOwogCiAJcGJkLT5pcF9obGVuX3cgPSAoc2tiX3RyYW5zcG9ydF9oZWFkZXIoc2tiKSAtCi0JCQlza2JfbmV0d29ya19oZWFkZXIoc2tiKSkgLyAyOworCQkJc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpID4+IDE7CiAKLQlobGVuICs9IHBiZC0+aXBfaGxlbl93ICsgdGNwX2hkcmxlbihza2IpIC8gMjsKKwlobGVuICs9IHBiZC0+aXBfaGxlbl93OworCisJLyogV2Ugc3VwcG9ydCBjaGVja3N1bSBvZmZsb2FkIGZvciBUQ1AgYW5kIFVEUCBvbmx5ICovCisJaWYgKHhtaXRfdHlwZSAmIFhNSVRfQ1NVTV9UQ1ApCisJCWhsZW4gKz0gdGNwX2hkcmxlbihza2IpIC8gMjsKKwllbHNlCisJCWhsZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIC8gMjsKIAogCXBiZC0+dG90YWxfaGxlbl93ID0gY3B1X3RvX2xlMTYoaGxlbik7CiAJaGxlbiA9IGhsZW4qMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aHRvb2wuYwppbmRleCBmNTA1MDE1Li44OWNiOTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRodG9vbC5jCkBAIC0yMTE0LDE5ICsyMTE0LDE4IEBACiAJZm9yIChpID0gMDsgaSA8IChkYXRhICogMik7IGkrKykgewogCQlpZiAoKGkgJSAyKSA9PSAwKQogCQkJYm54Mnhfc2V0X2xlZCgmYnAtPmxpbmtfcGFyYW1zLCAmYnAtPmxpbmtfdmFycywKLQkJCQkgICAgICBMRURfTU9ERV9PUEVSLCBTUEVFRF8xMDAwKTsKKwkJCQkgICAgICBMRURfTU9ERV9PTiwgU1BFRURfMTAwMCk7CiAJCWVsc2UKIAkJCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCi0JCQkJICAgICAgTEVEX01PREVfT0ZGLCAwKTsKKwkJCQkgICAgICBMRURfTU9ERV9GUk9OVF9QQU5FTF9PRkYsIDApOwogCiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwMCk7CiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJCWJyZWFrOwogCX0KIAotCWlmIChicC0+bGlua192YXJzLmxpbmtfdXApCi0JCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsIExFRF9NT0RFX09QRVIsCi0JCQkgICAgICBicC0+bGlua192YXJzLmxpbmVfc3BlZWQpOworCWJueDJ4X3NldF9sZWQoJmJwLT5saW5rX3BhcmFtcywgJmJwLT5saW5rX3ZhcnMsCisJCSAgICAgIExFRF9NT0RFX09QRVIsIGJwLT5saW5rX3ZhcnMubGluZV9zcGVlZCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwppbmRleCA0OTRiZjk2Li4zMTkxMmYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCkBAIC0xNDgyLDggKzE0ODIsMTEgQEAKIAogc3RhdGljIGludCBhZ2dfZGV2aWNlX3VwKGNvbnN0IHN0cnVjdCBhZ2dyZWdhdG9yICphZ2cpCiB7Ci0JcmV0dXJuIChuZXRpZl9ydW5uaW5nKGFnZy0+c2xhdmUtPmRldikgJiYKLQkJbmV0aWZfY2Fycmllcl9vayhhZ2ctPnNsYXZlLT5kZXYpKTsKKwlzdHJ1Y3QgcG9ydCAqcG9ydCA9IGFnZy0+bGFnX3BvcnRzOworCWlmICghcG9ydCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIChuZXRpZl9ydW5uaW5nKHBvcnQtPnNsYXZlLT5kZXYpICYmCisJCW5ldGlmX2NhcnJpZXJfb2socG9ydC0+c2xhdmUtPmRldikpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuaAppbmRleCBiMjhiYWZmLi4wMWI4YTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5oCkBAIC0zOSw3ICszOSw3IEBACiAKIHR5cGVkZWYgc3RydWN0IG1hY19hZGRyIHsKIAl1OCBtYWNfYWRkcl92YWx1ZVtFVEhfQUxFTl07Ci19IG1hY19hZGRyX3Q7Cit9IF9fcGFja2VkIG1hY19hZGRyX3Q7CiAKIGVudW0gewogCUJPTkRfQURfU1RBQkxFID0gMCwKQEAgLTEzNCwxMiArMTM0LDEyIEBACiAJdTggdGx2X3R5cGVfdGVybWluYXRvcjsJICAgICAvLyA9IHRlcm1pbmF0b3IKIAl1OCB0ZXJtaW5hdG9yX2xlbmd0aDsJICAgICAvLyA9IDAKIAl1OCByZXNlcnZlZF81MFs1MF07CSAgICAgLy8gPSAwCi19IGxhY3BkdV90OworfSBfX3BhY2tlZCBsYWNwZHVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgbGFjcGR1X2hlYWRlciB7CiAJc3RydWN0IGV0aGhkciBoZHI7CiAJc3RydWN0IGxhY3BkdSBsYWNwZHU7Ci19IGxhY3BkdV9oZWFkZXJfdDsKK30gX19wYWNrZWQgbGFjcGR1X2hlYWRlcl90OwogCiAvLyBNYXJrZXIgUHJvdG9jb2wgRGF0YSBVbml0KFBEVSkgc3RydWN0dXJlKDQzLjUuMy4yIGluIHRoZSA4MDIuM2FkIHN0YW5kYXJkKQogdHlwZWRlZiBzdHJ1Y3QgYm9uZF9tYXJrZXIgewpAQCAtMTU1LDEyICsxNTUsMTIgQEAKIAl1OCB0bHZfdHlwZV90ZXJtaW5hdG9yOwkgICAgIC8vICA9IDB4MDAKIAl1OCB0ZXJtaW5hdG9yX2xlbmd0aDsJICAgICAvLyAgPSAweDAwCiAJdTggcmVzZXJ2ZWRfOTBbOTBdOwkgICAgIC8vICA9IDAKLX0gYm9uZF9tYXJrZXJfdDsKK30gX19wYWNrZWQgYm9uZF9tYXJrZXJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgYm9uZF9tYXJrZXJfaGVhZGVyIHsKIAlzdHJ1Y3QgZXRoaGRyIGhkcjsKIAlzdHJ1Y3QgYm9uZF9tYXJrZXIgbWFya2VyOwotfSBib25kX21hcmtlcl9oZWFkZXJfdDsKK30gX19wYWNrZWQgYm9uZF9tYXJrZXJfaGVhZGVyX3Q7CiAKICNwcmFnbWEgcGFjaygpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuYwppbmRleCA5YmM1ZGUzLi5iYTcxNTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIAlib25kX2luZm8tPnR4X2hhc2h0YmwgPSBuZXdfaGFzaHRibDsKIAogCWZvciAoaSA9IDA7IGkgPCBUTEJfSEFTSF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJdGxiX2luaXRfdGFibGVfZW50cnkoJmJvbmRfaW5mby0+dHhfaGFzaHRibFtpXSwgMSk7CisJCXRsYl9pbml0X3RhYmxlX2VudHJ5KCZib25kX2luZm8tPnR4X2hhc2h0YmxbaV0sIDApOwogCX0KIAogCV91bmxvY2tfdHhfaGFzaHRibChib25kKTsKQEAgLTcwMSw3ICs3MDEsNyBAQAogCQkgKi8KIAkJcmxiX2Nob29zZV9jaGFubmVsKHNrYiwgYm9uZCk7CiAKLQkJLyogVGhlIEFSUCByZWxweSBwYWNrZXRzIG11c3QgYmUgZGVsYXllZCBzbyB0aGF0CisJCS8qIFRoZSBBUlAgcmVwbHkgcGFja2V0cyBtdXN0IGJlIGRlbGF5ZWQgc28gdGhhdAogCQkgKiB0aGV5IGNhbiBjYW5jZWwgb3V0IHRoZSBpbmZsdWVuY2Ugb2YgdGhlIEFSUCByZXF1ZXN0LgogCQkgKi8KIAkJYm9uZC0+YWxiX2luZm8ucmxiX3VwZGF0ZV9kZWxheV9jb3VudGVyID0gUkxCX1VQREFURV9ERUxBWTsKQEAgLTEwNDIsNyArMTA0Miw3IEBACiAgKgogICogSWYgdGhlIHBlcm1hbmVudCBodyBhZGRyZXNzIG9mIEBzbGF2ZSBpcyBAYm9uZCdzIGh3IGFkZHJlc3MsIHdlIG5lZWQgdG8KICAqIGZpbmQgYSBkaWZmZXJlbnQgaHcgYWRkcmVzcyB0byBnaXZlIEBzbGF2ZSwgdGhhdCBpc24ndCBpbiB1c2UgYnkgYW55IG90aGVyCi0gKiBzbGF2ZSBpbiB0aGUgYm9uZC4gVGhpcyBhZGRyZXNzIG11c3QgYmUsIG9mIGNvdXJzZSwgb25lIG9mIHRoZSBwcmVtYW5lbnQKKyAqIHNsYXZlIGluIHRoZSBib25kLiBUaGlzIGFkZHJlc3MgbXVzdCBiZSwgb2YgY291cnNlLCBvbmUgb2YgdGhlIHBlcm1hbmVudAogICogYWRkcmVzc2VzIG9mIHRoZSBvdGhlciBzbGF2ZXMuCiAgKgogICogV2UgZ28gb3ZlciB0aGUgc2xhdmUgbGlzdCwgYW5kIGZvciBlYWNoIHNsYXZlIHRoZXJlIHdlIGNvbXBhcmUgaXRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmggYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfYWxiLmgKaW5kZXggODY4NjFmMC4uOGNhNzE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX2FsYi5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9hbGIuaApAQCAtNzUsNyArNzUsNyBAQAogCQkJCSAqIGdhdmUgdGhpcyBlbnRyeSBpbmRleC4KIAkJCQkgKi8KIAl1MzIgdHhfYnl0ZXM7CQkvKiBFYWNoIENsaWVudCBhY2N1bXVsYXRlcyB0aGUgQnl0ZXNUeCB0aGF0Ci0JCQkJICogd2VyZSB0cmFubWl0dGVkIHRvIGl0LCBhbmQgYWZ0ZXIgZWFjaAorCQkJCSAqIHdlcmUgdHJhbnNtaXR0ZWQgdG8gaXQsIGFuZCBhZnRlciBlYWNoCiAJCQkJICogQ2FsbEJhY2sgdGhlIExvYWRIaXN0b3J5IGlzIGRpdmlkZWQKIAkJCQkgKiBieSB0aGUgYmFsYW5jZSBpbnRlcnZhbAogCQkJCSAqLwpAQCAtMTIyLDcgKzEyMiw2IEBACiB9OwogCiBzdHJ1Y3QgYWxiX2JvbmRfaW5mbyB7Ci0Jc3RydWN0IHRpbWVyX2xpc3QJYWxiX3RpbWVyOwogCXN0cnVjdCB0bGJfY2xpZW50X2luZm8JKnR4X2hhc2h0Ymw7IC8qIER5bmFtaWNhbGx5IGFsbG9jYXRlZCAqLwogCXNwaW5sb2NrX3QJCXR4X2hhc2h0YmxfbG9jazsKIAl1MzIJCQl1bmJhbGFuY2VkX2xvYWQ7CkBAIC0xNDAsNyArMTM5LDYgQEAKIAlzdHJ1Y3Qgc2xhdmUJCSpuZXh0X3J4X3NsYXZlOy8qIG5leHQgc2xhdmUgdG8gYmUgYXNzaWduZWQKIAkJCQkJCSogdG8gYSBuZXcgcnggY2xpZW50IGZvcgogCQkJCQkJKi8KLQl1MzIJCQlybGJfaW50ZXJ2YWxfY291bnRlcjsKIAl1OAkJCXByaW1hcnlfaXNfcHJvbWlzYzsJICAgLyogYm9vbGVhbiAqLwogCXUzMgkJCXJsYl9wcm9taXNjX3RpbWVvdXRfY291bnRlcjsvKiBjb3VudHMgcHJpbWFyeQogCQkJCQkJCSAgICAgKiBwcm9taXNjdWl0eSB0aW1lCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXBjNXh4eF9jYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jCmluZGV4IGMwYTFiYzUuLjVmZWRjMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9tc2Nhbi9tcGM1eHh4X2Nhbi5jCkBAIC0yNDcsOCArMjQ3LDEwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19NUEM1MTJ4ICovCiAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzV4eHhfY2FuX3RhYmxlW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtcGM1eHh4X2Nhbl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZkZXYtPmRldi5vZl9ub2RlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CkBAIC0yNTgsOSArMjYwLDEwIEBACiAJaW50IGlycSwgbXNjYW5fY2xrc3JjID0gMDsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAotCWlmICghb2ZkZXYtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShtcGM1eHh4X2Nhbl90YWJsZSwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCWRhdGEgPSAoc3RydWN0IG1wYzV4eHhfY2FuX2RhdGEgKilvZl9kZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlkYXRhID0gbWF0Y2gtPmRhdGE7CiAKIAliYXNlID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghYmFzZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jCmluZGV4IGEzNThlYTkuLmY1MDFiYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYworKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMKQEAgLTM0NiwxMCArMzQ2LDEwIEBACiAJCSAgICB8IChwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfSUQyKSA+PiA1KTsKIAl9CiAKKwljZi0+Y2FuX2RsYyA9IGdldF9jYW5fZGxjKGZpICYgMHgwRik7CiAJaWYgKGZpICYgRklfUlRSKSB7CiAJCWlkIHw9IENBTl9SVFJfRkxBRzsKIAl9IGVsc2UgewotCQljZi0+Y2FuX2RsYyA9IGdldF9jYW5fZGxjKGZpICYgMHgwRik7CiAJCWZvciAoaSA9IDA7IGkgPCBjZi0+Y2FuX2RsYzsgaSsrKQogCQkJY2YtPmRhdGFbaV0gPSBwcml2LT5yZWFkX3JlZyhwcml2LCBkcmVnKyspOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zbGNhbi5jIGIvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKaW5kZXggYjQyMzk2NS4uMWI0OWRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NsY2FuLmMKQEAgLTU4Myw3ICs1ODMsOSBAQAogCS8qIERvbmUuICBXZSBoYXZlIGxpbmtlZCB0aGUgVFRZIGxpbmUgdG8gYSBjaGFubmVsLiAqLwogCXJ0bmxfdW5sb2NrKCk7CiAJdHR5LT5yZWNlaXZlX3Jvb20gPSA2NTUzNjsJLyogV2UgZG9uJ3QgZmxvdyBjb250cm9sICovCi0JcmV0dXJuIHNsLT5kZXYtPmJhc2VfYWRkcjsKKworCS8qIFRUWSBsYXllciBleHBlY3RzIDAgb24gc3VjY2VzcyAqLworCXJldHVybiAwOwogCiBlcnJfZnJlZV9jaGFuOgogCXNsLT50dHkgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9ldGh0b29sLmMKaW5kZXggM2UyZTczNC4uZjNiYmRjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jCkBAIC01NSwxNSArNTUsMjAgQEAKIAkJY21kLT5kdXBsZXggPSAtMTsKIAl9CiAKLQljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsCi0JCSAgICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwgIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCi0JCSAgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTBiYXNlVF9IYWxmCi0JCSAgICAgICB8IFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwlpZiAoY21kLT5zcGVlZCA9PSBTUEVFRF8xMDAwMCkgeworCQljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0ZJQlJFKTsKKwkJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfRklCUkUpOworCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCX0gZWxzZSB7CisJCWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCisJCQkgICAgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKKwkJCSAgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfQXV0b25lZworCQkJICAgICAgIHwgU1VQUE9SVEVEX1RQKTsKKwkJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwgQURWRVJUSVNFRF9BdXRvbmVnCisJCQkJIHwgQURWRVJUSVNFRF9UUCk7CisJCWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJfQogCi0JY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfQXV0b25lZwotCQkJIHwgQURWRVJUSVNFRF9GSUJSRSk7Ci0KLQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCWNtZC0+YXV0b25lZyA9IHBvcnQtPmF1dG9uZWcgPT0gMSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwppbmRleCBmNzVkMzE0Li5jZjc5Y2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKQEAgLTI2ODgsOSArMjY4OCw2IEBACiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJfQogCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+c3dxZV9hdmFpbF93cSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcG9ydC0+cmVzdGFydF93cSk7Ci0KIAltdXRleF91bmxvY2soJnBvcnQtPnBvcnRfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwpAQCAtMzA0MCwxMSArMzAzNywxNCBAQAogCiAJCQkJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CiAJCQkJCQltdXRleF9sb2NrKCZwb3J0LT5wb3J0X2xvY2spOwotCQkJCQkJcG9ydF9uYXBpX2VuYWJsZShwb3J0KTsKIAkJCQkJCXJldCA9IGVoZWFfcmVzdGFydF9xcHMoZGV2KTsKLQkJCQkJCWNoZWNrX3Nxcyhwb3J0KTsKLQkJCQkJCWlmICghcmV0KQorCQkJCQkJaWYgKCFyZXQpIHsKKwkJCQkJCQljaGVja19zcXMocG9ydCk7CisJCQkJCQkJcG9ydF9uYXBpX2VuYWJsZShwb3J0KTsKIAkJCQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCW5ldGRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlc3RhcnQgUVBTXG4iKTsKKwkJCQkJCX0KIAkJCQkJCW11dGV4X3VubG9jaygmcG9ydC0+cG9ydF9sb2NrKTsKIAkJCQkJfQogCQkJCX0KQEAgLTMyNzMsNiArMzI3Myw5IEBACiAKIAlJTklUX1dPUksoJnBvcnQtPnJlc2V0X3Rhc2ssIGVoZWFfcmVzZXRfcG9ydCk7CiAKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5zd3FlX2F2YWlsX3dxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT5yZXN0YXJ0X3dxKTsKKwogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJyZWdpc3Rlcl9uZXRkZXYgZmFpbGVkLiByZXQ9JWRcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwppbmRleCAyNGNiOTUzLi41MTMxZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKQEAgLTk5OCw4ICs5OTgsMTAgQEAKICNlbmRpZgogfTsKIAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNfZW5ldF9tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgZnNfZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldikKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXA7CiAJc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaTsKQEAgLTEwMDcsMTQgKzEwMDksMTUgQEAKIAljb25zdCB1OCAqbWFjX2FkZHI7CiAJaW50IHByaXZzaXplLCBsZW4sIHJldCA9IC1FTk9ERVY7CiAKLQlpZiAoIW9mZGV2LT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UoZnNfZW5ldF9tYXRjaCwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJZnBpID0ga3phbGxvYyhzaXplb2YoKmZwaSksIEdGUF9LRVJORUwpOwogCWlmICghZnBpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghSVNfRkVDKG9mZGV2LT5kZXYub2ZfbWF0Y2gpKSB7CisJaWYgKCFJU19GRUMobWF0Y2gpKSB7CiAJCWRhdGEgPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPmRldi5vZl9ub2RlLCAiZnNsLGNwbS1jb21tYW5kIiwgJmxlbik7CiAJCWlmICghZGF0YSB8fCBsZW4gIT0gNCkKIAkJCWdvdG8gb3V0X2ZyZWVfZnBpOwpAQCAtMTA0OSw3ICsxMDUyLDcgQEAKIAlmZXAtPmRldiA9ICZvZmRldi0+ZGV2OwogCWZlcC0+bmRldiA9IG5kZXY7CiAJZmVwLT5mcGkgPSBmcGk7Ci0JZmVwLT5vcHMgPSBvZmRldi0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCWZlcC0+b3BzID0gbWF0Y2gtPmRhdGE7CiAKIAlyZXQgPSBmZXAtPm9wcy0+c2V0dXBfZGF0YShuZGV2KTsKIAlpZiAocmV0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwppbmRleCA2MTAzNWZjLi5iOWZiYzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwpAQCAtMjI2LDggKzIyNiw4IEBACiAJfQogCiAJRkMoZmVjcCwgcl9jbnRybCwgRkVDX1JDTlRSTF9QUk9NKTsKLQlGVyhmZWNwLCBoYXNoX3RhYmxlX2hpZ2gsIGZlcC0+ZmVjLmh0aGkpOwotCUZXKGZlY3AsIGhhc2hfdGFibGVfbG93LCBmZXAtPmZlYy5odGxvKTsKKwlGVyhmZWNwLCBncnBfaGFzaF90YWJsZV9oaWdoLCBmZXAtPmZlYy5odGhpKTsKKwlGVyhmZWNwLCBncnBfaGFzaF90YWJsZV9sb3csIGZlcC0+ZmVjLmh0bG8pOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI3Myw4ICsyNzMsOCBAQAogCS8qCiAJICogUmVzZXQgYWxsIG11bHRpY2FzdC4KIAkgKi8KLQlGVyhmZWNwLCBoYXNoX3RhYmxlX2hpZ2gsIGZlcC0+ZmVjLmh0aGkpOwotCUZXKGZlY3AsIGhhc2hfdGFibGVfbG93LCBmZXAtPmZlYy5odGxvKTsKKwlGVyhmZWNwLCBncnBfaGFzaF90YWJsZV9oaWdoLCBmZXAtPmZlYy5odGhpKTsKKwlGVyhmZWNwLCBncnBfaGFzaF90YWJsZV9sb3csIGZlcC0+ZmVjLmh0bG8pOwogCiAJLyoKIAkgKiBTZXQgbWF4aW11bSByZWNlaXZlIGJ1ZmZlciBzaXplLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwppbmRleCA3ZTg0MGQzLi42YTJlMTUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwpAQCAtMTAxLDE3ICsxMDEsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZnNfZW5ldF9tZGlvX2ZlY19tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCByZXNvdXJjZSByZXM7CiAJc3RydWN0IG1paV9idXMgKm5ld19idXM7CiAJc3RydWN0IGZlY19pbmZvICpmZWM7CiAJaW50ICgqZ2V0X2J1c19mcmVxKShzdHJ1Y3QgZGV2aWNlX25vZGUgKik7CiAJaW50IHJldCA9IC1FTk9NRU0sIGNsb2NrLCBzcGVlZDsKIAotCWlmICghb2ZkZXYtPmRldi5vZl9tYXRjaCkKKwltYXRjaCA9IG9mX21hdGNoX2RldmljZShmc19lbmV0X21kaW9fZmVjX21hdGNoLCAmb2ZkZXYtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JZ2V0X2J1c19mcmVxID0gb2ZkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlnZXRfYnVzX2ZyZXEgPSBtYXRjaC0+ZGF0YTsKIAogCW5ld19idXMgPSBtZGlvYnVzX2FsbG9jKCk7CiAJaWYgKCFuZXdfYnVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnRtYWMxMDAuYyBiL2RyaXZlcnMvbmV0L2Z0bWFjMTAwLmMKaW5kZXggYTMxNjYxOS4uOWJkNzc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnRtYWMxMDAuYworKysgYi9kcml2ZXJzL25ldC9mdG1hYzEwMC5jCkBAIC0xMzksMTEgKzEzOSwxMSBAQAogCQkJICogdGhhdCBoYXJkd2FyZSByZXNldCBjb21wbGV0ZWQgKHdoYXQgdGhlIGYqY2spLgogCQkJICogV2Ugc3RpbGwgbmVlZCB0byB3YWl0IGZvciBhIHdoaWxlLgogCQkJICovCi0JCQl1c2xlZXBfcmFuZ2UoNTAwLCAxMDAwKTsKKwkJCXVkZWxheSg1MDApOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQl1c2xlZXBfcmFuZ2UoMTAwMCwgMTAwMDApOworCQl1ZGVsYXkoMTAwMCk7CiAJfQogCiAJbmV0ZGV2X2VycihuZXRkZXYsICJzb2Z0d2FyZSByZXNldCBmYWlsZWRcbiIpOwpAQCAtNzcyLDcgKzc3Miw3IEBACiAJCWlmICgocGh5Y3IgJiBGVE1BQzEwMF9QSFlDUl9NSUlSRCkgPT0gMCkKIAkJCXJldHVybiBwaHljciAmIEZUTUFDMTAwX1BIWUNSX01JSVJEQVRBOwogCi0JCXVzbGVlcF9yYW5nZSgxMDAsIDEwMDApOworCQl1ZGVsYXkoMTAwKTsKIAl9CiAKIAluZXRkZXZfZXJyKG5ldGRldiwgIm1kaW8gcmVhZCB0aW1lZCBvdXRcbiIpOwpAQCAtODAxLDcgKzgwMSw3IEBACiAJCWlmICgocGh5Y3IgJiBGVE1BQzEwMF9QSFlDUl9NSUlXUikgPT0gMCkKIAkJCXJldHVybjsKIAotCQl1c2xlZXBfcmFuZ2UoMTAwLCAxMDAwKTsKKwkJdWRlbGF5KDEwMCk7CiAJfQogCiAJbmV0ZGV2X2VycihuZXRkZXYsICJtZGlvIHdyaXRlIHRpbWVkIG91dFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oeWRyYS5jIGIvZHJpdmVycy9uZXQvaHlkcmEuYwppbmRleCBjNWVmNjJjLi4xY2Q0ODFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9oeWRyYS5jCisrKyBiL2RyaXZlcnMvbmV0L2h5ZHJhLmMKQEAgLTk4LDE1ICs5OCwxNSBAQAogCS5uZG9fb3BlbgkJPSBoeWRyYV9vcGVuLAogCS5uZG9fc3RvcAkJPSBoeWRyYV9jbG9zZSwKIAotCS5uZG9fc3RhcnRfeG1pdAkJPSBlaV9zdGFydF94bWl0LAotCS5uZG9fdHhfdGltZW91dAkJPSBlaV90eF90aW1lb3V0LAotCS5uZG9fZ2V0X3N0YXRzCQk9IGVpX2dldF9zdGF0cywKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gX19laV9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBfX2VpX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gX19laV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBfX2VpX3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKLQkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBlaV9wb2xsLAorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gX19laV9wb2xsLAogI2VuZGlmCiB9OwogCkBAIC0xMjUsNyArMTI1LDcgQEAKIAkweDEwLCAweDEyLCAweDE0LCAweDE2LCAweDE4LCAweDFhLCAweDFjLCAweDFlLAogICAgIH07CiAKLSAgICBkZXYgPSBhbGxvY19laV9uZXRkZXYoKTsKKyAgICBkZXYgPSBfX19fYWxsb2NfZWlfbmV0ZGV2KDApOwogICAgIGlmICghZGV2KQogCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sYW50aXFfZXRvcC5jIGIvZHJpdmVycy9uZXQvbGFudGlxX2V0b3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWYyNTJiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvbGFudGlxX2V0b3AuYwpAQCAtMCwwICsxLDgwNSBAQAorLyoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqICAgQ29weXJpZ2h0IChDKSAyMDExIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2NoZWNrc3VtLmg+CisKKyNpbmNsdWRlIDxsYW50aXFfc29jLmg+CisjaW5jbHVkZSA8eHdheV9kbWEuaD4KKyNpbmNsdWRlIDxsYW50aXFfcGxhdGZvcm0uaD4KKworI2RlZmluZSBMVFFfRVRPUF9NRElPCQkweDExODA0CisjZGVmaW5lIE1ESU9fUkVRVUVTVAkJMHg4MDAwMDAwMAorI2RlZmluZSBNRElPX1JFQUQJCTB4NDAwMDAwMDAKKyNkZWZpbmUgTURJT19BRERSX01BU0sJCTB4MWYKKyNkZWZpbmUgTURJT19BRERSX09GRlNFVAkweDE1CisjZGVmaW5lIE1ESU9fUkVHX01BU0sJCTB4MWYKKyNkZWZpbmUgTURJT19SRUdfT0ZGU0VUCQkweDEwCisjZGVmaW5lIE1ESU9fVkFMX01BU0sJCTB4ZmZmZgorCisjZGVmaW5lIFBQRTMyX0NHRU4JCTB4ODAwCisjZGVmaW5lIExRX1BQRTMyX0VORVRfTUFDX0NGRwkweDE4NDAKKworI2RlZmluZSBMVFFfRVRPUF9FTkVUUzAJCTB4MTE4NTAKKyNkZWZpbmUgTFRRX0VUT1BfTUFDX0RBMAkweDExODZDCisjZGVmaW5lIExUUV9FVE9QX01BQ19EQTEJMHgxMTg3MAorI2RlZmluZSBMVFFfRVRPUF9DRkcJCTB4MTYwMjAKKyNkZWZpbmUgTFRRX0VUT1BfSUdQTEVOCQkweDE2MDgwCisKKyNkZWZpbmUgTUFYX0RNQV9DSEFOCQkweDgKKyNkZWZpbmUgTUFYX0RNQV9DUkNfTEVOCQkweDQKKyNkZWZpbmUgTUFYX0RNQV9EQVRBX0xFTgkweDYwMAorCisjZGVmaW5lIEVUT1BfRlRDVQkJQklUKDI4KQorI2RlZmluZSBFVE9QX01JSV9NQVNLCQkweGYKKyNkZWZpbmUgRVRPUF9NSUlfTk9STUFMCQkweGQKKyNkZWZpbmUgRVRPUF9NSUlfUkVWRVJTRQkweGUKKyNkZWZpbmUgRVRPUF9QTEVOX1VOREVSCQkweDQwCisjZGVmaW5lIEVUT1BfQ0dFTgkJMHg4MDAKKworLyogdXNlIDIgc3RhdGljIGNoYW5uZWxzIGZvciBUWC9SWCAqLworI2RlZmluZSBMVFFfRVRPUF9UWF9DSEFOTkVMCTEKKyNkZWZpbmUgTFRRX0VUT1BfUlhfQ0hBTk5FTAk2CisjZGVmaW5lIElTX1RYKHgpCQkoeCA9PSBMVFFfRVRPUF9UWF9DSEFOTkVMKQorI2RlZmluZSBJU19SWCh4KQkJKHggPT0gTFRRX0VUT1BfUlhfQ0hBTk5FTCkKKworI2RlZmluZSBsdHFfZXRvcF9yMzIoeCkJCWx0cV9yMzIobHRxX2V0b3BfbWVtYmFzZSArICh4KSkKKyNkZWZpbmUgbHRxX2V0b3BfdzMyKHgsIHkpCWx0cV93MzIoeCwgbHRxX2V0b3BfbWVtYmFzZSArICh5KSkKKyNkZWZpbmUgbHRxX2V0b3BfdzMyX21hc2soeCwgeSwgeikJXAorCQlsdHFfdzMyX21hc2soeCwgeSwgbHRxX2V0b3BfbWVtYmFzZSArICh6KSkKKworI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wIgorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpsdHFfZXRvcF9tZW1iYXNlOworCitzdHJ1Y3QgbHRxX2V0b3BfY2hhbiB7CisJaW50IGlkeDsKKwlpbnQgdHhfZnJlZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCXN0cnVjdCBsdHFfZG1hX2NoYW5uZWwgZG1hOworCXN0cnVjdCBza19idWZmICpza2JbTFRRX0RFU0NfTlVNXTsKK307CisKK3N0cnVjdCBsdHFfZXRvcF9wcml2IHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBsdHFfZXRoX2RhdGEgKnBsZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKworCXN0cnVjdCBtaWlfYnVzICptaWlfYnVzOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CisKKwlzdHJ1Y3QgbHRxX2V0b3BfY2hhbiBjaFtNQVhfRE1BX0NIQU5dOworCWludCB0eF9mcmVlW01BWF9ETUFfQ0hBTiA+PiAxXTsKKworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX2FsbG9jX3NrYihzdHJ1Y3QgbHRxX2V0b3BfY2hhbiAqY2gpCit7CisJY2gtPnNrYltjaC0+ZG1hLmRlc2NdID0gZGV2X2FsbG9jX3NrYihNQVhfRE1BX0RBVEFfTEVOKTsKKwlpZiAoIWNoLT5za2JbY2gtPmRtYS5kZXNjXSkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2gtPmRtYS5kZXNjX2Jhc2VbY2gtPmRtYS5kZXNjXS5hZGRyID0gZG1hX21hcF9zaW5nbGUoTlVMTCwKKwkJY2gtPnNrYltjaC0+ZG1hLmRlc2NdLT5kYXRhLCBNQVhfRE1BX0RBVEFfTEVOLAorCQlETUFfRlJPTV9ERVZJQ0UpOworCWNoLT5kbWEuZGVzY19iYXNlW2NoLT5kbWEuZGVzY10uYWRkciA9CisJCUNQSFlTQUREUihjaC0+c2tiW2NoLT5kbWEuZGVzY10tPmRhdGEpOworCWNoLT5kbWEuZGVzY19iYXNlW2NoLT5kbWEuZGVzY10uY3RsID0KKwkJTFRRX0RNQV9PV04gfCBMVFFfRE1BX1JYX09GRlNFVChORVRfSVBfQUxJR04pIHwKKwkJTUFYX0RNQV9EQVRBX0xFTjsKKwlza2JfcmVzZXJ2ZShjaC0+c2tiW2NoLT5kbWEuZGVzY10sIE5FVF9JUF9BTElHTik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitsdHFfZXRvcF9od19yZWNlaXZlKHN0cnVjdCBsdHFfZXRvcF9jaGFuICpjaCkKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGNoLT5uZXRkZXYpOworCXN0cnVjdCBsdHFfZG1hX2Rlc2MgKmRlc2MgPSAmY2gtPmRtYS5kZXNjX2Jhc2VbY2gtPmRtYS5kZXNjXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY2gtPnNrYltjaC0+ZG1hLmRlc2NdOworCWludCBsZW4gPSAoZGVzYy0+Y3RsICYgTFRRX0RNQV9TSVpFX01BU0spIC0gTUFYX0RNQV9DUkNfTEVOOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChsdHFfZXRvcF9hbGxvY19za2IoY2gpKSB7CisJCW5ldGRldl9lcnIoY2gtPm5ldGRldiwKKwkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgbmV3IHJ4IGJ1ZmZlciwgc3RvcHBpbmcgRE1BXG4iKTsKKwkJbHRxX2RtYV9jbG9zZSgmY2gtPmRtYSk7CisJfQorCWNoLT5kbWEuZGVzYysrOworCWNoLT5kbWEuZGVzYyAlPSBMVFFfREVTQ19OVU07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJc2tiX3B1dChza2IsIGxlbik7CisJc2tiLT5kZXYgPSBjaC0+bmV0ZGV2OworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGNoLT5uZXRkZXYpOworCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX3BvbGxfcngoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBsdHFfZXRvcF9jaGFuICpjaCA9IGNvbnRhaW5lcl9vZihuYXBpLAorCQkJCXN0cnVjdCBsdHFfZXRvcF9jaGFuLCBuYXBpKTsKKwlpbnQgcnggPSAwOworCWludCBjb21wbGV0ZSA9IDA7CisKKwl3aGlsZSAoKHJ4IDwgYnVkZ2V0KSAmJiAhY29tcGxldGUpIHsKKwkJc3RydWN0IGx0cV9kbWFfZGVzYyAqZGVzYyA9ICZjaC0+ZG1hLmRlc2NfYmFzZVtjaC0+ZG1hLmRlc2NdOworCisJCWlmICgoZGVzYy0+Y3RsICYgKExUUV9ETUFfT1dOIHwgTFRRX0RNQV9DKSkgPT0gTFRRX0RNQV9DKSB7CisJCQlsdHFfZXRvcF9od19yZWNlaXZlKGNoKTsKKwkJCXJ4Kys7CisJCX0gZWxzZSB7CisJCQljb21wbGV0ZSA9IDE7CisJCX0KKwl9CisJaWYgKGNvbXBsZXRlIHx8ICFyeCkgeworCQluYXBpX2NvbXBsZXRlKCZjaC0+bmFwaSk7CisJCWx0cV9kbWFfYWNrX2lycSgmY2gtPmRtYSk7CisJfQorCXJldHVybiByeDsKK30KKworc3RhdGljIGludAorbHRxX2V0b3BfcG9sbF90eChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGx0cV9ldG9wX2NoYW4gKmNoID0KKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBsdHFfZXRvcF9jaGFuLCBuYXBpKTsKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGNoLT5uZXRkZXYpOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9CisJCW5ldGRldl9nZXRfdHhfcXVldWUoY2gtPm5ldGRldiwgY2gtPmlkeCA+PiAxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoKGNoLT5kbWEuZGVzY19iYXNlW2NoLT50eF9mcmVlXS5jdGwgJgorCQkJKExUUV9ETUFfT1dOIHwgTFRRX0RNQV9DKSkgPT0gTFRRX0RNQV9DKSB7CisJCWRldl9rZnJlZV9za2JfYW55KGNoLT5za2JbY2gtPnR4X2ZyZWVdKTsKKwkJY2gtPnNrYltjaC0+dHhfZnJlZV0gPSBOVUxMOworCQltZW1zZXQoJmNoLT5kbWEuZGVzY19iYXNlW2NoLT50eF9mcmVlXSwgMCwKKwkJCXNpemVvZihzdHJ1Y3QgbHRxX2RtYV9kZXNjKSk7CisJCWNoLT50eF9mcmVlKys7CisJCWNoLT50eF9mcmVlICU9IExUUV9ERVNDX05VTTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJaWYgKG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQodHhxKSkKKwkJbmV0aWZfdHhfc3RhcnRfcXVldWUodHhxKTsKKwluYXBpX2NvbXBsZXRlKCZjaC0+bmFwaSk7CisJbHRxX2RtYV9hY2tfaXJxKCZjaC0+ZG1hKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlycXJldHVybl90CitsdHFfZXRvcF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKl9wcml2KQoreworCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gX3ByaXY7CisJaW50IGNoID0gaXJxIC0gTFRRX0RNQV9DSDBfSU5UOworCisJbmFwaV9zY2hlZHVsZSgmcHJpdi0+Y2hbY2hdLm5hcGkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQKK2x0cV9ldG9wX2ZyZWVfY2hhbm5lbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbHRxX2V0b3BfY2hhbiAqY2gpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJbHRxX2RtYV9mcmVlKCZjaC0+ZG1hKTsKKwlpZiAoY2gtPmRtYS5pcnEpCisJCWZyZWVfaXJxKGNoLT5kbWEuaXJxLCBwcml2KTsKKwlpZiAoSVNfUlgoY2gtPmlkeCkpIHsKKwkJaW50IGRlc2M7CisJCWZvciAoZGVzYyA9IDA7IGRlc2MgPCBMVFFfREVTQ19OVU07IGRlc2MrKykKKwkJCWRldl9rZnJlZV9za2JfYW55KGNoLT5za2JbY2gtPmRtYS5kZXNjXSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorbHRxX2V0b3BfaHdfZXhpdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCWx0cV9wbXVfZGlzYWJsZShQTVVfUFBFKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0RNQV9DSEFOOyBpKyspCisJCWlmIChJU19UWChpKSB8fCBJU19SWChpKSkKKwkJCWx0cV9ldG9wX2ZyZWVfY2hhbm5lbChkZXYsICZwcml2LT5jaFtpXSk7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX2h3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisKKwlsdHFfcG11X2VuYWJsZShQTVVfUFBFKTsKKworCXN3aXRjaCAocHJpdi0+cGxkYXRhLT5taWlfbW9kZSkgeworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUk6CisJCWx0cV9ldG9wX3czMl9tYXNrKEVUT1BfTUlJX01BU0ssCisJCQlFVE9QX01JSV9SRVZFUlNFLCBMVFFfRVRPUF9DRkcpOworCQlicmVhazsKKworCWNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFX01JSToKKwkJbHRxX2V0b3BfdzMyX21hc2soRVRPUF9NSUlfTUFTSywKKwkJCUVUT1BfTUlJX05PUk1BTCwgTFRRX0VUT1BfQ0ZHKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQluZXRkZXZfZXJyKGRldiwgInVua25vd24gbWlpIG1vZGUgJWRcbiIsCisJCQlwcml2LT5wbGRhdGEtPm1paV9tb2RlKTsKKwkJcmV0dXJuIC1FTk9UU1VQUDsKKwl9CisKKwkvKiBlbmFibGUgY3JjIGdlbmVyYXRpb24gKi8KKwlsdHFfZXRvcF93MzIoUFBFMzJfQ0dFTiwgTFFfUFBFMzJfRU5FVF9NQUNfQ0ZHKTsKKworCWx0cV9kbWFfaW5pdF9wb3J0KERNQV9QT1JUX0VUT1ApOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTjsgaSsrKSB7CisJCWludCBpcnEgPSBMVFFfRE1BX0NIMF9JTlQgKyBpOworCQlzdHJ1Y3QgbHRxX2V0b3BfY2hhbiAqY2ggPSAmcHJpdi0+Y2hbaV07CisKKwkJY2gtPmlkeCA9IGNoLT5kbWEubnIgPSBpOworCisJCWlmIChJU19UWChpKSkgeworCQkJbHRxX2RtYV9hbGxvY190eCgmY2gtPmRtYSk7CisJCQlyZXF1ZXN0X2lycShpcnEsIGx0cV9ldG9wX2RtYV9pcnEsIElSUUZfRElTQUJMRUQsCisJCQkJImV0b3BfdHgiLCBwcml2KTsKKwkJfSBlbHNlIGlmIChJU19SWChpKSkgeworCQkJbHRxX2RtYV9hbGxvY19yeCgmY2gtPmRtYSk7CisJCQlmb3IgKGNoLT5kbWEuZGVzYyA9IDA7IGNoLT5kbWEuZGVzYyA8IExUUV9ERVNDX05VTTsKKwkJCQkJY2gtPmRtYS5kZXNjKyspCisJCQkJaWYgKGx0cV9ldG9wX2FsbG9jX3NrYihjaCkpCisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJY2gtPmRtYS5kZXNjID0gMDsKKwkJCXJlcXVlc3RfaXJxKGlycSwgbHRxX2V0b3BfZG1hX2lycSwgSVJRRl9ESVNBQkxFRCwKKwkJCQkiZXRvcF9yeCIsIHByaXYpOworCQl9CisJCWNoLT5kbWEuaXJxID0gaXJxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2x0cV9ldG9wX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RyY3B5KGluZm8tPmRyaXZlciwgIkxhbnRpcSBFVE9QIik7CisJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCAiaW50ZXJuYWwiKTsKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04pOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHBoeV9ldGh0b29sX2dzZXQocHJpdi0+cGh5ZGV2LCBjbWQpOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHBoeV9ldGh0b29sX3NzZXQocHJpdi0+cGh5ZGV2LCBjbWQpOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHBoeV9zdGFydF9hbmVnKHByaXYtPnBoeWRldik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbHRxX2V0b3BfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvID0gbHRxX2V0b3BfZ2V0X2RydmluZm8sCisJLmdldF9zZXR0aW5ncyA9IGx0cV9ldG9wX2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzID0gbHRxX2V0b3Bfc2V0X3NldHRpbmdzLAorCS5ud2F5X3Jlc2V0ID0gbHRxX2V0b3BfbndheV9yZXNldCwKK307CisKK3N0YXRpYyBpbnQKK2x0cV9ldG9wX21kaW9fd3Ioc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcGh5X3JlZywgdTE2IHBoeV9kYXRhKQoreworCXUzMiB2YWwgPSBNRElPX1JFUVVFU1QgfAorCQkoKHBoeV9hZGRyICYgTURJT19BRERSX01BU0spIDw8IE1ESU9fQUREUl9PRkZTRVQpIHwKKwkJKChwaHlfcmVnICYgTURJT19SRUdfTUFTSykgPDwgTURJT19SRUdfT0ZGU0VUKSB8CisJCXBoeV9kYXRhOworCisJd2hpbGUgKGx0cV9ldG9wX3IzMihMVFFfRVRPUF9NRElPKSAmIE1ESU9fUkVRVUVTVCkKKwkJOworCWx0cV9ldG9wX3czMih2YWwsIExUUV9FVE9QX01ESU8pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9tZGlvX3JkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHBoeV9yZWcpCit7CisJdTMyIHZhbCA9IE1ESU9fUkVRVUVTVCB8IE1ESU9fUkVBRCB8CisJCSgocGh5X2FkZHIgJiBNRElPX0FERFJfTUFTSykgPDwgTURJT19BRERSX09GRlNFVCkgfAorCQkoKHBoeV9yZWcgJiBNRElPX1JFR19NQVNLKSA8PCBNRElPX1JFR19PRkZTRVQpOworCisJd2hpbGUgKGx0cV9ldG9wX3IzMihMVFFfRVRPUF9NRElPKSAmIE1ESU9fUkVRVUVTVCkKKwkJOworCWx0cV9ldG9wX3czMih2YWwsIExUUV9FVE9QX01ESU8pOworCXdoaWxlIChsdHFfZXRvcF9yMzIoTFRRX0VUT1BfTURJTykgJiBNRElPX1JFUVVFU1QpCisJCTsKKwl2YWwgPSBsdHFfZXRvcF9yMzIoTFRRX0VUT1BfTURJTykgJiBNRElPX1ZBTF9NQVNLOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitsdHFfZXRvcF9tZGlvX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwkvKiBub3RoaW5nIHRvIGRvICAqLworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9tZGlvX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBOVUxMOworCWludCBwaHlfYWRkcjsKKworCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IFBIWV9NQVhfQUREUjsgcGh5X2FkZHIrKykgeworCQlpZiAocHJpdi0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKKwkJCXBoeWRldiA9IHByaXYtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXBoeWRldikgeworCQluZXRkZXZfZXJyKGRldiwgIm5vIFBIWSBmb3VuZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgJmx0cV9ldG9wX21kaW9fbGluaywKKwkJCTAsIHByaXYtPnBsZGF0YS0+bWlpX21vZGUpOworCisJaWYgKElTX0VSUihwaHlkZXYpKSB7CisJCW5ldGRldl9lcnIoZGV2LCAiQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwaHlkZXYpOworCX0KKworCXBoeWRldi0+c3VwcG9ydGVkICY9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmCisJCQkgICAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKKwkJCSAgICAgIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYKKwkJCSAgICAgIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwKKwkJCSAgICAgIHwgU1VQUE9SVEVEX0F1dG9uZWcKKwkJCSAgICAgIHwgU1VQUE9SVEVEX01JSQorCQkJICAgICAgfCBTVVBQT1JURURfVFApOworCisJcGh5ZGV2LT5hZHZlcnRpc2luZyA9IHBoeWRldi0+c3VwcG9ydGVkOworCXByaXYtPnBoeWRldiA9IHBoeWRldjsKKwlwcl9pbmZvKCIlczogYXR0YWNoZWQgUEhZIFslc10gKHBoeV9hZGRyPSVzLCBpcnE9JWQpXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHBoeWRldi0+ZHJ2LT5uYW1lLAorCSAgICAgICBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLCBwaHlkZXYtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbHRxX2V0b3BfbWRpb19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCWludCBlcnI7CisKKwlwcml2LT5taWlfYnVzID0gbWRpb2J1c19hbGxvYygpOworCWlmICghcHJpdi0+bWlpX2J1cykgeworCQluZXRkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBtaWkgYnVzXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCXByaXYtPm1paV9idXMtPnByaXYgPSBkZXY7CisJcHJpdi0+bWlpX2J1cy0+cmVhZCA9IGx0cV9ldG9wX21kaW9fcmQ7CisJcHJpdi0+bWlpX2J1cy0+d3JpdGUgPSBsdHFfZXRvcF9tZGlvX3dyOworCXByaXYtPm1paV9idXMtPm5hbWUgPSAibHRxX21paSI7CisJc25wcmludGYocHJpdi0+bWlpX2J1cy0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgMCk7CisJcHJpdi0+bWlpX2J1cy0+aXJxID0ga21hbGxvYyhzaXplb2YoaW50KSAqIFBIWV9NQVhfQUREUiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2LT5taWlfYnVzLT5pcnEpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbWRpb2J1czsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgUEhZX01BWF9BRERSOyArK2kpCisJCXByaXYtPm1paV9idXMtPmlycVtpXSA9IFBIWV9QT0xMOworCisJaWYgKG1kaW9idXNfcmVnaXN0ZXIocHJpdi0+bWlpX2J1cykpIHsKKwkJZXJyID0gLUVOWElPOworCQlnb3RvIGVycl9vdXRfZnJlZV9tZGlvX2lycTsKKwl9CisKKwlpZiAobHRxX2V0b3BfbWRpb19wcm9iZShkZXYpKSB7CisJCWVyciA9IC1FTlhJTzsKKwkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXJfYnVzOworCX0KKwlyZXR1cm4gMDsKKworZXJyX291dF91bnJlZ2lzdGVyX2J1czoKKwltZGlvYnVzX3VucmVnaXN0ZXIocHJpdi0+bWlpX2J1cyk7CitlcnJfb3V0X2ZyZWVfbWRpb19pcnE6CisJa2ZyZWUocHJpdi0+bWlpX2J1cy0+aXJxKTsKK2Vycl9vdXRfZnJlZV9tZGlvYnVzOgorCW1kaW9idXNfZnJlZShwcml2LT5taWlfYnVzKTsKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK2x0cV9ldG9wX21kaW9fY2xlYW51cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXBoeV9kaXNjb25uZWN0KHByaXYtPnBoeWRldik7CisJbWRpb2J1c191bnJlZ2lzdGVyKHByaXYtPm1paV9idXMpOworCWtmcmVlKHByaXYtPm1paV9idXMtPmlycSk7CisJbWRpb2J1c19mcmVlKHByaXYtPm1paV9idXMpOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTjsgaSsrKSB7CisJCXN0cnVjdCBsdHFfZXRvcF9jaGFuICpjaCA9ICZwcml2LT5jaFtpXTsKKworCQlpZiAoIUlTX1RYKGkpICYmICghSVNfUlgoaSkpKQorCQkJY29udGludWU7CisJCWx0cV9kbWFfb3BlbigmY2gtPmRtYSk7CisJCW5hcGlfZW5hYmxlKCZjaC0+bmFwaSk7CisJfQorCXBoeV9zdGFydChwcml2LT5waHlkZXYpOworCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorbHRxX2V0b3Bfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhkZXYpOworCXBoeV9zdG9wKHByaXYtPnBoeWRldik7CisJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTjsgaSsrKSB7CisJCXN0cnVjdCBsdHFfZXRvcF9jaGFuICpjaCA9ICZwcml2LT5jaFtpXTsKKworCQlpZiAoIUlTX1JYKGkpICYmICFJU19UWChpKSkKKwkJCWNvbnRpbnVlOworCQluYXBpX2Rpc2FibGUoJmNoLT5uYXBpKTsKKwkJbHRxX2RtYV9jbG9zZSgmY2gtPmRtYSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCBxdWV1ZSA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpOworCXN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUoZGV2LCBxdWV1ZSk7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBsdHFfZXRvcF9jaGFuICpjaCA9ICZwcml2LT5jaFsocXVldWUgPDwgMSkgfCAxXTsKKwlzdHJ1Y3QgbHRxX2RtYV9kZXNjICpkZXNjID0gJmNoLT5kbWEuZGVzY19iYXNlW2NoLT5kbWEuZGVzY107CisJaW50IGxlbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBieXRlX29mZnNldDsKKworCWxlbiA9IHNrYi0+bGVuIDwgRVRIX1pMRU4gPyBFVEhfWkxFTiA6IHNrYi0+bGVuOworCisJaWYgKChkZXNjLT5jdGwgJiAoTFRRX0RNQV9PV04gfCBMVFFfRE1BX0MpKSB8fCBjaC0+c2tiW2NoLT5kbWEuZGVzY10pIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJbmV0ZGV2X2VycihkZXYsICJ0eCByaW5nIGZ1bGxcbiIpOworCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwkvKiBkbWEgbmVlZHMgdG8gc3RhcnQgb24gYSAxNiBieXRlIGFsaWduZWQgYWRkcmVzcyAqLworCWJ5dGVfb2Zmc2V0ID0gQ1BIWVNBRERSKHNrYi0+ZGF0YSkgJSAxNjsKKwljaC0+c2tiW2NoLT5kbWEuZGVzY10gPSBza2I7CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJZGVzYy0+YWRkciA9ICgodW5zaWduZWQgaW50KSBkbWFfbWFwX3NpbmdsZShOVUxMLCBza2ItPmRhdGEsIGxlbiwKKwkJCQkJCURNQV9UT19ERVZJQ0UpKSAtIGJ5dGVfb2Zmc2V0OworCXdtYigpOworCWRlc2MtPmN0bCA9IExUUV9ETUFfT1dOIHwgTFRRX0RNQV9TT1AgfCBMVFFfRE1BX0VPUCB8CisJCUxUUV9ETUFfVFhfT0ZGU0VUKGJ5dGVfb2Zmc2V0KSB8IChsZW4gJiBMVFFfRE1BX1NJWkVfTUFTSyk7CisJY2gtPmRtYS5kZXNjKys7CisJY2gtPmRtYS5kZXNjICU9IExUUV9ERVNDX05VTTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoY2gtPmRtYS5kZXNjX2Jhc2VbY2gtPmRtYS5kZXNjXS5jdGwgJiBMVFFfRE1BX09XTikKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eHEpOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGludAorbHRxX2V0b3BfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlpbnQgcmV0ID0gZXRoX2NoYW5nZV9tdHUoZGV2LCBuZXdfbXR1KTsKKworCWlmICghcmV0KSB7CisJCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQlsdHFfZXRvcF93MzIoKEVUT1BfUExFTl9VTkRFUiA8PCAxNikgfCBuZXdfbXR1LAorCQkJTFRRX0VUT1BfSUdQTEVOKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIFRPRE86IG1paS10b2xsIHJlcG9ydHMgIk5vIE1JSSB0cmFuc2NlaXZlciBwcmVzZW50IS4iID8hKi8KKwlyZXR1cm4gcGh5X21paV9pb2N0bChwcml2LT5waHlkZXYsIHJxLCBjbWQpOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcCkKK3sKKwlpbnQgcmV0ID0gZXRoX21hY19hZGRyKGRldiwgcCk7CisKKwlpZiAoIXJldCkgeworCQlzdHJ1Y3QgbHRxX2V0b3BfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJLyogc3RvcmUgdGhlIG1hYyBmb3IgdGhlIHVuaWNhc3QgZmlsdGVyICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCWx0cV9ldG9wX3czMigqKCh1MzIgKilkZXYtPmRldl9hZGRyKSwgTFRRX0VUT1BfTUFDX0RBMCk7CisJCWx0cV9ldG9wX3czMigqKCh1MTYgKikmZGV2LT5kZXZfYWRkcls0XSkgPDwgMTYsCisJCQlMVFFfRVRPUF9NQUNfREExKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorbHRxX2V0b3Bfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBlbnN1cmUgdGhhdCB0aGUgdW5pY2FzdCBmaWx0ZXIgaXMgbm90IGVuYWJsZWQgaW4gcHJvbWlzY2lvdXMgbW9kZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkKKwkJbHRxX2V0b3BfdzMyX21hc2soRVRPUF9GVENVLCAwLCBMVFFfRVRPUF9FTkVUUzApOworCWVsc2UKKwkJbHRxX2V0b3BfdzMyX21hc2soMCwgRVRPUF9GVENVLCBMVFFfRVRPUF9FTkVUUzApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHUxNgorbHRxX2V0b3Bfc2VsZWN0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJLyogd2UgYXJlIGN1cnJlbnRseSBvbmx5IHVzaW5nIHRoZSBmaXJzdCBxdWV1ZSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitsdHFfZXRvcF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGx0cV9ldG9wX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBzb2NrYWRkciBtYWM7CisJaW50IGVycjsKKworCWV0aGVyX3NldHVwKGRldik7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IDEwICogSFo7CisJZXJyID0gbHRxX2V0b3BfaHdfaW5pdChkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX2h3OworCWx0cV9ldG9wX2NoYW5nZV9tdHUoZGV2LCAxNTAwKTsKKworCW1lbWNweSgmbWFjLCAmcHJpdi0+cGxkYXRhLT5tYWMsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjLnNhX2RhdGEpKSB7CisJCXByX3dhcm4oImV0b3A6IGludmFsaWQgTUFDLCB1c2luZyByYW5kb21cbiIpOworCQlyYW5kb21fZXRoZXJfYWRkcihtYWMuc2FfZGF0YSk7CisJfQorCisJZXJyID0gbHRxX2V0b3Bfc2V0X21hY19hZGRyZXNzKGRldiwgJm1hYyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfbmV0ZGV2OworCWx0cV9ldG9wX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOworCWVyciA9IGx0cV9ldG9wX21kaW9faW5pdChkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX25ldGRldjsKKwlyZXR1cm4gMDsKKworZXJyX25ldGRldjoKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYpOworCWZyZWVfbmV0ZGV2KGRldik7CitlcnJfaHc6CisJbHRxX2V0b3BfaHdfZXhpdChkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCitsdHFfZXRvcF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaW50IGVycjsKKworCWx0cV9ldG9wX2h3X2V4aXQoZGV2KTsKKwllcnIgPSBsdHFfZXRvcF9od19pbml0KGRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfaHc7CisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCXJldHVybjsKKworZXJyX2h3OgorCWx0cV9ldG9wX2h3X2V4aXQoZGV2KTsKKwluZXRkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZXN0YXJ0IGV0b3AgYWZ0ZXIgVFggdGltZW91dFxuIik7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbHRxX2V0aF9uZXRkZXZfb3BzID0geworCS5uZG9fb3BlbiA9IGx0cV9ldG9wX29wZW4sCisJLm5kb19zdG9wID0gbHRxX2V0b3Bfc3RvcCwKKwkubmRvX3N0YXJ0X3htaXQgPSBsdHFfZXRvcF90eCwKKwkubmRvX2NoYW5nZV9tdHUgPSBsdHFfZXRvcF9jaGFuZ2VfbXR1LAorCS5uZG9fZG9faW9jdGwgPSBsdHFfZXRvcF9pb2N0bCwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyA9IGx0cV9ldG9wX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGx0cV9ldG9wX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3NlbGVjdF9xdWV1ZSA9IGx0cV9ldG9wX3NlbGVjdF9xdWV1ZSwKKwkubmRvX2luaXQgPSBsdHFfZXRvcF9pbml0LAorCS5uZG9fdHhfdGltZW91dCA9IGx0cV9ldG9wX3R4X3RpbWVvdXQsCit9OworCitzdGF0aWMgaW50IF9faW5pdAorbHRxX2V0b3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBsdHFfZXRvcF9wcml2ICpwcml2OworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBlcnI7CisJaW50IGk7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgZXRvcCByZXNvdXJjZVxuIik7CisJCWVyciA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlyZXMgPSBkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQlyZXNvdXJjZV9zaXplKHJlcyksIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBldG9wIHJlc291cmNlXG4iKTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJbHRxX2V0b3BfbWVtYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsCisJCXJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFsdHFfZXRvcF9tZW1iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZW1hcCBldG9wIGVuZ2luZSAlZFxuIiwKKwkJCXBkZXYtPmlkKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJfb3V0OworCX0KKworCWRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgbHRxX2V0b3BfcHJpdiksIDQpOworCXN0cmNweShkZXYtPm5hbWUsICJldGglZCIpOworCWRldi0+bmV0ZGV2X29wcyA9ICZsdHFfZXRoX25ldGRldl9vcHM7CisJZGV2LT5ldGh0b29sX29wcyA9ICZsdHFfZXRvcF9ldGh0b29sX29wczsKKwlwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwcml2LT5yZXMgPSByZXM7CisJcHJpdi0+cGxkYXRhID0gZGV2X2dldF9wbGF0ZGF0YSgmcGRldi0+ZGV2KTsKKwlwcml2LT5uZXRkZXYgPSBkZXY7CisJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9ETUFfQ0hBTjsgaSsrKSB7CisJCWlmIChJU19UWChpKSkKKwkJCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPmNoW2ldLm5hcGksCisJCQkJbHRxX2V0b3BfcG9sbF90eCwgOCk7CisJCWVsc2UgaWYgKElTX1JYKGkpKQorCQkJbmV0aWZfbmFwaV9hZGQoZGV2LCAmcHJpdi0+Y2hbaV0ubmFwaSwKKwkJCQlsdHFfZXRvcF9wb2xsX3J4LCAzMik7CisJCXByaXYtPmNoW2ldLm5ldGRldiA9IGRldjsKKwl9CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9mcmVlOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKwlyZXR1cm4gMDsKKworZXJyX2ZyZWU6CisJa2ZyZWUoZGV2KTsKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQKK2x0cV9ldG9wX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChkZXYpIHsKKwkJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKGRldik7CisJCWx0cV9ldG9wX2h3X2V4aXQoZGV2KTsKKwkJbHRxX2V0b3BfbWRpb19jbGVhbnVwKGRldik7CisJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsdHFfbWlpX2RyaXZlciA9IHsKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobHRxX2V0b3BfcmVtb3ZlKSwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJsdHFfZXRvcCIsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgX19pbml0Citpbml0X2x0cV9ldG9wKHZvaWQpCit7CisJaW50IHJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbHRxX21paV9kcml2ZXIsIGx0cV9ldG9wX3Byb2JlKTsKKworCWlmIChyZXQpCisJCXByX2VycigibHRxX2V0b3A6IEVycm9yIHJlZ2lzdGVyaW5nIHBsYXRmb20gZHJpdmVyISIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdAorZXhpdF9sdHFfZXRvcCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZsdHFfbWlpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGluaXRfbHRxX2V0b3ApOworbW9kdWxlX2V4aXQoZXhpdF9sdHFfZXRvcCk7CisKK01PRFVMRV9BVVRIT1IoIkpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJMYW50aXEgU29DIEVUT1AiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IGVhMGRjNDUuLmQ3MGZiNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtMTczLDcgKzE3Myw4IEBACiAJCXwgTkVUSUZfRl9SWENTVU0KIAkJfCBORVRJRl9GX0hJR0hETUEKIAkJfCBORVRJRl9GX0xMVFgKLQkJfCBORVRJRl9GX05FVE5TX0xPQ0FMOworCQl8IE5FVElGX0ZfTkVUTlNfTE9DQUwKKwkJfCBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKIAlkZXYtPmV0aHRvb2xfb3BzCT0gJmxvb3BiYWNrX2V0aHRvb2xfb3BzOwogCWRldi0+aGVhZGVyX29wcwkJPSAmZXRoX2hlYWRlcl9vcHM7CiAJZGV2LT5uZXRkZXZfb3BzCQk9ICZsb29wYmFja19vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9taWkuYyBiL2RyaXZlcnMvbmV0L21paS5jCmluZGV4IDBhNmM2YTIuLmQ0ZmMwMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21paS5jCisrKyBiL2RyaXZlcnMvbmV0L21paS5jCkBAIC00OSw2ICs0OSwxMCBAQAogCQlyZXN1bHQgfD0gQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmOwogCWlmIChhZHZlcnQgJiBBRFZFUlRJU0VfMTAwRlVMTCkKIAkJcmVzdWx0IHw9IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKKwlpZiAoYWR2ZXJ0ICYgQURWRVJUSVNFX1BBVVNFX0NBUCkKKwkJcmVzdWx0IHw9IEFEVkVSVElTRURfUGF1c2U7CisJaWYgKGFkdmVydCAmIEFEVkVSVElTRV9QQVVTRV9BU1lNKQorCQlyZXN1bHQgfD0gQURWRVJUSVNFRF9Bc3ltX1BhdXNlOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCBhYTI4MTNlLi4xMDc0MjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC04NjAsNiArODYwLDkgQEAKIAkJcHJldl9lZWRhdGEgPSBlZWRhdGE7CiAJfQogCisJLyogU3RvcmUgTUFDIEFkZHJlc3MgaW4gcGVybV9hZGRyICovCisJbWVtY3B5KGRldi0+cGVybV9hZGRyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKIAlkZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpIGlvYWRkcjsKIAlkZXYtPmlycSA9IGlycTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUtaDgzMDAuYyBiL2RyaXZlcnMvbmV0L25lLWg4MzAwLmMKaW5kZXggMzBiZThjNi4uNzI5OGEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUtaDgzMDAuYworKysgYi9kcml2ZXJzL25ldC9uZS1oODMwMC5jCkBAIC0xNjcsNyArMTY3LDcgQEAKICNpZm5kZWYgTU9EVUxFCiBzdHJ1Y3QgbmV0X2RldmljZSAqIF9faW5pdCBuZV9wcm9iZShpbnQgdW5pdCkKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IF9fX19hbGxvY19laV9uZXRkZXYoMCk7CiAJaW50IGVycjsKIAogCWlmICghZGV2KQpAQCAtMTk3LDE1ICsxOTcsMTUgQEAKIAkubmRvX29wZW4JCT0gbmVfb3BlbiwKIAkubmRvX3N0b3AJCT0gbmVfY2xvc2UsCiAKLQkubmRvX3N0YXJ0X3htaXQJCT0gZWlfc3RhcnRfeG1pdCwKLQkubmRvX3R4X3RpbWVvdXQJCT0gZWlfdHhfdGltZW91dCwKLQkubmRvX2dldF9zdGF0cwkJPSBlaV9nZXRfc3RhdHMsCi0JLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBlaV9zZXRfbXVsdGljYXN0X2xpc3QsCisJLm5kb19zdGFydF94bWl0CQk9IF9fZWlfc3RhcnRfeG1pdCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gX19laV90eF90aW1lb3V0LAorCS5uZG9fZ2V0X3N0YXRzCQk9IF9fZWlfZ2V0X3N0YXRzLAorCS5uZG9fc2V0X211bHRpY2FzdF9saXN0ID0gX19laV9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgCT0gZXRoX21hY19hZGRyLAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gZXRoX21hY19hZGRyLAogCS5uZG9fY2hhbmdlX210dQkJPSBldGhfY2hhbmdlX210dSwKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgotCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gZWlfcG9sbCwKKwkubmRvX3BvbGxfY29udHJvbGxlcgk9IF9fZWlfcG9sbCwKICNlbmRpZgogfTsKIApAQCAtNjM3LDcgKzYzNyw3IEBACiAJaW50IGVycjsKIAogCWZvciAodGhpc19kZXYgPSAwOyB0aGlzX2RldiA8IE1BWF9ORV9DQVJEUzsgdGhpc19kZXYrKykgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBfX19fYWxsb2NfZWlfbmV0ZGV2KDApOwogCQlpZiAoIWRldikKIAkJCWJyZWFrOwogCQlpZiAoaW9bdGhpc19kZXZdKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMgYi9kcml2ZXJzL25ldC9uZXRjb25zb2xlLmMKaW5kZXggZGZiNjdlYi4uZWI0MWU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0Y29uc29sZS5jCisrKyBiL2RyaXZlcnMvbmV0L25ldGNvbnNvbGUuYwpAQCAtNjcxLDYgKzY3MSw3IEBACiAJCWdvdG8gZG9uZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0YXJnZXRfbGlzdF9sb2NrLCBmbGFncyk7CityZXN0YXJ0OgogCWxpc3RfZm9yX2VhY2hfZW50cnkobnQsICZ0YXJnZXRfbGlzdCwgbGlzdCkgewogCQluZXRjb25zb2xlX3RhcmdldF9nZXQobnQpOwogCQlpZiAobnQtPm5wLmRldiA9PSBkZXYpIHsKQEAgLTY4Myw5ICs2ODQsMTYgQEAKIAkJCQkgKiBydG5sX2xvY2sgYWxyZWFkeSBoZWxkCiAJCQkJICovCiAJCQkJaWYgKG50LT5ucC5kZXYpIHsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgKKwkJCQkJCQkgICAgICAmdGFyZ2V0X2xpc3RfbG9jaywKKwkJCQkJCQkgICAgICBmbGFncyk7CiAJCQkJCV9fbmV0cG9sbF9jbGVhbnVwKCZudC0+bnApOworCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmdGFyZ2V0X2xpc3RfbG9jaywKKwkJCQkJCQkgIGZsYWdzKTsKIAkJCQkJZGV2X3B1dChudC0+bnAuZGV2KTsKIAkJCQkJbnQtPm5wLmRldiA9IE5VTEw7CisJCQkJCW5ldGNvbnNvbGVfdGFyZ2V0X3B1dChudCk7CisJCQkJCWdvdG8gcmVzdGFydDsKIAkJCQl9CiAJCQkJLyogRmFsbCB0aHJvdWdoICovCiAJCQljYXNlIE5FVERFVl9HT0lOR19ET1dOOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKaW5kZXggZDcyOTlmMS4uNjc5ZGM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWMuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCkBAIC0xNzQsNyArMTc0LDcgQEAKIAogI2RlZmluZQlNQVhfTlVNX0NBUkRTCQk0CiAKLSNkZWZpbmUgTUFYX0JVRkZFUlNfUEVSX0NNRAkzMgorI2RlZmluZSBORVRYRU5fTUFYX0ZSQUdTX1BFUl9UWAkxNAogI2RlZmluZSBNQVhfVFNPX0hFQURFUl9ERVNDCTIKICNkZWZpbmUgTUdNVF9DTURfREVTQ19SRVNWCTQKICNkZWZpbmUgVFhfU1RPUF9USFJFU0gJCSgoTUFYX1NLQl9GUkFHUyA+PiAyKSArIE1BWF9UU09fSEVBREVSX0RFU0MgXApAQCAtNTU4LDcgKzU1OCw3IEBACiAgKi8KIHN0cnVjdCBuZXR4ZW5fY21kX2J1ZmZlciB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbmV0eGVuX3NrYl9mcmFnIGZyYWdfYXJyYXlbTUFYX0JVRkZFUlNfUEVSX0NNRCArIDFdOworCXN0cnVjdCBuZXR4ZW5fc2tiX2ZyYWcgZnJhZ19hcnJheVtNQVhfU0tCX0ZSQUdTICsgMV07CiAJdTMyIGZyYWdfY291bnQ7CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggODMzNDhkYy4uZThhNGI2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtMTg0NCw2ICsxODQ0LDggQEAKIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmh3ZGVzYywgKmZpcnN0X2Rlc2M7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJaW50IGksIGs7CisJaW50IGRlbHRhID0gMDsKKwlzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0ICpmcmFnOwogCiAJdTMyIHByb2R1Y2VyOwogCWludCBmcmFnX2NvdW50LCBub19vZl9kZXNjOwpAQCAtMTg1MSw2ICsxODUzLDIxIEBACiAKIAlmcmFnX2NvdW50ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDE7CiAKKwkvKiAxNCBmcmFncyBzdXBwb3J0ZWQgZm9yIG5vcm1hbCBwYWNrZXQgYW5kCisJICogMzIgZnJhZ3Mgc3VwcG9ydGVkIGZvciBUU08gcGFja2V0CisJICovCisJaWYgKCFza2JfaXNfZ3NvKHNrYikgJiYgZnJhZ19jb3VudCA+IE5FVFhFTl9NQVhfRlJBR1NfUEVSX1RYKSB7CisKKwkJZm9yIChpID0gMDsgaSA8IChmcmFnX2NvdW50IC0gTkVUWEVOX01BWF9GUkFHU19QRVJfVFgpOyBpKyspIHsKKwkJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJCWRlbHRhICs9IGZyYWctPnNpemU7CisJCX0KKworCQlpZiAoIV9fcHNrYl9wdWxsX3RhaWwoc2tiLCBkZWx0YSkpCisJCQlnb3RvIGRyb3BfcGFja2V0OworCisJCWZyYWdfY291bnQgPSAxICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwl9CiAJLyogNCBmcmFnbWVudHMgcGVyIGNtZCBkZXMgKi8KIAlub19vZl9kZXNjID0gKGZyYWdfY291bnQgKyAzKSA+PiAyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGNoX2diZS9wY2hfZ2JlX21haW4uYwppbmRleCAyZWYyZjljLi41NmQwNDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2hfZ2JlL3BjaF9nYmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaF9nYmUvcGNoX2diZV9tYWluLmMKQEAgLTM0LDYgKzM0LDEwIEBACiAjZGVmaW5lIFBDSF9HQkVfQ09QWUJSRUFLX0RFRkFVTFQJMjU2CiAjZGVmaW5lIFBDSF9HQkVfUENJX0JBUgkJCTEKIAorLyogTWFjcm9zIGZvciBNTDcyMjMgKi8KKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ST0hNCQkJMHgxMGRiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk9ITV9NTDcyMjNfR0JFCQkweDgwMTMKKwogI2RlZmluZSBQQ0hfR0JFX1RYX1dFSUdIVCAgICAgICAgIDY0CiAjZGVmaW5lIFBDSF9HQkVfUlhfV0VJR0hUICAgICAgICAgNjQKICNkZWZpbmUgUENIX0dCRV9SWF9CVUZGRVJfV1JJVEUgICAxNgpAQCAtNDMsOCArNDcsNyBAQAogCiAjZGVmaW5lIFBDSF9HQkVfTUFDX1JHTUlJX0NUUkxfU0VUVElORyAoIFwKIAlQQ0hfR0JFX0NISVBfVFlQRV9JTlRFUk5BTCB8IFwKLQlQQ0hfR0JFX1JHTUlJX01PREVfUkdNSUkgICB8IFwKLQlQQ0hfR0JFX0NSU19TRUwgICAgICAgICAgICAgIFwKKwlQQ0hfR0JFX1JHTUlJX01PREVfUkdNSUkgICAgIFwKIAkpCiAKIC8qIEV0aGVydHlwZSBmaWVsZCB2YWx1ZXMgKi8KQEAgLTE0OTQsMTIgKzE0OTcsMTEgQEAKIAkJCS8qIFdyaXRlIG1ldGEgZGF0ZSBvZiBza2IgKi8KIAkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmV0ZGV2KTsKLQkJCWlmICgodGNwX2lwX3N0YXR1cyAmIFBDSF9HQkVfUlhEX0FDQ19TVEFUX1RDUElQT0spID09Ci0JCQkgICAgUENIX0dCRV9SWERfQUNDX1NUQVRfVENQSVBPSykgewotCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCQl9IGVsc2UgeworCQkJaWYgKHRjcF9pcF9zdGF0dXMgJiBQQ0hfR0JFX1JYRF9BQ0NfU1RBVF9UQ1BJUE9LKQogCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKLQkJCX0KKwkJCWVsc2UKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCiAJCQluYXBpX2dyb19yZWNlaXZlKCZhZGFwdGVyLT5uYXBpLCBza2IpOwogCQkJKCp3b3JrX2RvbmUpKys7CiAJCQlwcl9kZWJ1ZygiUmVjZWl2ZSBza2ItPmlwX3N1bW1lZDogJWQgbGVuZ3RoOiAlZFxuIiwKQEAgLTI0MjAsNiArMjQyMiwxMyBAQAogCSAuY2xhc3MgPSAoUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQgPDwgOCksCiAJIC5jbGFzc19tYXNrID0gKDB4RkZGRjAwKQogCSB9LAorCXsudmVuZG9yID0gUENJX1ZFTkRPUl9JRF9ST0hNLAorCSAuZGV2aWNlID0gUENJX0RFVklDRV9JRF9ST0hNX01MNzIyM19HQkUsCisJIC5zdWJ2ZW5kb3IgPSBQQ0lfQU5ZX0lELAorCSAuc3ViZGV2aWNlID0gUENJX0FOWV9JRCwKKwkgLmNsYXNzID0gKFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgpLAorCSAuY2xhc3NfbWFzayA9ICgweEZGRkYwMCkKKwkgfSwKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCiAJezB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCmluZGV4IGRjNDQ1NjQuLmIwZGVhZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaAorKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljLmgKQEAgLTk5LDYgKzk5LDcgQEAKICNkZWZpbmUgVFhfVURQVjZfUEtUCTB4MGMKIAogLyogVHggZGVmaW5lcyAqLworI2RlZmluZSBRTENOSUNfTUFYX0ZSQUdTX1BFUl9UWAkxNAogI2RlZmluZSBNQVhfVFNPX0hFQURFUl9ERVNDCTIKICNkZWZpbmUgTUdNVF9DTURfREVTQ19SRVNWCTQKICNkZWZpbmUgVFhfU1RPUF9USFJFU0gJCSgoTUFYX1NLQl9GUkFHUyA+PiAyKSArIE1BWF9UU09fSEVBREVSX0RFU0MgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwppbmRleCBjZDg4YzdlLi5jYjFhMWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX21haW4uYwpAQCAtMjA5OSw2ICsyMDk5LDcgQEAKIAlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmh3ZGVzYywgKmZpcnN0X2Rlc2M7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IGV0aGhkciAqcGhkcjsKKwlpbnQgZGVsdGEgPSAwOwogCWludCBpLCBrOwogCiAJdTMyIHByb2R1Y2VyOwpAQCAtMjExOCw2ICsyMTE5LDE5IEBACiAJfQogCiAJZnJhZ19jb3VudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxOworCS8qIDE0IGZyYWdzIHN1cHBvcnRlZCBmb3Igbm9ybWFsIHBhY2tldCBhbmQKKwkgKiAzMiBmcmFncyBzdXBwb3J0ZWQgZm9yIFRTTyBwYWNrZXQKKwkgKi8KKwlpZiAoIXNrYl9pc19nc28oc2tiKSAmJiBmcmFnX2NvdW50ID4gUUxDTklDX01BWF9GUkFHU19QRVJfVFgpIHsKKworCQlmb3IgKGkgPSAwOyBpIDwgKGZyYWdfY291bnQgLSBRTENOSUNfTUFYX0ZSQUdTX1BFUl9UWCk7IGkrKykKKwkJCWRlbHRhICs9IHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZTsKKworCQlpZiAoIV9fcHNrYl9wdWxsX3RhaWwoc2tiLCBkZWx0YSkpCisJCQlnb3RvIGRyb3BfcGFja2V0OworCisJCWZyYWdfY291bnQgPSAxICsgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwl9CiAKIAkvKiA0IGZyYWdtZW50cyBwZXIgY21kIGRlcyAqLwogCW5vX29mX2Rlc2MgPSAoZnJhZ19jb3VudCArIDMpID4+IDI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yODE2OS5jIGIvZHJpdmVycy9uZXQvcjgxNjkuYwppbmRleCA0OTNiMGRlLi4zOTdjMzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9yODE2OS5jCisrKyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKQEAgLTE3MCw2ICsxNzAsMTYgQEAKIH07CiAjdW5kZWYgX1IKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfZmlybXdhcmVfaW5mbyB7CisJaW50IG1hY192ZXJzaW9uOworCWNvbnN0IGNoYXIgKmZ3X25hbWU7Cit9IHJ0bF9maXJtd2FyZV9pbmZvc1tdID0geworCXsgLm1hY192ZXJzaW9uID0gUlRMX0dJR0FfTUFDX1ZFUl8yNSwgLmZ3X25hbWUgPSBGSVJNV0FSRV84MTY4RF8xIH0sCisJeyAubWFjX3ZlcnNpb24gPSBSVExfR0lHQV9NQUNfVkVSXzI2LCAuZndfbmFtZSA9IEZJUk1XQVJFXzgxNjhEXzIgfSwKKwl7IC5tYWNfdmVyc2lvbiA9IFJUTF9HSUdBX01BQ19WRVJfMjksIC5md19uYW1lID0gRklSTVdBUkVfODEwNUVfMSB9LAorCXsgLm1hY192ZXJzaW9uID0gUlRMX0dJR0FfTUFDX1ZFUl8zMCwgLmZ3X25hbWUgPSBGSVJNV0FSRV84MTA1RV8xIH0KK307CisKIGVudW0gY2ZnX3ZlcnNpb24gewogCVJUTF9DRkdfMCA9IDB4MDAsCiAJUlRMX0NGR18xLApAQCAtNTY1LDYgKzU3NSw3IEBACiAJdTMyIHNhdmVkX3dvbG9wdHM7CiAKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworI2RlZmluZSBSVExfRklSTVdBUkVfVU5LTk9XTglFUlJfUFRSKC1FQUdBSU4pOwogfTsKIAogTU9EVUxFX0FVVEhPUigiUmVhbHRlayBhbmQgdGhlIExpbnV4IHI4MTY5IGNyZXcgPG5ldGRldkB2Z2VyLmtlcm5lbC5vcmc+Iik7CkBAIC0xNzg5LDI1ICsxODAwLDI2IEBACiAKIHN0YXRpYyB2b2lkIHJ0bF9yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCXJlbGVhc2VfZmlybXdhcmUodHAtPmZ3KTsKLQl0cC0+ZncgPSBOVUxMOworCWlmICghSVNfRVJSX09SX05VTEwodHAtPmZ3KSkKKwkJcmVsZWFzZV9maXJtd2FyZSh0cC0+ZncpOworCXRwLT5mdyA9IFJUTF9GSVJNV0FSRV9VTktOT1dOOwogfQogCi1zdGF0aWMgaW50IHJ0bF9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgY29uc3QgY2hhciAqZndfbmFtZSkKK3N0YXRpYyB2b2lkIHJ0bF9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdyA9ICZ0cC0+Znc7Ci0JaW50IHJjID0gISpmdzsKLQotCWlmIChyYykgewotCQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoZncsIGZ3X25hbWUsICZ0cC0+cGNpX2Rldi0+ZGV2KTsKLQkJaWYgKHJjIDwgMCkKLQkJCWdvdG8gb3V0OwotCX0KKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gdHAtPmZ3OwogCiAJLyogVE9ETzogcmVsZWFzZSBmaXJtd2FyZSBvbmNlIHJ0bF9waHlfd3JpdGVfZncgc2lnbmFscyBmYWlsdXJlcy4gKi8KLQlydGxfcGh5X3dyaXRlX2Z3KHRwLCAqZncpOwotb3V0OgotCXJldHVybiByYzsKKwlpZiAoIUlTX0VSUl9PUl9OVUxMKGZ3KSkKKwkJcnRsX3BoeV93cml0ZV9mdyh0cCwgZncpOworfQorCitzdGF0aWMgdm9pZCBydGxfYXBwbHlfZmlybXdhcmVfY29uZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTggcmVnLCB1MTYgdmFsKQoreworCWlmIChydGxfcmVhZHBoeSh0cCwgcmVnKSAhPSB2YWwpCisJCW5ldGlmX3dhcm4odHAsIGh3LCB0cC0+ZGV2LCAiY2hpcHNldCBub3QgcmVhZHkgZm9yIGZpcm13YXJlXG4iKTsKKwllbHNlCisJCXJ0bF9hcHBseV9maXJtd2FyZSh0cCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlzX2h3X3BoeV9jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCkBAIC0yMjQ2LDEwICsyMjU4LDggQEAKIAogCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDA1KTsKIAlydGxfd3JpdGVwaHkodHAsIDB4MDUsIDB4MDAxYik7Ci0JaWYgKChydGxfcmVhZHBoeSh0cCwgMHgwNikgIT0gMHhiZjAwKSB8fAotCSAgICAocnRsX2FwcGx5X2Zpcm13YXJlKHRwLCBGSVJNV0FSRV84MTY4RF8xKSA8IDApKSB7Ci0JCW5ldGlmX3dhcm4odHAsIHByb2JlLCB0cC0+ZGV2LCAidW5hYmxlIHRvIGFwcGx5IGZpcm13YXJlIHBhdGNoXG4iKTsKLQl9CisKKwlydGxfYXBwbHlfZmlybXdhcmVfY29uZCh0cCwgTUlJX0VYUEFOU0lPTiwgMHhiZjAwKTsKIAogCXJ0bF93cml0ZXBoeSh0cCwgMHgxZiwgMHgwMDAwKTsKIH0KQEAgLTIzNTEsMTAgKzIzNjEsOCBAQAogCiAJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDUpOwogCXJ0bF93cml0ZXBoeSh0cCwgMHgwNSwgMHgwMDFiKTsKLQlpZiAoKHJ0bF9yZWFkcGh5KHRwLCAweDA2KSAhPSAweGIzMDApIHx8Ci0JICAgIChydGxfYXBwbHlfZmlybXdhcmUodHAsIEZJUk1XQVJFXzgxNjhEXzIpIDwgMCkpIHsKLQkJbmV0aWZfd2Fybih0cCwgcHJvYmUsIHRwLT5kZXYsICJ1bmFibGUgdG8gYXBwbHkgZmlybXdhcmUgcGF0Y2hcbiIpOwotCX0KKworCXJ0bF9hcHBseV9maXJtd2FyZV9jb25kKHRwLCBNSUlfRVhQQU5TSU9OLCAweGIzMDApOwogCiAJcnRsX3dyaXRlcGh5KHRwLCAweDFmLCAweDAwMDApOwogfQpAQCAtMjQ3NCw4ICsyNDgyLDcgQEAKIAlydGxfd3JpdGVwaHkodHAsIDB4MTgsIDB4MDMxMCk7CiAJbXNsZWVwKDEwMCk7CiAKLQlpZiAocnRsX2FwcGx5X2Zpcm13YXJlKHRwLCBGSVJNV0FSRV84MTA1RV8xKSA8IDApCi0JCW5ldGlmX3dhcm4odHAsIHByb2JlLCB0cC0+ZGV2LCAidW5hYmxlIHRvIGFwcGx5IGZpcm13YXJlIHBhdGNoXG4iKTsKKwlydGxfYXBwbHlfZmlybXdhcmUodHApOwogCiAJcnRsX3dyaXRlcGh5X2JhdGNoKHRwLCBwaHlfcmVnX2luaXQsIEFSUkFZX1NJWkUocGh5X3JlZ19pbml0KSk7CiB9CkBAIC0zMjM3LDYgKzMyNDQsOCBAQAogCXRwLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKIAl0cC0+dGltZXIuZnVuY3Rpb24gPSBydGw4MTY5X3BoeV90aW1lcjsKIAorCXRwLT5mdyA9IFJUTF9GSVJNV0FSRV9VTktOT1dOOworCiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIGVycl9vdXRfbXNpXzQ7CkBAIC0zMjg4LDEwICszMjk3LDEwIEBACiAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnRwLT50YXNrKTsKIAotCXJ0bF9yZWxlYXNlX2Zpcm13YXJlKHRwKTsKLQogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKKwlydGxfcmVsZWFzZV9maXJtd2FyZSh0cCk7CisKIAlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSkKIAkJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJnBkZXYtPmRldik7CiAKQEAgLTMzMDMsNiArMzMxMiwzNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIH0KIAorc3RhdGljIHZvaWQgcnRsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCit7CisJaW50IGk7CisKKwkvKiBSZXR1cm4gZWFybHkgaWYgdGhlIGZpcm13YXJlIGlzIGFscmVhZHkgbG9hZGVkIC8gY2FjaGVkLiAqLworCWlmICghSVNfRVJSKHRwLT5mdykpCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocnRsX2Zpcm13YXJlX2luZm9zKTsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBydGxfZmlybXdhcmVfaW5mbyAqaW5mbyA9IHJ0bF9maXJtd2FyZV9pbmZvcyArIGk7CisKKwkJaWYgKGluZm8tPm1hY192ZXJzaW9uID09IHRwLT5tYWNfdmVyc2lvbikgeworCQkJY29uc3QgY2hhciAqbmFtZSA9IGluZm8tPmZ3X25hbWU7CisJCQlpbnQgcmM7CisKKwkJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmdHAtPmZ3LCBuYW1lLCAmdHAtPnBjaV9kZXYtPmRldik7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJbmV0aWZfd2Fybih0cCwgaWZ1cCwgdHAtPmRldiwgInVuYWJsZSB0byBsb2FkICIKKwkJCQkJImZpcm13YXJlIHBhdGNoICVzICglZClcbiIsIG5hbWUsIHJjKTsKKwkJCQlnb3RvIG91dF9kaXNhYmxlX3JlcXVlc3RfZmlybXdhcmU7CisJCQl9CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworb3V0X2Rpc2FibGVfcmVxdWVzdF9maXJtd2FyZToKKwl0cC0+ZncgPSBOVUxMOworb3V0OgorCXJldHVybjsKK30KKwogc3RhdGljIGludCBydGw4MTY5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMzM0LDExICszMzc0LDEzIEBACiAKIAlzbXBfbWIoKTsKIAorCXJ0bF9yZXF1ZXN0X2Zpcm13YXJlKHRwKTsKKwogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBydGw4MTY5X2ludGVycnVwdCwKIAkJCSAgICAgKHRwLT5mZWF0dXJlcyAmIFJUTF9GRUFUVVJFX01TSSkgPyAwIDogSVJRRl9TSEFSRUQsCiAJCQkgICAgIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBlcnJfcmVsZWFzZV9yaW5nXzI7CisJCWdvdG8gZXJyX3JlbGVhc2VfZndfMjsKIAogCW5hcGlfZW5hYmxlKCZ0cC0+bmFwaSk7CiAKQEAgLTMzNTksNyArMzQwMSw4IEBACiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIAotZXJyX3JlbGVhc2VfcmluZ18yOgorZXJyX3JlbGVhc2VfZndfMjoKKwlydGxfcmVsZWFzZV9maXJtd2FyZSh0cCk7CiAJcnRsODE2OV9yeF9jbGVhcih0cCk7CiBlcnJfZnJlZV9yeF8xOgogCWRtYV9mcmVlX2NvaGVyZW50KCZwZGV2LT5kZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLT5SeERlc2NBcnJheSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguYwppbmRleCBkODkwNjc5Li5hM2MyYWFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCkBAIC0zMjgsNyArMzI4LDggQEAKICAqIHByb2Nlc3NpbmcgdG8gZmluaXNoLCB0aGVuIGRpcmVjdGx5IHBvbGwgKGFuZCBhY2sgKSB0aGUgZXZlbnRxLgogICogRmluYWxseSByZWVuYWJsZSBOQVBJIGFuZCBpbnRlcnJ1cHRzLgogICoKLSAqIFNpbmNlIHdlIGFyZSB0b3VjaGluZyBpbnRlcnJ1cHRzIHRoZSBjYWxsZXIgc2hvdWxkIGhvbGQgdGhlIHN1c3BlbmQgbG9jaworICogVGhpcyBpcyBmb3IgdXNlIG9ubHkgZHVyaW5nIGEgbG9vcGJhY2sgc2VsZi10ZXN0LiAgSXQgbXVzdCBub3QKKyAqIGRlbGl2ZXIgYW55IHBhY2tldHMgdXAgdGhlIHN0YWNrIGFzIHRoaXMgY2FuIHJlc3VsdCBpbiBkZWFkbG9jay4KICAqLwogdm9pZCBlZnhfcHJvY2Vzc19jaGFubmVsX25vdyhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCiB7CkBAIC0zMzYsNiArMzM3LDcgQEAKIAogCUJVR19PTihjaGFubmVsLT5jaGFubmVsID49IGVmeC0+bl9jaGFubmVscyk7CiAJQlVHX09OKCFjaGFubmVsLT5lbmFibGVkKTsKKwlCVUdfT04oIWVmeC0+bG9vcGJhY2tfc2VsZnRlc3QpOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCB3YWl0IGZvciBJU1JzIHRvIGNvbXBsZXRlICovCiAJZWZ4X25pY19kaXNhYmxlX2ludGVycnVwdHMoZWZ4KTsKQEAgLTE0MzYsNyArMTQzOCw3IEBACiAJICogcmVzdGFydCB0aGUgdHJhbnNtaXQgaW50ZXJmYWNlIGVhcmx5IHNvIHRoZSB3YXRjaGRvZyB0aW1lciBzdG9wcyAqLwogCWVmeF9zdGFydF9wb3J0KGVmeCk7CiAKLQlpZiAoZWZ4X2Rldl9yZWdpc3RlcmVkKGVmeCkpCisJaWYgKGVmeF9kZXZfcmVnaXN0ZXJlZChlZngpICYmICFlZngtPnBvcnRfaW5oaWJpdGVkKQogCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoZWZ4LT5uZXRfZGV2KTsKIAogCWVmeF9mb3JfZWFjaF9jaGFubmVsKGNoYW5uZWwsIGVmeCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9pby5oIGIvZHJpdmVycy9uZXQvc2ZjL2lvLmgKaW5kZXggZDlkOGMyZS4uY2M5Nzg4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2lvLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2lvLmgKQEAgLTE1Miw2ICsxNTIsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVmeC0+Yml1X2xvY2ssIGZsYWdzKTsKIAl2YWx1ZS0+dTMyWzBdID0gX2VmeF9yZWFkZChlZngsIHJlZyArIDApOworCXJtYigpOwogCXZhbHVlLT51MzJbMV0gPSBfZWZ4X3JlYWRkKGVmeCwgcmVnICsgNCk7CiAJdmFsdWUtPnUzMlsyXSA9IF9lZnhfcmVhZGQoZWZ4LCByZWcgKyA4KTsKIAl2YWx1ZS0+dTMyWzNdID0gX2VmeF9yZWFkZChlZngsIHJlZyArIDEyKTsKQEAgLTE3NCw2ICsxNzUsNyBAQAogCXZhbHVlLT51NjRbMF0gPSAoX19mb3JjZSBfX2xlNjQpX19yYXdfcmVhZHEobWVtYmFzZSArIGFkZHIpOwogI2Vsc2UKIAl2YWx1ZS0+dTMyWzBdID0gKF9fZm9yY2UgX19sZTMyKV9fcmF3X3JlYWRsKG1lbWJhc2UgKyBhZGRyKTsKKwlybWIoKTsKIAl2YWx1ZS0+dTMyWzFdID0gKF9fZm9yY2UgX19sZTMyKV9fcmF3X3JlYWRsKG1lbWJhc2UgKyBhZGRyICsgNCk7CiAjZW5kaWYKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlZngtPmJpdV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWNkaS5jIGIvZHJpdmVycy9uZXQvc2ZjL21jZGkuYwppbmRleCBkOTg0NzkwLi4zZGQ0NWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKQEAgLTUwLDYgKzUwLDIwIEBACiAJcmV0dXJuICZuaWNfZGF0YS0+bWNkaTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitlZnhfbWNkaV9yZWFkZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlZnhfZHdvcmRfdCAqdmFsdWUsIHVuc2lnbmVkIHJlZykKK3sKKwlzdHJ1Y3Qgc2llbmFfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKKwl2YWx1ZS0+dTMyWzBdID0gKF9fZm9yY2UgX19sZTMyKV9fcmF3X3JlYWRsKG5pY19kYXRhLT5tY2RpX3NtZW0gKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2VmeF9tY2RpX3dyaXRlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBjb25zdCBlZnhfZHdvcmRfdCAqdmFsdWUsIHVuc2lnbmVkIHJlZykKK3sKKwlzdHJ1Y3Qgc2llbmFfbmljX2RhdGEgKm5pY19kYXRhID0gZWZ4LT5uaWNfZGF0YTsKKwlfX3Jhd193cml0ZWwoKF9fZm9yY2UgdTMyKXZhbHVlLT51MzJbMF0sIG5pY19kYXRhLT5tY2RpX3NtZW0gKyByZWcpOworfQorCiB2b2lkIGVmeF9tY2RpX2luaXQoc3RydWN0IGVmeF9uaWMgKmVmeCkKIHsKIAlzdHJ1Y3QgZWZ4X21jZGlfaWZhY2UgKm1jZGk7CkBAIC03MCw4ICs4NCw4IEBACiAJCQkgICAgY29uc3QgdTggKmluYnVmLCBzaXplX3QgaW5sZW4pCiB7CiAJc3RydWN0IGVmeF9tY2RpX2lmYWNlICptY2RpID0gZWZ4X21jZGkoZWZ4KTsKLQl1bnNpZ25lZCBwZHUgPSBGUl9DWl9NQ19UUkVHX1NNRU0gKyBNQ0RJX1BEVShlZngpOwotCXVuc2lnbmVkIGRvb3JiZWxsID0gRlJfQ1pfTUNfVFJFR19TTUVNICsgTUNESV9ET09SQkVMTChlZngpOworCXVuc2lnbmVkIHBkdSA9IE1DRElfUERVKGVmeCk7CisJdW5zaWduZWQgZG9vcmJlbGwgPSBNQ0RJX0RPT1JCRUxMKGVmeCk7CiAJdW5zaWduZWQgaW50IGk7CiAJZWZ4X2R3b3JkX3QgaGRyOwogCXUzMiB4ZmxhZ3MsIHNlcW5vOwpAQCAtOTIsMzAgKzEwNiwyOCBAQAogCQkJICAgICBNQ0RJX0hFQURFUl9TRVEsIHNlcW5vLAogCQkJICAgICBNQ0RJX0hFQURFUl9YRkxBR1MsIHhmbGFncyk7CiAKLQllZnhfd3JpdGVkKGVmeCwgJmhkciwgcGR1KTsKKwllZnhfbWNkaV93cml0ZWQoZWZ4LCAmaGRyLCBwZHUpOwogCi0JZm9yIChpID0gMDsgaSA8IGlubGVuOyBpICs9IDQpIHsKLQkJX2VmeF93cml0ZWQoZWZ4LCAqKChfX2xlMzIgKikoaW5idWYgKyBpKSksIHBkdSArIDQgKyBpKTsKLQkJLyogdXNlIHdtYigpIHdpdGhpbiBsb29wIHRvIGluaGliaXQgd3JpdGUgY29tYmluaW5nICovCi0JCXdtYigpOwotCX0KKwlmb3IgKGkgPSAwOyBpIDwgaW5sZW47IGkgKz0gNCkKKwkJZWZ4X21jZGlfd3JpdGVkKGVmeCwgKGNvbnN0IGVmeF9kd29yZF90ICopKGluYnVmICsgaSksCisJCQkJcGR1ICsgNCArIGkpOwogCiAJLyogcmluZyB0aGUgZG9vcmJlbGwgd2l0aCBhIGRpc3RpbmN0aXZlIHZhbHVlICovCi0JX2VmeF93cml0ZWQoZWZ4LCAoX19mb3JjZSBfX2xlMzIpIDB4NDU3ODlhYmMsIGRvb3JiZWxsKTsKLQl3bWIoKTsKKwlFRlhfUE9QVUxBVEVfRFdPUkRfMShoZHIsIEVGWF9EV09SRF8wLCAweDQ1Nzg5YWJjKTsKKwllZnhfbWNkaV93cml0ZWQoZWZ4LCAmaGRyLCBkb29yYmVsbCk7CiB9CiAKIHN0YXRpYyB2b2lkIGVmeF9tY2RpX2NvcHlvdXQoc3RydWN0IGVmeF9uaWMgKmVmeCwgdTggKm91dGJ1Ziwgc2l6ZV90IG91dGxlbikKIHsKIAlzdHJ1Y3QgZWZ4X21jZGlfaWZhY2UgKm1jZGkgPSBlZnhfbWNkaShlZngpOwotCXVuc2lnbmVkIGludCBwZHUgPSBGUl9DWl9NQ19UUkVHX1NNRU0gKyBNQ0RJX1BEVShlZngpOworCXVuc2lnbmVkIGludCBwZHUgPSBNQ0RJX1BEVShlZngpOwogCWludCBpOwogCiAJQlVHX09OKGF0b21pY19yZWFkKCZtY2RpLT5zdGF0ZSkgPT0gTUNESV9TVEFURV9RVUlFU0NFTlQpOwogCUJVR19PTihvdXRsZW4gJiAzIHx8IG91dGxlbiA+PSAweDEwMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgb3V0bGVuOyBpICs9IDQpCi0JCSooKF9fbGUzMiAqKShvdXRidWYgKyBpKSkgPSBfZWZ4X3JlYWRkKGVmeCwgcGR1ICsgNCArIGkpOworCQllZnhfbWNkaV9yZWFkZChlZngsIChlZnhfZHdvcmRfdCAqKShvdXRidWYgKyBpKSwgcGR1ICsgNCArIGkpOwogfQogCiBzdGF0aWMgaW50IGVmeF9tY2RpX3BvbGwoc3RydWN0IGVmeF9uaWMgKmVmeCkKQEAgLTEyMyw3ICsxMzUsNyBAQAogCXN0cnVjdCBlZnhfbWNkaV9pZmFjZSAqbWNkaSA9IGVmeF9tY2RpKGVmeCk7CiAJdW5zaWduZWQgaW50IHRpbWUsIGZpbmlzaDsKIAl1bnNpZ25lZCBpbnQgcmVzcHNlcSwgcmVzcGNtZCwgZXJyb3I7Ci0JdW5zaWduZWQgaW50IHBkdSA9IEZSX0NaX01DX1RSRUdfU01FTSArIE1DRElfUERVKGVmeCk7CisJdW5zaWduZWQgaW50IHBkdSA9IE1DRElfUERVKGVmeCk7CiAJdW5zaWduZWQgaW50IHJjLCBzcGluczsKIAllZnhfZHdvcmRfdCByZWc7CiAKQEAgLTE0OSw4ICsxNjEsNyBAQAogCiAJCXRpbWUgPSBnZXRfc2Vjb25kcygpOwogCi0JCXJtYigpOwotCQllZnhfcmVhZGQoZWZ4LCAmcmVnLCBwZHUpOworCQllZnhfbWNkaV9yZWFkZChlZngsICZyZWcsIHBkdSk7CiAKIAkJLyogQWxsIDEncyBpbmRpY2F0ZXMgdGhhdCBzaGFyZWQgbWVtb3J5IGlzIGluIHJlc2V0IChhbmQgaXMKIAkJICogbm90IGEgdmFsaWQgaGVhZGVyKS4gV2FpdCBmb3IgaXQgdG8gY29tZSBvdXQgcmVzZXQgYmVmb3JlCkBAIC0xNzcsNyArMTg4LDcgQEAKIAkJCSAgcmVzcHNlcSwgbWNkaS0+c2Vxbm8pOwogCQlyYyA9IEVJTzsKIAl9IGVsc2UgaWYgKGVycm9yKSB7Ci0JCWVmeF9yZWFkZChlZngsICZyZWcsIHBkdSArIDQpOworCQllZnhfbWNkaV9yZWFkZChlZngsICZyZWcsIHBkdSArIDQpOwogCQlzd2l0Y2ggKEVGWF9EV09SRF9GSUVMRChyZWcsIEVGWF9EV09SRF8wKSkgewogI2RlZmluZSBUUkFOU0xBVEVfRVJST1IobmFtZSkJCQkJCVwKIAkJY2FzZSBNQ19DTURfRVJSXyAjIyBuYW1lOgkJCVwKQEAgLTIxMSwyMSArMjIyLDIxIEBACiAvKiBUZXN0IGFuZCBjbGVhciBNQy1yZWJvb3RlZCBmbGFnIGZvciB0aGlzIHBvcnQvZnVuY3Rpb24gKi8KIGludCBlZnhfbWNkaV9wb2xsX3JlYm9vdChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogewotCXVuc2lnbmVkIGludCBhZGRyID0gRlJfQ1pfTUNfVFJFR19TTUVNICsgTUNESV9SRUJPT1RfRkxBRyhlZngpOworCXVuc2lnbmVkIGludCBhZGRyID0gTUNESV9SRUJPT1RfRkxBRyhlZngpOwogCWVmeF9kd29yZF90IHJlZzsKIAl1aW50MzJfdCB2YWx1ZTsKIAogCWlmIChlZnhfbmljX3JldihlZngpIDwgRUZYX1JFVl9TSUVOQV9BMCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JZWZ4X3JlYWRkKGVmeCwgJnJlZywgYWRkcik7CisJZWZ4X21jZGlfcmVhZGQoZWZ4LCAmcmVnLCBhZGRyKTsKIAl2YWx1ZSA9IEVGWF9EV09SRF9GSUVMRChyZWcsIEVGWF9EV09SRF8wKTsKIAogCWlmICh2YWx1ZSA9PSAwKQogCQlyZXR1cm4gMDsKIAogCUVGWF9aRVJPX0RXT1JEKHJlZyk7Ci0JZWZ4X3dyaXRlZChlZngsICZyZWcsIGFkZHIpOworCWVmeF9tY2RpX3dyaXRlZChlZngsICZyZWcsIGFkZHIpOwogCiAJaWYgKHZhbHVlID09IE1DX1NUQVRVU19EV09SRF9BU1NFUlQpCiAJCXJldHVybiAtRUlOVFI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaAppbmRleCA5ZmZhOWE2Li4xOTFhMzExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKQEAgLTMzMCw3ICszMzAsNiBAQAogICogQGV2ZW50cV9tYXNrOiBFdmVudCBxdWV1ZSBwb2ludGVyIG1hc2sKICAqIEBldmVudHFfcmVhZF9wdHI6IEV2ZW50IHF1ZXVlIHJlYWQgcG9pbnRlcgogICogQGxhc3RfZXZlbnRxX3JlYWRfcHRyOiBMYXN0IGV2ZW50IHF1ZXVlIHJlYWQgcG9pbnRlciB2YWx1ZS4KLSAqIEBtYWdpY19jb3VudDogRXZlbnQgcXVldWUgdGVzdCBldmVudCBjb3VudAogICogQGlycV9jb3VudDogTnVtYmVyIG9mIElSUXMgc2luY2UgbGFzdCBhZGFwdGl2ZSBtb2RlcmF0aW9uIGRlY2lzaW9uCiAgKiBAaXJxX21vZF9zY29yZTogSVJRIG1vZGVyYXRpb24gc2NvcmUKICAqIEByeF9hbGxvY19sZXZlbDogV2F0ZXJtYXJrIGJhc2VkIGhldXJpc3RpYyBjb3VudGVyIGZvciBwdXNoaW5nIGRlc2NyaXB0b3JzCkBAIC0zNjAsNyArMzU5LDYgQEAKIAl1bnNpZ25lZCBpbnQgZXZlbnRxX21hc2s7CiAJdW5zaWduZWQgaW50IGV2ZW50cV9yZWFkX3B0cjsKIAl1bnNpZ25lZCBpbnQgbGFzdF9ldmVudHFfcmVhZF9wdHI7Ci0JdW5zaWduZWQgaW50IG1hZ2ljX2NvdW50OwogCiAJdW5zaWduZWQgaW50IGlycV9jb3VudDsKIAl1bnNpZ25lZCBpbnQgaXJxX21vZF9zY29yZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuYyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuYwppbmRleCBlODM5NjYxLi45YjI5YThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5jCkBAIC04NCw3ICs4NCw4IEBACiBzdGF0aWMgaW5saW5lIGVmeF9xd29yZF90ICplZnhfZXZlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsLAogCQkJCSAgICAgdW5zaWduZWQgaW50IGluZGV4KQogewotCXJldHVybiAoKGVmeF9xd29yZF90ICopIChjaGFubmVsLT5ldmVudHEuYWRkcikpICsgaW5kZXg7CisJcmV0dXJuICgoZWZ4X3F3b3JkX3QgKikgKGNoYW5uZWwtPmV2ZW50cS5hZGRyKSkgKworCQkoaW5kZXggJiBjaGFubmVsLT5ldmVudHFfbWFzayk7CiB9CiAKIC8qIFNlZSBpZiBhbiBldmVudCBpcyBwcmVzZW50CkBAIC02NzMsNyArNjc0LDggQEAKIAllZnhfZHdvcmRfdCByZWc7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IGNoYW5uZWwtPmVmeDsKIAotCUVGWF9QT1BVTEFURV9EV09SRF8xKHJlZywgRlJGX0FaX0VWUV9SUFRSLCBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHIpOworCUVGWF9QT1BVTEFURV9EV09SRF8xKHJlZywgRlJGX0FaX0VWUV9SUFRSLAorCQkJICAgICBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHIgJiBjaGFubmVsLT5ldmVudHFfbWFzayk7CiAJZWZ4X3dyaXRlZF90YWJsZShlZngsICZyZWcsIGVmeC0+dHlwZS0+ZXZxX3JwdHJfdGJsX2Jhc2UsCiAJCQkgY2hhbm5lbC0+Y2hhbm5lbCk7CiB9CkBAIC05MDgsNyArOTEwLDcgQEAKIAogCWNvZGUgPSBFRlhfUVdPUkRfRklFTEQoKmV2ZW50LCBGU0ZfQVpfRFJWX0dFTl9FVl9NQUdJQyk7CiAJaWYgKGNvZGUgPT0gRUZYX0NIQU5ORUxfTUFHSUNfVEVTVChjaGFubmVsKSkKLQkJKytjaGFubmVsLT5tYWdpY19jb3VudDsKKwkJOyAvKiBpZ25vcmUgKi8KIAllbHNlIGlmIChjb2RlID09IEVGWF9DSEFOTkVMX01BR0lDX0ZJTEwoY2hhbm5lbCkpCiAJCS8qIFRoZSBxdWV1ZSBtdXN0IGJlIGVtcHR5LCBzbyB3ZSB3b24ndCByZWNlaXZlIGFueSByeAogCQkgKiBldmVudHMsIHNvIGVmeF9wcm9jZXNzX2NoYW5uZWwoKSB3b24ndCByZWZpbGwgdGhlCkBAIC0xMDE1LDggKzEwMTcsNyBAQAogCQkvKiBDbGVhciB0aGlzIGV2ZW50IGJ5IG1hcmtpbmcgaXQgYWxsIG9uZXMgKi8KIAkJRUZYX1NFVF9RV09SRCgqcF9ldmVudCk7CiAKLQkJLyogSW5jcmVtZW50IHJlYWQgcG9pbnRlciAqLwotCQlyZWFkX3B0ciA9IChyZWFkX3B0ciArIDEpICYgY2hhbm5lbC0+ZXZlbnRxX21hc2s7CisJCSsrcmVhZF9wdHI7CiAKIAkJZXZfY29kZSA9IEVGWF9RV09SRF9GSUVMRChldmVudCwgRlNGX0FaX0VWX0NPREUpOwogCkBAIC0xMDYwLDYgKzEwNjEsMTMgQEAKIAlyZXR1cm4gc3BlbnQ7CiB9CiAKKy8qIENoZWNrIHdoZXRoZXIgYW4gZXZlbnQgaXMgcHJlc2VudCBpbiB0aGUgZXZlbnRxIGF0IHRoZSBjdXJyZW50CisgKiByZWFkIHBvaW50ZXIuICBPbmx5IHVzZWZ1bCBmb3Igc2VsZi10ZXN0LgorICovCitib29sIGVmeF9uaWNfZXZlbnRfcHJlc2VudChzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCit7CisJcmV0dXJuIGVmeF9ldmVudF9wcmVzZW50KGVmeF9ldmVudChjaGFubmVsLCBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHIpKTsKK30KIAogLyogQWxsb2NhdGUgYnVmZmVyIHRhYmxlIGVudHJpZXMgZm9yIGV2ZW50IHF1ZXVlICovCiBpbnQgZWZ4X25pY19wcm9iZV9ldmVudHEoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKQpAQCAtMTE2NSw3ICsxMTczLDcgQEAKIAlzdHJ1Y3QgZWZ4X3R4X3F1ZXVlICp0eF9xdWV1ZTsKIAlzdHJ1Y3QgZWZ4X3J4X3F1ZXVlICpyeF9xdWV1ZTsKIAl1bnNpZ25lZCBpbnQgcmVhZF9wdHIgPSBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHI7Ci0JdW5zaWduZWQgaW50IGVuZF9wdHIgPSAocmVhZF9wdHIgLSAxKSAmIGNoYW5uZWwtPmV2ZW50cV9tYXNrOworCXVuc2lnbmVkIGludCBlbmRfcHRyID0gcmVhZF9wdHIgKyBjaGFubmVsLT5ldmVudHFfbWFzayAtIDE7CiAKIAlkbyB7CiAJCWVmeF9xd29yZF90ICpldmVudCA9IGVmeF9ldmVudChjaGFubmVsLCByZWFkX3B0cik7CkBAIC0xMjA1LDcgKzEyMTMsNyBAQAogCQkgKiBpdCdzIG9rIHRvIHRocm93IGF3YXkgZXZlcnkgbm9uLWZsdXNoIGV2ZW50ICovCiAJCUVGWF9TRVRfUVdPUkQoKmV2ZW50KTsKIAotCQlyZWFkX3B0ciA9IChyZWFkX3B0ciArIDEpICYgY2hhbm5lbC0+ZXZlbnRxX21hc2s7CisJCSsrcmVhZF9wdHI7CiAJfSB3aGlsZSAocmVhZF9wdHIgIT0gZW5kX3B0cik7CiAKIAljaGFubmVsLT5ldmVudHFfcmVhZF9wdHIgPSByZWFkX3B0cjsKQEAgLTE5MjksNiArMTkzNywxMyBAQAogCiAJCXNpemUgPSBtaW5fdChzaXplX3QsIHRhYmxlLT5zdGVwLCAxNik7CiAKKwkJaWYgKHRhYmxlLT5vZmZzZXQgPj0gZWZ4LT50eXBlLT5tZW1fbWFwX3NpemUpIHsKKwkJCS8qIE5vIGxvbmdlciBtYXBwZWQ7IHJldHVybiBkdW1teSBkYXRhICovCisJCQltZW1jcHkoYnVmLCAiXHhkZVx4YzBceGFkXHhkZSIsIDQpOworCQkJYnVmICs9IHRhYmxlLT5yb3dzICogc2l6ZTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJZm9yIChpID0gMDsgaSA8IHRhYmxlLT5yb3dzOyBpKyspIHsKIAkJCXN3aXRjaCAodGFibGUtPnN0ZXApIHsKIAkJCWNhc2UgNDogLyogMzItYml0IHJlZ2lzdGVyIG9yIFNSQU0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uaWMuaCBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuaAppbmRleCBkOWRlMWI2Li5kOTE3MDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbmljLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25pYy5oCkBAIC0xNDMsMTAgKzE0MywxMiBAQAogLyoqCiAgKiBzdHJ1Y3Qgc2llbmFfbmljX2RhdGEgLSBTaWVuYSBOSUMgc3RhdGUKICAqIEBtY2RpOiBNYW5hZ2VtZW50LUNvbnRyb2xsZXItdG8tRHJpdmVyIEludGVyZmFjZQorICogQG1jZGlfc21lbTogTUNESSBzaGFyZWQgbWVtb3J5IG1hcHBpbmcuIFRoZSBtYXBwaW5nIGlzIGFsd2F5cyB1bmNhY2hlYWJsZS4KICAqIEB3b2xfZmlsdGVyX2lkOiBXYWtlLW9uLUxBTiBwYWNrZXQgZmlsdGVyIGlkCiAgKi8KIHN0cnVjdCBzaWVuYV9uaWNfZGF0YSB7CiAJc3RydWN0IGVmeF9tY2RpX2lmYWNlIG1jZGk7CisJdm9pZCBfX2lvbWVtICptY2RpX3NtZW07CiAJaW50IHdvbF9maWx0ZXJfaWQ7CiB9OwogCkBAIC0xODQsNiArMTg2LDcgQEAKIGV4dGVybiB2b2lkIGVmeF9uaWNfcmVtb3ZlX2V2ZW50cShzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpOwogZXh0ZXJuIGludCBlZnhfbmljX3Byb2Nlc3NfZXZlbnRxKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCwgaW50IHJ4X3F1b3RhKTsKIGV4dGVybiB2b2lkIGVmeF9uaWNfZXZlbnRxX3JlYWRfYWNrKHN0cnVjdCBlZnhfY2hhbm5lbCAqY2hhbm5lbCk7CitleHRlcm4gYm9vbCBlZnhfbmljX2V2ZW50X3ByZXNlbnQoc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsKTsKIAogLyogTUFDL1BIWSAqLwogZXh0ZXJuIHZvaWQgZmFsY29uX2RyYWluX3R4X2ZpZm8oc3RydWN0IGVmeF9uaWMgKmVmeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYyBiL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jCmluZGV4IGEwZjQ5YjMuLjUwYWQzYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5jCkBAIC0xMzEsOCArMTMxLDYgQEAKIHN0YXRpYyBpbnQgZWZ4X3Rlc3RfaW50ZXJydXB0cyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4LAogCQkJICAgICAgIHN0cnVjdCBlZnhfc2VsZl90ZXN0cyAqdGVzdHMpCiB7Ci0Jc3RydWN0IGVmeF9jaGFubmVsICpjaGFubmVsOwotCiAJbmV0aWZfZGJnKGVmeCwgZHJ2LCBlZngtPm5ldF9kZXYsICJ0ZXN0aW5nIGludGVycnVwdHNcbiIpOwogCXRlc3RzLT5pbnRlcnJ1cHQgPSAtMTsKIApAQCAtMTQwLDE1ICsxMzgsNiBAQAogCWVmeC0+bGFzdF9pcnFfY3B1ID0gLTE7CiAJc21wX3dtYigpOwogCi0JLyogQUNLIGVhY2ggaW50ZXJydXB0aW5nIGV2ZW50IHF1ZXVlLiBSZWNlaXZpbmcgYW4gaW50ZXJydXB0IGR1ZSB0bwotCSAqIHRyYWZmaWMgYmVmb3JlIGEgdGVzdCBldmVudCBpcyByYWlzZWQgaXMgY29uc2lkZXJlZCBhIHBhc3MgKi8KLQllZnhfZm9yX2VhY2hfY2hhbm5lbChjaGFubmVsLCBlZngpIHsKLQkJaWYgKGNoYW5uZWwtPndvcmtfcGVuZGluZykKLQkJCWVmeF9wcm9jZXNzX2NoYW5uZWxfbm93KGNoYW5uZWwpOwotCQlpZiAoZWZ4LT5sYXN0X2lycV9jcHUgPj0gMCkKLQkJCWdvdG8gc3VjY2VzczsKLQl9Ci0KIAllZnhfbmljX2dlbmVyYXRlX2ludGVycnVwdChlZngpOwogCiAJLyogV2FpdCBmb3IgYXJyaXZhbCBvZiB0ZXN0IGludGVycnVwdC4gKi8KQEAgLTE3MywxMyArMTYyLDEzIEBACiAJCQkgICAgICAgc3RydWN0IGVmeF9zZWxmX3Rlc3RzICp0ZXN0cykKIHsKIAlzdHJ1Y3QgZWZ4X25pYyAqZWZ4ID0gY2hhbm5lbC0+ZWZ4OwotCXVuc2lnbmVkIGludCBtYWdpY19jb3VudCwgY291bnQ7CisJdW5zaWduZWQgaW50IHJlYWRfcHRyLCBjb3VudDsKIAogCXRlc3RzLT5ldmVudHFfZG1hW2NoYW5uZWwtPmNoYW5uZWxdID0gLTE7CiAJdGVzdHMtPmV2ZW50cV9pbnRbY2hhbm5lbC0+Y2hhbm5lbF0gPSAtMTsKIAl0ZXN0cy0+ZXZlbnRxX3BvbGxbY2hhbm5lbC0+Y2hhbm5lbF0gPSAtMTsKIAotCW1hZ2ljX2NvdW50ID0gY2hhbm5lbC0+bWFnaWNfY291bnQ7CisJcmVhZF9wdHIgPSBjaGFubmVsLT5ldmVudHFfcmVhZF9wdHI7CiAJY2hhbm5lbC0+ZWZ4LT5sYXN0X2lycV9jcHUgPSAtMTsKIAlzbXBfd21iKCk7CiAKQEAgLTE5MCwxMCArMTc5LDcgQEAKIAlkbyB7CiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKEhaIC8gMTAwKTsKIAotCQlpZiAoY2hhbm5lbC0+d29ya19wZW5kaW5nKQotCQkJZWZ4X3Byb2Nlc3NfY2hhbm5lbF9ub3coY2hhbm5lbCk7Ci0KLQkJaWYgKGNoYW5uZWwtPm1hZ2ljX2NvdW50ICE9IG1hZ2ljX2NvdW50KQorCQlpZiAoQUNDRVNTX09OQ0UoY2hhbm5lbC0+ZXZlbnRxX3JlYWRfcHRyKSAhPSByZWFkX3B0cikKIAkJCWdvdG8gZXZlbnRxX29rOwogCX0gd2hpbGUgKCsrY291bnQgPCAyKTsKIApAQCAtMjExLDggKzE5Nyw3IEBACiAJfQogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIGV2ZW50IHdhcyByZWNlaXZlZCBldmVuIGlmIGludGVycnVwdCB3YXNuJ3QgKi8KLQllZnhfcHJvY2Vzc19jaGFubmVsX25vdyhjaGFubmVsKTsKLQlpZiAoY2hhbm5lbC0+bWFnaWNfY291bnQgIT0gbWFnaWNfY291bnQpIHsKKwlpZiAoZWZ4X25pY19ldmVudF9wcmVzZW50KGNoYW5uZWwpKSB7CiAJCW5ldGlmX2VycihlZngsIGRydiwgZWZ4LT5uZXRfZGV2LAogCQkJICAiY2hhbm5lbCAlZCBldmVudCB3YXMgZ2VuZXJhdGVkLCBidXQgIgogCQkJICAiZmFpbGVkIHRvIHRyaWdnZXIgYW4gaW50ZXJydXB0XG4iLCBjaGFubmVsLT5jaGFubmVsKTsKQEAgLTc3MCw2ICs3NTUsOCBAQAogCV9fZWZ4X3JlY29uZmlndXJlX3BvcnQoZWZ4KTsKIAltdXRleF91bmxvY2soJmVmeC0+bWFjX2xvY2spOwogCisJbmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKGVmeC0+bmV0X2Rldik7CisKIAlyZXR1cm4gcmNfdGVzdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NpZW5hLmMgYi9kcml2ZXJzL25ldC9zZmMvc2llbmEuYwppbmRleCBlNGRkODk4Li44Mzc4NjliIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2llbmEuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2llbmEuYwpAQCAtMjIwLDEyICsyMjAsMjYgQEAKIAllZnhfcmVhZG8oZWZ4LCAmcmVnLCBGUl9BWl9DU19ERUJVRyk7CiAJZWZ4LT5uZXRfZGV2LT5kZXZfaWQgPSBFRlhfT1dPUkRfRklFTEQocmVnLCBGUkZfQ1pfQ1NfUE9SVF9OVU0pIC0gMTsKIAorCS8qIEluaXRpYWxpc2UgTUNESSAqLworCW5pY19kYXRhLT5tY2RpX3NtZW0gPSBpb3JlbWFwX25vY2FjaGUoZWZ4LT5tZW1iYXNlX3BoeXMgKworCQkJCQkgICAgICBGUl9DWl9NQ19UUkVHX1NNRU0sCisJCQkJCSAgICAgIEZSX0NaX01DX1RSRUdfU01FTV9TVEVQICoKKwkJCQkJICAgICAgRlJfQ1pfTUNfVFJFR19TTUVNX1JPV1MpOworCWlmICghbmljX2RhdGEtPm1jZGlfc21lbSkgeworCQluZXRpZl9lcnIoZWZ4LCBwcm9iZSwgZWZ4LT5uZXRfZGV2LAorCQkJICAiY291bGQgbm90IG1hcCBNQ0RJIGF0ICVsbHgrJXhcbiIsCisJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpZWZ4LT5tZW1iYXNlX3BoeXMgKworCQkJICBGUl9DWl9NQ19UUkVHX1NNRU0sCisJCQkgIEZSX0NaX01DX1RSRUdfU01FTV9TVEVQICogRlJfQ1pfTUNfVFJFR19TTUVNX1JPV1MpOworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDE7CisJfQogCWVmeF9tY2RpX2luaXQoZWZ4KTsKIAogCS8qIFJlY292ZXIgZnJvbSBhIGZhaWxlZCBhc3NlcnRpb24gYmVmb3JlIHByb2JpbmcgKi8KIAlyYyA9IGVmeF9tY2RpX2hhbmRsZV9hc3NlcnRpb24oZWZ4KTsKIAlpZiAocmMpCi0JCWdvdG8gZmFpbDE7CisJCWdvdG8gZmFpbDI7CiAKIAkvKiBMZXQgdGhlIEJNQyBrbm93IHRoYXQgdGhlIGRyaXZlciBpcyBub3cgaW4gY2hhcmdlIG9mIGxpbmsgYW5kCiAJICogZmlsdGVyIHNldHRpbmdzLiBXZSBtdXN0IGRvIHRoaXMgYmVmb3JlIHdlIHJlc2V0IHRoZSBOSUMgKi8KQEAgLTI4MCw2ICsyOTQsNyBAQAogZmFpbDM6CiAJZWZ4X21jZGlfZHJ2X2F0dGFjaChlZngsIGZhbHNlLCBOVUxMKTsKIGZhaWwyOgorCWlvdW5tYXAobmljX2RhdGEtPm1jZGlfc21lbSk7CiBmYWlsMToKIAlrZnJlZShlZngtPm5pY19kYXRhKTsKIAlyZXR1cm4gcmM7CkBAIC0zNTksNiArMzc0LDggQEAKIAogc3RhdGljIHZvaWQgc2llbmFfcmVtb3ZlX25pYyhzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQogeworCXN0cnVjdCBzaWVuYV9uaWNfZGF0YSAqbmljX2RhdGEgPSBlZngtPm5pY19kYXRhOworCiAJZWZ4X25pY19mcmVlX2J1ZmZlcihlZngsICZlZngtPmlycV9zdGF0dXMpOwogCiAJc2llbmFfcmVzZXRfaHcoZWZ4LCBSRVNFVF9UWVBFX0FMTCk7CkBAIC0zNjgsNyArMzg1LDggQEAKIAkJZWZ4X21jZGlfZHJ2X2F0dGFjaChlZngsIGZhbHNlLCBOVUxMKTsKIAogCS8qIFRlYXIgZG93biB0aGUgcHJpdmF0ZSBuaWMgc3RhdGUgKi8KLQlrZnJlZShlZngtPm5pY19kYXRhKTsKKwlpb3VubWFwKG5pY19kYXRhLT5tY2RpX3NtZW0pOworCWtmcmVlKG5pY19kYXRhKTsKIAllZngtPm5pY19kYXRhID0gTlVMTDsKIH0KIApAQCAtNjA2LDggKzYyNCw3IEBACiAJLmRlZmF1bHRfbWFjX29wcyA9ICZlZnhfbWNkaV9tYWNfb3BlcmF0aW9ucywKIAogCS5yZXZpc2lvbiA9IEVGWF9SRVZfU0lFTkFfQTAsCi0JLm1lbV9tYXBfc2l6ZSA9IChGUl9DWl9NQ19UUkVHX1NNRU0gKwotCQkJIEZSX0NaX01DX1RSRUdfU01FTV9TVEVQICogRlJfQ1pfTUNfVFJFR19TTUVNX1JPV1MpLAorCS5tZW1fbWFwX3NpemUgPSBGUl9DWl9NQ19UUkVHX1NNRU0sIC8qIE1DX1RSRUdfU01FTSBtYXBwZWQgc2VwYXJhdGVseSAqLwogCS50eGRfcHRyX3RibF9iYXNlID0gRlJfQlpfVFhfREVTQ19QVFJfVEJMLAogCS5yeGRfcHRyX3RibF9iYXNlID0gRlJfQlpfUlhfREVTQ19QVFJfVEJMLAogCS5idWZfdGJsX2Jhc2UgPSBGUl9CWl9CVUZfRlVMTF9UQkwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvdHguYyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCmluZGV4IDEzOTgwMTkuLmQyYzg1ZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy90eC5jCkBAIC00MzUsNyArNDM1LDggQEAKIAkgKiBxdWV1ZSBzdGF0ZS4gKi8KIAlzbXBfbWIoKTsKIAlpZiAodW5saWtlbHkobmV0aWZfdHhfcXVldWVfc3RvcHBlZCh0eF9xdWV1ZS0+Y29yZV90eHEpKSAmJgotCSAgICBsaWtlbHkoZWZ4LT5wb3J0X2VuYWJsZWQpKSB7CisJICAgIGxpa2VseShlZngtPnBvcnRfZW5hYmxlZCkgJiYKKwkgICAgbGlrZWx5KCFlZngtPnBvcnRfaW5oaWJpdGVkKSkgewogCQlmaWxsX2xldmVsID0gdHhfcXVldWUtPmluc2VydF9jb3VudCAtIHR4X3F1ZXVlLT5yZWFkX2NvdW50OwogCQlpZiAoZmlsbF9sZXZlbCA8IEVGWF9UWFFfVEhSRVNIT0xEKGVmeCkpIHsKIAkJCUVGWF9CVUdfT05fUEFSQU5PSUQoIWVmeF9kZXZfcmVnaXN0ZXJlZChlZngpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NpczkwMC5jIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKaW5kZXggY2IzMTdjZC4uNDg0Zjc5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmMKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmMKQEAgLTI0MCw3ICsyNDAsOCBAQAogICoJQG5ldF9kZXY6IHRoZSBuZXQgZGV2aWNlIHRvIGdldCBhZGRyZXNzIGZvcgogICoKICAqCU9sZGVyIFNpUzkwMCBhbmQgZnJpZW5kcywgdXNlIEVFUFJPTSB0byBzdG9yZSBNQUMgYWRkcmVzcy4KLSAqCU1BQyBhZGRyZXNzIGlzIHJlYWQgZnJvbSByZWFkX2VlcHJvbSgpIGludG8gQG5ldF9kZXYtPmRldl9hZGRyLgorICoJTUFDIGFkZHJlc3MgaXMgcmVhZCBmcm9tIHJlYWRfZWVwcm9tKCkgaW50byBAbmV0X2Rldi0+ZGV2X2FkZHIgYW5kCisgKglAbmV0X2Rldi0+cGVybV9hZGRyLgogICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNpczkwMF9nZXRfbWFjX2FkZHIoc3RydWN0IHBjaV9kZXYgKiBwY2lfZGV2LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKQEAgLTI2MSw2ICsyNjIsOSBAQAogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJICAgICAgICAoKHUxNiAqKShuZXRfZGV2LT5kZXZfYWRkcikpW2ldID0gcmVhZF9lZXByb20oaW9hZGRyLCBpK0VFUFJPTU1BQ0FkZHIpOwogCisJLyogU3RvcmUgTUFDIEFkZHJlc3MgaW4gcGVybV9hZGRyICovCisJbWVtY3B5KG5ldF9kZXYtPnBlcm1fYWRkciwgbmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwogCXJldHVybiAxOwogfQogCkBAIC0yNzEsNyArMjc1LDggQEAKICAqCiAgKglTaVM2MzBFIG1vZGVsLCB1c2UgQVBDIENNT1MgUkFNIHRvIHN0b3JlIE1BQyBhZGRyZXNzLgogICoJQVBDIENNT1MgUkFNIGlzIGFjY2Vzc2VkIHRocm91Z2ggSVNBIGJyaWRnZS4KLSAqCU1BQyBhZGRyZXNzIGlzIHJlYWQgaW50byBAbmV0X2Rldi0+ZGV2X2FkZHIuCisgKglNQUMgYWRkcmVzcyBpcyByZWFkIGludG8gQG5ldF9kZXYtPmRldl9hZGRyIGFuZAorICoJQG5ldF9kZXYtPnBlcm1fYWRkci4KICAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzaXM2MzBlX2dldF9tYWNfYWRkcihzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYsCkBAIC0yOTYsNiArMzAxLDEwIEBACiAJCW91dGIoMHgwOSArIGksIDB4NzApOwogCQkoKHU4ICopKG5ldF9kZXYtPmRldl9hZGRyKSlbaV0gPSBpbmIoMHg3MSk7CiAJfQorCisJLyogU3RvcmUgTUFDIEFkZHJlc3MgaW4gcGVybV9hZGRyICovCisJbWVtY3B5KG5ldF9kZXYtPnBlcm1fYWRkciwgbmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShpc2FfYnJpZGdlLCAweDQ4LCByZWcgJiB+MHg0MCk7CiAJcGNpX2Rldl9wdXQoaXNhX2JyaWRnZSk7CiAKQEAgLTMxMCw3ICszMTksNyBAQAogICoKICAqCVNpUzYzNSBtb2RlbCwgc2V0IE1BQyBSZWxvYWQgQml0IHRvIGxvYWQgTWFjIGFkZHJlc3MgZnJvbSBBUEMKICAqCXRvIHJmZHIuIHJmZHIgaXMgYWNjZXNzZWQgdGhyb3VnaCByZmNyLiBNQUMgYWRkcmVzcyBpcyByZWFkIGludG8KLSAqCUBuZXRfZGV2LT5kZXZfYWRkci4KKyAqCUBuZXRfZGV2LT5kZXZfYWRkciBhbmQgQG5ldF9kZXYtPnBlcm1fYWRkci4KICAqLwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzaXM2MzVfZ2V0X21hY19hZGRyKHN0cnVjdCBwY2lfZGV2ICogcGNpX2RldiwKQEAgLTMzNCw2ICszNDMsOSBAQAogCQkqKCAoKHUxNiAqKW5ldF9kZXYtPmRldl9hZGRyKSArIGkpID0gaW53KGlvYWRkciArIHJmZHIpOwogCX0KIAorCS8qIFN0b3JlIE1BQyBBZGRyZXNzIGluIHBlcm1fYWRkciAqLworCW1lbWNweShuZXRfZGV2LT5wZXJtX2FkZHIsIG5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisKIAkvKiBlbmFibGUgcGFja2V0IGZpbHRlcmluZyAqLwogCW91dGwocmZjclNhdmUgfCBSRkVOLCByZmNyICsgaW9hZGRyKTsKIApAQCAtMzUzLDcgKzM2NSw3IEBACiAgKglFRURPTkUgc2lnbmFsIHRvIHJlZnVzZSBFRVBST00gYWNjZXNzIGJ5IExBTi4KICAqCVRoZSBFRVBST00gbWFwIG9mIFNpUzk2MiBvciBTaVM5NjMgaXMgZGlmZmVyZW50IHRvIFNpUzkwMC4KICAqCVRoZSBzaWduYXR1cmUgZmllbGQgaW4gU2lTOTYyIG9yIFNpUzk2MyBzcGVjIGlzIG1lYW5pbmdsZXNzLgotICoJTUFDIGFkZHJlc3MgaXMgcmVhZCBpbnRvIEBuZXRfZGV2LT5kZXZfYWRkci4KKyAqCU1BQyBhZGRyZXNzIGlzIHJlYWQgaW50byBAbmV0X2Rldi0+ZGV2X2FkZHIgYW5kIEBuZXRfZGV2LT5wZXJtX2FkZHIuCiAgKi8KIAogc3RhdGljIGludCBfX2RldmluaXQgc2lzOTZ4X2dldF9tYWNfYWRkcihzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYsCkBAIC0zNzIsNiArMzg0LDkgQEAKIAkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCiAJCQkgICAgICAgICgodTE2ICopKG5ldF9kZXYtPmRldl9hZGRyKSlbaV0gPSByZWFkX2VlcHJvbShpb2FkZHIsIGkrRUVQUk9NTUFDQWRkcik7CiAKKwkJCS8qIFN0b3JlIE1BQyBBZGRyZXNzIGluIHBlcm1fYWRkciAqLworCQkJbWVtY3B5KG5ldF9kZXYtPnBlcm1fYWRkciwgbmV0X2Rldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwogCQkJb3V0bChFRURPTkUsIGVlX2FkZHIpOwogCQkJcmV0dXJuIDE7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGlwLmMgYi9kcml2ZXJzL25ldC9zbGlwLmMKaW5kZXggODZjYmI5ZS4uOGVjMWE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3NsaXAuYwpAQCAtODUzLDcgKzg1Myw5IEBACiAJLyogRG9uZS4gIFdlIGhhdmUgbGlua2VkIHRoZSBUVFkgbGluZSB0byBhIGNoYW5uZWwuICovCiAJcnRubF91bmxvY2soKTsKIAl0dHktPnJlY2VpdmVfcm9vbSA9IDY1NTM2OwkvKiBXZSBkb24ndCBmbG93IGNvbnRyb2wgKi8KLQlyZXR1cm4gc2wtPmRldi0+YmFzZV9hZGRyOworCisJLyogVFRZIGxheWVyIGV4cGVjdHMgMCBvbiBzdWNjZXNzICovCisJcmV0dXJuIDA7CiAKIGVycl9mcmVlX2J1ZnM6CiAJc2xfZnJlZV9idWZzKHNsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYwppbmRleCBkNjVmYWIxLi5lMjUwOTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWNfbGliLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjX2xpYi5jCkBAIC0yNiw5ICsyNiw5IEBACiAKICN1bmRlZiBEV01BQ19ETUFfREVCVUcKICNpZmRlZiBEV01BQ19ETUFfREVCVUcKLSNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZGVmaW5lIERXTUFDX0xJQl9EQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKICNlbHNlCi0jZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIERXTUFDX0xJQl9EQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qIENTUjEgZW5hYmxlcyB0aGUgdHJhbnNtaXQgRE1BIHRvIGNoZWNrIGZvciBuZXcgZGVzY3JpcHRvciAqLwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJLyogcmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyIChDU1I1KSAqLwogCXUzMiBpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIERNQV9TVEFUVVMpOwogCi0JREJHKElORk8sICIlczogW0NTUjU6IDB4JTA4eF1cbiIsIF9fZnVuY19fLCBpbnRyX3N0YXR1cyk7CisJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gIiVzOiBbQ1NSNTogMHglMDh4XVxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKICNpZmRlZiBEV01BQ19ETUFfREVCVUcKIAkvKiBJdCBkaXNwbGF5cyB0aGUgRE1BIHByb2Nlc3Mgc3RhdGVzIChDU1I1IHJlZ2lzdGVyKSAqLwogCXNob3dfdHhfcHJvY2Vzc19zdGF0ZShpbnRyX3N0YXR1cyk7CkBAIC0xNjAsNDMgKzE2MCw0MyBAQAogI2VuZGlmCiAJLyogQUJOT1JNQUwgaW50ZXJydXB0cyAqLwogCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfQUlTKSkgewotCQlEQkcoSU5GTywgIkNTUjVbMTVdIERNQSBBQk5PUk1BTCBJUlE6ICIpOworCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAiQ1NSNVsxNV0gRE1BIEFCTk9STUFMIElSUTogIik7CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfVU5GKSkgewotCQkJREJHKElORk8sICJ0cmFuc21pdCB1bmRlcmZsb3dcbiIpOworCQkJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gInRyYW5zbWl0IHVuZGVyZmxvd1xuIik7CiAJCQlyZXQgPSB0eF9oYXJkX2Vycm9yX2J1bXBfdGM7CiAJCQl4LT50eF91bmRlZmxvd19pcnErKzsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RKVCkpIHsKLQkJCURCRyhJTkZPLCAidHJhbnNtaXQgamFiYmVyXG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJ0cmFuc21pdCBqYWJiZXJcbiIpOwogCQkJeC0+dHhfamFiYmVyX2lycSsrOwogCQl9CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfT1ZGKSkgewotCQkJREJHKElORk8sICJyZWN2IG92ZXJmbG93XG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJyZWN2IG92ZXJmbG93XG4iKTsKIAkJCXgtPnJ4X292ZXJmbG93X2lycSsrOwogCQl9CiAJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUlUpKSB7Ci0JCQlEQkcoSU5GTywgInJlY2VpdmUgYnVmZmVyIHVuYXZhaWxhYmxlXG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJyZWNlaXZlIGJ1ZmZlciB1bmF2YWlsYWJsZVxuIik7CiAJCQl4LT5yeF9idWZfdW5hdl9pcnErKzsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JQUykpIHsKLQkJCURCRyhJTkZPLCAicmVjZWl2ZSBwcm9jZXNzIHN0b3BwZWRcbiIpOworCQkJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gInJlY2VpdmUgcHJvY2VzcyBzdG9wcGVkXG4iKTsKIAkJCXgtPnJ4X3Byb2Nlc3Nfc3RvcHBlZF9pcnErKzsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JXVCkpIHsKLQkJCURCRyhJTkZPLCAicmVjZWl2ZSB3YXRjaGRvZ1xuIik7CisJCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAicmVjZWl2ZSB3YXRjaGRvZ1xuIik7CiAJCQl4LT5yeF93YXRjaGRvZ19pcnErKzsKIAkJfQogCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0VUSSkpIHsKLQkJCURCRyhJTkZPLCAidHJhbnNtaXQgZWFybHkgaW50ZXJydXB0XG4iKTsKKwkJCURXTUFDX0xJQl9EQkcoS0VSTl9JTkZPICJ0cmFuc21pdCBlYXJseSBpbnRlcnJ1cHRcbiIpOwogCQkJeC0+dHhfZWFybHlfaXJxKys7CiAJCX0KIAkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19UUFMpKSB7Ci0JCQlEQkcoSU5GTywgInRyYW5zbWl0IHByb2Nlc3Mgc3RvcHBlZFxuIik7CisJCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAidHJhbnNtaXQgcHJvY2VzcyBzdG9wcGVkXG4iKTsKIAkJCXgtPnR4X3Byb2Nlc3Nfc3RvcHBlZF9pcnErKzsKIAkJCXJldCA9IHR4X2hhcmRfZXJyb3I7CiAJCX0KIAkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19GQkkpKSB7Ci0JCQlEQkcoSU5GTywgImZhdGFsIGJ1cyBlcnJvclxuIik7CisJCQlEV01BQ19MSUJfREJHKEtFUk5fSU5GTyAiZmF0YWwgYnVzIGVycm9yXG4iKTsKIAkJCXgtPmZhdGFsX2J1c19lcnJvcl9pcnErKzsKIAkJCXJldCA9IHR4X2hhcmRfZXJyb3I7CiAJCX0KQEAgLTIxNSw3ICsyMTUsNyBAQAogCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KIAl3cml0ZWwoKGludHJfc3RhdHVzICYgMHgxZmZmZiksIGlvYWRkciArIERNQV9TVEFUVVMpOwogCi0JREJHKElORk8sICJcblxuIik7CisJRFdNQUNfTElCX0RCRyhLRVJOX0lORk8gIlxuXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21haW4uYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCmluZGV4IDBlNWYwMzEuLmNjOTczZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jCkBAIC03NTAsNyArNzUwLDYgQEAKIAkJCXByaXYtPmh3LT5kbWEtPmRtYV9tb2RlKHByaXYtPmlvYWRkciwgdGMsIFNGX0RNQV9NT0RFKTsKIAkJCXByaXYtPnhzdGF0cy50aHJlc2hvbGQgPSB0YzsKIAkJfQotCQlzdG1tYWNfdHhfZXJyKHByaXYpOwogCX0gZWxzZSBpZiAodW5saWtlbHkoc3RhdHVzID09IHR4X2hhcmRfZXJyb3IpKQogCQlzdG1tYWNfdHhfZXJyKHByaXYpOwogfQpAQCAtNzgxLDIxICs3ODAsNiBAQAogCiAJc3RtbWFjX3ZlcmlmeV9hcmdzKCk7CiAKLQlyZXQgPSBzdG1tYWNfaW5pdF9waHkoZGV2KTsKLQlpZiAodW5saWtlbHkocmV0KSkgewotCQlwcl9lcnIoIiVzOiBDYW5ub3QgYXR0YWNoIHRvIFBIWSAoZXJyb3I6ICVkKVxuIiwgX19mdW5jX18sIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCi0JLyogUmVxdWVzdCB0aGUgSVJRIGxpbmVzICovCi0JcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHN0bW1hY19pbnRlcnJ1cHQsCi0JCQkgIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7Ci0JaWYgKHVubGlrZWx5KHJldCA8IDApKSB7Ci0JCXByX2VycigiJXM6IEVSUk9SOiBhbGxvY2F0aW5nIHRoZSBJUlEgJWQgKGVycm9yOiAlZClcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgZGV2LT5pcnEsIHJldCk7Ci0JCXJldHVybiByZXQ7Ci0JfQotCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCXByaXYtPnRtID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0bW1hY190aW1lciAqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHVubGlrZWx5KHByaXYtPnRtID09IE5VTEwpKSB7CkBAIC04MTQsNiArNzk4LDExIEBACiAJfSBlbHNlCiAJCXByaXYtPnRtLT5lbmFibGUgPSAxOwogI2VuZGlmCisJcmV0ID0gc3RtbWFjX2luaXRfcGh5KGRldik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJcHJfZXJyKCIlczogQ2Fubm90IGF0dGFjaCB0byBQSFkgKGVycm9yOiAlZClcbiIsIF9fZnVuY19fLCByZXQpOworCQlnb3RvIG9wZW5fZXJyb3I7CisJfQogCiAJLyogQ3JlYXRlIGFuZCBpbml0aWFsaXplIHRoZSBUWC9SWCBkZXNjcmlwdG9ycyBjaGFpbnMuICovCiAJcHJpdi0+ZG1hX3R4X3NpemUgPSBTVE1NQUNfQUxJR04oZG1hX3R4c2l6ZSk7CkBAIC04MjIsMTIgKzgxMSwxMSBAQAogCWluaXRfZG1hX2Rlc2NfcmluZ3MoZGV2KTsKIAogCS8qIERNQSBpbml0aWFsaXphdGlvbiBhbmQgU1cgcmVzZXQgKi8KLQlpZiAodW5saWtlbHkocHJpdi0+aHctPmRtYS0+aW5pdChwcml2LT5pb2FkZHIsIHByaXYtPnBsYXQtPnBibCwKLQkJCQkJIHByaXYtPmRtYV90eF9waHksCi0JCQkJCSBwcml2LT5kbWFfcnhfcGh5KSA8IDApKSB7Ci0KKwlyZXQgPSBwcml2LT5ody0+ZG1hLT5pbml0KHByaXYtPmlvYWRkciwgcHJpdi0+cGxhdC0+cGJsLAorCQkJCSAgcHJpdi0+ZG1hX3R4X3BoeSwgcHJpdi0+ZG1hX3J4X3BoeSk7CisJaWYgKHJldCA8IDApIHsKIAkJcHJfZXJyKCIlczogRE1BIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLTE7CisJCWdvdG8gb3Blbl9lcnJvcjsKIAl9CiAKIAkvKiBDb3B5IHRoZSBNQUMgYWRkciBpbnRvIHRoZSBIVyAgKi8KQEAgLTg0OCw2ICs4MzYsMTUgQEAKIAl3cml0ZWwoMHhmZmZmZmZmZiwgcHJpdi0+aW9hZGRyICsgTU1DX0hJR0hfSU5UUl9NQVNLKTsKIAl3cml0ZWwoMHhmZmZmZmZmZiwgcHJpdi0+aW9hZGRyICsgTU1DX0xPV19JTlRSX01BU0spOwogCisJLyogUmVxdWVzdCB0aGUgSVJRIGxpbmVzICovCisJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIHN0bW1hY19pbnRlcnJ1cHQsCisJCQkgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJcHJfZXJyKCIlczogRVJST1I6IGFsbG9jYXRpbmcgdGhlIElSUSAlZCAoZXJyb3I6ICVkKVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBkZXYtPmlycSwgcmV0KTsKKwkJZ290byBvcGVuX2Vycm9yOworCX0KKwogCS8qIEVuYWJsZSB0aGUgTUFDIFJ4L1R4ICovCiAJc3RtbWFjX2VuYWJsZV9tYWMocHJpdi0+aW9hZGRyKTsKIApAQCAtODc4LDcgKzg3NSwxNyBAQAogCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5yeF9yZWN5Y2xlKTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCiAJcmV0dXJuIDA7CisKK29wZW5fZXJyb3I6CisjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgorCWtmcmVlKHByaXYtPnRtKTsKKyNlbmRpZgorCWlmIChwcml2LT5waHlkZXYpCisJCXBoeV9kaXNjb25uZWN0KHByaXYtPnBoeWRldik7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKaW5kZXggZWI0ZjU5Zi4uYmZmMmY3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKQEAgLTMyMzcsMTUgKzMyMzcsMTggQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NCVVMKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGhtZV9zYnVzX21hdGNoW107CiBzdGF0aWMgaW50IF9fZGV2aW5pdCBobWVfc2J1c19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvcCkKIHsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPmRldi5vZl9ub2RlOwogCWNvbnN0IGNoYXIgKm1vZGVsID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibW9kZWwiLCBOVUxMKTsKIAlpbnQgaXNfcWZlOwogCi0JaWYgKCFvcC0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKGhtZV9zYnVzX21hdGNoLCAmb3AtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaXNfcWZlID0gKG9wLT5kZXYub2ZfbWF0Y2gtPmRhdGEgIT0gTlVMTCk7CisJaXNfcWZlID0gKG1hdGNoLT5kYXRhICE9IE5VTEwpOwogCiAJaWYgKCFpc19xZmUgJiYgbW9kZWwgJiYgIXN0cmNtcChtb2RlbCwgIlNVTlcsc2J1cy1xZmUiKSkKIAkJaXNfcWZlID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggYjhjNWYzNS4uN2E1ZGFlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTEyMzI3LDggKzEyMzI3LDEwIEBACiAJCWlmICh2YWwgJiBWQ1BVX0NGR1NIRFdfQVNQTV9EQk5DKQogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19BU1BNX1dPUktBUk9VTkQ7CiAJCWlmICgodmFsICYgVkNQVV9DRkdTSERXX1dPTF9FTkFCTEUpICYmCi0JCSAgICAodmFsICYgVkNQVV9DRkdTSERXX1dPTF9NQUdQS1QpKQorCQkgICAgKHZhbCAmIFZDUFVfQ0ZHU0hEV19XT0xfTUFHUEtUKSkgewogCQkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19XT0xfRU5BQkxFOworCQkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZ0cC0+cGRldi0+ZGV2LCB0cnVlKTsKKwkJfQogCQlnb3RvIGRvbmU7CiAJfQogCkBAIC0xMjQ2MSw4ICsxMjQ2MywxMCBAQAogCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfV09MX0NBUDsKIAogCQlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19XT0xfQ0FQKSAmJgotCQkgICAgKG5pY19jZmcgJiBOSUNfU1JBTV9EQVRBX0NGR19XT0xfRU5BQkxFKSkKKwkJICAgIChuaWNfY2ZnICYgTklDX1NSQU1fREFUQV9DRkdfV09MX0VOQUJMRSkpIHsKIAkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfV09MX0VOQUJMRTsKKwkJCWRldmljZV9zZXRfd2FrZXVwX2VuYWJsZSgmdHAtPnBkZXYtPmRldiwgdHJ1ZSk7CisJCX0KIAogCQlpZiAoY2ZnMiAmICgxIDw8IDE3KSkKIAkJCXRwLT5waHlfZmxhZ3MgfD0gVEczX1BIWUZMR19DQVBBQ0lUSVZFX0NPVVBMSU5HOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwppbmRleCA4YTNiMTkxLi5mZjMyYmVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwpAQCAtMTI1MSw3ICsxMjUxLDcgQEAKIC8qIAogICogVGhlIE5JQyBoYXMgdG9sZCB1cyB0aGF0IGEgcGFja2V0IGhhcyBiZWVuIGRvd25sb2FkZWQgb250byB0aGUgY2FyZCwgd2UgbXVzdAogICogZmluZCBvdXQgd2hpY2ggcGFja2V0IGl0IGhhcyBkb25lLCBjbGVhciB0aGUgc2tiIGFuZCBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhY2tldAotICogdGhlbiBhZHZhbmNlIGFyb3VuZCB0aGUgcmluZyBmb3IgYWxsIHRyYW5taXR0ZWQgcGFja2V0cworICogdGhlbiBhZHZhbmNlIGFyb3VuZCB0aGUgcmluZyBmb3IgYWxsIHRyYW5zbWl0dGVkIHBhY2tldHMKICAqLwogCiBzdGF0aWMgdm9pZCB4bF9kbl9jb21wKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIApAQCAtMTU2OCw3ICsxNTY4LDcgQEAKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfU09GVF9FUlIpCiAJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBZGFwdGVyIHRyYW5zbWl0dGVkIFNvZnQgRXJyb3IgUmVwb3J0IE1hYyBGcmFtZVxuIixkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19UUkFOX0JDTikgCi0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXZSBhcmUgdHJhbm1pdHRpbmcgdGhlIGJlYWNvbiwgYWFhaFxuIixkZXYtPm5hbWUpOworCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogV2UgYXJlIHRyYW5zbWl0dGluZyB0aGUgYmVhY29uLCBhYWFoXG4iLGRldi0+bmFtZSk7CiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1NTKSAKIAkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNpbmdsZSBTdGF0aW9uIG9uIHRoZSByaW5nXG4iLCBkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19SSU5HX1JFQykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKaW5kZXggNWJkMTQwNy4uOTM1NGNhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKQEAgLTE2NzUsNyArMTY3NSw3IEBACiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1NPRlRfRVJSKQogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBBZGFwdGVyIHRyYW5zbWl0dGVkIFNvZnQgRXJyb3IgUmVwb3J0IE1hYyBGcmFtZVxuIiwgZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfVFJBTl9CQ04pCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdlIGFyZSB0cmFubWl0dGluZyB0aGUgYmVhY29uLCBhYWFoXG4iLCBkZXYtPm5hbWUpOworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBXZSBhcmUgdHJhbnNtaXR0aW5nIHRoZSBiZWFjb24sIGFhYWhcbiIsIGRldi0+bmFtZSk7CiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1NTKQogCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTaW5nbGUgU3RhdGlvbiBvbiB0aGUgcmluZ1xuIiwgZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfUklOR19SRUMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwppbmRleCAzZDJmYmU2Li4yNjg0MDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKQEAgLTE1MDAsNyArMTUwMCw3IEBACiAJCQlpZiAobGFuX3N0YXR1c19kaWZmICYgTFNDX1NPRlRfRVJSKQogCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQWRhcHRlciB0cmFuc21pdHRlZCBTb2Z0IEVycm9yIFJlcG9ydCBNYWMgRnJhbWVcbiIsZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfVFJBTl9CQ04pIAotCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogV2UgYXJlIHRyYW5taXR0aW5nIHRoZSBiZWFjb24sIGFhYWhcbiIsZGV2LT5uYW1lKTsKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFdlIGFyZSB0cmFuc21pdHRpbmcgdGhlIGJlYWNvbiwgYWFhaFxuIixkZXYtPm5hbWUpOwogCQkJaWYgKGxhbl9zdGF0dXNfZGlmZiAmIExTQ19TUykgCiAJCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBTaW5nbGUgU3RhdGlvbiBvbiB0aGUgcmluZ1xuIiwgZGV2LT5uYW1lKTsKIAkJCWlmIChsYW5fc3RhdHVzX2RpZmYgJiBMU0NfUklOR19SRUMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKaW5kZXggMzQxZjcwNS4uYzkyNGVhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJLm1hbmFnZV9wb3dlciA9CWNkY19tYW5hZ2VfcG93ZXIsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIG1ibV9pbmZvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyB3d2FuX2luZm8gPSB7CiAJLmRlc2NyaXB0aW9uID0JIk1vYmlsZSBCcm9hZGJhbmQgTmV0d29yayBEZXZpY2UiLAogCS5mbGFncyA9CUZMQUdfV1dBTiwKIAkuYmluZCA9CQl1c2JuZXRfY2RjX2JpbmQsCkBAIC00NzEsNiArNDcxLDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorI2RlZmluZSBIVUFXRUlfVkVORE9SX0lECTB4MTJEMQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQJcHJvZHVjdHMgW10gPSB7CiAvKgpAQCAtNTY2LDcgKzU2Nyw3IEBACiB7CiAJVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxMDA0LCAweDYxYWEsIFVTQl9DTEFTU19DT01NLAogCQkJVVNCX0NEQ19TVUJDTEFTU19FVEhFUk5FVCwgVVNCX0NEQ19QUk9UT19OT05FKSwKLQkuZHJpdmVyX2luZm8JCT0gMCwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmd3dhbl9pbmZvLAogfSwKIAogLyoKQEAgLTU4Nyw4ICs1ODgsMTcgQEAKIH0sIHsKIAlVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0NPTU0sIFVTQl9DRENfU1VCQ0xBU1NfTURMTSwKIAkJCVVTQl9DRENfUFJPVE9fTk9ORSksCi0JLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpJm1ibV9pbmZvLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSZ3d2FuX2luZm8sCiAKK30sIHsKKwkvKiBWYXJpb3VzIEh1YXdlaSBtb2RlbXMgd2l0aCBhIG5ldHdvcmsgcG9ydCBsaWtlIHRoZSBVTUcxODMxICovCisJLm1hdGNoX2ZsYWdzICAgID0gICBVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUgorCQkgfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLAorCS5pZFZlbmRvciAgICAgICAgICAgICAgID0gSFVBV0VJX1ZFTkRPUl9JRCwKKwkuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX0NPTU0sCisJLmJJbnRlcmZhY2VTdWJDbGFzcwk9IFVTQl9DRENfU1VCQ0xBU1NfRVRIRVJORVQsCisJLmJJbnRlcmZhY2VQcm90b2NvbAk9IDI1NSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykmd3dhbl9pbmZvLAogfSwKIAl7IH0sCQkvLyBFTkQKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19uY20uYwppbmRleCA5NjczNzFmLi4xMDMzZWY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjX25jbS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfbmNtLmMKQEAgLTU0LDEzICs1NCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi91c2JuZXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IvY2RjLmg+CiAKLSNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JCQkJIjctRmViLTIwMTEiCisjZGVmaW5lCURSSVZFUl9WRVJTSU9OCQkJCSIyMy1BcHItMjAxMSIKIAogLyogQ0RDIE5DTSBzdWJjbGFzcyAzLjIuMSAqLwogI2RlZmluZSBVU0JfQ0RDX05DTV9ORFAxNl9MRU5HVEhfTUlOCQkweDEwCiAKIC8qIE1heGltdW0gTlRCIGxlbmd0aCAqLwotI2RlZmluZQlDRENfTkNNX05UQl9NQVhfU0laRV9UWAkJCTE2Mzg0CS8qIGJ5dGVzICovCisjZGVmaW5lCUNEQ19OQ01fTlRCX01BWF9TSVpFX1RYCQkJKDE2Mzg0ICsgNCkgLyogYnl0ZXMsIG11c3QgYmUgc2hvcnQgdGVybWluYXRlZCAqLwogI2RlZmluZQlDRENfTkNNX05UQl9NQVhfU0laRV9SWAkJCTE2Mzg0CS8qIGJ5dGVzICovCiAKIC8qIE1pbmltdW0gdmFsdWUgZm9yIE1heERhdGFncmFtU2l6ZSwgY2guIDYuMi45ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMgYi9kcml2ZXJzL25ldC91c2IvaXBoZXRoLmMKaW5kZXggN2Q0MmY5YS4uODExMjZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2lwaGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9pcGhldGguYwpAQCAtNjUsNiArNjUsNyBAQAogI2RlZmluZSBJUEhFVEhfVVNCSU5URl9QUk9UTyAgICAxCiAKICNkZWZpbmUgSVBIRVRIX0JVRl9TSVpFICAgICAgICAgMTUxNgorI2RlZmluZSBJUEhFVEhfSVBfQUxJR04JCTIJLyogcGFkZGluZyBhdCBmcm9udCBvZiBVUkIgKi8KICNkZWZpbmUgSVBIRVRIX1RYX1RJTUVPVVQgICAgICAgKDUgKiBIWikKIAogI2RlZmluZSBJUEhFVEhfSU5URk5VTSAgICAgICAgICAyCkBAIC0yMDIsMTggKzIwMywyMSBAQAogCQlyZXR1cm47CiAJfQogCi0JbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPD0gSVBIRVRIX0lQX0FMSUdOKSB7CisJCWRldi0+bmV0LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCXJldHVybjsKKwl9CisJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC0gSVBIRVRIX0lQX0FMSUdOOworCWJ1ZiA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgSVBIRVRIX0lQX0FMSUdOOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihORVRfSVBfQUxJR04gKyBsZW4pOworCXNrYiA9IGRldl9hbGxvY19za2IobGVuKTsKIAlpZiAoIXNrYikgewogCQllcnIoIiVzOiBkZXZfYWxsb2Nfc2tiOiAtRU5PTUVNIiwgX19mdW5jX18pOwogCQlkZXYtPm5ldC0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCi0Jc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwotCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgYnVmICsgTkVUX0lQX0FMSUdOLCBsZW4gLSBORVRfSVBfQUxJR04pOworCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgYnVmLCBsZW4pOwogCXNrYi0+ZGV2ID0gZGV2LT5uZXQ7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2LT5uZXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCmluZGV4IDQ3YTZjODcuLjQ4ZDRlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jCkBAIC03MzAsNyArNzMwLDcgQEAKIAkJbXNsZWVwKDEwKTsKIAkJYm1jciA9IHNtc2M5NXh4X21kaW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUik7CiAJCXRpbWVvdXQrKzsKLQl9IHdoaWxlICgoYm1jciAmIE1JSV9CTUNSKSAmJiAodGltZW91dCA8IDEwMCkpOworCX0gd2hpbGUgKChibWNyICYgQk1DUl9SRVNFVCkgJiYgKHRpbWVvdXQgPCAxMDApKTsKIAogCWlmICh0aW1lb3V0ID49IDEwMCkgewogCQluZXRkZXZfd2FybihkZXYtPm5ldCwgInRpbWVvdXQgb24gUEhZIFJlc2V0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKaW5kZXggMDY5YzFjZi4uOWFiNDM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYwpAQCAtNjQ1LDYgKzY0NSw3IEBACiAJc3RydWN0IGRyaXZlcl9pbmZvCSppbmZvID0gZGV2LT5kcml2ZXJfaW5mbzsKIAlpbnQJCQlyZXR2YWw7CiAKKwljbGVhcl9iaXQoRVZFTlRfREVWX09QRU4sICZkZXYtPmZsYWdzKTsKIAluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOwogCiAJbmV0aWZfaW5mbyhkZXYsIGlmZG93biwgZGV2LT5uZXQsCkBAIC03MzYsNiArNzM3LDcgQEAKIAkJfQogCX0KIAorCXNldF9iaXQoRVZFTlRfREVWX09QRU4sICZkZXYtPmZsYWdzKTsKIAluZXRpZl9zdGFydF9xdWV1ZSAobmV0KTsKIAluZXRpZl9pbmZvKGRldiwgaWZ1cCwgZGV2LT5uZXQsCiAJCSAgICJvcGVuOiBlbmFibGUgcXVldWVpbmcgKHJ4ICVkLCB0eCAlZCkgbXR1ICVkICVzIGZyYW1pbmdcbiIsCkBAIC0xMjU5LDYgKzEyNjEsOSBAQAogCWlmIChkZXYtPmRyaXZlcl9pbmZvLT51bmJpbmQpCiAJCWRldi0+ZHJpdmVyX2luZm8tPnVuYmluZCAoZGV2LCBpbnRmKTsKIAorCXVzYl9raWxsX3VyYihkZXYtPmludGVycnVwdCk7CisJdXNiX2ZyZWVfdXJiKGRldi0+aW50ZXJydXB0KTsKKwogCWZyZWVfbmV0ZGV2KG5ldCk7CiAJdXNiX3B1dF9kZXYgKHhkZXYpOwogfQpAQCAtMTQ5OCw2ICsxNTAzLDEwIEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgcmV0dmFsOwogCiAJaWYgKCEtLWRldi0+c3VzcGVuZF9jb3VudCkgeworCQkvKiByZXN1bWUgaW50ZXJydXB0IFVSQnMgKi8KKwkJaWYgKGRldi0+aW50ZXJydXB0ICYmIHRlc3RfYml0KEVWRU5UX0RFVl9PUEVOLCAmZGV2LT5mbGFncykpCisJCQl1c2Jfc3VibWl0X3VyYihkZXYtPmludGVycnVwdCwgR0ZQX05PSU8pOworCiAJCXNwaW5fbG9ja19pcnEoJmRldi0+dHhxLmxvY2spOwogCQl3aGlsZSAoKHJlcyA9IHVzYl9nZXRfZnJvbV9hbmNob3IoJmRldi0+ZGVmZXJyZWQpKSkgewogCkBAIC0xNTE2LDkgKzE1MjUsMTIgQEAKIAkJc21wX21iKCk7CiAJCWNsZWFyX2JpdChFVkVOVF9ERVZfQVNMRUVQLCAmZGV2LT5mbGFncyk7CiAJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT50eHEubG9jayk7Ci0JCWlmICghKGRldi0+dHhxLnFsZW4gPj0gVFhfUUxFTihkZXYpKSkKLQkJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldi0+bmV0KTsKLQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCisJCWlmICh0ZXN0X2JpdChFVkVOVF9ERVZfT1BFTiwgJmRldi0+ZmxhZ3MpKSB7CisJCQlpZiAoIShkZXYtPnR4cS5xbGVuID49IFRYX1FMRU4oZGV2KSkpCisJCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2LT5uZXQpOworCQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOworCQl9CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDJkZTliOTAuLjNiOTlmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTQwMyw2ICs0MDMsMTcgQEAKIAlpZiAodGJbSUZMQV9BRERSRVNTXSA9PSBOVUxMKQogCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKIAorCWlmICh0YltJRkxBX0lGTkFNRV0pCisJCW5sYV9zdHJsY3B5KGRldi0+bmFtZSwgdGJbSUZMQV9JRk5BTUVdLCBJRk5BTVNJWik7CisJZWxzZQorCQlzbnByaW50ZihkZXYtPm5hbWUsIElGTkFNU0laLCBEUlZfTkFNRSAiJSVkIik7CisKKwlpZiAoc3RyY2hyKGRldi0+bmFtZSwgJyUnKSkgeworCQllcnIgPSBkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfYWxsb2NfbmFtZTsKKwl9CisKIAllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfcmVnaXN0ZXJfZGV2OwpAQCAtNDIyLDYgKzQzMyw3IEBACiAKIGVycl9yZWdpc3Rlcl9kZXY6CiAJLyogbm90aGluZyB0byBkbyAqLworZXJyX2FsbG9jX25hbWU6CiBlcnJfY29uZmlndXJlX3BlZXI6CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2UocGVlcik7CiAJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwppbmRleCAwZDQ3YzNhLi5jMTZlZDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCkBAIC0xNzgsNiArMTc4LDcgQEAKIHZteG5ldDNfcHJvY2Vzc19ldmVudHMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiBldmVudHMgPSBsZTMyX3RvX2NwdShhZGFwdGVyLT5zaGFyZWQtPmVjcik7CiAJaWYgKCFldmVudHMpCiAJCXJldHVybjsKQEAgLTE5MCwxMCArMTkxLDEwIEBACiAKIAkvKiBDaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvciBvbiB4bWl0L3JlY3YgcXVldWVzICovCiAJaWYgKGV2ZW50cyAmIChWTVhORVQzX0VDUl9UUUVSUiB8IFZNWE5FVDNfRUNSX1JRRVJSKSkgewotCQlzcGluX2xvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJCVZNWE5FVDNfV1JJVEVfQkFSMV9SRUcoYWRhcHRlciwgVk1YTkVUM19SRUdfQ01ELAogCQkJCSAgICAgICBWTVhORVQzX0NNRF9HRVRfUVVFVUVfU1RBVFVTKTsKLQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+Y21kX2xvY2ssIGZsYWdzKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQogCQkJaWYgKGFkYXB0ZXItPnRxZF9zdGFydFtpXS5zdGF0dXMuc3RvcHBlZCkKQEAgLTI3MzMsMTMgKzI3MzQsMTQgQEAKIHZteG5ldDNfYWxsb2NfaW50cl9yZXNvdXJjZXMoc3RydWN0IHZteG5ldDNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MzIgY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBpbnRyIHNldHRpbmdzICovCi0Jc3Bpbl9sb2NrKCZhZGFwdGVyLT5jbWRfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmNtZF9sb2NrLCBmbGFncyk7CiAJVk1YTkVUM19XUklURV9CQVIxX1JFRyhhZGFwdGVyLCBWTVhORVQzX1JFR19DTUQsCiAJCQkgICAgICAgVk1YTkVUM19DTURfR0VUX0NPTkZfSU5UUik7CiAJY2ZnID0gVk1YTkVUM19SRUFEX0JBUjFfUkVHKGFkYXB0ZXIsIFZNWE5FVDNfUkVHX0NNRCk7Ci0Jc3Bpbl91bmxvY2soJmFkYXB0ZXItPmNtZF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5jbWRfbG9jaywgZmxhZ3MpOwogCWFkYXB0ZXItPmludHIudHlwZSA9IGNmZyAmIDB4MzsKIAlhZGFwdGVyLT5pbnRyLm1hc2tfbW9kZSA9IChjZmcgPj4gMikgJiAweDM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZXRodG9vbC5jCmluZGV4IDUxZjJlZjEuLjk3NjQ2NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2V0aHRvb2wuYwpAQCAtMzExLDYgKzMxMSw5IEBACiAJCS8qIHRvZ2dsZSB0aGUgTFJPIGZlYXR1cmUqLwogCQluZXRkZXYtPmZlYXR1cmVzIF49IE5FVElGX0ZfTFJPOwogCisJCS8qIFVwZGF0ZSBwcml2YXRlIExSTyBmbGFnICovCisJCWFkYXB0ZXItPmxybyA9IGxyb19yZXF1ZXN0ZWQ7CisKIAkJLyogdXBkYXRlIGhhcndhcmUgTFJPIGNhcGFiaWxpdHkgYWNjb3JkaW5nbHkgKi8KIAkJaWYgKGxyb19yZXF1ZXN0ZWQpCiAJCQlhZGFwdGVyLT5zaGFyZWQtPmRldlJlYWQubWlzYy51cHRGZWF0dXJlcyB8PQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9oaWZfdXNiLmMKaW5kZXggZjFiOGFmNi4uMmQxMDIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2hpZl91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaGlmX3VzYi5jCkBAIC0xMDQwLDcgKzEwNDAsNyBAQAogCX0KIAogCXJldCA9IGF0aDlrX2h0Y19od19pbml0KGhpZl9kZXYtPmh0Y19oYW5kbGUsCi0JCQkJJmhpZl9kZXYtPnVkZXYtPmRldiwgaGlmX2Rldi0+ZGV2aWNlX2lkLAorCQkJCSZpbnRlcmZhY2UtPmRldiwgaGlmX2Rldi0+ZGV2aWNlX2lkLAogCQkJCWhpZl9kZXYtPnVkZXYtPnByb2R1Y3QsIGlkLT5kcml2ZXJfaW5mbyk7CiAJaWYgKHJldCkgewogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTE1OCw3ICsxMTU4LDcgQEAKICNlbmRpZgogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXRoOWtfaGlmX3VzYl9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiYXRoOWtfaGlmX3VzYiIsCisJLm5hbWUgPSBLQlVJTERfTU9ETkFNRSwKIAkucHJvYmUgPSBhdGg5a19oaWZfdXNiX3Byb2JlLAogCS5kaXNjb25uZWN0ID0gYXRoOWtfaGlmX3VzYl9kaXNjb25uZWN0LAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwppbmRleCAxZWM5YmNkLi5jOTViYzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYwpAQCAtMTI1NCwxNSArMTI1NCw2IEBACiAJYWgtPnR4Y2hhaW5tYXNrID0gY29tbW9uLT50eF9jaGFpbm1hc2s7CiAJYWgtPnJ4Y2hhaW5tYXNrID0gY29tbW9uLT5yeF9jaGFpbm1hc2s7CiAKLQlpZiAoKGNvbW1vbi0+YnVzX29wcy0+YXRoX2J1c190eXBlICE9IEFUSF9VU0IpICYmICFhaC0+Y2hpcF9mdWxsc2xlZXApIHsKLQkJYXRoOWtfaHdfYWJvcnRwY3VyZWN2KGFoKTsKLQkJaWYgKCFhdGg5a19od19zdG9wZG1hcmVjdihhaCkpIHsKLQkJCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX1hNSVQsCi0JCQkJIkZhaWxlZCB0byBzdG9wIHJlY2VpdmUgZG1hXG4iKTsKLQkJCWJDaGFubmVsQ2hhbmdlID0gZmFsc2U7Ci0JCX0KLQl9Ci0KIAlpZiAoIWF0aDlrX2h3X3NldHBvd2VyKGFoLCBBVEg5S19QTV9BV0FLRSkpCiAJCXJldHVybiAtRUlPOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmMKaW5kZXggNTYyMjU3YS4uZWRjMWNiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuYwpAQCAtNzUxLDI4ICs3NTEsNDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woYXRoOWtfaHdfYWJvcnRwY3VyZWN2KTsKIAotYm9vbCBhdGg5a19od19zdG9wZG1hcmVjdihzdHJ1Y3QgYXRoX2h3ICphaCkKK2Jvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgKnJlc2V0KQogewogI2RlZmluZSBBSF9SWF9TVE9QX0RNQV9USU1FT1VUIDEwMDAwICAgLyogdXNlYyAqLwogI2RlZmluZSBBSF9SWF9USU1FX1FVQU5UVU0gICAgIDEwMCAgICAgLyogdXNlYyAqLwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXUzMiBtYWNfc3RhdHVzLCBsYXN0X21hY19zdGF0dXMgPSAwOwogCWludCBpOwogCisJLyogRW5hYmxlIGFjY2VzcyB0byB0aGUgRE1BIG9ic2VydmF0aW9uIGJ1cyAqLworCVJFR19XUklURShhaCwgQVJfTUFDTUlTQywKKwkJICAoKEFSX01BQ01JU0NfRE1BX09CU19MSU5FXzggPDwgQVJfTUFDTUlTQ19ETUFfT0JTX1MpIHwKKwkJICAgKEFSX01BQ01JU0NfTUlTQ19PQlNfQlVTXzEgPDwKKwkJICAgIEFSX01BQ01JU0NfTUlTQ19PQlNfQlVTX01TQl9TKSkpOworCiAJUkVHX1dSSVRFKGFoLCBBUl9DUiwgQVJfQ1JfUlhEKTsKIAogCS8qIFdhaXQgZm9yIHJ4IGVuYWJsZSBiaXQgdG8gZ28gbG93ICovCiAJZm9yIChpID0gQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAvIEFIX1RJTUVfUVVBTlRVTTsgaSAhPSAwOyBpLS0pIHsKIAkJaWYgKChSRUdfUkVBRChhaCwgQVJfQ1IpICYgQVJfQ1JfUlhFKSA9PSAwKQogCQkJYnJlYWs7CisKKwkJaWYgKCFBUl9TUkVWXzkzMDBfMjBfT1JfTEFURVIoYWgpKSB7CisJCQltYWNfc3RhdHVzID0gUkVHX1JFQUQoYWgsIEFSX0RNQURCR183KSAmIDB4N2YwOworCQkJaWYgKG1hY19zdGF0dXMgPT0gMHgxYzAgJiYgbWFjX3N0YXR1cyA9PSBsYXN0X21hY19zdGF0dXMpIHsKKwkJCQkqcmVzZXQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCisJCQlsYXN0X21hY19zdGF0dXMgPSBtYWNfc3RhdHVzOworCQl9CisKIAkJdWRlbGF5KEFIX1RJTUVfUVVBTlRVTSk7CiAJfQogCiAJaWYgKGkgPT0gMCkgewogCQlhdGhfZXJyKGNvbW1vbiwKLQkJCSJETUEgZmFpbGVkIHRvIHN0b3AgaW4gJWQgbXMgQVJfQ1I9MHglMDh4IEFSX0RJQUdfU1c9MHglMDh4XG4iLAorCQkJIkRNQSBmYWlsZWQgdG8gc3RvcCBpbiAlZCBtcyBBUl9DUj0weCUwOHggQVJfRElBR19TVz0weCUwOHggRE1BREJHXzc9MHglMDh4XG4iLAogCQkJQUhfUlhfU1RPUF9ETUFfVElNRU9VVCAvIDEwMDAsCiAJCQlSRUdfUkVBRChhaCwgQVJfQ1IpLAotCQkJUkVHX1JFQUQoYWgsIEFSX0RJQUdfU1cpKTsKKwkJCVJFR19SRUFEKGFoLCBBUl9ESUFHX1NXKSwKKwkJCVJFR19SRUFEKGFoLCBBUl9ETUFEQkdfNykpOwogCQlyZXR1cm4gZmFsc2U7CiAJfSBlbHNlIHsKIAkJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKaW5kZXggYjJiMmZmOC4uYzJhNTkzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaApAQCAtNjk1LDcgKzY5NSw3IEBACiB2b2lkIGF0aDlrX2h3X3B1dHJ4YnVmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcnhkcCk7CiB2b2lkIGF0aDlrX2h3X3N0YXJ0cGN1cmVjZWl2ZShzdHJ1Y3QgYXRoX2h3ICphaCwgYm9vbCBpc19zY2FubmluZyk7CiB2b2lkIGF0aDlrX2h3X2Fib3J0cGN1cmVjdihzdHJ1Y3QgYXRoX2h3ICphaCk7Ci1ib29sIGF0aDlrX2h3X3N0b3BkbWFyZWN2KHN0cnVjdCBhdGhfaHcgKmFoKTsKK2Jvb2wgYXRoOWtfaHdfc3RvcGRtYXJlY3Yoc3RydWN0IGF0aF9odyAqYWgsIGJvb2wgKnJlc2V0KTsKIGludCBhdGg5a19od19iZWFjb25xX3NldHVwKHN0cnVjdCBhdGhfaHcgKmFoKTsKIAogLyogSW50ZXJydXB0IEhhbmRsaW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYwppbmRleCBkZGRiODVkLi4xNDgyZmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKQEAgLTEzNzYsNyArMTM3Niw2IEBACiAKIAlhdGg5a19jYWxjdWxhdGVfaXRlcl9kYXRhKGh3LCB2aWYsICZpdGVyX2RhdGEpOwogCi0JYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAkvKiBTZXQgQlNTSUQgbWFzay4gKi8KIAltZW1jcHkoY29tbW9uLT5ic3NpZG1hc2ssIGl0ZXJfZGF0YS5tYXNrLCBFVEhfQUxFTik7CiAJYXRoX2h3X3NldGJzc2lkbWFzayhjb21tb24pOwpAQCAtMTQxMSw3ICsxNDEwLDYgQEAKIAl9CiAKIAlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgYWgtPmltYXNrKTsKLQlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAogCS8qIFNldCB1cCBBTkkgKi8KIAlpZiAoKGl0ZXJfZGF0YS5uYXBzICsgaXRlcl9kYXRhLm5hZGhvY3MpID4gMCkgewpAQCAtMTQ1Nyw2ICsxNDU1LDcgQEAKIAlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKil2aWYtPmRydl9wcml2OwogCWludCByZXQgPSAwOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJc3dpdGNoICh2aWYtPnR5cGUpIHsKQEAgLTE1MDMsNiArMTUwMiw3IEBACiAJYXRoOWtfZG9fdmlmX2FkZF9zZXR1cChodywgdmlmKTsKIG91dDoKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTUxNyw2ICsxNTE3LDcgQEAKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkNoYW5nZSBJbnRlcmZhY2VcbiIpOwogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAogCS8qIFNlZSBpZiBuZXcgaW50ZXJmYWNlIHR5cGUgaXMgdmFsaWQuICovCiAJaWYgKChuZXdfdHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgJiYKQEAgLTE1NDYsNiArMTU0Nyw3IEBACiAKIAlhdGg5a19kb192aWZfYWRkX3NldHVwKGh3LCB2aWYpOwogb3V0OgorCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTU1OCw2ICsxNTYwLDcgQEAKIAogCWF0aF9kYmcoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRldGFjaCBJbnRlcmZhY2VcbiIpOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJc2MtPm52aWZzLS07CkBAIC0xNTY5LDYgKzE1NzIsNyBAQAogCWF0aDlrX2NhbGN1bGF0ZV9zdW1tYXJ5X3N0YXRlKGh3LCBOVUxMKTsKIAogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKKwlhdGg5a19wc19yZXN0b3JlKHNjKTsKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfZW5hYmxlX3BzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQpAQCAtMTgwOSw2ICsxODEzLDcgQEAKIAogCXR4cSA9IHNjLT50eC50eHFfbWFwW3F1ZXVlXTsKIAorCWF0aDlrX3BzX3dha2V1cChzYyk7CiAJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKIAogCW1lbXNldCgmcWksIDAsIHNpemVvZihzdHJ1Y3QgYXRoOWtfdHhfcXVldWVfaW5mbykpOwpAQCAtMTgzMiw2ICsxODM3LDcgQEAKIAkJCWF0aF9iZWFjb25xX2NvbmZpZyhzYyk7CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTg5NCw2ICsxOTAwLDcgQEAKIAlpbnQgc2xvdHRpbWU7CiAJaW50IGVycm9yOwogCisJYXRoOWtfcHNfd2FrZXVwKHNjKTsKIAltdXRleF9sb2NrKCZzYy0+bXV0ZXgpOwogCiAJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CU1NJRCkgewpAQCAtMTk5NCw2ICsyMDAxLDcgQEAKIAl9CiAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJYXRoOWtfcHNfcmVzdG9yZShzYyk7CiB9CiAKIHN0YXRpYyB1NjQgYXRoOWtfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTIxMzMsNiArMjE0MSw4IEBACiBzdGF0aWMgdm9pZCBhdGg5a19mbHVzaChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gaHctPnByaXY7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CiAJaW50IHRpbWVvdXQgPSAyMDA7IC8qIG1zICovCiAJaW50IGksIGo7CiAKQEAgLTIxNDEsNiArMjE1MSwxMiBAQAogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+dHhfY29tcGxldGVfd29yayk7CiAKKwlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkgeworCQlhdGhfZGJnKGNvbW1vbiwgQVRIX0RCR19BTlksICJEZXZpY2Ugbm90IHByZXNlbnRcbiIpOworCQltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CisJCXJldHVybjsKKwl9CisKIAlpZiAoZHJvcCkKIAkJdGltZW91dCA9IDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCmluZGV4IGE5YzNmNDYuLmIyOWM4MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwpAQCAtNDg2LDEyICs0ODYsMTIgQEAKIGJvb2wgYXRoX3N0b3ByZWN2KHN0cnVjdCBhdGhfc29mdGMgKnNjKQogewogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCWJvb2wgc3RvcHBlZDsKKwlib29sIHN0b3BwZWQsIHJlc2V0ID0gZmFsc2U7CiAKIAlzcGluX2xvY2tfYmgoJnNjLT5yeC5yeGJ1ZmxvY2spOwogCWF0aDlrX2h3X2Fib3J0cGN1cmVjdihhaCk7CiAJYXRoOWtfaHdfc2V0cnhmaWx0ZXIoYWgsIDApOwotCXN0b3BwZWQgPSBhdGg5a19od19zdG9wZG1hcmVjdihhaCk7CisJc3RvcHBlZCA9IGF0aDlrX2h3X3N0b3BkbWFyZWN2KGFoLCAmcmVzZXQpOwogCiAJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0VETUEpCiAJCWF0aF9lZG1hX3N0b3BfcmVjdihzYyk7CkBAIC01MDYsNyArNTA2LDcgQEAKIAkJCSJjb25mdXNpbmcgdGhlIERNQSBlbmdpbmUgd2hlbiB3ZSBzdGFydCBSWCB1cFxuIik7CiAJCUFUSF9EQkdfV0FSTl9PTl9PTkNFKCFzdG9wcGVkKTsKIAl9Ci0JcmV0dXJuIHN0b3BwZWQ7CisJcmV0dXJuIHN0b3BwZWQgJiYgIXJlc2V0OwogfQogCiB2b2lkIGF0aF9mbHVzaHJlY3Yoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZF9jb21tb24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oCmluZGV4IDI0OGM2NzAuLjVjMmNmZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkX2NvbW1vbi5oCkBAIC0xOTUsNiArMTk1LDcgQEAKIAl7QVBMOV9XT1JMRCwgQ1RMX0VUU0ksIENUTF9FVFNJfSwKIAogCXtBUEwzX0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAorCXtBUEw3X0ZDQ0EsIENUTF9GQ0MsIENUTF9GQ0N9LAogCXtBUEwxX0VUU0lDLCBDVExfRkNDLCBDVExfRVRTSX0sCiAJe0FQTDJfRVRTSUMsIENUTF9GQ0MsIENUTF9FVFNJfSwKIAl7QVBMMl9BUExELCBDVExfRkNDLCBOT19DVEx9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKaW5kZXggZDU5YjAxNi4uNWFmNDBkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCkBAIC03Miw2ICs3Miw3IEBACiBNT0RVTEVfRklSTVdBUkUoImI0My91Y29kZTEzLmZ3Iik7CiBNT0RVTEVfRklSTVdBUkUoImI0My91Y29kZTE0LmZ3Iik7CiBNT0RVTEVfRklSTVdBUkUoImI0My91Y29kZTE1LmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImI0My91Y29kZTE2X21pbW8uZnciKTsKIE1PRFVMRV9GSVJNV0FSRSgiYjQzL3Vjb2RlNS5mdyIpOwogTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGU5LmZ3Iik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9LY29uZmlnCmluZGV4IDJhNDVkZDQuLmFlZjY1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L0tjb25maWcKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvS2NvbmZpZwpAQCAtMSw2ICsxLDUgQEAKIGNvbmZpZyBJV0xXSUZJX0xFR0FDWQotCXRyaXN0YXRlICJJbnRlbCBXaXJlbGVzcyBXaWZpIGxlZ2FjeSBkZXZpY2VzIgotCWRlcGVuZHMgb24gUENJICYmIE1BQzgwMjExCisJdHJpc3RhdGUKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IE5FV19MRURTCiAJc2VsZWN0IExFRFNfQ0xBU1MKQEAgLTY1LDcgKzY0LDggQEAKIAogY29uZmlnIElXTDQ5NjUKIAl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lGaSA0OTY1QUdOIChpd2w0OTY1KSIKLQlkZXBlbmRzIG9uIElXTFdJRklfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEKKwlzZWxlY3QgSVdMV0lGSV9MRUdBQ1kKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yCiAKQEAgLTkyLDcgKzkyLDggQEAKIAogY29uZmlnIElXTDM5NDUKIAl0cmlzdGF0ZSAiSW50ZWwgUFJPL1dpcmVsZXNzIDM5NDVBQkcvQkcgTmV0d29yayBDb25uZWN0aW9uIChpd2wzOTQ1KSIKLQlkZXBlbmRzIG9uIElXTFdJRklfTEVHQUNZCisJZGVwZW5kcyBvbiBQQ0kgJiYgTUFDODAyMTEKKwlzZWxlY3QgSVdMV0lGSV9MRUdBQ1kKIAktLS1oZWxwLS0tCiAJICBTZWxlY3QgdG8gYnVpbGQgdGhlIGRyaXZlciBzdXBwb3J0aW5nIHRoZToKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTM5NDUtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC0zOTQ1LWh3LmgKaW5kZXggNzc5ZDNjYi4uNWMzYTY4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTM5NDUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtMzk0NS1ody5oCkBAIC03NCw4ICs3NCw2IEBACiAvKiBSU1NJIHRvIGRCbSAqLwogI2RlZmluZSBJV0wzOV9SU1NJX09GRlNFVAk5NQogCi0jZGVmaW5lIElXTF9ERUZBVUxUX1RYX1BPV0VSCTB4MEYKLQogLyoKICAqIEVFUFJPTSByZWxhdGVkIGNvbnN0YW50cywgZW51bXMsIGFuZCBzdHJ1Y3R1cmVzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtaHcuaAppbmRleCAwOGIxODljLi5mYzZmYTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LWh3LmgKQEAgLTgwNCw5ICs4MDQsNiBAQAogCiAjZGVmaW5lIElXTDQ5NjVfREVGQVVMVF9UWF9SRVRSWSAgMTUKIAotLyogTGltaXQgcmFuZ2Ugb2YgdHhwb3dlciBvdXRwdXQgdGFyZ2V0IHRvIGJlIGJldHdlZW4gdGhlc2UgdmFsdWVzICovCi0jZGVmaW5lIElXTDQ5NjVfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTgkoMCkJLyogMCBkQm06IDEgbWlsbGl3YXR0ICovCi0KIC8qIEVFUFJPTSAqLwogI2RlZmluZSBJV0w0OTY1X0ZJUlNUX0FNUERVX1FVRVVFCTEwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LXR4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtNDk2NS10eC5jCmluZGV4IDVjNDA1MDIuLjc5YWMwODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC00OTY1LXR4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLTQ5NjUtdHguYwpAQCAtMzE2LDEyICszMTYsMTggQEAKIAogCWhkcl9sZW4gPSBpZWVlODAyMTFfaGRybGVuKGZjKTsKIAotCS8qIEZpbmQgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCi0Jc3RhX2lkID0gaXdsX2xlZ2FjeV9zdGFfaWRfb3JfYnJvYWRjYXN0KHByaXYsIGN0eCwgaW5mby0+Y29udHJvbC5zdGEpOwotCWlmIChzdGFfaWQgPT0gSVdMX0lOVkFMSURfU1RBVElPTikgewotCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKLQkJCSAgICAgICBoZHItPmFkZHIxKTsKLQkJZ290byBkcm9wX3VubG9jazsKKwkvKiBGb3IgbWFuYWdlbWVudCBmcmFtZXMgdXNlIGJyb2FkY2FzdCBpZCB0byBkbyBub3QgYnJlYWsgYWdncmVnYXRpb24gKi8KKwlpZiAoIWllZWU4MDIxMV9pc19kYXRhKGZjKSkKKwkJc3RhX2lkID0gY3R4LT5iY2FzdF9zdGFfaWQ7CisJZWxzZSB7CisJCS8qIEZpbmQgaW5kZXggaW50byBzdGF0aW9uIHRhYmxlIGZvciBkZXN0aW5hdGlvbiBzdGF0aW9uICovCisJCXN0YV9pZCA9IGl3bF9sZWdhY3lfc3RhX2lkX29yX2Jyb2FkY2FzdChwcml2LCBjdHgsIGluZm8tPmNvbnRyb2wuc3RhKTsKKworCQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKKwkJCUlXTF9ERUJVR19EUk9QKHByaXYsICJEcm9wcGluZyAtIElOVkFMSUQgU1RBVElPTjogJXBNXG4iLAorCQkJCSAgICAgICBoZHItPmFkZHIxKTsKKwkJCWdvdG8gZHJvcF91bmxvY2s7CisJCX0KIAl9CiAKIAlJV0xfREVCVUdfVFgocHJpdiwgInN0YXRpb24gSWQgJWRcbiIsIHN0YV9pZCk7CkBAIC0xMTI3LDEyICsxMTMzLDE2IEBACiAJICAgICBxLT5yZWFkX3B0ciA9IGl3bF9sZWdhY3lfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CiAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwotCQlpd2w0OTY1X3R4X3N0YXR1cyhwcml2LCB0eF9pbmZvLAotCQkJCSB0eHFfaWQgPj0gSVdMNDk2NV9GSVJTVF9BTVBEVV9RVUVVRSk7CisKKwkJaWYgKFdBUk5fT05fT05DRSh0eF9pbmZvLT5za2IgPT0gTlVMTCkpCisJCQljb250aW51ZTsKIAogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKil0eF9pbmZvLT5za2ItPmRhdGE7Ci0JCWlmIChoZHIgJiYgaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCisJCWlmIChpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCW5mcmVlZCsrOworCisJCWl3bDQ5NjVfdHhfc3RhdHVzKHByaXYsIHR4X2luZm8sCisJCQkJIHR4cV9pZCA+PSBJV0w0OTY1X0ZJUlNUX0FNUERVX1FVRVVFKTsKIAkJdHhfaW5mby0+c2tiID0gTlVMTDsKIAogCQlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfZnJlZV90ZmQocHJpdiwgdHhxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtY29yZS5jCmluZGV4IDcwMDdkNjEuLjQyZGIwZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWNvcmUuYwpAQCAtMTYwLDYgKzE2MCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpnZW9fY2g7CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlICpyYXRlczsKIAlpbnQgaSA9IDA7CisJczggbWF4X3R4X3Bvd2VyID0gMDsKIAogCWlmIChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2JpdHJhdGVzIHx8CiAJICAgIHByaXYtPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMpIHsKQEAgLTIzNSw4ICsyMzYsOCBAQAogCiAJCQlnZW9fY2gtPmZsYWdzIHw9IGNoLT5odDQwX2V4dGVuc2lvbl9jaGFubmVsOwogCi0JCQlpZiAoY2gtPm1heF9wb3dlcl9hdmcgPiBwcml2LT50eF9wb3dlcl9kZXZpY2VfbG10KQotCQkJCXByaXYtPnR4X3Bvd2VyX2RldmljZV9sbXQgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKKwkJCWlmIChjaC0+bWF4X3Bvd2VyX2F2ZyA+IG1heF90eF9wb3dlcikKKwkJCQltYXhfdHhfcG93ZXIgPSBjaC0+bWF4X3Bvd2VyX2F2ZzsKIAkJfSBlbHNlIHsKIAkJCWdlb19jaC0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7CiAJCX0KQEAgLTI0OSw2ICsyNTAsMTAgQEAKIAkJCQkgZ2VvX2NoLT5mbGFncyk7CiAJfQogCisJcHJpdi0+dHhfcG93ZXJfZGV2aWNlX2xtdCA9IG1heF90eF9wb3dlcjsKKwlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9IG1heF90eF9wb3dlcjsKKwlwcml2LT50eF9wb3dlcl9uZXh0ID0gbWF4X3R4X3Bvd2VyOworCiAJaWYgKChwcml2LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID09IDApICYmCiAJICAgICBwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfQSkgewogCQlJV0xfSU5GTyhwcml2LCAiSW5jb3JyZWN0bHkgZGV0ZWN0ZWQgQkcgY2FyZCBhcyBBQkcuICIKQEAgLTExMjQsMTEgKzExMjksMTEgQEAKIAlpZiAoIXByaXYtPmNmZy0+b3BzLT5saWItPnNlbmRfdHhfcG93ZXIpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCWlmICh0eF9wb3dlciA8IElXTDQ5NjVfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTikgeworCS8qIDAgZEJtIG1lYW4gMSBtaWxsaXdhdHQgKi8KKwlpZiAodHhfcG93ZXIgPCAwKSB7CiAJCUlXTF9XQVJOKHByaXYsCi0JCQkgIlJlcXVlc3RlZCB1c2VyIFRYUE9XRVIgJWQgYmVsb3cgbG93ZXIgbGltaXQgJWQuXG4iLAotCQkJIHR4X3Bvd2VyLAotCQkJIElXTDQ5NjVfVFhfUE9XRVJfVEFSR0VUX1BPV0VSX01JTik7CisJCQkgIlJlcXVlc3RlZCB1c2VyIFRYUE9XRVIgJWQgYmVsb3cgMSBtVy5cbiIsCisJCQkgdHhfcG93ZXIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIxNTAsNiArMjE1NSwxMyBAQAogCQkJZ290byBzZXRfY2hfb3V0OwogCQl9CiAKKwkJaWYgKHByaXYtPml3X21vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKKwkJICAgICFpd2xfbGVnYWN5X2lzX2NoYW5uZWxfaWJzcyhjaF9pbmZvKSkgeworCQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIG5vdCBJQlNTIGNoYW5uZWxcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gc2V0X2NoX291dDsKKwkJfQorCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkJZm9yX2VhY2hfY29udGV4dChwcml2LCBjdHgpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1kZXYuaAppbmRleCA5ZWU4NDlkLi5mNDNhYzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWRldi5oCkBAIC0xNDExLDYgKzE0MTEsMTIgQEAKIAlyZXR1cm4gKCEoY2gtPmZsYWdzICYgRUVQUk9NX0NIQU5ORUxfQUNUSVZFKSkgPyAxIDogMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK2l3bF9sZWdhY3lfaXNfY2hhbm5lbF9pYnNzKGNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaCkKK3sKKwlyZXR1cm4gKGNoLT5mbGFncyAmIEVFUFJPTV9DSEFOTkVMX0lCU1MpID8gMSA6IDA7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogX19pd2xfbGVnYWN5X2ZyZWVfcGFnZXMoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1lZXByb20uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1lZXByb20uYwppbmRleCAwNGM1NjQ4Li5jYjM0NmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtZWVwcm9tLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWVlcHJvbS5jCkBAIC00NzEsMTMgKzQ3MSw2IEBACiAJCQkJCSAgICAgZmxhZ3MgJiBFRVBST01fQ0hBTk5FTF9SQURBUikpCiAJCQkJICAgICAgID8gIiIgOiAibm90ICIpOwogCi0JCQkvKiBTZXQgdGhlIHR4X3Bvd2VyX3VzZXJfbG10IHRvIHRoZSBoaWdoZXN0IHBvd2VyCi0JCQkgKiBzdXBwb3J0ZWQgYnkgYW55IGNoYW5uZWwgKi8KLQkJCWlmIChlZXByb21fY2hfaW5mb1tjaF0ubWF4X3Bvd2VyX2F2ZyA+Ci0JCQkJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCkKLQkJCQlwcml2LT50eF9wb3dlcl91c2VyX2xtdCA9Ci0JCQkJICAgIGVlcHJvbV9jaF9pbmZvW2NoXS5tYXhfcG93ZXJfYXZnOwotCiAJCQljaF9pbmZvKys7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2wtbGVkLmMKaW5kZXggMTVlYjhiNy4uYmRhMGQ2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsLWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bC1sZWQuYwpAQCAtNDgsOCArNDgsMjEgQEAKIE1PRFVMRV9QQVJNX0RFU0MobGVkX21vZGUsICIwPXN5c3RlbSBkZWZhdWx0LCAiCiAJCSIxPU9uKFJGIE9uKS9PZmYoUkYgT2ZmKSwgMj1ibGlua2luZyIpOwogCisvKiBUaHJvdWdocHV0CQlPRkYgdGltZShtcykJT04gdGltZSAobXMpCisgKgk+MzAwCQkJMjUJCTI1CisgKgk+MjAwIHRvIDMwMAkJNDAJCTQwCisgKgk+MTAwIHRvIDIwMAkJNTUJCTU1CisgKgk+NzAgdG8gMTAwCQk2NQkJNjUKKyAqCT41MCB0byA3MAkJNzUJCTc1CisgKgk+MjAgdG8gNTAJCTg1CQk4NQorICoJPjEwIHRvIDIwCQk5NQkJOTUKKyAqCT41IHRvIDEwCQkxMTAJCTExMAorICoJPjEgdG8gNQkJCTEzMAkJMTMwCisgKgk+MCB0byAxCQkJMTY3CQkxNjcKKyAqCTw9MAkJCQkJU09MSUQgT04KKyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfdHB0X2JsaW5rIGl3bF9ibGlua1tdID0gewotCXsgLnRocm91Z2hwdXQgPSAwICogMTAyNCAtIDEsIC5ibGlua190aW1lID0gMzM0IH0sCisJeyAudGhyb3VnaHB1dCA9IDAsIC5ibGlua190aW1lID0gMzM0IH0sCiAJeyAudGhyb3VnaHB1dCA9IDEgKiAxMDI0IC0gMSwgLmJsaW5rX3RpbWUgPSAyNjAgfSwKIAl7IC50aHJvdWdocHV0ID0gNSAqIDEwMjQgLSAxLCAuYmxpbmtfdGltZSA9IDIyMCB9LAogCXsgLnRocm91Z2hwdXQgPSAxMCAqIDEwMjQgLSAxLCAuYmxpbmtfdGltZSA9IDE5MCB9LApAQCAtMTAxLDYgKzExNCwxMSBAQAogCWlmIChwcml2LT5ibGlua19vbiA9PSBvbiAmJiBwcml2LT5ibGlua19vZmYgPT0gb2ZmKQogCQlyZXR1cm4gMDsKIAorCWlmIChvZmYgPT0gMCkgeworCQkvKiBsZWQgaXMgU09MSURfT04gKi8KKwkJb24gPSBJV0xfTEVEX1NPTElEOworCX0KKwogCUlXTF9ERUJVR19MRUQocHJpdiwgIkxlZCBibGluayB0aW1lIGNvbXBlbnNhdGlvbj0ldVxuIiwKIAkJCXByaXYtPmNmZy0+YmFzZV9wYXJhbXMtPmxlZF9jb21wZW5zYXRpb24pOwogCWxlZF9jbWQub24gPSBpd2xfbGVnYWN5X2JsaW5rX2NvbXBlbnNhdGlvbihwcml2LCBvbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsMzk0NS1iYXNlLmMKaW5kZXggMjhlYjNkOC4uY2M3ZWJjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsMzk0NS1iYXNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsZWdhY3kvaXdsMzk0NS1iYXNlLmMKQEAgLTM4MjUsMTAgKzM4MjUsNiBAQAogCXByaXYtPmZvcmNlX3Jlc2V0W0lXTF9GV19SRVNFVF0ucmVzZXRfZHVyYXRpb24gPQogCQlJV0xfREVMQVlfTkVYVF9GT1JDRV9GV19SRUxPQUQ7CiAKLQotCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gSVdMX0RFRkFVTFRfVFhfUE9XRVI7Ci0JcHJpdi0+dHhfcG93ZXJfbmV4dCA9IElXTF9ERUZBVUxUX1RYX1BPV0VSOwotCiAJaWYgKGVlcHJvbS0+dmVyc2lvbiA8IEVFUFJPTV8zOTQ1X0VFUFJPTV9WRVJTSU9OKSB7CiAJCUlXTF9XQVJOKHByaXYsICJVbnN1cHBvcnRlZCBFRVBST00gdmVyc2lvbjogMHglMDRYXG4iLAogCQkJIGVlcHJvbS0+dmVyc2lvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2xlZ2FjeS9pd2w0OTY1LWJhc2UuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCmluZGV4IDkxYjNkOGIuLmE2MmZlMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bGVnYWN5L2l3bDQ5NjUtYmFzZS5jCkBAIC0yOTg0LDE1ICsyOTg0LDE1IEBACiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpd2xfcHJpdiwKIAkJCXR4cG93ZXJfd29yayk7CiAKKwltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKIAkvKiBJZiBhIHNjYW4gaGFwcGVuZWQgdG8gc3RhcnQgYmVmb3JlIHdlIGdvdCBoZXJlCiAJICogdGhlbiBqdXN0IHJldHVybjsgdGhlIHN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHdpbGwKIAkgKiBraWNrIG9mZiBhbm90aGVyIHNjaGVkdWxlZCB3b3JrIHRvIGNvbXBlbnNhdGUgZm9yCiAJICogYW55IHRlbXBlcmF0dXJlIGRlbHRhIHdlIG1pc3NlZCBoZXJlLiAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSB8fAogCSAgICB0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKQotCQlyZXR1cm47Ci0KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisJCWdvdG8gb3V0OwogCiAJLyogUmVnYXJkbGVzcyBvZiBpZiB3ZSBhcmUgYXNzb2NpYXRlZCwgd2UgbXVzdCByZWNvbmZpZ3VyZSB0aGUKIAkgKiBUWCBwb3dlciBzaW5jZSBmcmFtZXMgY2FuIGJlIHNlbnQgb24gbm9uLXJhZGFyIGNoYW5uZWxzIHdoaWxlCkBAIC0zMDAyLDcgKzMwMDIsNyBAQAogCS8qIFVwZGF0ZSBsYXN0X3RlbXBlcmF0dXJlIHRvIGtlZXAgaXNfY2FsaWJfbmVlZGVkIGZyb20gcnVubmluZwogCSAqIHdoZW4gaXQgaXNuJ3QgbmVlZGVkLi4uICovCiAJcHJpdi0+bGFzdF90ZW1wZXJhdHVyZSA9IHByaXYtPnRlbXBlcmF0dXJlOwotCitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKQEAgLTMxNDAsMTIgKzMxNDAsNiBAQAogCiAJaXdsX2xlZ2FjeV9pbml0X3NjYW5fcGFyYW1zKHByaXYpOwogCi0JLyogU2V0IHRoZSB0eF9wb3dlcl91c2VyX2xtdCB0byB0aGUgbG93ZXN0IHBvd2VyIGxldmVsCi0JICogdGhpcyB2YWx1ZSB3aWxsIGdldCBvdmVyd3JpdHRlbiBieSBjaGFubmVsIG1heCBwb3dlciBhdmcKLQkgKiBmcm9tIGVlcHJvbSAqLwotCXByaXYtPnR4X3Bvd2VyX3VzZXJfbG10ID0gSVdMNDk2NV9UWF9QT1dFUl9UQVJHRVRfUE9XRVJfTUlOOwotCXByaXYtPnR4X3Bvd2VyX25leHQgPSBJV0w0OTY1X1RYX1BPV0VSX1RBUkdFVF9QT1dFUl9NSU47Ci0KIAlyZXQgPSBpd2xfbGVnYWN5X2luaXRfY2hhbm5lbF9tYXAocHJpdik7CiAJaWYgKHJldCkgewogCQlJV0xfRVJSKHByaXYsICJpbml0aWFsaXppbmcgcmVndWxhdG9yeSBmYWlsZWQ6ICVkXG4iLCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IDNlYTMxYjYuLjIyZTA0NWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTUzMCw2ICs1MzAsOSBAQAogc3RydWN0IGl3bF9jZmcgaXdsNTMwMF9hZ25fY2ZnID0gewogCS5uYW1lID0gIkludGVsKFIpIFVsdGltYXRlIE4gV2lGaSBMaW5rIDUzMDAgQUdOIiwKIAlJV0xfREVWSUNFXzUwMDAsCisJLyogYXQgbGVhc3QgRUVQUk9NIDB4MTFBIGhhcyB3cm9uZyBpbmZvICovCisJLnZhbGlkX3R4X2FudCA9IEFOVF9BQkMsCS8qIC5jZmcgb3ZlcndyaXRlICovCisJLnZhbGlkX3J4X2FudCA9IEFOVF9BQkMsCS8qIC5jZmcgb3ZlcndyaXRlICovCiAJLmh0X3BhcmFtcyA9ICZpd2w1MDAwX2h0X3BhcmFtcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnhvbi5jCmluZGV4IGRmZGJlYTYuLmZiYmRlMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1yeG9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJ4b24uYwpAQCAtMzM1LDcgKzMzNSw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKIAljb25zdCBzdHJ1Y3QgaXdsX2NoYW5uZWxfaW5mbyAqY2hfaW5mbzsKIAlpbnQgcmV0ID0gMDsKLQlib29sIGh0X2NoYW5nZWRbTlVNX0lXTF9SWE9OX0NUWF0gPSB7fTsKIAogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiY2hhbmdlZCAlI3giLCBjaGFuZ2VkKTsKIApAQCAtMzgzLDEwICszODIsOCBAQAogCiAJCWZvcl9lYWNoX2NvbnRleHQocHJpdiwgY3R4KSB7CiAJCQkvKiBDb25maWd1cmUgSFQ0MCBjaGFubmVscyAqLwotCQkJaWYgKGN0eC0+aHQuZW5hYmxlZCAhPSBjb25mX2lzX2h0KGNvbmYpKSB7CisJCQlpZiAoY3R4LT5odC5lbmFibGVkICE9IGNvbmZfaXNfaHQoY29uZikpCiAJCQkJY3R4LT5odC5lbmFibGVkID0gY29uZl9pc19odChjb25mKTsKLQkJCQlodF9jaGFuZ2VkW2N0eC0+Y3R4aWRdID0gdHJ1ZTsKLQkJCX0KIAogCQkJaWYgKGN0eC0+aHQuZW5hYmxlZCkgewogCQkJCWlmIChjb25mX2lzX2h0NDBfbWludXMoY29uZikpIHsKQEAgLTQ1NSw4ICs0NTIsNiBAQAogCQlpZiAoIW1lbWNtcCgmY3R4LT5zdGFnaW5nLCAmY3R4LT5hY3RpdmUsIHNpemVvZihjdHgtPnN0YWdpbmcpKSkKIAkJCWNvbnRpbnVlOwogCQlpd2xhZ25fY29tbWl0X3J4b24ocHJpdiwgY3R4KTsKLQkJaWYgKGh0X2NoYW5nZWRbY3R4LT5jdHhpZF0pCi0JCQlpd2xhZ25fdXBkYXRlX3Fvcyhwcml2LCBjdHgpOwogCX0KICBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCmluZGV4IGE3MDlkMDUuLjA3MTJiNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi10eC5jCkBAIC01NjgsMTIgKzU2OCwxNyBAQAogCiAJaGRyX2xlbiA9IGllZWU4MDIxMV9oZHJsZW4oZmMpOwogCi0JLyogRmluZCBpbmRleCBpbnRvIHN0YXRpb24gdGFibGUgZm9yIGRlc3RpbmF0aW9uIHN0YXRpb24gKi8KLQlzdGFfaWQgPSBpd2xfc3RhX2lkX29yX2Jyb2FkY2FzdChwcml2LCBjdHgsIGluZm8tPmNvbnRyb2wuc3RhKTsKLQlpZiAoc3RhX2lkID09IElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0RFQlVHX0RST1AocHJpdiwgIkRyb3BwaW5nIC0gSU5WQUxJRCBTVEFUSU9OOiAlcE1cbiIsCi0JCQkgICAgICAgaGRyLT5hZGRyMSk7Ci0JCWdvdG8gZHJvcF91bmxvY2s7CisJLyogRm9yIG1hbmFnZW1lbnQgZnJhbWVzIHVzZSBicm9hZGNhc3QgaWQgdG8gZG8gbm90IGJyZWFrIGFnZ3JlZ2F0aW9uICovCisJaWYgKCFpZWVlODAyMTFfaXNfZGF0YShmYykpCisJCXN0YV9pZCA9IGN0eC0+YmNhc3Rfc3RhX2lkOworCWVsc2UgeworCQkvKiBGaW5kIGluZGV4IGludG8gc3RhdGlvbiB0YWJsZSBmb3IgZGVzdGluYXRpb24gc3RhdGlvbiAqLworCQlzdGFfaWQgPSBpd2xfc3RhX2lkX29yX2Jyb2FkY2FzdChwcml2LCBjdHgsIGluZm8tPmNvbnRyb2wuc3RhKTsKKwkJaWYgKHN0YV9pZCA9PSBJV0xfSU5WQUxJRF9TVEFUSU9OKSB7CisJCQlJV0xfREVCVUdfRFJPUChwcml2LCAiRHJvcHBpbmcgLSBJTlZBTElEIFNUQVRJT046ICVwTVxuIiwKKwkJCQkgICAgICAgaGRyLT5hZGRyMSk7CisJCQlnb3RvIGRyb3BfdW5sb2NrOworCQl9CiAJfQogCiAJSVdMX0RFQlVHX1RYKHByaXYsICJzdGF0aW9uIElkICVkXG4iLCBzdGFfaWQpOwpAQCAtMTIyNCwxMiArMTIyOSwxNiBAQAogCSAgICAgcS0+cmVhZF9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+cmVhZF9wdHIsIHEtPm5fYmQpKSB7CiAKIAkJdHhfaW5mbyA9ICZ0eHEtPnR4Ylt0eHEtPnEucmVhZF9wdHJdOwotCQlpd2xhZ25fdHhfc3RhdHVzKHByaXYsIHR4X2luZm8sCi0JCQkJIHR4cV9pZCA+PSBJV0xBR05fRklSU1RfQU1QRFVfUVVFVUUpOworCisJCWlmIChXQVJOX09OX09OQ0UodHhfaW5mby0+c2tiID09IE5VTEwpKQorCQkJY29udGludWU7CiAKIAkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopdHhfaW5mby0+c2tiLT5kYXRhOwotCQlpZiAoaGRyICYmIGllZWU4MDIxMV9pc19kYXRhX3FvcyhoZHItPmZyYW1lX2NvbnRyb2wpKQorCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpCiAJCQluZnJlZWQrKzsKKworCQlpd2xhZ25fdHhfc3RhdHVzKHByaXYsIHR4X2luZm8sCisJCQkJIHR4cV9pZCA+PSBJV0xBR05fRklSU1RfQU1QRFVfUVVFVUUpOwogCQl0eF9pbmZvLT5za2IgPSBOVUxMOwogCiAJCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50eHFfaW52YWxfYnl0ZV9jbnRfdGJsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCA3ZThhNjU4Li5mM2FjNjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtMTMzOSw4ICsxMzM5LDggQEAKIAkJCQkgICAgY3B1X3RvX2xlMTYoUFNfTU9ERV9BQ1RJT05fRVhJVF9QUykpIHsKIAkJCQkJbGJzX2RlYl9ob3N0KAogCQkJCQkgICAgICAgIkVYRUNfTkVYVF9DTUQ6IGlnbm9yZSBFTlRFUl9QUyBjbWRcbiIpOwotCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCWxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUsIDApOwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCkBAIC0xMzUyLDggKzEzNTIsOCBAQAogCQkJCSAgICAocHJpdi0+cHNzdGF0ZSA9PSBQU19TVEFURV9QUkVfU0xFRVApKSB7CiAJCQkJCWxic19kZWJfaG9zdCgKIAkJCQkJICAgICAgICJFWEVDX05FWFRfQ01EOiBpZ25vcmUgRVhJVF9QUyBjbWQgaW4gc2xlZXBcbiIpOwotCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOworCQkJCQlsaXN0X2RlbCgmY21kbm9kZS0+bGlzdCk7CiAJCQkJCWxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUsIDApOwogCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5kcml2ZXJfbG9jaywgZmxhZ3MpOwogCQkJCQlwcml2LT5uZWVkdG93YWtldXAgPSAxOwpAQCAtMTM2Niw3ICsxMzY2LDkgQEAKIAkJCQkgICAgICAgIkVYRUNfTkVYVF9DTUQ6IHNlbmRpbmcgRVhJVF9QU1xuIik7CiAJCQl9CiAJCX0KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmRyaXZlcl9sb2NrLCBmbGFncyk7CiAJCWxpc3RfZGVsKCZjbWRub2RlLT5saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+ZHJpdmVyX2xvY2ssIGZsYWdzKTsKIAkJbGJzX2RlYl9ob3N0KCJFWEVDX05FWFRfQ01EOiBzZW5kaW5nIGNvbW1hbmQgMHglMDR4XG4iLAogCQkJICAgIGxlMTZfdG9fY3B1KGNtZC0+Y29tbWFuZCkpOwogCQlsYnNfc3VibWl0X2NvbW1hbmQocHJpdiwgY21kbm9kZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwppbmRleCAzNjk1MjI3Li5jMWNlYjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKQEAgLTEzNyw2ICsxMzcsNyBAQAogc3RydWN0IG13bDhrX3ByaXYgewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCWludCBpcnE7CiAKIAlzdHJ1Y3QgbXdsOGtfZGV2aWNlX2luZm8gKmRldmljZV9pbmZvOwogCkBAIC0zNzYxLDkgKzM3NjIsMTEgQEAKIAlyYyA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgbXdsOGtfaW50ZXJydXB0LAogCQkJIElSUUZfU0hBUkVELCBNV0w4S19OQU1FLCBodyk7CiAJaWYgKHJjKSB7CisJCXByaXYtPmlycSA9IC0xOwogCQl3aXBoeV9lcnIoaHctPndpcGh5LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIElSUSBoYW5kbGVyXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQorCXByaXYtPmlycSA9IHByaXYtPnBkZXYtPmlycTsKIAogCS8qIEVuYWJsZSBUWCByZWNsYWltIGFuZCBSWCB0YXNrbGV0cy4gICovCiAJdGFza2xldF9lbmFibGUoJnByaXYtPnBvbGxfdHhfdGFzayk7CkBAIC0zODAwLDYgKzM4MDMsNyBAQAogCWlmIChyYykgewogCQlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOwogCQlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKwkJcHJpdi0+aXJxID0gLTE7CiAJCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cG9sbF90eF90YXNrKTsKIAkJdGFza2xldF9kaXNhYmxlKCZwcml2LT5wb2xsX3J4X3Rhc2spOwogCX0KQEAgLTM4MTgsNyArMzgyMiwxMCBAQAogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKLQlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGh3KTsKKwlpZiAocHJpdi0+aXJxICE9IC0xKSB7CisJCWZyZWVfaXJxKHByaXYtPnBkZXYtPmlycSwgaHcpOworCQlwcml2LT5pcnEgPSAtMTsKKwl9CiAKIAkvKiBTdG9wIGZpbmFsaXplIGpvaW4gd29ya2VyICovCiAJY2FuY2VsX3dvcmtfc3luYygmcHJpdi0+ZmluYWxpemVfam9pbl93b3JrZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKaW5kZXggNzgzNGMyNi4uMDQyODQyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jCkBAIC03MDMsNyArNzAzLDcgQEAKIAlzdHJ1Y3QgcDU0X3R4X2luZm8gKnA1NGluZm87CiAJc3RydWN0IHA1NF9oZHIgKmhkcjsKIAlzdHJ1Y3QgcDU0X3R4X2RhdGEgKnR4aGRyOwotCXVuc2lnbmVkIGludCBwYWRkaW5nLCBsZW4sIGV4dHJhX2xlbjsKKwl1bnNpZ25lZCBpbnQgcGFkZGluZywgbGVuLCBleHRyYV9sZW4gPSAwOwogCWludCBpLCBqLCByaWR4OwogCXUxNiBoZHJfZmxhZ3MgPSAwLCBhaWQgPSAwOwogCXU4IHJhdGUsIHF1ZXVlID0gMCwgY3J5cHRfb2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3pvcnJvODM5MC5jIGIvZHJpdmVycy9uZXQvem9ycm84MzkwLmMKaW5kZXggYjc4YTM4ZC4uOGM3YzUyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvem9ycm84MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvem9ycm84MzkwLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCiAgICAgYm9hcmQgPSB6LT5yZXNvdXJjZS5zdGFydDsKICAgICBpb2FkZHIgPSBib2FyZCtjYXJkc1tpXS5vZmZzZXQ7Ci0gICAgZGV2ID0gYWxsb2NfZWlfbmV0ZGV2KCk7CisgICAgZGV2ID0gX19fX2FsbG9jX2VpX25ldGRldigwKTsKICAgICBpZiAoIWRldikKIAlyZXR1cm4gLUVOT01FTTsKICAgICBpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpb2FkZHIsIE5FX0lPX0VYVEVOVCoyLCBEUlZfTkFNRSkpIHsKQEAgLTE0NiwxNSArMTQ2LDE1IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHpvcnJvODM5MF9uZXRkZXZfb3BzID0gewogCS5uZG9fb3BlbgkJPSB6b3JybzgzOTBfb3BlbiwKIAkubmRvX3N0b3AJCT0gem9ycm84MzkwX2Nsb3NlLAotCS5uZG9fc3RhcnRfeG1pdAkJPSBlaV9zdGFydF94bWl0LAotCS5uZG9fdHhfdGltZW91dAkJPSBlaV90eF90aW1lb3V0LAotCS5uZG9fZ2V0X3N0YXRzCQk9IGVpX2dldF9zdGF0cywKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGVpX3NldF9tdWx0aWNhc3RfbGlzdCwKKwkubmRvX3N0YXJ0X3htaXQJCT0gX19laV9zdGFydF94bWl0LAorCS5uZG9fdHhfdGltZW91dAkJPSBfX2VpX3R4X3RpbWVvdXQsCisJLm5kb19nZXRfc3RhdHMJCT0gX19laV9nZXRfc3RhdHMsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSBfX2VpX3NldF9tdWx0aWNhc3RfbGlzdCwKIAkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKIAkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBldGhfbWFjX2FkZHIsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0JLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBlaV9wb2xsLAorCS5uZG9fcG9sbF9jb250cm9sbGVyCT0gX19laV9wb2xsLAogI2VuZGlmCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jIGIvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYwppbmRleCBhMzc1NWZmLi5iYzhjZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKQEAgLTI1NTAsNyArMjU1MCw2IEBACiAJCQkJCSBjb25zdCBzdHJ1Y3QgcGFycG9ydF9wY192aWFfZGF0YSAqdmlhKQogewogCXNob3J0IGludGFfYWRkcls2XSA9IHsgMHgyQTAsIDB4MkMwLCAweDIyMCwgMHgyNDAsIDB4MUUwIH07Ci0Jc3RydWN0IHJlc291cmNlICpiYXNlX3JlczsKIAl1MzIgaXRlODg3MnNldDsKIAl1MzIgaXRlODg3Ml9scHQsIGl0ZTg4NzJfbHB0aGk7CiAJdTggaXRlODg3Ml9pcnEsIHR5cGU7CkBAIC0yNTYxLDggKzI1NjAsNyBAQAogCiAJLyogbWFrZSBzdXJlIHdoaWNoIG9uZSBjaGlwICovCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQliYXNlX3JlcyA9IHJlcXVlc3RfcmVnaW9uKGludGFfYWRkcltpXSwgMzIsICJpdDg4N3giKTsKLQkJaWYgKGJhc2VfcmVzKSB7CisJCWlmIChyZXF1ZXN0X3JlZ2lvbihpbnRhX2FkZHJbaV0sIDMyLCAiaXQ4ODd4IikpIHsKIAkJCWludCB0ZXN0OwogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDYwLAogCQkJCQkJMHhlNTAwMDAwMCB8IGludGFfYWRkcltpXSk7CkBAIC0yNTcxLDcgKzI1NjksNyBAQAogCQkJdGVzdCA9IGluYihpbnRhX2FkZHJbaV0pOwogCQkJaWYgKHRlc3QgIT0gMHhmZikKIAkJCQlicmVhazsKLQkJCXJlbGVhc2VfcmVnaW9uKGludGFfYWRkcltpXSwgMHg4KTsKKwkJCXJlbGVhc2VfcmVnaW9uKGludGFfYWRkcltpXSwgMzIpOwogCQl9CiAJfQogCWlmIChpID49IDUpIHsKQEAgLTI2MzUsNyArMjYzMyw3IEBACiAJLyoKIAkgKiBSZWxlYXNlIHRoZSByZXNvdXJjZSBzbyB0aGF0IHBhcnBvcnRfcGNfcHJvYmVfcG9ydCBjYW4gZ2V0IGl0LgogCSAqLwotCXJlbGVhc2VfcmVzb3VyY2UoYmFzZV9yZXMpOworCXJlbGVhc2VfcmVnaW9uKGludGFfYWRkcltpXSwgMzIpOwogCWlmIChwYXJwb3J0X3BjX3Byb2JlX3BvcnQoaXRlODg3Ml9scHQsIGl0ZTg4NzJfbHB0aGksCiAJCQkJICAgaXJxLCBQQVJQT1JUX0RNQV9OT05FLCAmcGRldi0+ZGV2LCAwKSkgewogCQlwcmludGsoS0VSTl9JTkZPCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9LY29uZmlnIGIvZHJpdmVycy9wY2kvS2NvbmZpZwppbmRleCBjOGZmNjQ2Li4wZmE0NjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvcGNpL0tjb25maWcKQEAgLTg4LDQgKzg4LDYgQEAKIAlkZXBlbmRzIG9uIEhPVFBMVUcKIAlkZWZhdWx0IHkKIAotc2VsZWN0IE5MUyBpZiAoRE1JIHx8IEFDUEkpCitjb25maWcgUENJX0xBQkVMCisJZGVmX2Jvb2wgeSBpZiAoRE1JIHx8IEFDUEkpCisJc2VsZWN0IE5MUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCA5OGQ2MWM4Li5jODVmNzQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3BjaS9NYWtlZmlsZQpAQCAtNTYsMTAgKzU2LDEwIEBACiAjIEFDUEkgUmVsYXRlZCBQQ0kgRlcgRnVuY3Rpb25zCiAjIEFDUEkgX0RTTSBwcm92aWRlZCBmaXJtd2FyZSBpbnN0YW5jZSBhbmQgc3RyaW5nIG5hbWUKICMKLW9iai0kKENPTkZJR19BQ1BJKSAgICArPSBwY2ktYWNwaS5vIHBjaS1sYWJlbC5vCitvYmotJChDT05GSUdfQUNQSSkgICAgKz0gcGNpLWFjcGkubwogCiAjIFNNQklPUyBwcm92aWRlZCBmaXJtd2FyZSBpbnN0YW5jZSBhbmQgbGFiZWxzCi1vYmotJChDT05GSUdfRE1JKSAgICArPSBwY2ktbGFiZWwubworb2JqLSQoQ09ORklHX1BDSV9MQUJFTCkgKz0gcGNpLWxhYmVsLm8KIAogIyBDYXJkYnVzICYgQ29tcGFjdFBDSSB1c2Ugc2V0dXAtYnVzCiBvYmotJChDT05GSUdfSE9UUExVRykgKz0gc2V0dXAtYnVzLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IDUwNWMxYzcuLjZhZjZiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NvcmVfb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvdGJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXRzLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlICJwY2kuaCIKQEAgLTEyOTksNyArMTMwMCw3IEBACiBzdGF0aWMgc3RydWN0IGlvdmFfZG9tYWluIHJlc2VydmVkX2lvdmFfbGlzdDsKIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcmVzZXJ2ZWRfcmJ0cmVlX2tleTsKIAotc3RhdGljIHZvaWQgZG1hcl9pbml0X3Jlc2VydmVkX3Jhbmdlcyh2b2lkKQorc3RhdGljIGludCBkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKHZvaWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwogCXN0cnVjdCBpb3ZhICppb3ZhOwpAQCAtMTMxMyw4ICsxMzE0LDEwIEBACiAJLyogSU9BUElDIHJhbmdlcyBzaG91bGRuJ3QgYmUgYWNjZXNzZWQgYnkgRE1BICovCiAJaW92YSA9IHJlc2VydmVfaW92YSgmcmVzZXJ2ZWRfaW92YV9saXN0LCBJT1ZBX1BGTihJT0FQSUNfUkFOR0VfU1RBUlQpLAogCQlJT1ZBX1BGTihJT0FQSUNfUkFOR0VfRU5EKSk7Ci0JaWYgKCFpb3ZhKQorCWlmICghaW92YSkgewogCQlwcmludGsoS0VSTl9FUlIgIlJlc2VydmUgSU9BUElDIHJhbmdlIGZhaWxlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCS8qIFJlc2VydmUgYWxsIFBDSSBNTUlPIHRvIGF2b2lkIHBlZXItdG8tcGVlciBhY2Nlc3MgKi8KIAlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKQEAgLTEzMjcsMTEgKzEzMzAsMTMgQEAKIAkJCWlvdmEgPSByZXNlcnZlX2lvdmEoJnJlc2VydmVkX2lvdmFfbGlzdCwKIAkJCQkJICAgIElPVkFfUEZOKHItPnN0YXJ0KSwKIAkJCQkJICAgIElPVkFfUEZOKHItPmVuZCkpOwotCQkJaWYgKCFpb3ZhKQorCQkJaWYgKCFpb3ZhKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJSZXNlcnZlIGlvdmEgZmFpbGVkXG4iKTsKKwkJCQlyZXR1cm4gLUVOT0RFVjsKKwkJCX0KIAkJfQogCX0KLQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBkb21haW5fcmVzZXJ2ZV9zcGVjaWFsX3JhbmdlcyhzdHJ1Y3QgZG1hcl9kb21haW4gKmRvbWFpbikKQEAgLTE4MzUsNyArMTg0MCw3IEBACiAKIAlyZXQgPSBpb21tdV9hdHRhY2hfZG9tYWluKGRvbWFpbiwgaW9tbXUpOwogCWlmIChyZXQpIHsKLQkJZG9tYWluX2V4aXQoZG9tYWluKTsKKwkJZnJlZV9kb21haW5fbWVtKGRvbWFpbik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0yMjEzLDcgKzIyMTgsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgX19pbml0IGluaXRfZG1hcnModm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IGluaXRfZG1hcnMoaW50IGZvcmNlX29uKQogewogCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKIAlzdHJ1Y3QgZG1hcl9ybXJyX3VuaXQgKnJtcnI7CkBAIC0yMzkzLDggKzIzOTgsMTUgQEAKIAkgKiAgIGVuYWJsZSB0cmFuc2xhdGlvbgogCSAqLwogCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7Ci0JCWlmIChkcmhkLT5pZ25vcmVkKQorCQlpZiAoZHJoZC0+aWdub3JlZCkgeworCQkJLyoKKwkJCSAqIHdlIGFsd2F5cyBoYXZlIHRvIGRpc2FibGUgUE1ScyBvciBETUEgbWF5IGZhaWwgb24KKwkJCSAqIHRoaXMgZGV2aWNlCisJCQkgKi8KKwkJCWlmIChmb3JjZV9vbikKKwkJCQlpb21tdV9kaXNhYmxlX3Byb3RlY3RfbWVtX3JlZ2lvbnMoZHJoZC0+aW9tbXUpOwogCQkJY29udGludWU7CisJCX0KIAkJaW9tbXUgPSBkcmhkLT5pb21tdTsKIAogCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoaW9tbXUpOwpAQCAtMzI0MCw5ICszMjUyLDE1IEBACiAJaWYgKCFkb21haW4pCiAJCXJldHVybiAwOwogCi0JaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpCisJaWYgKGFjdGlvbiA9PSBCVVNfTk9USUZZX1VOQk9VTkRfRFJJVkVSICYmICFpb21tdV9wYXNzX3Rocm91Z2gpIHsKIAkJZG9tYWluX3JlbW92ZV9vbmVfZGV2X2luZm8oZG9tYWluLCBwZGV2KTsKIAorCQlpZiAoIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfVklSVFVBTF9NQUNISU5FKSAmJgorCQkgICAgIShkb21haW4tPmZsYWdzICYgRE9NQUlOX0ZMQUdfU1RBVElDX0lERU5USVRZKSAmJgorCQkgICAgbGlzdF9lbXB0eSgmZG9tYWluLT5kZXZpY2VzKSkKKwkJCWRvbWFpbl9leGl0KGRvbWFpbik7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNzcsMTIgKzMyOTUsMjEgQEAKIAlpZiAobm9faW9tbXUgfHwgZG1hcl9kaXNhYmxlZCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpb21tdV9pbml0X21lbXBvb2woKTsKLQlkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKCk7CisJaWYgKGlvbW11X2luaXRfbWVtcG9vbCgpKSB7CisJCWlmIChmb3JjZV9vbikKKwkJCXBhbmljKCJ0Ym9vdDogRmFpbGVkIHRvIGluaXRpYWxpemUgaW9tbXUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIAktRU5PREVWOworCX0KKworCWlmIChkbWFyX2luaXRfcmVzZXJ2ZWRfcmFuZ2VzKCkpIHsKKwkJaWYgKGZvcmNlX29uKQorCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gcmVzZXJ2ZSBpb21tdSByYW5nZXNcbiIpOworCQlyZXR1cm4gCS1FTk9ERVY7CisJfQogCiAJaW5pdF9ub19yZW1hcHBpbmdfZGV2aWNlcygpOwogCi0JcmV0ID0gaW5pdF9kbWFycygpOworCXJldCA9IGluaXRfZG1hcnMoZm9yY2Vfb24pOwogCWlmIChyZXQpIHsKIAkJaWYgKGZvcmNlX29uKQogCQkJcGFuaWMoInRib290OiBGYWlsZWQgdG8gaW5pdGlhbGl6ZSBETUFSc1xuIik7CkBAIC0zMzkxLDYgKzM0MTgsMTEgQEAKIAkJZG9tYWluLT5pb21tdV9jb3VudC0tOwogCQlkb21haW5fdXBkYXRlX2lvbW11X2NhcChkb21haW4pOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkb21haW4tPmlvbW11X2xvY2ssIHRtcF9mbGFncyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOworCQljbGVhcl9iaXQoZG9tYWluLT5pZCwgaW9tbXUtPmRvbWFpbl9pZHMpOworCQlpb21tdS0+ZG9tYWluc1tkb21haW4tPmlkXSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5sb2NrLCB0bXBfZmxhZ3MpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9kb21haW5fbG9jaywgZmxhZ3MpOwpAQCAtMzYwNyw5ICszNjM5LDkgQEAKIAogCQlwdGUgPSBkbWFyX2RvbWFpbi0+cGdkOwogCQlpZiAoZG1hX3B0ZV9wcmVzZW50KHB0ZSkpIHsKLQkJCWZyZWVfcGd0YWJsZV9wYWdlKGRtYXJfZG9tYWluLT5wZ2QpOwogCQkJZG1hcl9kb21haW4tPnBnZCA9IChzdHJ1Y3QgZG1hX3B0ZSAqKQogCQkJCXBoeXNfdG9fdmlydChkbWFfcHRlX2FkZHIocHRlKSk7CisJCQlmcmVlX3BndGFibGVfcGFnZShwdGUpOwogCQl9CiAJCWRtYXJfZG9tYWluLT5hZ2F3LS07CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW92LmMgYi9kcml2ZXJzL3BjaS9pb3YuYwppbmRleCA1NTNkOGVlLi40MmZhZTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9pb3YuYworKysgYi9kcml2ZXJzL3BjaS9pb3YuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2ktYXRzLmg+CiAjaW5jbHVkZSAicGNpLmgiCiAKICNkZWZpbmUgVklSVEZOX0lEX0xFTgkxNgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmggYi9kcml2ZXJzL3BjaS9wY2kuaAppbmRleCBhNmVjMjAwLi40MDIwMDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuaAorKysgYi9kcml2ZXJzL3BjaS9wY2kuaApAQCAtMjUwLDE1ICsyNTAsNiBAQAogCXU4IF9faW9tZW0gKm1zdGF0ZTsJLyogVkYgTWlncmF0aW9uIFN0YXRlIEFycmF5ICovCiB9OwogCi0vKiBBZGRyZXNzIFRyYW5zbGF0aW9uIFNlcnZpY2UgKi8KLXN0cnVjdCBwY2lfYXRzIHsKLQlpbnQgcG9zOwkvKiBjYXBhYmlsaXR5IHBvc2l0aW9uICovCi0JaW50IHN0dTsJLyogU21hbGxlc3QgVHJhbnNsYXRpb24gVW5pdCAqLwotCWludCBxZGVwOwkvKiBJbnZhbGlkYXRlIFF1ZXVlIERlcHRoICovCi0JaW50IHJlZl9jbnQ7CS8qIFBoeXNpY2FsIEZ1bmN0aW9uIHJlZmVyZW5jZSBjb3VudCAqLwotCXVuc2lnbmVkIGludCBpc19lbmFibGVkOjE7CS8qIEVuYWJsZSBiaXQgaXMgc2V0ICovCi19OwotCiAjaWZkZWYgQ09ORklHX1BDSV9JT1YKIGV4dGVybiBpbnQgcGNpX2lvdl9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgcGNpX2lvdl9yZWxlYXNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpAQCAtMjY5LDE5ICsyNjAsNiBAQAogZXh0ZXJuIHZvaWQgcGNpX3Jlc3RvcmVfaW92X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGludCBwY2lfaW92X2J1c19yYW5nZShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIAotZXh0ZXJuIGludCBwY2lfZW5hYmxlX2F0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHMpOwotZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfYXRzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotZXh0ZXJuIGludCBwY2lfYXRzX3F1ZXVlX2RlcHRoKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotLyoqCi0gKiBwY2lfYXRzX2VuYWJsZWQgLSBxdWVyeSB0aGUgQVRTIHN0YXR1cwotICogQGRldjogdGhlIFBDSSBkZXZpY2UKLSAqCi0gKiBSZXR1cm5zIDEgaWYgQVRTIGNhcGFiaWxpdHkgaXMgZW5hYmxlZCwgb3IgMCBpZiBub3QuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHBjaV9hdHNfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiBkZXYtPmF0cyAmJiBkZXYtPmF0cy0+aXNfZW5hYmxlZDsKLX0KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBwY2lfaW92X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKQEAgLTMwNCwyMSArMjgyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9hdHMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBzKQotewotCXJldHVybiAtRU5PREVWOwotfQotc3RhdGljIGlubGluZSB2b2lkIHBjaV9kaXNhYmxlX2F0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotfQotc3RhdGljIGlubGluZSBpbnQgcGNpX2F0c19xdWV1ZV9kZXB0aChzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiAtRU5PREVWOwotfQotc3RhdGljIGlubGluZSBpbnQgcGNpX2F0c19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JcmV0dXJuIDA7Ci19CiAjZW5kaWYgLyogQ09ORklHX1BDSV9JT1YgKi8KIAogc3RhdGljIGlubGluZSByZXNvdXJjZV9zaXplX3QgcGNpX3Jlc291cmNlX2FsaWdubWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwppbmRleCBlYmY1MWFkLi5hODA2Y2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYworKysgYi9kcml2ZXJzL3BjaS9zZXR1cC1idXMuYwpAQCAtNTc5LDcgKzU3OSw3IEBACiAJfQogCXNpemUwID0gY2FsY3VsYXRlX2lvc2l6ZShzaXplLCBtaW5fc2l6ZSwgc2l6ZTEsCiAJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgNDA5Nik7Ci0Jc2l6ZTEgPSAhYWRkX3NpemU/IHNpemUwOgorCXNpemUxID0gKCFhZGRfaGVhZCB8fCAoYWRkX2hlYWQgJiYgIWFkZF9zaXplKSkgPyBzaXplMCA6CiAJCWNhbGN1bGF0ZV9pb3NpemUoc2l6ZSwgbWluX3NpemUrYWRkX3NpemUsIHNpemUxLAogCQkJcmVzb3VyY2Vfc2l6ZShiX3JlcyksIDQwOTYpOwogCWlmICghc2l6ZTAgJiYgIXNpemUxKSB7CkBAIC02NzcsNyArNjc3LDcgQEAKIAkJYWxpZ24gKz0gYWxpZ25zW29yZGVyXTsKIAl9CiAJc2l6ZTAgPSBjYWxjdWxhdGVfbWVtc2l6ZShzaXplLCBtaW5fc2l6ZSwgMCwgcmVzb3VyY2Vfc2l6ZShiX3JlcyksIG1pbl9hbGlnbik7Ci0Jc2l6ZTEgPSAhYWRkX3NpemUgPyBzaXplIDoKKwlzaXplMSA9ICghYWRkX2hlYWQgfHwgKGFkZF9oZWFkICYmICFhZGRfc2l6ZSkpID8gc2l6ZTAgOgogCQljYWxjdWxhdGVfbWVtc2l6ZShzaXplLCBtaW5fc2l6ZSthZGRfc2l6ZSwgMCwKIAkJCQlyZXNvdXJjZV9zaXplKGJfcmVzKSwgbWluX2FsaWduKTsKIAlpZiAoIXNpemUwICYmICFzaXplMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCBmZTc3ZTgyLi5lOGMxOWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwpAQCAtMTczLDcgKzE3Myw3IEBACiAJYyA9IHBfZGV2LT5mdW5jdGlvbl9jb25maWc7CiAKIAlpZiAoIShjLT5zdGF0ZSAmIENPTkZJR19MT0NLRUQpKSB7Ci0JCWRldl9kYmcoJnBfZGV2LT5kZXYsICJDb25maWd1cmF0aW9uIGlzbid0J3QgbG9ja2VkXG4iKTsKKwkJZGV2X2RiZygmcF9kZXYtPmRldiwgIkNvbmZpZ3VyYXRpb24gaXNuJ3QgbG9ja2VkXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogCQlyZXR1cm4gLUVBQ0NFUzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCmluZGV4IDVmMmRkMzguLjJjMWFiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2VlZXBjLWxhcHRvcC5jCkBAIC01ODUsOCArNTg1LDkgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWcoc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMpCitzdGF0aWMgdm9pZCBlZWVwY19yZmtpbGxfaG90cGx1ZyhzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywgYWNwaV9oYW5kbGUgaGFuZGxlKQogeworCXN0cnVjdCBwY2lfZGV2ICpwb3J0OwogCXN0cnVjdCBwY2lfZGV2ICpkZXY7CiAJc3RydWN0IHBjaV9idXMgKmJ1czsKIAlib29sIGJsb2NrZWQgPSBlZWVwY193bGFuX3Jma2lsbF9ibG9ja2VkKGVlZXBjKTsKQEAgLTU5OSw5ICs2MDAsMTYgQEAKIAltdXRleF9sb2NrKCZlZWVwYy0+aG90cGx1Z19sb2NrKTsKIAogCWlmIChlZWVwYy0+aG90cGx1Z19zbG90KSB7Ci0JCWJ1cyA9IHBjaV9maW5kX2J1cygwLCAxKTsKKwkJcG9ydCA9IGFjcGlfZ2V0X3BjaV9kZXYoaGFuZGxlKTsKKwkJaWYgKCFwb3J0KSB7CisJCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBwb3J0XG4iKTsKKwkJCWdvdG8gb3V0X3VubG9jazsKKwkJfQorCisJCWJ1cyA9IHBvcnQtPnN1Ym9yZGluYXRlOworCiAJCWlmICghYnVzKSB7Ci0JCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZmluZCBQQ0kgYnVzIDE/XG4iKTsKKwkJCXByX3dhcm5pbmcoIlVuYWJsZSB0byBmaW5kIFBDSSBidXM/XG4iKTsKIAkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCkBAIC02MDksNiArNjE3LDcgQEAKIAkJCXByX2VycigiVW5hYmxlIHRvIHJlYWQgUENJIGNvbmZpZyBzcGFjZT9cbiIpOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CisKIAkJYWJzZW50ID0gKGwgPT0gMHhmZmZmZmZmZik7CiAKIAkJaWYgKGJsb2NrZWQgIT0gYWJzZW50KSB7CkBAIC02NDcsNiArNjU2LDE3IEBACiAJbXV0ZXhfdW5sb2NrKCZlZWVwYy0+aG90cGx1Z19sb2NrKTsKIH0KIAorc3RhdGljIHZvaWQgZWVlcGNfcmZraWxsX2hvdHBsdWdfdXBkYXRlKHN0cnVjdCBlZWVwY19sYXB0b3AgKmVlZXBjLCBjaGFyICpub2RlKQoreworCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOworCWFjcGlfaGFuZGxlIGhhbmRsZTsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShOVUxMLCBub2RlLCAmaGFuZGxlKTsKKworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMsIGhhbmRsZSk7Cit9CisKIHN0YXRpYyB2b2lkIGVlZXBjX3Jma2lsbF9ub3RpZnkoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgZXZlbnQsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBkYXRhOwpAQCAtNjU0LDcgKzY3NCw3IEBACiAJaWYgKGV2ZW50ICE9IEFDUElfTk9USUZZX0JVU19DSEVDSykKIAkJcmV0dXJuOwogCi0JZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMpOworCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjLCBoYW5kbGUpOwogfQogCiBzdGF0aWMgaW50IGVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihzdHJ1Y3QgZWVlcGNfbGFwdG9wICplZWVwYywKQEAgLTY3Miw2ICs2OTIsMTEgQEAKIAkJCQkJCSAgICAgZWVlcGMpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCQlwcl93YXJuaW5nKCJGYWlsZWQgdG8gcmVnaXN0ZXIgbm90aWZ5IG9uICVzXG4iLCBub2RlKTsKKwkJLyoKKwkJICogUmVmcmVzaCBwY2kgaG90cGx1ZyBpbiBjYXNlIHRoZSByZmtpbGwgc3RhdGUgd2FzCisJCSAqIGNoYW5nZWQgZHVyaW5nIHNldHVwLgorCQkgKi8KKwkJZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMsIGhhbmRsZSk7CiAJfSBlbHNlCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC02OTMsNiArNzE4LDEyIEBACiAJCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJCXByX2VycigiRXJyb3IgcmVtb3ZpbmcgcmZraWxsIG5vdGlmeSBoYW5kbGVyICVzXG4iLAogCQkJCW5vZGUpOworCQkJLyoKKwkJCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsCisJCQkgKiBzdGF0ZSB3YXMgY2hhbmdlZCBhZnRlcgorCQkJICogZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoKQorCQkJICovCisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjLCBoYW5kbGUpOwogCX0KIH0KIApAQCAtODE2LDExICs4NDcsNyBAQAogCQlyZmtpbGxfZGVzdHJveShlZWVwYy0+d2xhbl9yZmtpbGwpOwogCQllZWVwYy0+d2xhbl9yZmtpbGwgPSBOVUxMOwogCX0KLQkvKgotCSAqIFJlZnJlc2ggcGNpIGhvdHBsdWcgaW4gY2FzZSB0aGUgcmZraWxsIHN0YXRlIHdhcyBjaGFuZ2VkIGFmdGVyCi0JICogZWVlcGNfdW5yZWdpc3Rlcl9yZmtpbGxfbm90aWZpZXIoKQotCSAqLwotCWVlZXBjX3Jma2lsbF9ob3RwbHVnKGVlZXBjKTsKKwogCWlmIChlZWVwYy0+aG90cGx1Z19zbG90KQogCQlwY2lfaHBfZGVyZWdpc3RlcihlZWVwYy0+aG90cGx1Z19zbG90KTsKIApAQCAtODg5LDExICs5MTYsNiBAQAogCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNSIpOwogCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNiIpOwogCWVlZXBjX3JlZ2lzdGVyX3Jma2lsbF9ub3RpZmllcihlZWVwYywgIlxcX1NCLlBDSTAuUDBQNyIpOwotCS8qCi0JICogUmVmcmVzaCBwY2kgaG90cGx1ZyBpbiBjYXNlIHRoZSByZmtpbGwgc3RhdGUgd2FzIGNoYW5nZWQgZHVyaW5nCi0JICogc2V0dXAuCi0JICovCi0JZWVlcGNfcmZraWxsX2hvdHBsdWcoZWVlcGMpOwogCiBleGl0OgogCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FTk9ERVYpCkBAIC05MjgsOCArOTUwLDExIEBACiAJc3RydWN0IGVlZXBjX2xhcHRvcCAqZWVlcGMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKIAogCS8qIFJlZnJlc2ggYm90aCB3bGFuIHJma2lsbCBzdGF0ZSBhbmQgcGNpIGhvdHBsdWcgKi8KLQlpZiAoZWVlcGMtPndsYW5fcmZraWxsKQotCQllZWVwY19yZmtpbGxfaG90cGx1ZyhlZWVwYyk7CisJaWYgKGVlZXBjLT53bGFuX3Jma2lsbCkgeworCQllZWVwY19yZmtpbGxfaG90cGx1Z191cGRhdGUoZWVlcGMsICJcXF9TQi5QQ0kwLlAwUDUiKTsKKwkJZWVlcGNfcmZraWxsX2hvdHBsdWdfdXBkYXRlKGVlZXBjLCAiXFxfU0IuUENJMC5QMFA2Iik7CisJCWVlZXBjX3Jma2lsbF9ob3RwbHVnX3VwZGF0ZShlZWVwYywgIlxcX1NCLlBDSTAuUDBQNyIpOworCX0KIAogCWlmIChlZWVwYy0+Ymx1ZXRvb3RoX3Jma2lsbCkKIAkJcmZraWxsX3NldF9zd19zdGF0ZShlZWVwYy0+Ymx1ZXRvb3RoX3Jma2lsbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9zb255LWxhcHRvcC5jCmluZGV4IDhmNzA5YWUuLjZmZThjZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3NvbnktbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvc29ueS1sYXB0b3AuYwpAQCAtOTM0LDYgKzkzNCwxNCBAQAogLyoKICAqIEJhY2tsaWdodCBkZXZpY2UKICAqLworc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzIHsKKwlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqZGV2OworCWludAkJCWhhbmRsZTsKKwl1OAkJCW9mZnNldDsKKwl1OAkJCW1heGx2bDsKK307CitzdHJ1Y3Qgc29ueV9iYWNrbGlnaHRfcHJvcHMgc29ueV9ibF9wcm9wczsKKwogc3RhdGljIGludCBzb255X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlyZXR1cm4gYWNwaV9jYWxsc2V0ZnVuYyhzb255X25jX2FjcGlfaGFuZGxlLCAiU0JSVCIsCkBAIC05NTQsMjEgKzk2MiwyNiBAQAogewogCWludCByZXN1bHQ7CiAJaW50ICpoYW5kbGUgPSAoaW50ICopYmxfZ2V0X2RhdGEoYmQpOworCXN0cnVjdCBzb255X2JhY2tsaWdodF9wcm9wcyAqc2RldiA9CisJCShzdHJ1Y3Qgc29ueV9iYWNrbGlnaHRfcHJvcHMgKilibF9nZXRfZGF0YShiZCk7CiAKLQlzb255X2NhbGxfc25jX2hhbmRsZSgqaGFuZGxlLCAweDAyMDAsICZyZXN1bHQpOworCXNvbnlfY2FsbF9zbmNfaGFuZGxlKHNkZXYtPmhhbmRsZSwgMHgwMjAwLCAmcmVzdWx0KTsKIAotCXJldHVybiByZXN1bHQgJiAweGZmOworCXJldHVybiAocmVzdWx0ICYgMHhmZikgLSBzZGV2LT5vZmZzZXQ7CiB9CiAKIHN0YXRpYyBpbnQgc29ueV9uY191cGRhdGVfc3RhdHVzX25nKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKIAlpbnQgdmFsdWUsIHJlc3VsdDsKIAlpbnQgKmhhbmRsZSA9IChpbnQgKilibF9nZXRfZGF0YShiZCk7CisJc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzICpzZGV2ID0KKwkJKHN0cnVjdCBzb255X2JhY2tsaWdodF9wcm9wcyAqKWJsX2dldF9kYXRhKGJkKTsKIAotCXZhbHVlID0gYmQtPnByb3BzLmJyaWdodG5lc3M7Ci0Jc29ueV9jYWxsX3NuY19oYW5kbGUoKmhhbmRsZSwgMHgwMTAwIHwgKHZhbHVlIDw8IDE2KSwgJnJlc3VsdCk7CisJdmFsdWUgPSBiZC0+cHJvcHMuYnJpZ2h0bmVzcyArIHNkZXYtPm9mZnNldDsKKwlpZiAoc29ueV9jYWxsX3NuY19oYW5kbGUoc2Rldi0+aGFuZGxlLCAweDAxMDAgfCAodmFsdWUgPDwgMTYpLCAmcmVzdWx0KSkKKwkJcmV0dXJuIC1FSU87CiAKLQlyZXR1cm4gc29ueV9uY19nZXRfYnJpZ2h0bmVzc19uZyhiZCk7CisJcmV0dXJuIHZhbHVlOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGJhY2tsaWdodF9vcHMgc29ueV9iYWNrbGlnaHRfb3BzID0gewpAQCAtOTgxLDggKzk5NCw2IEBACiAJLnVwZGF0ZV9zdGF0dXMgPSBzb255X25jX3VwZGF0ZV9zdGF0dXNfbmcsCiAJLmdldF9icmlnaHRuZXNzID0gc29ueV9uY19nZXRfYnJpZ2h0bmVzc19uZywKIH07Ci1zdGF0aWMgaW50IGJhY2tsaWdodF9uZ19oYW5kbGU7Ci1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKnNvbnlfYmFja2xpZ2h0X2RldmljZTsKIAogLyoKICAqIE5ldyBTTkMtb25seSBWYWlvcyBldmVudCBtYXBwaW5nIHRvIGRyaXZlciBrbm93biBrZXlzCkBAIC0xNTQ5LDYgKzE1NjAsNzUgQEAKIAkJCQkmaWdub3JlKTsKIH0KIAorc3RhdGljIHZvaWQgc29ueV9uY19iYWNrbGlnaHRfbmdfcmVhZF9saW1pdHMoaW50IGhhbmRsZSwKKwkJc3RydWN0IHNvbnlfYmFja2xpZ2h0X3Byb3BzICpwcm9wcykKK3sKKwlpbnQgb2Zmc2V0OworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwl1OCBicmx2bCwgaTsKKwl1OCBtaW4gPSAweGZmLCBtYXggPSAweDAwOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsKKwl1bmlvbiBhY3BpX29iamVjdCBpbl9vYmo7CisJdW5pb24gYWNwaV9vYmplY3QgKmx2bF9lbnVtOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisKKwlwcm9wcy0+aGFuZGxlID0gaGFuZGxlOworCXByb3BzLT5vZmZzZXQgPSAwOworCXByb3BzLT5tYXhsdmwgPSAweGZmOworCisJb2Zmc2V0ID0gc29ueV9maW5kX3NuY19oYW5kbGUoaGFuZGxlKTsKKwlpZiAob2Zmc2V0IDwgMCkKKwkJcmV0dXJuOworCisJLyogdHJ5IHRvIHJlYWQgdGhlIGJvdW5kYXJpZXMgZnJvbSBBQ1BJIHRhYmxlcywgaWYgd2UgZmFpbCB0aGUgYWJvdmUKKwkgKiBkZWZhdWx0cyBzaG91bGQgYmUgcmVhc29uYWJsZQorCSAqLworCXBhcmFtcy5jb3VudCA9IDE7CisJcGFyYW1zLnBvaW50ZXIgPSAmaW5fb2JqOworCWluX29iai50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5fb2JqLmludGVnZXIudmFsdWUgPSBvZmZzZXQ7CisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3Qoc29ueV9uY19hY3BpX2hhbmRsZSwgIlNOMDYiLCAmcGFyYW1zLAorCQkJJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm47CisKKwlsdmxfZW51bSA9ICh1bmlvbiBhY3BpX29iamVjdCAqKSBidWZmZXIucG9pbnRlcjsKKwlpZiAoIWx2bF9lbnVtKSB7CisJCXByX2VycigiTm8gU04wNiByZXR1cm4gb2JqZWN0LiIpOworCQlyZXR1cm47CisJfQorCWlmIChsdmxfZW51bS0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCXByX2VycigiSW52YWxpZCBTTjA2IHJldHVybiBvYmplY3QgMHglLjJ4XG4iLAorCQkgICAgICAgbHZsX2VudW0tPnR5cGUpOworCQlnb3RvIG91dF9pbnZhbGlkOworCX0KKworCS8qIHRoZSBidWZmZXIgbGlzdHMgYnJpZ2h0bmVzcyBsZXZlbHMgYXZhaWxhYmxlLCBicmlnaHRuZXNzIGxldmVscyBhcmUKKwkgKiBmcm9tIDAgdG8gOCBpbiB0aGUgYXJyYXksIG90aGVyIHZhbHVlcyBhcmUgdXNlZCBieSBBTFMgY29udHJvbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgOSAmJiBpIDwgbHZsX2VudW0tPmJ1ZmZlci5sZW5ndGg7IGkrKykgeworCisJCWJybHZsID0gKihsdmxfZW51bS0+YnVmZmVyLnBvaW50ZXIgKyBpKTsKKwkJZHByaW50aygiQnJpZ2h0bmVzcyBsZXZlbDogJWRcbiIsIGJybHZsKTsKKworCQlpZiAoIWJybHZsKQorCQkJYnJlYWs7CisKKwkJaWYgKGJybHZsID4gbWF4KQorCQkJbWF4ID0gYnJsdmw7CisJCWlmIChicmx2bCA8IG1pbikKKwkJCW1pbiA9IGJybHZsOworCX0KKwlwcm9wcy0+b2Zmc2V0ID0gbWluOworCXByb3BzLT5tYXhsdmwgPSBtYXg7CisJZHByaW50aygiQnJpZ2h0bmVzcyBsZXZlbHM6IG1pbj0lZCBtYXg9JWRcbiIsIHByb3BzLT5vZmZzZXQsCisJCQlwcm9wcy0+bWF4bHZsKTsKKworb3V0X2ludmFsaWQ6CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybjsKK30KKwogc3RhdGljIHZvaWQgc29ueV9uY19iYWNrbGlnaHRfc2V0dXAodm9pZCkKIHsKIAlhY3BpX2hhbmRsZSB1bnVzZWQ7CkBAIC0xNTU3LDE0ICsxNjM3LDE0IEBACiAJc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHByb3BzOwogCiAJaWYgKHNvbnlfZmluZF9zbmNfaGFuZGxlKDB4MTJmKSAhPSAtMSkgewotCQliYWNrbGlnaHRfbmdfaGFuZGxlID0gMHgxMmY7CiAJCW9wcyA9ICZzb255X2JhY2tsaWdodF9uZ19vcHM7Ci0JCW1heF9icmlnaHRuZXNzID0gMHhmZjsKKwkJc29ueV9uY19iYWNrbGlnaHRfbmdfcmVhZF9saW1pdHMoMHgxMmYsICZzb255X2JsX3Byb3BzKTsKKwkJbWF4X2JyaWdodG5lc3MgPSBzb255X2JsX3Byb3BzLm1heGx2bCAtIHNvbnlfYmxfcHJvcHMub2Zmc2V0OwogCiAJfSBlbHNlIGlmIChzb255X2ZpbmRfc25jX2hhbmRsZSgweDEzNykgIT0gLTEpIHsKLQkJYmFja2xpZ2h0X25nX2hhbmRsZSA9IDB4MTM3OwogCQlvcHMgPSAmc29ueV9iYWNrbGlnaHRfbmdfb3BzOwotCQltYXhfYnJpZ2h0bmVzcyA9IDB4ZmY7CisJCXNvbnlfbmNfYmFja2xpZ2h0X25nX3JlYWRfbGltaXRzKDB4MTM3LCAmc29ueV9ibF9wcm9wcyk7CisJCW1heF9icmlnaHRuZXNzID0gc29ueV9ibF9wcm9wcy5tYXhsdmwgLSBzb255X2JsX3Byb3BzLm9mZnNldDsKIAogCX0gZWxzZSBpZiAoQUNQSV9TVUNDRVNTKGFjcGlfZ2V0X2hhbmRsZShzb255X25jX2FjcGlfaGFuZGxlLCAiR0JSVCIsCiAJCQkJCQkmdW51c2VkKSkpIHsKQEAgLTE1NzcsMjIgKzE2NTcsMjIgQEAKIAltZW1zZXQoJnByb3BzLCAwLCBzaXplb2Yoc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzKSk7CiAJcHJvcHMudHlwZSA9IEJBQ0tMSUdIVF9QTEFURk9STTsKIAlwcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IG1heF9icmlnaHRuZXNzOwotCXNvbnlfYmFja2xpZ2h0X2RldmljZSA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoInNvbnkiLCBOVUxMLAotCQkJCQkJCSAgJmJhY2tsaWdodF9uZ19oYW5kbGUsCi0JCQkJCQkJICBvcHMsICZwcm9wcyk7CisJc29ueV9ibF9wcm9wcy5kZXYgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKCJzb255IiwgTlVMTCwKKwkJCQkJCSAgICAgICZzb255X2JsX3Byb3BzLAorCQkJCQkJICAgICAgb3BzLCAmcHJvcHMpOwogCi0JaWYgKElTX0VSUihzb255X2JhY2tsaWdodF9kZXZpY2UpKSB7Ci0JCXByX3dhcm5pbmcoRFJWX1BGWCAidW5hYmxlIHRvIHJlZ2lzdGVyIGJhY2tsaWdodCBkZXZpY2VcbiIpOwotCQlzb255X2JhY2tsaWdodF9kZXZpY2UgPSBOVUxMOworCWlmIChJU19FUlIoc29ueV9ibF9wcm9wcy5kZXYpKSB7CisJCXByX3dhcm4oRFJWX1BGWCAidW5hYmxlIHRvIHJlZ2lzdGVyIGJhY2tsaWdodCBkZXZpY2VcbiIpOworCQlzb255X2JsX3Byb3BzLmRldiA9IE5VTEw7CiAJfSBlbHNlCi0JCXNvbnlfYmFja2xpZ2h0X2RldmljZS0+cHJvcHMuYnJpZ2h0bmVzcyA9Ci0JCSAgICBvcHMtPmdldF9icmlnaHRuZXNzKHNvbnlfYmFja2xpZ2h0X2RldmljZSk7CisJCXNvbnlfYmxfcHJvcHMuZGV2LT5wcm9wcy5icmlnaHRuZXNzID0KKwkJCW9wcy0+Z2V0X2JyaWdodG5lc3Moc29ueV9ibF9wcm9wcy5kZXYpOwogfQogCiBzdGF0aWMgdm9pZCBzb255X25jX2JhY2tsaWdodF9jbGVhbnVwKHZvaWQpCiB7Ci0JaWYgKHNvbnlfYmFja2xpZ2h0X2RldmljZSkKLQkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKHNvbnlfYmFja2xpZ2h0X2RldmljZSk7CisJaWYgKHNvbnlfYmxfcHJvcHMuZGV2KQorCQliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoc29ueV9ibF9wcm9wcy5kZXYpOwogfQogCiBzdGF0aWMgaW50IHNvbnlfbmNfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQpAQCAtMjU5MCw3ICsyNjcwLDcgQEAKIAltdXRleF9sb2NrKCZzcGljX2Rldi5sb2NrKTsKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU09OWVBJX0lPQ0dCUlQ6Ci0JCWlmIChzb255X2JhY2tsaWdodF9kZXZpY2UgPT0gTlVMTCkgeworCQlpZiAoc29ueV9ibF9wcm9wcy5kZXYgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNjAzLDcgKzI2ODMsNyBAQAogCQkJCXJldCA9IC1FRkFVTFQ7CiAJCWJyZWFrOwogCWNhc2UgU09OWVBJX0lPQ1NCUlQ6Ci0JCWlmIChzb255X2JhY2tsaWdodF9kZXZpY2UgPT0gTlVMTCkgeworCQlpZiAoc29ueV9ibF9wcm9wcy5kZXYgPT0gTlVMTCkgewogCQkJcmV0ID0gLUVJTzsKIAkJCWJyZWFrOwogCQl9CkBAIC0yNjE3LDggKzI2OTcsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJLyogc3luYyB0aGUgYmFja2xpZ2h0IGRldmljZSBzdGF0dXMgKi8KLQkJc29ueV9iYWNrbGlnaHRfZGV2aWNlLT5wcm9wcy5icmlnaHRuZXNzID0KLQkJICAgIHNvbnlfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHNvbnlfYmFja2xpZ2h0X2RldmljZSk7CisJCXNvbnlfYmxfcHJvcHMuZGV2LT5wcm9wcy5icmlnaHRuZXNzID0KKwkJICAgIHNvbnlfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKHNvbnlfYmxfcHJvcHMuZGV2KTsKIAkJYnJlYWs7CiAJY2FzZSBTT05ZUElfSU9DR0JBVDFDQVA6CiAJCWlmIChlY19yZWFkMTYoU09OWVBJX0JBVDFfRlVMTCwgJnZhbDE2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IGVmYjNiNmIuLjU2MmZjZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKQEAgLTEyOCw3ICsxMjgsOCBAQAogfTsKIAogLyogQUNQSSBISURzICovCi0jZGVmaW5lIFRQQUNQSV9BQ1BJX0hLRVlfSElECQkiSUJNMDA2OCIKKyNkZWZpbmUgVFBBQ1BJX0FDUElfSUJNX0hLRVlfSElECSJJQk0wMDY4IgorI2RlZmluZSBUUEFDUElfQUNQSV9MRU5PVk9fSEtFWV9ISUQJIkxFTjAwNjgiCiAjZGVmaW5lIFRQQUNQSV9BQ1BJX0VDX0hJRAkJIlBOUDBDMDkiCiAKIC8qIElucHV0IElEcyAqLwpAQCAtMzg3OSw3ICszODgwLDggQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBpYm1faHRrX2RldmljZV9pZHNbXSA9IHsKLQl7VFBBQ1BJX0FDUElfSEtFWV9ISUQsIDB9LAorCXtUUEFDUElfQUNQSV9JQk1fSEtFWV9ISUQsIDB9LAorCXtUUEFDUElfQUNQSV9MRU5PVk9fSEtFWV9ISUQsIDB9LAogCXsiIiwgMH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0X2dlbjIuYyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCmluZGV4IGFjMjcwMWIuLjA0M2VlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRfZ2VuMi5jCkBAIC05NSw2ICs5NSw5IEBACiAJZWxzZQogCQl0YWJsZSsrOwogCisJaWYgKHJvdXRlX3BvcnQgPT0gUklPX0lOVkFMSURfUk9VVEUpCisJCXJvdXRlX3BvcnQgPSBJRFRfREVGQVVMVF9ST1VURTsKKwogCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCiAJCQkJICBMT0NBTF9SVEVfQ09ORl9ERVNUSURfU0VMLCB0YWJsZSk7CiAKQEAgLTQxMSw2ICs0MTQsMTIgQEAKIAlyZGV2LT5yc3dpdGNoLT5lbV9oYW5kbGUgPSBpZHRnMl9lbV9oYW5kbGVyOwogCXJkZXYtPnJzd2l0Y2gtPnN3X3N5c2ZzID0gaWR0ZzJfc3lzZnM7CiAKKwlpZiAoZG9fZW51bSkgeworCQkvKiBFbnN1cmUgdGhhdCBkZWZhdWx0IHJvdXRpbmcgaXMgZGlzYWJsZWQgb24gc3RhcnR1cCAqLworCQlyaW9fd3JpdGVfY29uZmlnXzMyKHJkZXYsCisJCQkJICAgIFJJT19TVERfUlRFX0RFRkFVTFRfUE9SVCwgSURUX05PX1JPVVRFKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL2lkdGNwcy5jIGIvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL2lkdGNwcy5jCmluZGV4IDNhOTcxMDcuLmQwNmVlMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy9pZHRjcHMuYworKysgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvaWR0Y3BzLmMKQEAgLTI2LDYgKzI2LDkgQEAKIHsKIAl1MzIgcmVzdWx0OwogCisJaWYgKHJvdXRlX3BvcnQgPT0gUklPX0lOVkFMSURfUk9VVEUpCisJCXJvdXRlX3BvcnQgPSBDUFNfREVGQVVMVF9ST1VURTsKKwogCWlmICh0YWJsZSA9PSBSSU9fR0xPQkFMX1RBQkxFKSB7CiAJCXJpb19tcG9ydF93cml0ZV9jb25maWdfMzIobXBvcnQsIGRlc3RpZCwgaG9wY291bnQsCiAJCQkJUklPX1NURF9SVEVfQ09ORl9ERVNUSURfU0VMX0NTUiwgcm91dGVfZGVzdGlkKTsKQEAgLTEzMCw2ICsxMzMsOSBAQAogCQkvKiBzZXQgVFZBTCA9IH41MHVzICovCiAJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwKIAkJCXJkZXYtPnBoeXNfZWZwdHIgKyBSSU9fUE9SVF9MSU5LVE9fQ1RMX0NTUiwgMHg4ZSA8PCA4KTsKKwkJLyogRW5zdXJlIHRoYXQgZGVmYXVsdCByb3V0aW5nIGlzIGRpc2FibGVkIG9uIHN0YXJ0dXAgKi8KKwkJcmlvX3dyaXRlX2NvbmZpZ18zMihyZGV2LAorCQkJCSAgICBSSU9fU1REX1JURV9ERUZBVUxUX1BPUlQsIENQU19OT19ST1VURSk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTd4LmMgYi9kcml2ZXJzL3JhcGlkaW8vc3dpdGNoZXMvdHNpNTd4LmMKaW5kZXggMWE2MjkzNC4uZGI4YjgwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yYXBpZGlvL3N3aXRjaGVzL3RzaTU3eC5jCisrKyBiL2RyaXZlcnMvcmFwaWRpby9zd2l0Y2hlcy90c2k1N3guYwpAQCAtMzAzLDYgKzMwMywxMiBAQAogCXJkZXYtPnJzd2l0Y2gtPmVtX2luaXQgPSB0c2k1N3hfZW1faW5pdDsKIAlyZGV2LT5yc3dpdGNoLT5lbV9oYW5kbGUgPSB0c2k1N3hfZW1faGFuZGxlcjsKIAorCWlmIChkb19lbnVtKSB7CisJCS8qIEVuc3VyZSB0aGF0IGRlZmF1bHQgcm91dGluZyBpcyBkaXNhYmxlZCBvbiBzdGFydHVwICovCisJCXJpb193cml0ZV9jb25maWdfMzIocmRldiwgUklPX1NURF9SVEVfREVGQVVMVF9QT1JULAorCQkJCSAgICBSSU9fSU5WQUxJRF9ST1VURSk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL0tjb25maWcgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCmluZGV4IGUxODc4ODcuLjQyODkxNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL0tjb25maWcKKysrIGIvZHJpdmVycy9ydGMvS2NvbmZpZwpAQCAtMywxMCArMywxMCBAQAogIwogCiBjb25maWcgUlRDX0xJQgotCXRyaXN0YXRlCisJYm9vbAogCiBtZW51Y29uZmlnIFJUQ19DTEFTUwotCXRyaXN0YXRlICJSZWFsIFRpbWUgQ2xvY2siCisJYm9vbCAiUmVhbCBUaW1lIENsb2NrIgogCWRlZmF1bHQgbgogCWRlcGVuZHMgb24gIVMzOTAKIAlzZWxlY3QgUlRDX0xJQgpAQCAtMTUsOSArMTUsNiBAQAogIAkgIGJlIGFsbG93ZWQgdG8gcGx1ZyBvbmUgb3IgbW9yZSBSVENzIHRvIHlvdXIgc3lzdGVtLiBZb3Ugd2lsbAogCSAgcHJvYmFibHkgd2FudCB0byBlbmFibGUgb25lIG9yIG1vcmUgb2YgdGhlIGludGVyZmFjZXMgYmVsb3cuCiAKLQkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQotCSAgd2lsbCBiZSBjYWxsZWQgcnRjLWNvcmUuCi0KIGlmIFJUQ19DTEFTUwogCiBjb25maWcgUlRDX0hDVE9TWVMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL2NsYXNzLmMgYi9kcml2ZXJzL3J0Yy9jbGFzcy5jCmluZGV4IDM5MDEzODYuLjQxOTRlNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL2NsYXNzLmMKKysrIGIvZHJpdmVycy9ydGMvY2xhc3MuYwpAQCAtNDEsMjYgKzQxLDIxIEBACiAgKiBzeXN0ZW0ncyB3YWxsIGNsb2NrOyByZXN0b3JlIGl0IG9uIHJlc3VtZSgpLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdGltZXNwZWMJZGVsdGE7CiBzdGF0aWMgdGltZV90CQlvbGR0aW1lOworc3RhdGljIHN0cnVjdCB0aW1lc3BlYwlvbGR0czsKIAogc3RhdGljIGludCBydGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewogCXN0cnVjdCBydGNfZGV2aWNlCSpydGMgPSB0b19ydGNfZGV2aWNlKGRldik7CiAJc3RydWN0IHJ0Y190aW1lCQl0bTsKLQlzdHJ1Y3QgdGltZXNwZWMJCXRzID0gY3VycmVudF9rZXJuZWxfdGltZSgpOwogCiAJaWYgKHN0cmNtcChkZXZfbmFtZSgmcnRjLT5kZXYpLCBDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKSAhPSAwKQogCQlyZXR1cm4gMDsKIAogCXJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOworCWt0aW1lX2dldF90cygmb2xkdHMpOwogCXJ0Y190bV90b190aW1lKCZ0bSwgJm9sZHRpbWUpOwogCi0JLyogUlRDIHByZWNpc2lvbiBpcyAxIHNlY29uZDsgYWRqdXN0IGRlbHRhIGZvciBhdmcgMS8yIHNlYyBlcnIgKi8KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmZGVsdGEsCi0JCQkJdHMudHZfc2VjIC0gb2xkdGltZSwKLQkJCQl0cy50dl9uc2VjIC0gKE5TRUNfUEVSX1NFQyA+PiAxKSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzAsMTAgKzY1LDEyIEBACiAJc3RydWN0IHJ0Y190aW1lCQl0bTsKIAl0aW1lX3QJCQluZXd0aW1lOwogCXN0cnVjdCB0aW1lc3BlYwkJdGltZTsKKwlzdHJ1Y3QgdGltZXNwZWMJCW5ld3RzOwogCiAJaWYgKHN0cmNtcChkZXZfbmFtZSgmcnRjLT5kZXYpLCBDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKSAhPSAwKQogCQlyZXR1cm4gMDsKIAorCWt0aW1lX2dldF90cygmbmV3dHMpOwogCXJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOwogCWlmIChydGNfdmFsaWRfdG0oJnRtKSAhPSAwKSB7CiAJCXByX2RlYnVnKCIlczogIGJvZ3VzIHJlc3VtZSB0aW1lXG4iLCBkZXZfbmFtZSgmcnRjLT5kZXYpKTsKQEAgLTg1LDE1ICs4MiwxMyBAQAogCQkJcHJfZGVidWcoIiVzOiAgdGltZSB0cmF2ZWwhXG4iLCBkZXZfbmFtZSgmcnRjLT5kZXYpKTsKIAkJcmV0dXJuIDA7CiAJfQorCS8qIGNhbGN1bGF0ZSB0aGUgUlRDIHRpbWUgZGVsdGEgKi8KKwlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdGltZSwgbmV3dGltZSAtIG9sZHRpbWUsIDApOwogCi0JLyogcmVzdG9yZSB3YWxsIGNsb2NrIHVzaW5nIGRlbHRhIGFnYWluc3QgdGhpcyBSVEM7Ci0JICogYWRqdXN0IGFnYWluIGZvciBhdmcgMS8yIHNlY29uZCBSVEMgc2FtcGxpbmcgZXJyb3IKLQkgKi8KLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmdGltZSwKLQkJCQluZXd0aW1lICsgZGVsdGEudHZfc2VjLAotCQkJCShOU0VDX1BFUl9TRUMgPj4gMSkgKyBkZWx0YS50dl9uc2VjKTsKLQlkb19zZXR0aW1lb2ZkYXkoJnRpbWUpOworCS8qIHN1YnRyYWN0IGtlcm5lbCB0aW1lIGJldHdlZW4gcnRjX3N1c3BlbmQgdG8gcnRjX3Jlc3VtZSAqLworCXRpbWUgPSB0aW1lc3BlY19zdWIodGltZSwgdGltZXNwZWNfc3ViKG5ld3RzLCBvbGR0cykpOwogCisJdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZSgmdGltZSk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYwppbmRleCAzMTZmNDg0Li44MGY5Yzg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCkBAIC0yMjAsNiArMjIwLDcgQEAKIAl9CiAJY2xrX2Rpc2FibGUocnRhcC0+Y2xrKTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0YXApOwogCXJ0YXAtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoImNvaDkwMTMzMSIsICZwZGV2LT5kZXYsICZjb2g5MDEzMzFfb3BzLAogCQkJCQkgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRhcC0+cnRjKSkgewpAQCAtMjI3LDExICsyMjgsMTAgQEAKIAkJZ290byBvdXRfbm9fcnRjOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0YXApOwotCiAJcmV0dXJuIDA7CiAKICBvdXRfbm9fcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogIG91dF9ub19jbGtfZW5hYmxlOgogCWNsa19wdXQocnRhcC0+Y2xrKTsKICBvdXRfbm9fY2xrOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRhdmluY2kuYyBiL2RyaXZlcnMvcnRjL3J0Yy1kYXZpbmNpLmMKaW5kZXggOGQ0NjgzOC4uNzU1ZTFmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWRhdmluY2kuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGF2aW5jaS5jCkBAIC01MjQsNiArNTI0LDggQEAKIAkJZ290byBmYWlsMjsKIAl9CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXZpbmNpX3J0Yyk7CisKIAlkYXZpbmNpX3J0Yy0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LAogCQkJCSAgICAmZGF2aW5jaV9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihkYXZpbmNpX3J0Yy0+cnRjKSkgewpAQCAtNTUzLDggKzU1NSw2IEBACiAKIAlydGNzc193cml0ZShkYXZpbmNpX3J0YywgUFJUQ1NTX1JUQ19DQ1RSTF9DQUVOLCBQUlRDU1NfUlRDX0NDVFJMKTsKIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdmluY2lfcnRjKTsKLQogCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAwKTsKIAogCXJldHVybiAwOwpAQCAtNTYyLDYgKzU2Miw3IEBACiBmYWlsNDoKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIoZGF2aW5jaV9ydGMtPnJ0Yyk7CiBmYWlsMzoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlpb3VubWFwKGRhdmluY2lfcnRjLT5iYXNlKTsKIGZhaWwyOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihkYXZpbmNpX3J0Yy0+cGJhc2UsIGRhdmluY2lfcnRjLT5iYXNlX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTI4Ni5jCmluZGV4IDYwY2U2OTYuLjQ3ZTY4MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEyODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMjg2LmMKQEAgLTM1NSw2ICszNTUsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHByaXYpOwogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoImRzMTI4NiIsICZwZGV2LT5kZXYsCiAJCQkJICAmZHMxMjg2X29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRjKSkgewpAQCAtMzYyLDcgKzM2Myw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAlwcml2LT5ydGMgPSBydGM7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAJcmV0dXJuIDA7CiAKIG91dDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwppbmRleCAxMWFlNjRkLi4zMzU1NTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCkBAIC0xNTEsNiArMTUxLDcgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAogCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gZXA5M3h4X3J0YzsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwogCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLAogCQkJCSZwZGV2LT5kZXYsICZlcDkzeHhfcnRjX29wcywgVEhJU19NT0RVTEUpOwpAQCAtMTU5LDggKzE2MCw2IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOwotCiAJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJmVwOTN4eF9ydGNfc3lzZnNfZmlsZXMpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKQEAgLTE2OCw5ICsxNjcsOSBAQAogCXJldHVybiAwOwogCiBmYWlsOgotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogZXhpdDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IE5VTEw7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tNDF0ODAuYwppbmRleCA2OWZlNjY0Li5lZGExMjhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbTQxdDgwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLW00MXQ4MC5jCkBAIC03ODMsNiArNzgzLDkgQEAKIAkJZ290byBleGl0OwogCX0KIAorCWNsaWVudGRhdGEtPmZlYXR1cmVzID0gaWQtPmRyaXZlcl9kYXRhOworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNsaWVudGRhdGEpOworCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihjbGllbnQtPm5hbWUsICZjbGllbnQtPmRldiwKIAkJCQkgICZtNDF0ODBfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocnRjKSkgewpAQCAtNzkyLDggKzc5NSw2IEBACiAJfQogCiAJY2xpZW50ZGF0YS0+cnRjID0gcnRjOwotCWNsaWVudGRhdGEtPmZlYXR1cmVzID0gaWQtPmRyaXZlcl9kYXRhOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNsaWVudGRhdGEpOwogCiAJLyogTWFrZSBzdXJlIEhUIChIYWx0IFVwZGF0ZSkgYml0IGlzIGNsZWFyZWQgKi8KIAlyYyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIE00MVQ4MF9SRUdfQUxBUk1fSE9VUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4ODkyNS5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDg5MjUuYwppbmRleCAxNzQwMzZkLi4zYmMwNDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWF4ODkyNS5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTI1LmMKQEAgLTI1Nyw2ICsyNTcsMTAgQEAKIAkJZ290byBvdXRfaXJxOwogCX0KIAorCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBpbmZvKTsKKwkvKiBYWFggLSBpc24ndCB0aGlzIHJlZHVuZGFudD8gKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwogCWluZm8tPnJ0Y19kZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtYXg4OTI1LXJ0YyIsICZwZGV2LT5kZXYsCiAJCQkJCSZtYXg4OTI1X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlyZXQgPSBQVFJfRVJSKGluZm8tPnJ0Y19kZXYpOwpAQCAtMjY1LDExICsyNjksOSBAQAogCQlnb3RvIG91dF9ydGM7CiAJfQogCi0JZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGluZm8pOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOwotCiAJcmV0dXJuIDA7CiBvdXRfcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWZyZWVfaXJxKGNoaXAtPmlycV9iYXNlICsgTUFYODkyNV9JUlFfUlRDX0FMQVJNMCwgaW5mbyk7CiBvdXRfaXJxOgogCWtmcmVlKGluZm8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDg5OTguYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg4OTk4LmMKaW5kZXggM2Y3YmM2Yi4uMmU0OGFhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDg5OTguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4ODk5OC5jCkBAIC0yNjUsNiArMjY1LDggQEAKIAlpbmZvLT5ydGMgPSBtYXg4OTk4LT5ydGM7CiAJaW5mby0+aXJxID0gbWF4ODk5OC0+aXJxX2Jhc2UgKyBNQVg4OTk4X0lSUV9BTEFSTTA7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwogCWluZm8tPnJ0Y19kZXYgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJtYXg4OTk4LXJ0YyIsICZwZGV2LT5kZXYsCiAJCQkmbWF4ODk5OF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAKQEAgLTI3NCw4ICsyNzYsNiBAQAogCQlnb3RvIG91dF9ydGM7CiAJfQogCi0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7Ci0KIAlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpbmZvLT5pcnEsIE5VTEwsIG1heDg5OThfcnRjX2FsYXJtX2lycSwgMCwKIAkJCSJydGMtYWxhcm0wIiwgaW5mbyk7CiAKQEAgLTI5Myw2ICsyOTMsNyBAQAogCXJldHVybiAwOwogCiBvdXRfcnRjOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGluZm8pOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWMxM3h4eC5jIGIvZHJpdmVycy9ydGMvcnRjLW1jMTN4eHguYwppbmRleCBjNWFjMDM3Li5hMWEyNzhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWMxM3h4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYzEzeHh4LmMKQEAgLTM0OSwxMSArMzQ5LDE1IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfYWxhcm1faXJxX3JlcXVlc3Q7CiAKKwltYzEzeHh4X3VubG9jayhtYzEzeHh4KTsKKwogCXByaXYtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIocGRldi0+bmFtZSwKIAkJCSZwZGV2LT5kZXYsICZtYzEzeHh4X3J0Y19vcHMsIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHByaXYtPnJ0YykpIHsKIAkJcmV0ID0gUFRSX0VSUihwcml2LT5ydGMpOwogCisJCW1jMTN4eHhfbG9jayhtYzEzeHh4KTsKKwogCQltYzEzeHh4X2lycV9mcmVlKG1jMTN4eHgsIE1DMTNYWFhfSVJRX1RPREEsIHByaXYpOwogZXJyX2FsYXJtX2lycV9yZXF1ZXN0OgogCkBAIC0zNjUsMTIgKzM2OSwxMiBAQAogCQltYzEzeHh4X2lycV9mcmVlKG1jMTN4eHgsIE1DMTNYWFhfSVJRX1JUQ1JTVCwgcHJpdik7CiBlcnJfcmVzZXRfaXJxX3JlcXVlc3Q6CiAKKwkJbWMxM3h4eF91bmxvY2sobWMxM3h4eCk7CisKIAkJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJCWtmcmVlKHByaXYpOwogCX0KIAotCW1jMTN4eHhfdW5sb2NrKG1jMTN4eHgpOwotCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tc202MjQyLmMKaW5kZXggNjc4MjA2Mi4uZmNiMTEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1zbTYyNDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXNtNjI0Mi5jCkBAIC0yMTQsNiArMjE0LDcgQEAKIAkJZXJyb3IgPSAtRU5PTUVNOwogCQlnb3RvIG91dF9mcmVlX3ByaXY7CiAJfQorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CiAKIAlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKCJydGMtbXNtNjI0MiIsICZkZXYtPmRldiwgJm1zbTYyNDJfcnRjX29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKQEAgLTIyMywxMCArMjI0LDEwIEBACiAJfQogCiAJcHJpdi0+cnRjID0gcnRjOwotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgcHJpdik7CiAJcmV0dXJuIDA7CiAKIG91dF91bm1hcDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOwogCWlvdW5tYXAocHJpdi0+cmVncyk7CiBvdXRfZnJlZV9wcml2OgogCWtmcmVlKHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW14Yy5jIGIvZHJpdmVycy9ydGMvcnRjLW14Yy5jCmluZGV4IDgyNmFiNjQuLmQ4MTQ0MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1teGMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMKQEAgLTQxOCwxNCArNDE4LDYgQEAKIAkJZ290byBleGl0X3B1dF9jbGs7CiAJfQogCi0JcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LCAmbXhjX3J0Y19vcHMsCi0JCQkJICBUSElTX01PRFVMRSk7Ci0JaWYgKElTX0VSUihydGMpKSB7Ci0JCXJldCA9IFBUUl9FUlIocnRjKTsKLQkJZ290byBleGl0X3B1dF9jbGs7Ci0JfQotCi0JcGRhdGEtPnJ0YyA9IHJ0YzsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwZGF0YSk7CiAKIAkvKiBDb25maWd1cmUgYW5kIGVuYWJsZSB0aGUgUlRDICovCkBAIC00MzgsOCArNDMwLDE5IEBACiAJCXBkYXRhLT5pcnEgPSAtMTsKIAl9CiAKKwlydGMgPSBydGNfZGV2aWNlX3JlZ2lzdGVyKHBkZXYtPm5hbWUsICZwZGV2LT5kZXYsICZteGNfcnRjX29wcywKKwkJCQkgIFRISVNfTU9EVUxFKTsKKwlpZiAoSVNfRVJSKHJ0YykpIHsKKwkJcmV0ID0gUFRSX0VSUihydGMpOworCQlnb3RvIGV4aXRfY2xyX2RydmRhdGE7CisJfQorCisJcGRhdGEtPnJ0YyA9IHJ0YzsKKwogCXJldHVybiAwOwogCitleGl0X2Nscl9kcnZkYXRhOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogZXhpdF9wdXRfY2xrOgogCWNsa19kaXNhYmxlKHBkYXRhLT5jbGspOwogCWNsa19wdXQocGRhdGEtPmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jIGIvZHJpdmVycy9ydGMvcnRjLW9tYXAuYwppbmRleCBkZTBkZDdiLi5iY2FlOGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtb21hcC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1vbWFwLmMKQEAgLTM5NCw3ICszOTQsNyBAQAogCXJldHVybiAwOwogCiBmYWlsMjoKLQlmcmVlX2lycShvbWFwX3J0Y190aW1lciwgTlVMTCk7CisJZnJlZV9pcnEob21hcF9ydGNfdGltZXIsIHJ0Yyk7CiBmYWlsMToKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocnRjKTsKIGZhaWwwOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBjYXAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2FwLmMKaW5kZXggYTYzM2FiYy4uY2Q0ZjE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXBjYXAuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGNhcC5jCkBAIC0xNTEsNiArMTUxLDggQEAKIAogCXBjYXBfcnRjLT5wY2FwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGNhcF9ydGMpOworCiAJcGNhcF9ydGMtPnJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInBjYXAiLCAmcGRldi0+ZGV2LAogCQkJCSAgJnBjYXBfcnRjX29wcywgVEhJU19NT0RVTEUpOwogCWlmIChJU19FUlIocGNhcF9ydGMtPnJ0YykpIHsKQEAgLTE1OCw3ICsxNjAsNiBAQAogCQlnb3RvIGZhaWxfcnRjOwogCX0KIAotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBjYXBfcnRjKTsKIAogCXRpbWVyX2lycSA9IHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX0lSUV8xSFopOwogCWFsYXJtX2lycSA9IHBjYXBfdG9faXJxKHBjYXBfcnRjLT5wY2FwLCBQQ0FQX0lSUV9UT0RBKTsKQEAgLTE3Nyw2ICsxNzgsNyBAQAogZmFpbF90aW1lcjoKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIocGNhcF9ydGMtPnJ0Yyk7CiBmYWlsX3J0YzoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlrZnJlZShwY2FwX3J0Yyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYyBiL2RyaXZlcnMvcnRjL3J0Yy1ycDVjMDEuYwppbmRleCA2OTRkYTM5Li4zNTlkYTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnA1YzAxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXJwNWMwMS5jCkBAIC0yNDksMTUgKzI0OSwxNSBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBwcml2KTsKKwogCXJ0YyA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoInJ0Yy1ycDVjMDEiLCAmZGV2LT5kZXYsICZycDVjMDFfcnRjX29wcywKIAkJCQkgIFRISVNfTU9EVUxFKTsKIAlpZiAoSVNfRVJSKHJ0YykpIHsKIAkJZXJyb3IgPSBQVFJfRVJSKHJ0Yyk7CiAJCWdvdG8gb3V0X3VubWFwOwogCX0KLQogCXByaXYtPnJ0YyA9IHJ0YzsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHByaXYpOwogCiAJZXJyb3IgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJmRldi0+ZGV2LmtvYmosICZwcml2LT5udnJhbV9hdHRyKTsKIAlpZiAoZXJyb3IpCkBAIC0yNjgsNiArMjY4LDcgQEAKIG91dF91bnJlZ2lzdGVyOgogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogb3V0X3VubWFwOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAJaW91bm1hcChwcml2LT5yZWdzKTsKIG91dF9mcmVlX3ByaXY6CiAJa2ZyZWUocHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggYjM0NjZjNC4uMTY1MTJlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtNDYsNiArNDYsNyBAQAogc3RhdGljIHZvaWQgX19pb21lbSAqczNjX3J0Y19iYXNlOwogc3RhdGljIGludCBzM2NfcnRjX2FsYXJtbm8gPSBOT19JUlE7CiBzdGF0aWMgaW50IHMzY19ydGNfdGlja25vICA9IE5PX0lSUTsKK3N0YXRpYyBib29sIHdha2VfZW47CiBzdGF0aWMgZW51bSBzM2NfY3B1X3R5cGUgczNjX3J0Y19jcHVfdHlwZTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhzM2NfcnRjX3BpZV9sb2NrKTsKQEAgLTU2Miw4ICs1NjMsMTIgQEAKIAl9CiAJczNjX3J0Y19lbmFibGUocGRldiwgMCk7CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCi0JCWVuYWJsZV9pcnFfd2FrZShzM2NfcnRjX2FsYXJtbm8pOworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSAmJiAhd2FrZV9lbikgeworCQlpZiAoZW5hYmxlX2lycV93YWtlKHMzY19ydGNfYWxhcm1ubykgPT0gMCkKKwkJCXdha2VfZW4gPSB0cnVlOworCQllbHNlCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlbmFibGVfaXJxX3dha2UgZmFpbGVkXG4iKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU3OSw4ICs1ODQsMTAgQEAKIAkJd3JpdGV3KHRtcCB8IHRpY250X2VuX3NhdmUsIHMzY19ydGNfYmFzZSArIFMzQzI0MTBfUlRDQ09OKTsKIAl9CiAKLQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpICYmIHdha2VfZW4pIHsKIAkJZGlzYWJsZV9pcnFfd2FrZShzM2NfcnRjX2FsYXJtbm8pOworCQl3YWtlX2VuID0gZmFsc2U7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCA0ZDJkZjJmLi44NmI2ZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTE3NDIsMTEgKzE3NDIsMjAgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9kYXNkX3Rlcm1fcnVubmluZ19jcXIoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOworCWludCByYzsKIAogCWlmIChsaXN0X2VtcHR5KCZkZXZpY2UtPmNjd19xdWV1ZSkpCiAJCXJldHVybiAwOwogCWNxciA9IGxpc3RfZW50cnkoZGV2aWNlLT5jY3dfcXVldWUubmV4dCwgc3RydWN0IGRhc2RfY2N3X3JlcSwgZGV2bGlzdCk7Ci0JcmV0dXJuIGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOworCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcik7CisJaWYgKCFyYykKKwkJLyoKKwkJICogQ1FSIHRlcm1pbmF0ZWQgYmVjYXVzZSBhIG1vcmUgaW1wb3J0YW50IHJlcXVlc3QgaXMgcGVuZGluZy4KKwkJICogVW5kbyBkZWNyZWFzaW5nIG9mIHJldHJ5IGNvdW50ZXIgYmVjYXVzZSB0aGlzIGlzCisJCSAqIG5vdCBhbiBlcnJvciBjYXNlLgorCQkgKi8KKwkJY3FyLT5yZXRyaWVzKys7CisJcmV0dXJuIHJjOwogfQogCiBpbnQgZGFzZF9zbGVlcF9vbl9pbW1lZGlhdGx5KHN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcikKQEAgLTIzMTQsMTUgKzIzMjMsMTQgQEAKIAogc3RhdGljIGludCBkYXNkX29wZW4oc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAJaW50IHJjOwogCi0JaWYgKCFibG9jaykKKwliYXNlID0gZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKGJkZXYtPmJkX2Rpc2spOworCWlmICghYmFzZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQliYXNlID0gYmxvY2stPmJhc2U7Ci0JYXRvbWljX2luYygmYmxvY2stPm9wZW5fY291bnQpOworCWF0b21pY19pbmMoJmJhc2UtPmJsb2NrLT5vcGVuX2NvdW50KTsKIAlpZiAodGVzdF9iaXQoREFTRF9GTEFHX09GRkxJTkUsICZiYXNlLT5mbGFncykpIHsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIHVubG9jazsKQEAgLTIzNTUsMjEgKzIzNjMsMjggQEAKIAkJZ290byBvdXQ7CiAJfQogCisJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOwogCXJldHVybiAwOwogCiBvdXQ6CiAJbW9kdWxlX3B1dChiYXNlLT5kaXNjaXBsaW5lLT5vd25lcik7CiB1bmxvY2s6Ci0JYXRvbWljX2RlYygmYmxvY2stPm9wZW5fY291bnQpOworCWF0b21pY19kZWMoJmJhc2UtPmJsb2NrLT5vcGVuX2NvdW50KTsKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50IGRhc2RfcmVsZWFzZShzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZm1vZGVfdCBtb2RlKQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGRpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAKLQlhdG9taWNfZGVjKCZibG9jay0+b3Blbl9jb3VudCk7Ci0JbW9kdWxlX3B1dChibG9jay0+YmFzZS0+ZGlzY2lwbGluZS0+b3duZXIpOworCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soZGlzayk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWF0b21pY19kZWMoJmJhc2UtPmJsb2NrLT5vcGVuX2NvdW50KTsKKwltb2R1bGVfcHV0KGJhc2UtPmRpc2NpcGxpbmUtPm93bmVyKTsKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNzgsMjAgKzIzOTMsMjAgQEAKICAqLwogc3RhdGljIGludCBkYXNkX2dldGdlbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbykKIHsKLQlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CiAJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlOwogCi0JYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JaWYgKCFibG9jaykKKwliYXNlID0gZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKGJkZXYtPmJkX2Rpc2spOworCWlmICghYmFzZSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JYmFzZSA9IGJsb2NrLT5iYXNlOwogCiAJaWYgKCFiYXNlLT5kaXNjaXBsaW5lIHx8Ci0JICAgICFiYXNlLT5kaXNjaXBsaW5lLT5maWxsX2dlb21ldHJ5KQorCSAgICAhYmFzZS0+ZGlzY2lwbGluZS0+ZmlsbF9nZW9tZXRyeSkgeworCQlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJCXJldHVybiAtRUlOVkFMOwotCi0JYmFzZS0+ZGlzY2lwbGluZS0+ZmlsbF9nZW9tZXRyeShibG9jaywgZ2VvKTsKLQlnZW8tPnN0YXJ0ID0gZ2V0X3N0YXJ0X3NlY3QoYmRldikgPj4gYmxvY2stPnMyYl9zaGlmdDsKKwl9CisJYmFzZS0+ZGlzY2lwbGluZS0+ZmlsbF9nZW9tZXRyeShiYXNlLT5ibG9jaywgZ2VvKTsKKwlnZW8tPnN0YXJ0ID0gZ2V0X3N0YXJ0X3NlY3QoYmRldikgPj4gYmFzZS0+YmxvY2stPnMyYl9zaGlmdDsKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1MjgsNyArMjU0Myw2IEBACiAJZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGRldmljZSwgREFTRF9TVEFURV9ORVcpOwogCS8qIGRhc2RfZGVsZXRlX2RldmljZSBkZXN0cm95cyB0aGUgZGV2aWNlIHJlZmVyZW5jZS4gKi8KIAlibG9jayA9IGRldmljZS0+YmxvY2s7Ci0JZGV2aWNlLT5ibG9jayA9IE5VTEw7CiAJZGFzZF9kZWxldGVfZGV2aWNlKGRldmljZSk7CiAJLyoKIAkgKiBsaWZlIGN5Y2xlIG9mIGJsb2NrIGlzIGJvdW5kIHRvIGRldmljZSwgc28gZGVsZXRlIGl0IGFmdGVyCkBAIC0yNjUwLDcgKzI2NjQsNiBAQAogCWRhc2Rfc2V0X3RhcmdldF9zdGF0ZShkZXZpY2UsIERBU0RfU1RBVEVfTkVXKTsKIAkvKiBkYXNkX2RlbGV0ZV9kZXZpY2UgZGVzdHJveXMgdGhlIGRldmljZSByZWZlcmVuY2UuICovCiAJYmxvY2sgPSBkZXZpY2UtPmJsb2NrOwotCWRldmljZS0+YmxvY2sgPSBOVUxMOwogCWRhc2RfZGVsZXRlX2RldmljZShkZXZpY2UpOwogCS8qCiAJICogbGlmZSBjeWNsZSBvZiBibG9jayBpcyBib3VuZCB0byBkZXZpY2UsIHNvIGRlbGV0ZSBpdCBhZnRlcgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCA0MmUxYmYzLi5kNzE1MTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtNjc0LDYgKzY3NCwzNiBAQAogCXJldHVybiBkZXZpY2U7CiB9CiAKK3ZvaWQgZGFzZF9hZGRfbGlua190b19nZW5kaXNrKHN0cnVjdCBnZW5kaXNrICpnZHAsIHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCisJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOworCWlmIChJU19FUlIoZGV2bWFwKSkKKwkJcmV0dXJuOworCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJZ2RwLT5wcml2YXRlX2RhdGEgPSBkZXZtYXA7CisJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworfQorCitzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZ2RwKQoreworCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCisJaWYgKCFnZHAtPnByaXZhdGVfZGF0YSkKKwkJcmV0dXJuIE5VTEw7CisJZGV2aWNlID0gTlVMTDsKKwlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCWRldm1hcCA9IGdkcC0+cHJpdmF0ZV9kYXRhOworCWlmIChkZXZtYXAgJiYgZGV2bWFwLT5kZXZpY2UpIHsKKwkJZGV2aWNlID0gZGV2bWFwLT5kZXZpY2U7CisJCWRhc2RfZ2V0X2RldmljZShkZXZpY2UpOworCX0KKwlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJcmV0dXJuIGRldmljZTsKK30KKwogLyoKICAqIFNFQ1RJT046IGZpbGVzIGluIHN5c2ZzCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCAyOTE0M2VkLi44NWRkZGIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCkBAIC0yMzksNyArMjM5LDYgQEAKIAlhZGRyX3QgaXA7CiAJaW50IHJjOwogCi0Ja3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfRFNEXSsrOwogCXN3aXRjaCAoZXh0X2ludF9jb2RlID4+IDI0KSB7CiAJY2FzZSBEQVNEX0RJQUdfQ09ERV8zMUJJVDoKIAkJaXAgPSAoYWRkcl90KSBwYXJhbTMyOwpAQCAtMjUwLDYgKzI0OSw3IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuOwogCX0KKwlrc3RhdF9jcHUoc21wX3Byb2Nlc3Nvcl9pZCgpKS5pcnFzW0VYVElOVF9EU0RdKys7CiAJaWYgKCFpcCkgewkJLyogbm8gaW50cGFybTogdW5zb2xpY2l0ZWQgaW50ZXJydXB0ICovCiAJCURCRl9FVkVOVChEQkZfTk9USUNFLCAiJXMiLCAiY2F1Z2h0IHVuc29saWNpdGVkICIKIAkJCSAgICAgICJpbnRlcnJ1cHQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCBkYjgwMDVkLi4zZWJkZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC0yMDM3LDcgKzIwMzcsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBzdW1tYXJ5IHVuaXQgY2hlY2sgKi8KLQlpZiAoKHNlbnNlWzddID09IDB4MEQpICYmCisJaWYgKChzZW5zZVsyN10gJiBEQVNEX1NFTlNFX0JJVF8wKSAmJiAoc2Vuc2VbN10gPT0gMHgwRCkgJiYKIAkgICAgKHNjc3dfZHN0YXQoJmlyYi0+c2NzdykgJiBERVZfU1RBVF9VTklUX0NIRUNLKSkgewogCQlkYXNkX2FsaWFzX2hhbmRsZV9zdW1tYXJ5X3VuaXRfY2hlY2soZGV2aWNlLCBpcmIpOwogCQlyZXR1cm47CkBAIC0yMDUzLDcgKzIwNTMsOCBAQAogCS8qIGxvc3Mgb2YgZGV2aWNlIHJlc2VydmF0aW9uIGlzIGhhbmRsZWQgdmlhIGJhc2UgZGV2aWNlcyBvbmx5CiAJICogYXMgYWxpYXMgZGV2aWNlcyBtYXkgYmUgdXNlZCB3aXRoIHNldmVyYWwgYmFzZXMKIAkgKi8KLQlpZiAoZGV2aWNlLT5ibG9jayAmJiAoc2Vuc2VbN10gPT0gMHgzRikgJiYKKwlpZiAoZGV2aWNlLT5ibG9jayAmJiAoc2Vuc2VbMjddICYgREFTRF9TRU5TRV9CSVRfMCkgJiYKKwkgICAgKHNlbnNlWzddID09IDB4M0YpICYmCiAJICAgIChzY3N3X2RzdGF0KCZpcmItPnNjc3cpICYgREVWX1NUQVRfVU5JVF9DSEVDSykgJiYKIAkgICAgdGVzdF9iaXQoREFTRF9GTEFHX0lTX1JFU0VSVkVELCAmZGV2aWNlLT5mbGFncykpIHsKIAkJaWYgKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfRkFJTE9OU0xDSykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCmluZGV4IDU1MDViYzAuLjE5YTFmZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwpAQCAtNzMsNyArNzMsNyBAQAogCWlmIChiYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSB8fAogCSAgICB0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmFzZS0+ZmxhZ3MpKQogCQlzZXRfZGlza19ybyhnZHAsIDEpOwotCWdkcC0+cHJpdmF0ZV9kYXRhID0gYmxvY2s7CisJZGFzZF9hZGRfbGlua190b19nZW5kaXNrKGdkcCwgYmFzZSk7CiAJZ2RwLT5xdWV1ZSA9IGJsb2NrLT5yZXF1ZXN0X3F1ZXVlOwogCWJsb2NrLT5nZHAgPSBnZHA7CiAJc2V0X2NhcGFjaXR5KGJsb2NrLT5nZHAsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmggYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAppbmRleCBkZjlmNjk5Li5kMWU0ZjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaAorKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaApAQCAtNjg2LDYgKzY4Niw5IEBACiBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoc3RydWN0IGNjd19kZXZpY2UgKik7CiBzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRhc2RfZGV2aWNlX2Zyb21fZGV2aW5kZXgoaW50KTsKIAordm9pZCBkYXNkX2FkZF9saW5rX3RvX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKiwgc3RydWN0IGRhc2RfZGV2aWNlICopOworc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soc3RydWN0IGdlbmRpc2sgKik7CisKIGludCBkYXNkX3BhcnNlKHZvaWQpOwogaW50IGRhc2RfYnVzaWRfa25vd24oY29uc3QgY2hhciAqKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKaW5kZXggMjYwNzVlOS4uNzIyNjFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCkBAIC00MiwxNiArNDIsMjIgQEAKIHN0YXRpYyBpbnQKIGRhc2RfaW9jdGxfZW5hYmxlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYpCiB7Ci0Jc3RydWN0IGRhc2RfYmxvY2sgKmJsb2NrID0gYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkYXNkX2RldmljZSAqYmFzZTsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQlkYXNkX2VuYWJsZV9kZXZpY2UoYmxvY2stPmJhc2UpOworCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRhc2RfZW5hYmxlX2RldmljZShiYXNlKTsKIAkvKiBGb3JtYXR0aW5nIHRoZSBkYXNkIGRldmljZSBjYW4gY2hhbmdlIHRoZSBjYXBhY2l0eS4gKi8KIAltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7Ci0JaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCAobG9mZl90KWdldF9jYXBhY2l0eShibG9jay0+Z2RwKSA8PCA5KTsKKwlpX3NpemVfd3JpdGUoYmRldi0+YmRfaW5vZGUsCisJCSAgICAgKGxvZmZfdClnZXRfY2FwYWNpdHkoYmFzZS0+YmxvY2stPmdkcCkgPDwgOSk7CiAJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7CisJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOwogCXJldHVybiAwOwogfQogCkBAIC02MiwxMSArNjgsMTQgQEAKIHN0YXRpYyBpbnQKIGRhc2RfaW9jdGxfZGlzYWJsZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmJhc2U7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRUFDQ0VTOwogCisJYmFzZSA9IGRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhiZGV2LT5iZF9kaXNrKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PREVWOwogCS8qCiAJICogTWFuIHRoaXMgaXMgc2ljay4gV2UgZG9uJ3QgZG8gYSByZWFsIGRpc2FibGUgYnV0IG9ubHkgZG93bmdyYWRlCiAJICogdGhlIGRldmljZSB0byBEQVNEX1NUQVRFX0JBU0lDLiBUaGUgcmVhc29uIGlzIHRoYXQgZGFzZGZtdCB1c2VzCkBAIC03NSw3ICs4NCw3IEBACiAJICogdXNpbmcgdGhlIEJJT0RBU0RGTVQgaW9jdGwuIFRoZXJlZm9yZSB0aGUgY29ycmVjdCBzdGF0ZSBmb3IgdGhlCiAJICogZGV2aWNlIGlzIERBU0RfU1RBVEVfQkFTSUMgdGhhdCBhbGxvd3MgdG8gZG8gYmFzaWMgaS9vLgogCSAqLwotCWRhc2Rfc2V0X3RhcmdldF9zdGF0ZShibG9jay0+YmFzZSwgREFTRF9TVEFURV9CQVNJQyk7CisJZGFzZF9zZXRfdGFyZ2V0X3N0YXRlKGJhc2UsIERBU0RfU1RBVEVfQkFTSUMpOwogCS8qCiAJICogU2V0IGlfc2l6ZSB0byB6ZXJvLCBzaW5jZSByZWFkLCB3cml0ZSwgZXRjLiBjaGVjayBhZ2FpbnN0IHRoaXMKIAkgKiB2YWx1ZS4KQEAgLTgzLDYgKzkyLDcgQEAKIAltdXRleF9sb2NrKCZiZGV2LT5iZF9tdXRleCk7CiAJaV9zaXplX3dyaXRlKGJkZXYtPmJkX2lub2RlLCAwKTsKIAltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE5MSwyNiArMjAxLDM2IEBACiBzdGF0aWMgaW50CiBkYXNkX2lvY3RsX2Zvcm1hdChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSBiZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlOwogCXN0cnVjdCBmb3JtYXRfZGF0YV90IGZkYXRhOworCWludCByYzsKIAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJcmV0dXJuIC1FQUNDRVM7CiAJaWYgKCFhcmdwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChibG9jay0+YmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkgfHwKLQkgICAgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmJsb2NrLT5iYXNlLT5mbGFncykpCisJYmFzZSA9IGRhc2RfZGV2aWNlX2Zyb21fZ2VuZGlzayhiZGV2LT5iZF9kaXNrKTsKKwlpZiAoIWJhc2UpCisJCXJldHVybiAtRU5PREVWOworCWlmIChiYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSB8fAorCSAgICB0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmFzZS0+ZmxhZ3MpKSB7CisJCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAkJcmV0dXJuIC1FUk9GUzsKLQlpZiAoY29weV9mcm9tX3VzZXIoJmZkYXRhLCBhcmdwLCBzaXplb2Yoc3RydWN0IGZvcm1hdF9kYXRhX3QpKSkKKwl9CisJaWYgKGNvcHlfZnJvbV91c2VyKCZmZGF0YSwgYXJncCwgc2l6ZW9mKHN0cnVjdCBmb3JtYXRfZGF0YV90KSkpIHsKKwkJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOwogCQlyZXR1cm4gLUVGQVVMVDsKKwl9CiAJaWYgKGJkZXYgIT0gYmRldi0+YmRfY29udGFpbnMpIHsKIAkJcHJfd2FybmluZygiJXM6IFRoZSBzcGVjaWZpZWQgREFTRCBpcyBhIHBhcnRpdGlvbiBhbmQgY2Fubm90ICIKIAkJCSAgICJiZSBmb3JtYXR0ZWRcbiIsCi0JCQkgICBkZXZfbmFtZSgmYmxvY2stPmJhc2UtPmNkZXYtPmRldikpOworCQkJICAgZGV2X25hbWUoJmJhc2UtPmNkZXYtPmRldikpOworCQlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gZGFzZF9mb3JtYXQoYmxvY2ssICZmZGF0YSk7CisJcmMgPSBkYXNkX2Zvcm1hdChiYXNlLT5ibG9jaywgJmZkYXRhKTsKKwlkYXNkX3B1dF9kZXZpY2UoYmFzZSk7CisJcmV0dXJuIHJjOwogfQogCiAjaWZkZWYgQ09ORklHX0RBU0RfUFJPRklMRQpAQCAtMzQwLDggKzM2MCw4IEBACiBzdGF0aWMgaW50CiBkYXNkX2lvY3RsX3NldF9ybyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB2b2lkIF9fdXNlciAqYXJncCkKIHsKLQlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2sgPSAgYmRldi0+YmRfZGlzay0+cHJpdmF0ZV9kYXRhOwotCWludCBpbnR2YWw7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlOworCWludCBpbnR2YWwsIHJjOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVBQ0NFUzsKQEAgLTM1MCwxMCArMzcwLDE3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChnZXRfdXNlcihpbnR2YWwsIChpbnQgX191c2VyICopYXJncCkpCiAJCXJldHVybiAtRUZBVUxUOwotCWlmICghaW50dmFsICYmIHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZibG9jay0+YmFzZS0+ZmxhZ3MpKQorCWJhc2UgPSBkYXNkX2RldmljZV9mcm9tX2dlbmRpc2soYmRldi0+YmRfZGlzayk7CisJaWYgKCFiYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWludHZhbCAmJiB0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmFzZS0+ZmxhZ3MpKSB7CisJCWRhc2RfcHV0X2RldmljZShiYXNlKTsKIAkJcmV0dXJuIC1FUk9GUzsKKwl9CiAJc2V0X2Rpc2tfcm8oYmRldi0+YmRfZGlzaywgaW50dmFsKTsKLQlyZXR1cm4gZGFzZF9zZXRfZmVhdHVyZShibG9jay0+YmFzZS0+Y2RldiwgREFTRF9GRUFUVVJFX1JFQURPTkxZLCBpbnR2YWwpOworCXJjID0gZGFzZF9zZXRfZmVhdHVyZShiYXNlLT5jZGV2LCBEQVNEX0ZFQVRVUkVfUkVBRE9OTFksIGludHZhbCk7CisJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGludCBkYXNkX2lvY3RsX3JlYWRhbGxfY21iKHN0cnVjdCBkYXNkX2Jsb2NrICpibG9jaywgdW5zaWduZWQgaW50IGNtZCwKQEAgLTM3Miw1OSArMzk5LDc4IEBACiBpbnQgZGFzZF9pb2N0bChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBmbW9kZV90IG1vZGUsCiAJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBkYXNkX2Jsb2NrICpibG9jayA9IGJkZXYtPmJkX2Rpc2stPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CisJc3RydWN0IGRhc2RfZGV2aWNlICpiYXNlOwogCXZvaWQgX191c2VyICphcmdwOworCWludCByYzsKIAogCWlmIChpc19jb21wYXRfdGFzaygpKQogCQlhcmdwID0gY29tcGF0X3B0cihhcmcpOwogCWVsc2UKIAkJYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAotCWlmICghYmxvY2spCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0KIAlpZiAoKF9JT0NfRElSKGNtZCkgIT0gX0lPQ19OT05FKSAmJiAhYXJnKSB7CiAJCVBSSU5UX0RFQlVHKCJlbXB0eSBkYXRhIHB0ciIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwliYXNlID0gZGFzZF9kZXZpY2VfZnJvbV9nZW5kaXNrKGJkZXYtPmJkX2Rpc2spOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJYmxvY2sgPSBiYXNlLT5ibG9jazsKKwlyYyA9IDA7CiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIEJJT0RBU0RESVNBQkxFOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9kaXNhYmxlKGJkZXYpOworCQlyYyA9IGRhc2RfaW9jdGxfZGlzYWJsZShiZGV2KTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNERU5BQkxFOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9lbmFibGUoYmRldik7CisJCXJjID0gZGFzZF9pb2N0bF9lbmFibGUoYmRldik7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRFFVSUVTQ0U6Ci0JCXJldHVybiBkYXNkX2lvY3RsX3F1aWVzY2UoYmxvY2spOworCQlyYyA9IGRhc2RfaW9jdGxfcXVpZXNjZShibG9jayk7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRFJFU1VNRToKLQkJcmV0dXJuIGRhc2RfaW9jdGxfcmVzdW1lKGJsb2NrKTsKKwkJcmMgPSBkYXNkX2lvY3RsX3Jlc3VtZShibG9jayk7CisJCWJyZWFrOwogCWNhc2UgQklPREFTREZNVDoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfZm9ybWF0KGJkZXYsIGFyZ3ApOworCQlyYyA9IGRhc2RfaW9jdGxfZm9ybWF0KGJkZXYsIGFyZ3ApOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RJTkZPOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9pbmZvcm1hdGlvbihibG9jaywgY21kLCBhcmdwKTsKKwkJcmMgPSBkYXNkX2lvY3RsX2luZm9ybWF0aW9uKGJsb2NrLCBjbWQsIGFyZ3ApOworCQlicmVhazsKIAljYXNlIEJJT0RBU0RJTkZPMjoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfaW5mb3JtYXRpb24oYmxvY2ssIGNtZCwgYXJncCk7CisJCXJjID0gZGFzZF9pb2N0bF9pbmZvcm1hdGlvbihibG9jaywgY21kLCBhcmdwKTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNEUFJSRDoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfcmVhZF9wcm9maWxlKGJsb2NrLCBhcmdwKTsKKwkJcmMgPSBkYXNkX2lvY3RsX3JlYWRfcHJvZmlsZShibG9jaywgYXJncCk7CisJCWJyZWFrOwogCWNhc2UgQklPREFTRFBSUlNUOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9yZXNldF9wcm9maWxlKGJsb2NrKTsKKwkJcmMgPSBkYXNkX2lvY3RsX3Jlc2V0X3Byb2ZpbGUoYmxvY2spOworCQlicmVhazsKIAljYXNlIEJMS1JPU0VUOgotCQlyZXR1cm4gZGFzZF9pb2N0bF9zZXRfcm8oYmRldiwgYXJncCk7CisJCXJjID0gZGFzZF9pb2N0bF9zZXRfcm8oYmRldiwgYXJncCk7CisJCWJyZWFrOwogCWNhc2UgREFTREFQSVZFUjoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfYXBpX3ZlcnNpb24oYXJncCk7CisJCXJjID0gZGFzZF9pb2N0bF9hcGlfdmVyc2lvbihhcmdwKTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNEQ01GRU5BQkxFOgotCQlyZXR1cm4gZW5hYmxlX2NtZihibG9jay0+YmFzZS0+Y2Rldik7CisJCXJjID0gZW5hYmxlX2NtZihiYXNlLT5jZGV2KTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNEQ01GRElTQUJMRToKLQkJcmV0dXJuIGRpc2FibGVfY21mKGJsb2NrLT5iYXNlLT5jZGV2KTsKKwkJcmMgPSBkaXNhYmxlX2NtZihiYXNlLT5jZGV2KTsKKwkJYnJlYWs7CiAJY2FzZSBCSU9EQVNEUkVBREFMTENNQjoKLQkJcmV0dXJuIGRhc2RfaW9jdGxfcmVhZGFsbF9jbWIoYmxvY2ssIGNtZCwgYXJncCk7CisJCXJjID0gZGFzZF9pb2N0bF9yZWFkYWxsX2NtYihibG9jaywgY21kLCBhcmdwKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogaWYgdGhlIGRpc2NpcGxpbmUgaGFzIGFuIGlvY3RsIG1ldGhvZCB0cnkgaXQuICovCi0JCWlmIChibG9jay0+YmFzZS0+ZGlzY2lwbGluZS0+aW9jdGwpIHsKLQkJCWludCBydmFsID0gYmxvY2stPmJhc2UtPmRpc2NpcGxpbmUtPmlvY3RsKGJsb2NrLCBjbWQsIGFyZ3ApOwotCQkJaWYgKHJ2YWwgIT0gLUVOT0lPQ1RMQ01EKQotCQkJCXJldHVybiBydmFsOwotCQl9Ci0KLQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChiYXNlLT5kaXNjaXBsaW5lLT5pb2N0bCkgeworCQkJcmMgPSBiYXNlLT5kaXNjaXBsaW5lLT5pb2N0bChibG9jaywgY21kLCBhcmdwKTsKKwkJCWlmIChyYyA9PSAtRU5PSU9DVExDTUQpCisJCQkJcmMgPSAtRUlOVkFMOworCQl9IGVsc2UKKwkJCXJjID0gLUVJTlZBTDsKIAl9CisJZGFzZF9wdXRfZGV2aWNlKGJhc2UpOworCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY21kLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9zY2xwX2NtZC5jCmluZGV4IDRiNjBlZGUuLmJlNTVmYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHBfY21kLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscF9jbWQuYwpAQCAtNTE4LDYgKzUxOCw4IEBACiAJCXJldHVybjsKIAluZXdfaW5jci0+cm4gPSBybjsKIAluZXdfaW5jci0+c3RhbmRieSA9IHN0YW5kYnk7CisJaWYgKCFzdGFuZGJ5KQorCQluZXdfaW5jci0+dXNlY291bnQgPSAxOwogCWxhc3Rfcm4gPSAwOwogCXByZXYgPSAmc2NscF9tZW1fbGlzdDsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluY3IsICZzY2xwX21lbV9saXN0LCBsaXN0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2Jsb2NrLmMKaW5kZXggODNjZWE5YS4uMWIzOTI0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9ibG9jay5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfYmxvY2suYwpAQCAtMjM2LDcgKzIzNiw2IEBACiAJZGlzay0+bWFqb3IgPSB0YXBlYmxvY2tfbWFqb3I7CiAJZGlzay0+Zmlyc3RfbWlub3IgPSBkZXZpY2UtPmZpcnN0X21pbm9yOwogCWRpc2stPmZvcHMgPSAmdGFwZWJsb2NrX2ZvcHM7Ci0JZGlzay0+ZXZlbnRzID0gRElTS19FVkVOVF9NRURJQV9DSEFOR0U7CiAJZGlzay0+cHJpdmF0ZV9kYXRhID0gdGFwZV9nZXRfZGV2aWNlKGRldmljZSk7CiAJZGlzay0+cXVldWUgPSBibGtkYXQtPnJlcXVlc3RfcXVldWU7CiAJc2V0X2NhcGFjaXR5KGRpc2ssIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggYzUzMmJhOS4uZThmMjY3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC00MDcsOCArNDA3LDExIEBACiAJcS0+cV9zdGF0cy5ucl9zYmFsc1twb3NdKys7CiB9CiAKLXN0YXRpYyB2b2lkIGFubm91bmNlX2J1ZmZlcl9lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBwcm9jZXNzX2J1ZmZlcl9lcnJvcihzdHJ1Y3QgcWRpb19xICpxLCBpbnQgY291bnQpCiB7CisJdW5zaWduZWQgY2hhciBzdGF0ZSA9IChxLT5pc19pbnB1dF9xKSA/IFNMU0JfUF9JTlBVVF9OT1RfSU5JVCA6CisJCQkJCVNMU0JfUF9PVVRQVVRfTk9UX0lOSVQ7CisKIAlxLT5xZGlvX2Vycm9yIHw9IFFESU9fRVJST1JfU0xTQl9TVEFURTsKIAogCS8qIHNwZWNpYWwgaGFuZGxpbmcgZm9yIG5vIHRhcmdldCBidWZmZXIgZW1wdHkgKi8KQEAgLTQyNiw2ICs0MjksMTIgQEAKIAlEQkZfRVJST1IoIkYxNDolMnggRjE1OiUyeCIsCiAJCSAgcS0+c2JhbFtxLT5maXJzdF90b19jaGVja10tPmVsZW1lbnRbMTRdLmZsYWdzICYgMHhmZiwKIAkJICBxLT5zYmFsW3EtPmZpcnN0X3RvX2NoZWNrXS0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmKTsKKworCS8qCisJICogSW50ZXJydXB0cyBtYXkgYmUgYXZvaWRlZCBhcyBsb25nIGFzIHRoZSBlcnJvciBpcyBwcmVzZW50CisJICogc28gY2hhbmdlIHRoZSBidWZmZXIgc3RhdGUgaW1tZWRpYXRlbHkgdG8gYXZvaWQgc3RhcnZhdGlvbi4KKwkgKi8KKwlzZXRfYnVmX3N0YXRlcyhxLCBxLT5maXJzdF90b19jaGVjaywgc3RhdGUsIGNvdW50KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGluYm91bmRfcHJpbWVkKHN0cnVjdCBxZGlvX3EgKnEsIGludCBjb3VudCkKQEAgLTUwNiw4ICs1MTUsNyBAQAogCQkJYWNjb3VudF9zYmFscyhxLCBjb3VudCk7CiAJCWJyZWFrOwogCWNhc2UgU0xTQl9QX0lOUFVUX0VSUk9SOgotCQlhbm5vdW5jZV9idWZmZXJfZXJyb3IocSwgY291bnQpOwotCQkvKiBwcm9jZXNzIHRoZSBidWZmZXIsIHRoZSB1cHBlciBsYXllciB3aWxsIHRha2UgY2FyZSBvZiBpdCAqLworCQlwcm9jZXNzX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7CiAJCXEtPmZpcnN0X3RvX2NoZWNrID0gYWRkX2J1ZihxLT5maXJzdF90b19jaGVjaywgY291bnQpOwogCQlhdG9taWNfc3ViKGNvdW50LCAmcS0+bnJfYnVmX3VzZWQpOwogCQlpZiAocS0+aXJxX3B0ci0+cGVyZl9zdGF0X2VuYWJsZWQpCkBAIC02NzcsOCArNjg1LDcgQEAKIAkJCWFjY291bnRfc2JhbHMocSwgY291bnQpOwogCQlicmVhazsKIAljYXNlIFNMU0JfUF9PVVRQVVRfRVJST1I6Ci0JCWFubm91bmNlX2J1ZmZlcl9lcnJvcihxLCBjb3VudCk7Ci0JCS8qIHByb2Nlc3MgdGhlIGJ1ZmZlciwgdGhlIHVwcGVyIGxheWVyIHdpbGwgdGFrZSBjYXJlIG9mIGl0ICovCisJCXByb2Nlc3NfYnVmZmVyX2Vycm9yKHEsIGNvdW50KTsKIAkJcS0+Zmlyc3RfdG9fY2hlY2sgPSBhZGRfYnVmKHEtPmZpcnN0X3RvX2NoZWNrLCBjb3VudCk7CiAJCWF0b21pY19zdWIoY291bnQsICZxLT5ucl9idWZfdXNlZCk7CiAJCWlmIChxLT5pcnFfcHRyLT5wZXJmX3N0YXRfZW5hYmxlZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9rdm0va3ZtX3ZpcnRpby5jIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKaW5kZXggNDE0NDI3ZC4uNjA3OTk4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL2t2bS9rdm1fdmlydGlvLmMKQEAgLTM4MSwxMCArMzgxLDEwIEBACiAJdTE2IHN1YmNvZGU7CiAJdTMyIHBhcmFtOwogCi0Ja3N0YXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSkuaXJxc1tFWFRJTlRfVlJUXSsrOwogCXN1YmNvZGUgPSBleHRfaW50X2NvZGUgPj4gMTY7CiAJaWYgKChzdWJjb2RlICYgMHhmZjAwKSAhPSBWSVJUSU9fU1VCQ09ERV82NCkKIAkJcmV0dXJuOworCWtzdGF0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpLmlycXNbRVhUSU5UX1ZSVF0rKzsKIAogCS8qIFRoZSBMU0IgbWlnaHQgYmUgb3ZlcmxvYWRlZCwgd2UgaGF2ZSB0byBtYXNrIGl0ICovCiAJdnEgPSAoc3RydWN0IHZpcnRxdWV1ZSAqKShwYXJhbTY0ICYgfjFVTCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jIGIvZHJpdmVycy9zY3NpL2RldmljZV9oYW5kbGVyL3Njc2lfZGguYwppbmRleCA1NjRlNmVjLi4wMTE5YjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvZGV2aWNlX2hhbmRsZXIvc2NzaV9kaC5jCisrKyBiL2RyaXZlcnMvc2NzaS9kZXZpY2VfaGFuZGxlci9zY3NpX2RoLmMKQEAgLTM5NCwxMiArMzk0LDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CiAJc3RydWN0IHNjc2lfZGV2aWNlX2hhbmRsZXIgKnNjc2lfZGggPSBOVUxMOworCXN0cnVjdCBkZXZpY2UgKmRldiA9IE5VTEw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJc2RldiA9IHEtPnF1ZXVlZGF0YTsKIAlpZiAoc2RldiAmJiBzZGV2LT5zY3NpX2RoX2RhdGEpCiAJCXNjc2lfZGggPSBzZGV2LT5zY3NpX2RoX2RhdGEtPnNjc2lfZGg7Ci0JaWYgKCFzY3NpX2RoIHx8ICFnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldikgfHwKKwlkZXYgPSBnZXRfZGV2aWNlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJaWYgKCFzY3NpX2RoIHx8ICFkZXYgfHwKIAkgICAgc2Rldi0+c2Rldl9zdGF0ZSA9PSBTREVWX0NBTkNFTCB8fAogCSAgICBzZGV2LT5zZGV2X3N0YXRlID09IFNERVZfREVMKQogCQllcnIgPSBTQ1NJX0RIX05PU1lTOwpAQCAtNDEwLDEyICs0MTIsMTMgQEAKIAlpZiAoZXJyKSB7CiAJCWlmIChmbikKIAkJCWZuKGRhdGEsIGVycik7Ci0JCXJldHVybiBlcnI7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChzY3NpX2RoLT5hY3RpdmF0ZSkKIAkJZXJyID0gc2NzaV9kaC0+YWN0aXZhdGUoc2RldiwgZm4sIGRhdGEpOwotCXB1dF9kZXZpY2UoJnNkZXYtPnNkZXZfZ2VuZGV2KTsKK291dDoKKwlwdXRfZGV2aWNlKGRldik7CiAJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNjc2lfZGhfYWN0aXZhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYyBiL2RyaXZlcnMvc2NzaS9tcHQyc2FzL21wdDJzYXNfY3RsLmMKaW5kZXggMWM2ZDJiNC4uZDcyZjFmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvbXB0MnNhcy9tcHQyc2FzX2N0bC5jCkBAIC02ODgsNiArNjg4LDEzIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qIENoZWNrIGZvciBvdmVyZmxvdyBhbmQgd3JhcGFyb3VuZCAqLworCWlmIChrYXJnLmRhdGFfc2dlX29mZnNldCAqIDQgPiBpb2MtPnJlcXVlc3Rfc3ogfHwKKwkgICAga2FyZy5kYXRhX3NnZV9vZmZzZXQgPiAoVUlOVF9NQVggLyA0KSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKIAkvKiBjb3B5IGluIHJlcXVlc3QgbWVzc2FnZSBmcmFtZSBmcm9tIHVzZXIgKi8KIAlpZiAoY29weV9mcm9tX3VzZXIobXBpX3JlcXVlc3QsIG1mLCBrYXJnLmRhdGFfc2dlX29mZnNldCo0KSkgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWx1cmUgYXQgJXM6JWQvJXMoKSFcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywKQEAgLTE5NjMsNyArMTk3MCw3IEBACiAJTXBpMkRpYWdCdWZmZXJQb3N0UmVwbHlfdCAqbXBpX3JlcGx5OwogCWludCByYywgaTsKIAl1OCBidWZmZXJfdHlwZTsKLQl1bnNpZ25lZCBsb25nIHRpbWVsZWZ0OworCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQsIHJlcXVlc3Rfc2l6ZSwgY29weV9zaXplOwogCXUxNiBzbWlkOwogCXUxNiBpb2Nfc3RhdHVzOwogCXU4IGlzc3VlX3Jlc2V0ID0gMDsKQEAgLTE5OTksNiArMjAwNiw4IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCXJlcXVlc3Rfc2l6ZSA9IGlvYy0+ZGlhZ19idWZmZXJfc3pbYnVmZmVyX3R5cGVdOworCiAJaWYgKChrYXJnLnN0YXJ0aW5nX29mZnNldCAlIDQpIHx8IChrYXJnLmJ5dGVzX3RvX3JlYWQgJSA0KSkgewogCQlwcmludGsoTVBUMlNBU19FUlJfRk1UICIlczogZWl0aGVyIHRoZSBzdGFydGluZ19vZmZzZXQgIgogCQkgICAgIm9yIGJ5dGVzX3RvX3JlYWQgYXJlIG5vdCA0IGJ5dGUgYWxpZ25lZFxuIiwgaW9jLT5uYW1lLApAQCAtMjAwNiwxMyArMjAxNSwyMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlpZiAoa2FyZy5zdGFydGluZ19vZmZzZXQgPiByZXF1ZXN0X3NpemUpCisJCXJldHVybiAtRUlOVkFMOworCiAJZGlhZ19kYXRhID0gKHZvaWQgKikocmVxdWVzdF9kYXRhICsga2FyZy5zdGFydGluZ19vZmZzZXQpOwogCWRjdGxwcmludGsoaW9jLCBwcmludGsoTVBUMlNBU19JTkZPX0ZNVCAiJXM6IGRpYWdfYnVmZmVyKCVwKSwgIgogCSAgICAib2Zmc2V0KCVkKSwgc3ooJWQpXG4iLCBpb2MtPm5hbWUsIF9fZnVuY19fLAogCSAgICBkaWFnX2RhdGEsIGthcmcuc3RhcnRpbmdfb2Zmc2V0LCBrYXJnLmJ5dGVzX3RvX3JlYWQpKTsKIAorCS8qIFRydW5jYXRlIGRhdGEgb24gcmVxdWVzdHMgdGhhdCBhcmUgdG9vIGxhcmdlICovCisJaWYgKChkaWFnX2RhdGEgKyBrYXJnLmJ5dGVzX3RvX3JlYWQgPCBkaWFnX2RhdGEpIHx8CisJICAgIChkaWFnX2RhdGEgKyBrYXJnLmJ5dGVzX3RvX3JlYWQgPiByZXF1ZXN0X2RhdGEgKyByZXF1ZXN0X3NpemUpKQorCQljb3B5X3NpemUgPSByZXF1ZXN0X3NpemUgLSBrYXJnLnN0YXJ0aW5nX29mZnNldDsKKwllbHNlCisJCWNvcHlfc2l6ZSA9IGthcmcuYnl0ZXNfdG9fcmVhZDsKKwogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopdWFyZy0+ZGlhZ25vc3RpY19kYXRhLAotCSAgICBkaWFnX2RhdGEsIGthcmcuYnl0ZXNfdG9fcmVhZCkpIHsKKwkgICAgZGlhZ19kYXRhLCBjb3B5X3NpemUpKSB7CiAJCXByaW50ayhNUFQyU0FTX0VSUl9GTVQgIiVzOiBVbmFibGUgdG8gd3JpdGUgIgogCQkgICAgIm1wdF9kaWFnX3JlYWRfYnVmZmVyX3QgZGF0YSBAICVwXG4iLCBpb2MtPm5hbWUsCiAJCSAgICBfX2Z1bmNfXywgZGlhZ19kYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5jCmluZGV4IDk2ZDVhZDAuLjdmNjM2YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtY3JhaWQuYwpAQCAtMzgxNCw2ICszODE0LDkgQEAKIAkJCXJjID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0X2ZyZWVfYnVmZmVyOwogCQl9CisJfSBlbHNlIGlmIChyZXF1ZXN0X3NpemUgPCAwKSB7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBvdXRfZnJlZV9idWZmZXI7CiAJfQogCiAJLyogY2hlY2sgaWYgd2UgaGF2ZSBhbnkgYWRkaXRpb25hbCBjb21tYW5kIHBhcmFtZXRlcnMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYyBiL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYwppbmRleCBlMmQ0NWM5Li45Njg5ZDQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Fsb2dpY3B0aS5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbG9naWNwdGkuYwpAQCAtMTI5Miw4ICsxMjkyLDEwIEBACiAJLnVzZV9jbHVzdGVyaW5nCQk9IEVOQUJMRV9DTFVTVEVSSU5HLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgcXB0aV9tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgcXB0aV9zYnVzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9wKQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQ7CiAJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IG9wLT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwpAQCAtMTMwMSw5ICsxMzAzLDEwIEBACiAJc3RhdGljIGludCBucXB0aXM7CiAJY29uc3QgY2hhciAqZmNvZGU7CiAKLQlpZiAoIW9wLT5kZXYub2ZfbWF0Y2gpCisJbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UocXB0aV9tYXRjaCwgJm9wLT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwotCXRwbnQgPSBvcC0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCXRwbnQgPSBtYXRjaC0+ZGF0YTsKIAogCS8qIFNvbWV0aW1lcyBBbnRhcmVzIGNhcmRzIGNvbWUgdXAgbm90IGNvbXBsZXRlbHkKIAkgKiBzZXR1cCwgYW5kIHdlIGdldCBhIHJlcG9ydCBvZiBhIHplcm8gSVJRLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwppbmRleCA2ZDVjN2ZmLi5lYzE4MDNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9saWIuYwpAQCAtNzQsOCArNzQsNiBAQAogICovCiAjZGVmaW5lIFNDU0lfUVVFVUVfREVMQVkJMwogCi1zdGF0aWMgdm9pZCBzY3NpX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Ci0KIC8qCiAgKiBGdW5jdGlvbjoJc2NzaV91bnByZXBfcmVxdWVzdCgpCiAgKgpAQCAtMTYxLDcgKzE1OSw3IEBACiAJYmxrX3JlcXVldWVfcmVxdWVzdChxLCBjbWQtPnJlcXVlc3QpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCi0Jc2NzaV9ydW5fcXVldWUocSk7CisJa2Jsb2NrZF9zY2hlZHVsZV93b3JrKHEsICZkZXZpY2UtPnJlcXVldWVfd29yayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQwMCwxMCArMzk4LDE1IEBACiBzdGF0aWMgdm9pZCBzY3NpX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSkKIHsKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBxLT5xdWV1ZWRhdGE7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBzZGV2LT5ob3N0OworCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0OwogCUxJU1RfSEVBRChzdGFydmVkX2xpc3QpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwkvKiBpZiB0aGUgZGV2aWNlIGlzIGRlYWQsIHNkZXYgd2lsbCBiZSBOVUxMLCBzbyBubyBxdWV1ZSB0byBydW4gKi8KKwlpZiAoIXNkZXYpCisJCXJldHVybjsKKworCXNob3N0ID0gc2Rldi0+aG9zdDsKIAlpZiAoc2NzaV90YXJnZXQoc2RldiktPnNpbmdsZV9sdW4pCiAJCXNjc2lfc2luZ2xlX2x1bl9ydW4oc2Rldik7CiAKQEAgLTQxMSw4ICs0MTQsNiBAQAogCWxpc3Rfc3BsaWNlX2luaXQoJnNob3N0LT5zdGFydmVkX2xpc3QsICZzdGFydmVkX2xpc3QpOwogCiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZzdGFydmVkX2xpc3QpKSB7Ci0JCWludCBmbGFnc2V0OwotCiAJCS8qCiAJCSAqIEFzIGxvbmcgYXMgc2hvc3QgaXMgYWNjZXB0aW5nIGNvbW1hbmRzIGFuZCB3ZSBoYXZlCiAJCSAqIHN0YXJ2ZWQgcXVldWVzLCBjYWxsIGJsa19ydW5fcXVldWUuIHNjc2lfcmVxdWVzdF9mbgpAQCAtNDM2LDE4ICs0MzcsOSBAQAogCQl9CiAKIAkJc3Bpbl91bmxvY2soc2hvc3QtPmhvc3RfbG9jayk7Ci0KIAkJc3Bpbl9sb2NrKHNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2xvY2spOwotCQlmbGFnc2V0ID0gdGVzdF9iaXQoUVVFVUVfRkxBR19SRUVOVEVSLCAmcS0+cXVldWVfZmxhZ3MpICYmCi0JCQkJIXRlc3RfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwKLQkJCQkJJnNkZXYtPnJlcXVlc3RfcXVldWUtPnF1ZXVlX2ZsYWdzKTsKLQkJaWYgKGZsYWdzZXQpCi0JCQlxdWV1ZV9mbGFnX3NldChRVUVVRV9GTEFHX1JFRU5URVIsIHNkZXYtPnJlcXVlc3RfcXVldWUpOwotCQlfX2Jsa19ydW5fcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgZmFsc2UpOwotCQlpZiAoZmxhZ3NldCkKLQkJCXF1ZXVlX2ZsYWdfY2xlYXIoUVVFVUVfRkxBR19SRUVOVEVSLCBzZGV2LT5yZXF1ZXN0X3F1ZXVlKTsKKwkJX19ibGtfcnVuX3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpOwogCQlzcGluX3VubG9jayhzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9sb2NrKTsKLQogCQlzcGluX2xvY2soc2hvc3QtPmhvc3RfbG9jayk7CiAJfQogCS8qIHB1dCBhbnkgdW5wcm9jZXNzZWQgZW50cmllcyBiYWNrICovCkBAIC00NTcsNiArNDQ5LDE2IEBACiAJYmxrX3J1bl9xdWV1ZShxKTsKIH0KIAordm9pZCBzY3NpX3JlcXVldWVfcnVuX3F1ZXVlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnE7CisKKwlzZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzY3NpX2RldmljZSwgcmVxdWV1ZV93b3JrKTsKKwlxID0gc2Rldi0+cmVxdWVzdF9xdWV1ZTsKKwlzY3NpX3J1bl9xdWV1ZShxKTsKK30KKwogLyoKICAqIEZ1bmN0aW9uOglzY3NpX3JlcXVldWVfY29tbWFuZCgpCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc2Nhbi5jCmluZGV4IDA4NzgyMWYuLjU4NTg0ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3NjYW4uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9zY2FuLmMKQEAgLTI0Miw2ICsyNDIsNyBAQAogCWludCBkaXNwbGF5X2ZhaWx1cmVfbXNnID0gMSwgcmV0OwogCXN0cnVjdCBTY3NpX0hvc3QgKnNob3N0ID0gZGV2X3RvX3Nob3N0KHN0YXJnZXQtPmRldi5wYXJlbnQpOwogCWV4dGVybiB2b2lkIHNjc2lfZXZ0X3RocmVhZChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCWV4dGVybiB2b2lkIHNjc2lfcmVxdWV1ZV9ydW5fcXVldWUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIAogCXNkZXYgPSBremFsbG9jKHNpemVvZigqc2RldikgKyBzaG9zdC0+dHJhbnNwb3J0dC0+ZGV2aWNlX3NpemUsCiAJCSAgICAgICBHRlBfQVRPTUlDKTsKQEAgLTI2NCw2ICsyNjUsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZzZGV2LT5ldmVudF9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmc2Rldi0+bGlzdF9sb2NrKTsKIAlJTklUX1dPUksoJnNkZXYtPmV2ZW50X3dvcmssIHNjc2lfZXZ0X3RocmVhZCk7CisJSU5JVF9XT1JLKCZzZGV2LT5yZXF1ZXVlX3dvcmssIHNjc2lfcmVxdWV1ZV9ydW5fcXVldWUpOwogCiAJc2Rldi0+c2Rldl9nZW5kZXYucGFyZW50ID0gZ2V0X2RldmljZSgmc3RhcmdldC0+ZGV2KTsKIAlzZGV2LT5zZGV2X3RhcmdldCA9IHN0YXJnZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfc3lzZnMuYwppbmRleCBlNDRmZjY0Li5lNjM5MTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3N5c2ZzLmMKQEAgLTMyMiwxNCArMzIyLDggQEAKIAkJa2ZyZWUoZXZ0KTsKIAl9CiAKLQlpZiAoc2Rldi0+cmVxdWVzdF9xdWV1ZSkgewotCQlzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZWRhdGEgPSBOVUxMOwotCQkvKiB1c2VyIGNvbnRleHQgbmVlZGVkIHRvIGZyZWUgcXVldWUgKi8KLQkJc2NzaV9mcmVlX3F1ZXVlKHNkZXYtPnJlcXVlc3RfcXVldWUpOwotCQkvKiB0ZW1wb3JhcnkgZXhwZWRpZW50LCB0cnkgdG8gY2F0Y2ggdXNlIG9mIHF1ZXVlIGxvY2sKLQkJICogYWZ0ZXIgZnJlZSBvZiBzZGV2ICovCi0JCXNkZXYtPnJlcXVlc3RfcXVldWUgPSBOVUxMOwotCX0KKwkvKiBOVUxMIHF1ZXVlIG1lYW5zIHRoZSBkZXZpY2UgY2FuJ3QgYmUgdXNlZCAqLworCXNkZXYtPnJlcXVlc3RfcXVldWUgPSBOVUxMOwogCiAJc2NzaV90YXJnZXRfcmVhcChzY3NpX3RhcmdldChzZGV2KSk7CiAKQEAgLTkzNyw2ICs5MzEsMTIgQEAKIAlpZiAoc2Rldi0+aG9zdC0+aG9zdHQtPnNsYXZlX2Rlc3Ryb3kpCiAJCXNkZXYtPmhvc3QtPmhvc3R0LT5zbGF2ZV9kZXN0cm95KHNkZXYpOwogCXRyYW5zcG9ydF9kZXN0cm95X2RldmljZShkZXYpOworCisJLyogY2F1c2UgdGhlIHJlcXVlc3QgZnVuY3Rpb24gdG8gcmVqZWN0IGFsbCBJL08gcmVxdWVzdHMgKi8KKwlzZGV2LT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZWRhdGEgPSBOVUxMOworCisJLyogRnJlZWluZyB0aGUgcXVldWUgc2lnbmFscyB0byBibG9jayB0aGF0IHdlJ3JlIGRvbmUgKi8KKwlzY3NpX2ZyZWVfcXVldWUoc2Rldi0+cmVxdWVzdF9xdWV1ZSk7CiAJcHV0X2RldmljZShkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfZmMuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCmluZGV4IGZkZjNmYTYuLjgxNTA2OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9zY3NpX3RyYW5zcG9ydF9mYy5jCkBAIC0zODE2LDI4ICszODE2LDE3IEBACiBzdGF0aWMgdm9pZAogZmNfYnNnX2dvb3NlX3F1ZXVlKHN0cnVjdCBmY19ycG9ydCAqcnBvcnQpCiB7Ci0JaW50IGZsYWdzZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQogCWlmICghcnBvcnQtPnJxc3RfcSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBUaGlzIGdldC9wdXQgZGFuY2UgbWFrZXMgbm8gc2Vuc2UKKwkgKi8KIAlnZXRfZGV2aWNlKCZycG9ydC0+ZGV2KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKHJwb3J0LT5ycXN0X3EtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQlmbGFnc2V0ID0gdGVzdF9iaXQoUVVFVUVfRkxBR19SRUVOVEVSLCAmcnBvcnQtPnJxc3RfcS0+cXVldWVfZmxhZ3MpICYmCi0JCSAgIXRlc3RfYml0KFFVRVVFX0ZMQUdfUkVFTlRFUiwgJnJwb3J0LT5ycXN0X3EtPnF1ZXVlX2ZsYWdzKTsKLQlpZiAoZmxhZ3NldCkKLQkJcXVldWVfZmxhZ19zZXQoUVVFVUVfRkxBR19SRUVOVEVSLCBycG9ydC0+cnFzdF9xKTsKLQlfX2Jsa19ydW5fcXVldWUocnBvcnQtPnJxc3RfcSwgZmFsc2UpOwotCWlmIChmbGFnc2V0KQotCQlxdWV1ZV9mbGFnX2NsZWFyKFFVRVVFX0ZMQUdfUkVFTlRFUiwgcnBvcnQtPnJxc3RfcSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShycG9ydC0+cnFzdF9xLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0KKwlibGtfcnVuX3F1ZXVlX2FzeW5jKHJwb3J0LT5ycXN0X3EpOwogCXB1dF9kZXZpY2UoJnJwb3J0LT5kZXYpOwogfQogCi0KIC8qKgogICogZmNfYnNnX3Jwb3J0X2Rpc3BhdGNoIC0gcHJvY2VzcyBycG9ydCBic2cgcmVxdWVzdHMgYW5kIGRpc3BhdGNoIHRvIExMREQKICAqIEBxOgkJcnBvcnQgcmVxdWVzdCBxdWV1ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2IvcGNpLmMgYi9kcml2ZXJzL3NzYi9wY2kuYwppbmRleCA2ZjM0OTYzLi43YWQ0ODU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NzYi9wY2kuYworKysgYi9kcml2ZXJzL3NzYi9wY2kuYwpAQCAtNjYyLDcgKzY2Miw2IEBACiBzdGF0aWMgaW50IHNzYl9wY2lfc3Byb21fZ2V0KHN0cnVjdCBzc2JfYnVzICpidXMsCiAJCQkgICAgIHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKQogewotCWNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKmZhbGxiYWNrOwogCWludCBlcnI7CiAJdTE2ICpidWY7CiAKQEAgLTcwNywxMCArNzA2LDE3IEBACiAJCWlmIChlcnIpIHsKIAkJCS8qIEFsbCBDUkMgYXR0ZW1wdHMgZmFpbGVkLgogCQkJICogTWF5YmUgdGhlcmUgaXMgbm8gU1BST00gb24gdGhlIGRldmljZT8KLQkJCSAqIElmIHdlIGhhdmUgYSBmYWxsYmFjaywgdXNlIHRoYXQuICovCi0JCQlmYWxsYmFjayA9IHNzYl9nZXRfZmFsbGJhY2tfc3Byb20oKTsKLQkJCWlmIChmYWxsYmFjaykgewotCQkJCW1lbWNweShzcHJvbSwgZmFsbGJhY2ssIHNpemVvZigqc3Byb20pKTsKKwkJCSAqIE5vdyB3ZSBhc2sgdGhlIGFyY2ggY29kZSBpZiB0aGVyZSBpcyBzb21lIHNwcm9tCisJCQkgKiBhdmFpbGFibGUgZm9yIHRoaXMgZGV2aWNlIGluIHNvbWUgb3RoZXIgc3RvcmFnZSAqLworCQkJZXJyID0gc3NiX2ZpbGxfc3Byb21fd2l0aF9mYWxsYmFjayhidXMsIHNwcm9tKTsKKwkJCWlmIChlcnIpIHsKKwkJCQlzc2JfcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIldBUk5JTkc6IFVzaW5nIgorCQkJCQkgICAiIGZhbGxiYWNrIFNQUk9NIGZhaWxlZCAoZXJyICVkKVxuIiwKKwkJCQkJICAgZXJyKTsKKwkJCX0gZWxzZSB7CisJCQkJc3NiX2RwcmludGsoS0VSTl9ERUJVRyBQRlggIlVzaW5nIFNQUk9NIgorCQkJCQkgICAgIiByZXZpc2lvbiAlZCBwcm92aWRlZCBieSIKKwkJCQkJICAgICIgcGxhdGZvcm0uXG4iLCBzcHJvbS0+cmV2aXNpb24pOwogCQkJCWVyciA9IDA7CiAJCQkJZ290byBvdXRfZnJlZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3Nwcm9tLmMgYi9kcml2ZXJzL3NzYi9zcHJvbS5jCmluZGV4IDVmMzRkN2EuLjQ1ZmYwZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3Nwcm9tLmMKKysrIGIvZHJpdmVycy9zc2Ivc3Byb20uYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqZmFsbGJhY2tfc3Byb207CitzdGF0aWMgaW50KCpnZXRfZmFsbGJhY2tfc3Byb20pKHN0cnVjdCBzc2JfYnVzICpkZXYsIHN0cnVjdCBzc2Jfc3Byb20gKm91dCk7CiAKIAogc3RhdGljIGludCBzcHJvbTJoZXgoY29uc3QgdTE2ICpzcHJvbSwgY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKQEAgLTE0NSwzNiArMTQ1LDQzIEBACiB9CiAKIC8qKgotICogc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tIC0gU2V0IGEgZmFsbGJhY2sgU1BST00gZm9yIHVzZSBpZiBubyBTUFJPTSBpcyBmb3VuZC4KKyAqIHNzYl9hcmNoX3JlZ2lzdGVyX2ZhbGxiYWNrX3Nwcm9tIC0gUmVnaXN0ZXJzIGEgbWV0aG9kIHByb3ZpZGluZyBhCisgKiBmYWxsYmFjayBTUFJPTSBpZiBubyBTUFJPTSBpcyBmb3VuZC4KICAqCi0gKiBAc3Byb206IFRoZSBTUFJPTSBkYXRhIHN0cnVjdHVyZSB0byByZWdpc3Rlci4KKyAqIEBzcHJvbV9jYWxsYmFjazogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLgogICoKLSAqIFdpdGggdGhpcyBmdW5jdGlvbiB0aGUgYXJjaGl0ZWN0dXJlIGltcGxlbWVudGF0aW9uIG1heSByZWdpc3RlciBhIGZhbGxiYWNrCi0gKiBTUFJPTSBkYXRhIHN0cnVjdHVyZS4gVGhlIGZhbGxiYWNrIGlzIG9ubHkgdXNlZCBmb3IgUENJIGJhc2VkIFNTQiBkZXZpY2VzLAotICogd2hlcmUgbm8gdmFsaWQgU1BST00gY2FuIGJlIGZvdW5kIGluIHRoZSBzaGFkb3cgcmVnaXN0ZXJzLgorICogV2l0aCB0aGlzIGZ1bmN0aW9uIHRoZSBhcmNoaXRlY3R1cmUgaW1wbGVtZW50YXRpb24gbWF5IHJlZ2lzdGVyIGEKKyAqIGNhbGxiYWNrIGhhbmRsZXIgd2hpY2ggZmlsbHMgdGhlIFNQUk9NIGRhdGEgc3RydWN0dXJlLiBUaGUgZmFsbGJhY2sgaXMKKyAqIG9ubHkgdXNlZCBmb3IgUENJIGJhc2VkIFNTQiBkZXZpY2VzLCB3aGVyZSBubyB2YWxpZCBTUFJPTSBjYW4gYmUgZm91bmQKKyAqIGluIHRoZSBzaGFkb3cgcmVnaXN0ZXJzLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciB3ZWlyZCBhcmNoaXRlY3R1cmVzIHRoYXQgaGF2ZSBhIGhhbGYtYXNzZWQgU1NCIGRldmljZQotICogaGFyZHdpcmVkIHRvIHRoZWlyIFBDSSBidXMuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3Igd2VpcmQgYXJjaGl0ZWN0dXJlcyB0aGF0IGhhdmUgYSBoYWxmLWFzc2VkCisgKiBTU0IgZGV2aWNlIGhhcmR3aXJlZCB0byB0aGVpciBQQ0kgYnVzLgogICoKLSAqIE5vdGUgdGhhdCBpdCBkb2VzIG9ubHkgd29yayB3aXRoIFBDSSBhdHRhY2hlZCBTU0IgZGV2aWNlcy4gUENNQ0lBIGRldmljZXMgY3VycmVudGx5Ci0gKiBkb24ndCB1c2UgdGhpcyBmYWxsYmFjay4KLSAqIEFyY2hpdGVjdHVyZXMgbXVzdCBwcm92aWRlIHRoZSBTUFJPTSBmb3IgbmF0aXZlIFNTQiBkZXZpY2VzIGFueXdheSwKLSAqIHNvIHRoZSBmYWxsYmFjayBhbHNvIGlzbid0IHVzZWQgZm9yIG5hdGl2ZSBkZXZpY2VzLgorICogTm90ZSB0aGF0IGl0IGRvZXMgb25seSB3b3JrIHdpdGggUENJIGF0dGFjaGVkIFNTQiBkZXZpY2VzLiBQQ01DSUEKKyAqIGRldmljZXMgY3VycmVudGx5IGRvbid0IHVzZSB0aGlzIGZhbGxiYWNrLgorICogQXJjaGl0ZWN0dXJlcyBtdXN0IHByb3ZpZGUgdGhlIFNQUk9NIGZvciBuYXRpdmUgU1NCIGRldmljZXMgYW55d2F5LCBzbworICogdGhlIGZhbGxiYWNrIGFsc28gaXNuJ3QgdXNlZCBmb3IgbmF0aXZlIGRldmljZXMuCiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyBhdmFpbGFibGUgZm9yIGFyY2hpdGVjdHVyZSBjb2RlLCBvbmx5LiBTbyBpdCBpcyBub3QgZXhwb3J0ZWQuCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBmb3IgYXJjaGl0ZWN0dXJlIGNvZGUsIG9ubHkuIFNvIGl0IGlzIG5vdAorICogZXhwb3J0ZWQuCiAgKi8KLWludCBzc2JfYXJjaF9zZXRfZmFsbGJhY2tfc3Byb20oY29uc3Qgc3RydWN0IHNzYl9zcHJvbSAqc3Byb20pCitpbnQgc3NiX2FyY2hfcmVnaXN0ZXJfZmFsbGJhY2tfc3Byb20oaW50ICgqc3Byb21fY2FsbGJhY2spKHN0cnVjdCBzc2JfYnVzICpidXMsCisJCQkJICAgICBzdHJ1Y3Qgc3NiX3Nwcm9tICpvdXQpKQogewotCWlmIChmYWxsYmFja19zcHJvbSkKKwlpZiAoZ2V0X2ZhbGxiYWNrX3Nwcm9tKQogCQlyZXR1cm4gLUVFWElTVDsKLQlmYWxsYmFja19zcHJvbSA9IHNwcm9tOworCWdldF9mYWxsYmFja19zcHJvbSA9IHNwcm9tX2NhbGxiYWNrOwogCiAJcmV0dXJuIDA7CiB9CiAKLWNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNzYl9nZXRfZmFsbGJhY2tfc3Byb20odm9pZCkKK2ludCBzc2JfZmlsbF9zcHJvbV93aXRoX2ZhbGxiYWNrKHN0cnVjdCBzc2JfYnVzICpidXMsIHN0cnVjdCBzc2Jfc3Byb20gKm91dCkKIHsKLQlyZXR1cm4gZmFsbGJhY2tfc3Byb207CisJaWYgKCFnZXRfZmFsbGJhY2tfc3Byb20pCisJCXJldHVybiAtRU5PRU5UOworCisJcmV0dXJuIGdldF9mYWxsYmFja19zcHJvbShidXMsIG91dCk7CiB9CiAKIC8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvSXNTcHJvbUF2YWlsYWJsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaCBiL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKaW5kZXggMDMzMTEzOS4uNzc2NTMwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaAorKysgYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCkBAIC0xNzEsNyArMTcxLDggQEAKIAkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCiAJCQkgICAgIGludCAoKnNwcm9tX2NoZWNrX2NyYykoY29uc3QgdTE2ICpzcHJvbSwgc2l6ZV90IHNpemUpLAogCQkJICAgICBpbnQgKCpzcHJvbV93cml0ZSkoc3RydWN0IHNzYl9idXMgKmJ1cywgY29uc3QgdTE2ICpzcHJvbSkpOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNzYl9nZXRfZmFsbGJhY2tfc3Byb20odm9pZCk7CitleHRlcm4gaW50IHNzYl9maWxsX3Nwcm9tX3dpdGhfZmFsbGJhY2soc3RydWN0IHNzYl9idXMgKmJ1cywKKwkJCQkJc3RydWN0IHNzYl9zcHJvbSAqb3V0KTsKIAogCiAvKiBjb3JlLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfaHcuYyBiL2RyaXZlcnMvc3RhZ2luZy9mdDEwMDAvZnQxMDAwLXBjbWNpYS9mdDEwMDBfaHcuYwppbmRleCBlZWI3ZGQ0Li44MzA4MjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX2h3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9ody5jCkBAIC0yMjg4LDcgKzIyODgsMyBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiAJcmV0dXJuIE5VTEw7CiB9Ci0KLUVYUE9SVF9TWU1CT0woaW5pdF9mdDEwMDBfY2FyZCk7Ci1FWFBPUlRfU1lNQk9MKHN0b3BfZnQxMDAwX2NhcmQpOwotRVhQT1JUX1NZTUJPTChmbGFyaW9uX2Z0MTAwMF9jbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Z0MTAwMC9mdDEwMDAtcGNtY2lhL2Z0MTAwMF9wcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX3Byb2MuYwppbmRleCA5MzU2MDhlLi5iZGZiMWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX3Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnQxMDAwL2Z0MTAwMC1wY21jaWEvZnQxMDAwX3Byb2MuYwpAQCAtMjE0LDYgKzIxNCwzIEBACiAJcmVtb3ZlX3Byb2NfZW50cnkoRlQxMDAwX1BST0MsIGluaXRfbmV0LnByb2NfbmV0KTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmZnQxMDAwX25ldGRldl9ub3RpZmllcik7CiB9Ci0KLUVYUE9SVF9TWU1CT0woZnQxMDAwSW5pdFByb2MpOwotRVhQT1JUX1NZTUJPTChmdDEwMDBDbGVhbnVwUHJvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZ21hNTAwL0tjb25maWcKaW5kZXggNTUwMWViOS4uY2U4YmVkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dtYTUwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbWE1MDAvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBEUk1fUFNCCiAJdHJpc3RhdGUgIkludGVsIEdNQTUwMCBLTVMgRnJhbWVidWZmZXIiCi0JZGVwZW5kcyBvbiBEUk0gJiYgUENJCisJZGVwZW5kcyBvbiBEUk0gJiYgUENJICYmIFg4NgogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKICAgICAgICAgc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogICAgICAgICBzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92MV9jb250cm9sLmMgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwppbmRleCA5Y2MxNWMxLi4xZWE4MTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaW50ZWxfc3N0L2ludGVsbWlkX3YxX2NvbnRyb2wuYwpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL21yc3QuaD4KICNpbmNsdWRlIDxzb3VuZC9wY20uaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9pbnRlbF9zc3QvaW50ZWxtaWRfdjJfY29udHJvbC5jIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKaW5kZXggMjZkODE1YS4uM2M2YjNhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2ludGVsX3NzdC9pbnRlbG1pZF92Ml9jb250cm9sLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgImludGVsX3NzdC5oIgogI2luY2x1ZGUgImludGVsbWlkX3NuZF9jb250cm9sLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xLmMgYi9kcml2ZXJzL3N0YWdpbmcvb2xwY19kY29uL29scGNfZGNvbl94b18xLmMKaW5kZXggYjVkMjFmNi4uMjJjMDRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29scGNfZGNvbi9vbHBjX2Rjb25feG9fMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vbHBjX2Rjb24vb2xwY19kY29uX3hvXzEuYwpAQCAtMTIsNiArMTIsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvY3M1NTM1Lmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL29scGMuaD4KIAogI2luY2x1ZGUgIm9scGNfZGNvbi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vY21tX2RhdGFfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV9wY2kuYwppbmRleCBiZWYwYmJkLi5mMDFhNTFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV9wY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV9wY2kuYwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJCQlyZXR1cm4gKE5ESVNfU1RBVFVTX0ZBSUxVUkUpOwogCQl9CiAJfQotCS8qIERyb3Agbm90IFUyTSBmcmFtZXMsIGNhbid0J3MgZHJvcCBoZXJlIGJlY2F1c2Ugd2Ugd2lsbCBkcm9wIGJlYWNvbiBpbiB0aGlzIGNhc2UgKi8KKwkvKiBEcm9wIG5vdCBVMk0gZnJhbWVzLCBjYW4ndCBkcm9wIGhlcmUgYmVjYXVzZSB3ZSB3aWxsIGRyb3AgYmVhY29uIGluIHRoaXMgY2FzZSAqLwogCS8qIEkgYW0ga2luZCBvZiBkb3VidGluZyB0aGUgVTJNIGJpdCBvcGVyYXRpb24gKi8KIAkvKiBpZiAocFJ4RC0+VTJNID09IDApICovCiAJLyogICAgICByZXR1cm4oTkRJU19TVEFUVVNfRkFJTFVSRSk7ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9jbW1fZGF0YV91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3VzYi5jCmluZGV4IDU2Mzc4NTcuLjgzYTYyZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL2NtbV9kYXRhX3VzYi5jCkBAIC04NjAsNyArODYwLDcgQEAKIAkJREJHUFJJTlRfUkFXKFJUX0RFQlVHX0VSUk9SLCAoInJlY2VpdmVkIHBhY2tldCB0b28gbG9uZ1xuIikpOwogCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKIAl9Ci0JLyogRHJvcCBub3QgVTJNIGZyYW1lcywgY2FuJ3QncyBkcm9wIGhlcmUgYmVjYXVzZSB3ZSB3aWxsIGRyb3AgYmVhY29uIGluIHRoaXMgY2FzZSAqLworCS8qIERyb3Agbm90IFUyTSBmcmFtZXMsIGNhbid0IGRyb3AgaGVyZSBiZWNhdXNlIHdlIHdpbGwgZHJvcCBiZWFjb24gaW4gdGhpcyBjYXNlICovCiAJLyogSSBhbSBraW5kIG9mIGRvdWJ0aW5nIHRoZSBVMk0gYml0IG9wZXJhdGlvbiAqLwogCS8qIGlmIChwUnhELT5VMk0gPT0gMCkgKi8KIAkvKiAgICAgIHJldHVybihORElTX1NUQVRVU19GQUlMVVJFKTsgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvZGVidWcuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvZGVidWcuaAppbmRleCBlMTQwOGIwLi5hYjMwNWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL2RlYnVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9kZWJ1Zy5oCkBAIC0yOCw3ICsyOCw3IEBACiAKICNkZWZpbmUgUlRTWF9TVE9SICJydHNfcHN0b3I6ICIKIAotI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiAjZGVmaW5lIFJUU1hfREVCVUdQKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIFJUU1hfU1RPUiB4KQogI2RlZmluZSBSVFNYX0RFQlVHUE4oeC4uLikgcHJpbnRrKEtFUk5fREVCVUcgeCkKICNkZWZpbmUgUlRTWF9ERUJVR1BYKHguLi4pIHByaW50ayh4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9tcy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9tcy5jCmluZGV4IDgxMGUxNzAuLmQ4OTc5NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvbXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL21zLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJydHN4LmgiCiAjaW5jbHVkZSAicnRzeF90cmFuc3BvcnQuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfY2hpcC5jCmluZGV4IGQyZjFjNzEuLjRlNjA3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9jaGlwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X2NoaXAuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgInJ0c3guaCIKICNpbmNsdWRlICJydHN4X3RyYW5zcG9ydC5oIgpAQCAtMTMxMSwxMSArMTMxMiwxMSBAQAogCiAjaWZkZWYgU1VQUE9SVF9PQ1AKIAlpZiAoQ0hFQ0tfTFVOX01PREUoY2hpcCwgU0RfTVNfMkxVTikpIHsKLQkJI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiAJCWlmIChjaGlwLT5vY3Bfc3RhdCAmIChTRF9PQ19OT1cgfCBTRF9PQ19FVkVSIHwgTVNfT0NfTk9XIHwgTVNfT0NfRVZFUikpIHsKIAkJCVJUU1hfREVCVUdQKCJPdmVyIGN1cnJlbnQsIE9DUFNUQVQgaXMgMHgleFxuIiwgY2hpcC0+b2NwX3N0YXQpOwogCQl9Ci0JCSNlbmRpZgorI2VuZGlmCiAKIAkJaWYgKGNoaXAtPm9jcF9zdGF0ICYgKFNEX09DX05PVyB8IFNEX09DX0VWRVIpKSB7CiAJCQlpZiAoY2hpcC0+Y2FyZF9leGlzdCAmIFNEX0NBUkQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9zY3NpLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3J0c3hfc2NzaS5jCmluZGV4IDIwYzI0NjQuLjdkZTFmYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvcnRzeF9zY3NpLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9ydHN4X3Njc2kuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgInJ0c3guaCIKICNpbmNsdWRlICJydHN4X3RyYW5zcG9ydC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci9zZC5jCmluZGV4IDhkMDY2YmQuLmIxMjc3YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3Ivc2QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3NkLmMKQEAgLTkwOSw3ICs5MDksNyBAQAogCQlSVFNYX1dSSVRFX1JFRyhjaGlwLCBTRF9WUENMSzBfQ1RMLCBQSEFTRV9OT1RfUkVTRVQsIFBIQVNFX05PVF9SRVNFVCk7CiAJCVJUU1hfV1JJVEVfUkVHKGNoaXAsIENMS19DVEwsIENIQU5HRV9DTEssIDApOwogCX0gZWxzZSB7Ci0jaWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRworI2lmZGVmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKIAkJcnRzeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX1ZQX0NUTCwgJnZhbCk7CiAJCVJUU1hfREVCVUdQKCJTRF9WUF9DVEw6IDB4JXhcbiIsIHZhbCk7CiAJCXJ0c3hfcmVhZF9yZWdpc3RlcihjaGlwLCBTRF9EQ01QU19DVEwsICZ2YWwpOwpAQCAtOTU4LDcgKzk1OCw3IEBACiAJcmV0dXJuIFNUQVRVU19TVUNDRVNTOwogCiBGYWlsOgotI2lmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKKyNpZmRlZiBDT05GSUdfUlRTX1BTVE9SX0RFQlVHCiAJcnRzeF9yZWFkX3JlZ2lzdGVyKGNoaXAsIFNEX1ZQX0NUTCwgJnZhbCk7CiAJUlRTWF9ERUJVR1AoIlNEX1ZQX0NUTDogMHgleFxuIiwgdmFsKTsKIAlydHN4X3JlYWRfcmVnaXN0ZXIoY2hpcCwgU0RfRENNUFNfQ1RMLCAmdmFsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvdHJhY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IvdHJhY2UuaAppbmRleCAyYzY2OGJhLi5iYzgzYjQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3RyYWNlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci90cmFjZS5oCkBAIC04Miw3ICs4Miw3IEBACiAjZGVmaW5lIFRSQUNFX0dPVE8oY2hpcCwgbGFiZWwpCWdvdG8gbGFiZWwKICNlbmRpZgogCi0jaWYgQ09ORklHX1JUU19QU1RPUl9ERUJVRworI2lmZGVmIENPTkZJR19SVFNfUFNUT1JfREVCVUcKIHN0YXRpYyBpbmxpbmUgdm9pZCBydHN4X2R1bXAodTggKmJ1ZiwgaW50IGJ1Zl9sZW4pCiB7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3hkLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRzX3BzdG9yL3hkLmMKaW5kZXggN2JjZDQ2OC4uOWYzYWRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0c19wc3Rvci94ZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydHNfcHN0b3IveGQuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KIAogI2luY2x1ZGUgInJ0c3guaCIKICNpbmNsdWRlICJydHN4X3RyYW5zcG9ydC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NvbG82eDEwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvS2NvbmZpZwppbmRleCAyY2Y3N2M5Li4wM2RjYWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvc29sbzZ4MTAvS2NvbmZpZwpAQCAtMiw2ICsyLDcgQEAKIAl0cmlzdGF0ZSAiU29mdGxvZ2ljIDZ4MTAgTVBFRyBjb2RlYyBjYXJkcyIKIAlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19ERVYgJiYgU05EICYmIEkyQwogCXNlbGVjdCBWSURFT0JVRl9ETUFfU0cKKwlzZWxlY3QgU05EX1BDTQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBTb2Z0bG9naWMgYmFzZWQgTVBFRy00IGFuZCBoLjI2NCBjb2RlYwogCSAgY29kZWMgY2FyZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmMgYi9kcml2ZXJzL3N0YWdpbmcvc3BlY3RyYS9mZnNwb3J0LmMKaW5kZXggMjBkYWU3My4uNTA2NTQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NwZWN0cmEvZmZzcG9ydC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zcGVjdHJhL2Zmc3BvcnQuYwpAQCAtNjUzLDcgKzY1Myw3IEBACiAJfQogCWRldi0+cXVldWUtPnF1ZXVlZGF0YSA9IGRldjsKIAotCS8qIEFzIExpbnV4IGJsb2NrIGxheWVyIGRvZXMndCBzdXBwb3J0ID40S0IgaGFyZHdhcmUgc2VjdG9yLCAgKi8KKwkvKiBBcyBMaW51eCBibG9jayBsYXllciBkb2Vzbid0IHN1cHBvcnQgPjRLQiBoYXJkd2FyZSBzZWN0b3IsICAqLwogCS8qIEhlcmUgd2UgZm9yY2UgcmVwb3J0IDUxMiBieXRlIGhhcmR3YXJlIHNlY3RvciBzaXplIHRvIEtlcm5lbCAqLwogCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUoZGV2LT5xdWV1ZSwgNTEyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvY2xvYWQuYyBiL2RyaXZlcnMvc3RhZ2luZy90aWRzcGJyaWRnZS9keW5sb2FkL2Nsb2FkLmMKaW5kZXggNWNlY2QyMy4uZmUxZWYwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3RpZHNwYnJpZGdlL2R5bmxvYWQvY2xvYWQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdGlkc3BicmlkZ2UvZHlubG9hZC9jbG9hZC5jCkBAIC03MTgsNyArNzE4LDcgQEAKIAkgKiBhcyBhIHRlbXBvcmFyeSBmb3IgLmRsbHZpZXcgcmVjb3JkIGNvbnN0cnVjdGlvbi4KIAkgKiBBbGxvY2F0ZSBzdG9yYWdlIGZvciB0aGUgd2hvbGUgdGFibGUuICBBZGQgMSB0byB0aGUgc2VjdGlvbiBjb3VudAogCSAqIGluIGNhc2UgYSB0cmFtcG9saW5lIHNlY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYXMgd2VsbCBhcyB0aGUKLQkgKiBzaXplIG9mIHRoZSB0cmFtcG9saW5lIHNlY3Rpb24gbmFtZSBzbyBETExWaWV3IGRvZXMndCBnZXQgbG9zdC4KKwkgKiBzaXplIG9mIHRoZSB0cmFtcG9saW5lIHNlY3Rpb24gbmFtZSBzbyBETExWaWV3IGRvZXNuJ3QgZ2V0IGxvc3QuCiAJICovCiAKIAlzaXogPSBzeW1fY291bnQgKiBzaXplb2Yoc3RydWN0IGxvY2FsX3N5bWJvbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeC5jIGIvZHJpdmVycy9zdGFnaW5nL3R0eS9zcGVjaWFsaXguYwppbmRleCBjYjI0YzZkLi41YzM1OThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdHR5L3NwZWNpYWxpeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy90dHkvc3BlY2lhbGl4LmMKQEAgLTk3OCw3ICs5NzgsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZicC0+bG9jaywgZmxhZ3MpOwogCXN4X291dChicCwgQ0QxODZ4X0NBUiwgcG9ydF9Obyhwb3J0KSk7CiAKLQkvKiBUaGUgU3BlY2lhbGl4IGJvYXJkIGRvZXMndCBpbXBsZW1lbnQgdGhlIFJUUyBsaW5lcy4KKwkvKiBUaGUgU3BlY2lhbGl4IGJvYXJkIGRvZXNuJ3QgaW1wbGVtZW50IHRoZSBSVFMgbGluZXMuCiAJICAgVGhleSBhcmUgdXNlZCB0byBzZXQgdGhlIElSUSBsZXZlbC4gRG9uJ3QgdG91Y2ggdGhlbS4gKi8KIAlpZiAoc3hfY3J0c2N0cyh0dHkpKQogCQlwb3J0LT5NU1ZSID0gTVNWUl9EVFIgfCAoc3hfaW4oYnAsIENEMTg2eF9NU1ZSKSAmIE1TVlJfUlRTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX2hjZC5jIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKaW5kZXggMGYwMmE0Yi4uNGY0ZjEzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfaGNkLmMKQEAgLTg3Niw4ICs4NzYsMTAgQEAKIAl9CiAKIAkvKiBraWxsIHRocmVhZHMgcmVsYXRlZCB0byB0aGlzIHNkZXYsIGlmIHYuYy4gZXhpc3RzICovCi0Ja3RocmVhZF9zdG9wKHZkZXYtPnVkLnRjcF9yeCk7Ci0Ja3RocmVhZF9zdG9wKHZkZXYtPnVkLnRjcF90eCk7CisJaWYgKHZkZXYtPnVkLnRjcF9yeCkKKwkJa3RocmVhZF9zdG9wKHZkZXYtPnVkLnRjcF9yeCk7CisJaWYgKHZkZXYtPnVkLnRjcF90eCkKKwkJa3RocmVhZF9zdG9wKHZkZXYtPnVkLnRjcF90eCk7CiAKIAl1c2JpcF91aW5mbygic3RvcCB0aHJlYWRzXG4iKTsKIApAQCAtOTQ5LDkgKzk1MSw2IEBACiB7CiAJbWVtc2V0KHZkZXYsIDAsIHNpemVvZigqdmRldikpOwogCi0JdmRldi0+dWQudGNwX3J4ID0ga3RocmVhZF9jcmVhdGUodmhjaV9yeF9sb29wLCAmdmRldi0+dWQsICJ2aGNpX3J4Iik7Ci0JdmRldi0+dWQudGNwX3R4ID0ga3RocmVhZF9jcmVhdGUodmhjaV90eF9sb29wLCAmdmRldi0+dWQsICJ2aGNpX3R4Iik7Ci0KIAl2ZGV2LT51ZC5zaWRlICAgPSBVU0JJUF9WSENJOwogCXZkZXYtPnVkLnN0YXR1cyA9IFZERVZfU1RfTlVMTDsKIAkvKiB2ZGV2LT51ZC5sb2NrICAgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7ICovCkBAIC0xMTM5LDcgKzExMzgsNyBAQAogCQl1c2JpcF91ZXJyKCJjcmVhdGUgaGNkIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQorCWhjZC0+aGFzX3R0ID0gMTsKIAogCS8qIHRoaXMgaXMgcHJpdmF0ZSBkYXRhIGZvciB2aGNpX2hjZCAqLwogCXRoZV9jb250cm9sbGVyID0gaGNkX3RvX3ZoY2koaGNkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCmluZGV4IDNmMjQ1OWYuLmUyZGFkYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgInZoY2kuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAvKiBUT0RPOiByZWZpbmUgbG9ja2luZyA/Ki8KIApAQCAtMjIwLDEzICsyMjEsMTMgQEAKIAl2ZGV2LT51ZC50Y3Bfc29ja2V0ID0gc29ja2V0OwogCXZkZXYtPnVkLnN0YXR1cyAgICAgPSBWREVWX1NUX05PVEFTU0lHTkVEOwogCi0Jd2FrZV91cF9wcm9jZXNzKHZkZXYtPnVkLnRjcF9yeCk7Ci0Jd2FrZV91cF9wcm9jZXNzKHZkZXYtPnVkLnRjcF90eCk7Ci0KIAlzcGluX3VubG9jaygmdmRldi0+dWQubG9jayk7CiAJc3Bpbl91bmxvY2soJnRoZV9jb250cm9sbGVyLT5sb2NrKTsKIAkvKiBlbmQgdGhlIGxvY2sgKi8KIAorCXZkZXYtPnVkLnRjcF9yeCA9IGt0aHJlYWRfcnVuKHZoY2lfcnhfbG9vcCwgJnZkZXYtPnVkLCAidmhjaV9yeCIpOworCXZkZXYtPnVkLnRjcF90eCA9IGt0aHJlYWRfcnVuKHZoY2lfdHhfbG9vcCwgJnZkZXYtPnVkLCAidmhjaV90eCIpOworCiAJcmhfcG9ydF9jb25uZWN0KHJocG9ydCwgc3BlZWQpOwogCiAJcmV0dXJuIGNvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2NmZzgwMjExLmMKaW5kZXggNmE3MWY1Mi4uNzYzNzgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvY2ZnODAyMTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9jZmc4MDIxMS5jCkBAIC0yNzMsNyArMjczLDcgQEAKIH0KIAogaW50IHByaXNtMl9zZXRfZGVmYXVsdF9rZXkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgIHU4IGtleV9pbmRleCkKKwkJCSAgIHU4IGtleV9pbmRleCwgYm9vbCB1bmljYXN0LCBib29sIG11bHRpY2FzdCkKIHsKIAl3bGFuZGV2aWNlX3QgKndsYW5kZXYgPSBkZXYtPm1sX3ByaXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L25fZ3NtLmMgYi9kcml2ZXJzL3R0eS9uX2dzbS5jCmluZGV4IDQ3ZjhjZGIuLjc0MjczZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L25fZ3NtLmMKKysrIGIvZHJpdmVycy90dHkvbl9nc20uYwpAQCAtMTY1OCw4ICsxNjU4LDEyIEBACiAKIAlpZiAoKGdzbS0+Y29udHJvbCAmIH5QRikgPT0gVUkpCiAJCWdzbS0+ZmNzID0gZ3NtX2Zjc19hZGRfYmxvY2soZ3NtLT5mY3MsIGdzbS0+YnVmLCBnc20tPmxlbik7Ci0JLyogZ2VuZXJhdGUgZmluYWwgQ1JDIHdpdGggcmVjZWl2ZWQgRkNTICovCi0JZ3NtLT5mY3MgPSBnc21fZmNzX2FkZChnc20tPmZjcywgZ3NtLT5yZWNlaXZlZF9mY3MpOworCWlmIChnc20tPmVuY29kaW5nID09IDApeworCQkvKiBXQVJOSU5HOiBnc20tPnJlY2VpdmVkX2ZjcyBpcyB1c2VkIGZvciBnc20tPmVuY29kaW5nID0gMCBvbmx5LgorCQkgICAgICAgICAgICBJbiB0aGlzIGNhc2UgaXQgY29udGFpbiB0aGUgbGFzdCBwaWVjZSBvZiBkYXRhCisJCSAgICAgICAgICAgIHJlcXVpcmVkIHRvIGdlbmVyYXRlIGZpbmFsIENSQyAqLworCQlnc20tPmZjcyA9IGdzbV9mY3NfYWRkKGdzbS0+ZmNzLCBnc20tPnJlY2VpdmVkX2Zjcyk7CisJfQogCWlmIChnc20tPmZjcyAhPSBHT09EX0ZDUykgewogCQlnc20tPmJhZF9mY3MrKzsKIAkJaWYgKGRlYnVnICYgNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKaW5kZXggODA0ODRhZi4uYjFmMGY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL0tjb25maWcKQEAgLTEzOTEsNiArMTM5MSwxNCBAQAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIENvbnNvbGUgb24gdGhlIE5XUCBzZXJpYWwgcG9ydHMuCiAKK2NvbmZpZyBTRVJJQUxfTEFOVElRCisJYm9vbCAiTGFudGlxIHNlcmlhbCBkcml2ZXIiCisJZGVwZW5kcyBvbiBMQU5USVEKKwlzZWxlY3QgU0VSSUFMX0NPUkUKKwlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIGNvbnNvbGUgYW5kIFVBUlQgb24gTGFudGlxIFNvQ3MuCisKIGNvbmZpZyBTRVJJQUxfUUUKIAl0cmlzdGF0ZSAiRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBzZXJpYWwgcG9ydCBzdXBwb3J0IgogCWRlcGVuZHMgb24gUVVJQ0NfRU5HSU5FCmRpZmYgLS1naXQgYS9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3R0eS9zZXJpYWwvTWFrZWZpbGUKaW5kZXggZmVlMDY5MC4uMzUyNzYwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy90dHkvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9NYWtlZmlsZQpAQCAtOTQsMyArOTQsNCBAQAogb2JqLSQoQ09ORklHX1NFUklBTF9QQ0hfVUFSVCkJKz0gcGNoX3VhcnQubwogb2JqLSQoQ09ORklHX1NFUklBTF9NU01fU01EKQkrPSBtc21fc21kX3R0eS5vCiBvYmotJChDT05GSUdfU0VSSUFMX01YU19BVUFSVCkgKz0gbXhzLWF1YXJ0Lm8KK29iai0kKENPTkZJR19TRVJJQUxfTEFOVElRKQkrPSBsYW50aXEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL2lteC5jCmluZGV4IGNiMzZiMGQuLjYyZGY3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9pbXguYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvaW14LmMKQEAgLTM4MiwxMiArMzgyLDEzIEBACiBzdGF0aWMgaXJxcmV0dXJuX3QgaW14X3J0c2ludChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGlteF9wb3J0ICpzcG9ydCA9IGRldl9pZDsKLQl1bnNpZ25lZCBpbnQgdmFsID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjEpICYgVVNSMV9SVFNTOworCXVuc2lnbmVkIGludCB2YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzcG9ydC0+cG9ydC5sb2NrLCBmbGFncyk7CiAKIAl3cml0ZWwoVVNSMV9SVFNELCBzcG9ydC0+cG9ydC5tZW1iYXNlICsgVVNSMSk7CisJdmFsID0gcmVhZGwoc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjEpICYgVVNSMV9SVFNTOwogCXVhcnRfaGFuZGxlX2N0c19jaGFuZ2UoJnNwb3J0LT5wb3J0LCAhIXZhbCk7CiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZzcG9ydC0+cG9ydC5zdGF0ZS0+cG9ydC5kZWx0YV9tc3Jfd2FpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdHR5L3NlcmlhbC9sYW50aXEuYyBiL2RyaXZlcnMvdHR5L3NlcmlhbC9sYW50aXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGNmMjc5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy90dHkvc2VyaWFsL2xhbnRpcS5jCkBAIC0wLDAgKzEsNzU2IEBACisvKgorICogIEJhc2VkIG9uIGRyaXZlcnMvY2hhci9zZXJpYWwuYywgYnkgTGludXMgVG9ydmFsZHMsIFRoZW9kb3JlIFRzJ28uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbmZpbmVvbiBJRkFQIERDIENPTSBDUEUKKyAqIENvcHlyaWdodCAoQykgMjAwNyBGZWxpeCBGaWV0a2F1IDxuYmRAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGhvbWFzIExhbmdlciwgPHRob21hcy5sYW5nZXJAbGFudGlxLmNvbT4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGxhbnRpcV9zb2MuaD4KKworI2RlZmluZSBQT1JUX0xUUV9BU0MJCTExMQorI2RlZmluZSBNQVhQT1JUUwkJMgorI2RlZmluZSBVQVJUX0RVTU1ZX1VFUl9SWAkxCisjZGVmaW5lIERSVk5BTUUJCQkibHRxX2FzYyIKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgTFRRX0FTQ19UQlVGCQkoMHgwMDIwICsgMykKKyNkZWZpbmUgTFRRX0FTQ19SQlVGCQkoMHgwMDI0ICsgMykKKyNlbHNlCisjZGVmaW5lIExUUV9BU0NfVEJVRgkJMHgwMDIwCisjZGVmaW5lIExUUV9BU0NfUkJVRgkJMHgwMDI0CisjZW5kaWYKKyNkZWZpbmUgTFRRX0FTQ19GU1RBVAkJMHgwMDQ4CisjZGVmaW5lIExUUV9BU0NfV0hCU1RBVEUJMHgwMDE4CisjZGVmaW5lIExUUV9BU0NfU1RBVEUJCTB4MDAxNAorI2RlZmluZSBMVFFfQVNDX0lSTkNSCQkweDAwRjgKKyNkZWZpbmUgTFRRX0FTQ19DTEMJCTB4MDAwMAorI2RlZmluZSBMVFFfQVNDX0lECQkweDAwMDgKKyNkZWZpbmUgTFRRX0FTQ19QSVNFTAkJMHgwMDA0CisjZGVmaW5lIExUUV9BU0NfVFhGQ09OCQkweDAwNDQKKyNkZWZpbmUgTFRRX0FTQ19SWEZDT04JCTB4MDA0MAorI2RlZmluZSBMVFFfQVNDX0NPTgkJMHgwMDEwCisjZGVmaW5lIExUUV9BU0NfQkcJCTB4MDA1MAorI2RlZmluZSBMVFFfQVNDX0lSTlJFTgkJMHgwMEY0CisKKyNkZWZpbmUgQVNDX0lSTlJFTl9UWAkJMHgxCisjZGVmaW5lIEFTQ19JUk5SRU5fUlgJCTB4MgorI2RlZmluZSBBU0NfSVJOUkVOX0VSUgkJMHg0CisjZGVmaW5lIEFTQ19JUk5SRU5fVFhfQlVGCTB4OAorI2RlZmluZSBBU0NfSVJOQ1JfVElSCQkweDEKKyNkZWZpbmUgQVNDX0lSTkNSX1JJUgkJMHgyCisjZGVmaW5lIEFTQ19JUk5DUl9FSVIJCTB4NAorCisjZGVmaW5lIEFTQ09QVF9DU0laRQkJMHgzCisjZGVmaW5lIFRYRklGT19GTAkJMQorI2RlZmluZSBSWEZJRk9fRkwJCTEKKyNkZWZpbmUgQVNDQ0xDX0RJU1MJCTB4MgorI2RlZmluZSBBU0NDTENfUk1DTUFTSwkJMHgwMDAwRkYwMAorI2RlZmluZSBBU0NDTENfUk1DT0ZGU0VUCTgKKyNkZWZpbmUgQVNDQ09OX01fOEFTWU5DCQkweDAKKyNkZWZpbmUgQVNDQ09OX01fN0FTWU5DCQkweDIKKyNkZWZpbmUgQVNDQ09OX09ERAkJMHgwMDAwMDAyMAorI2RlZmluZSBBU0NDT05fU1RQCQkweDAwMDAwMDgwCisjZGVmaW5lIEFTQ0NPTl9CUlMJCTB4MDAwMDAxMDAKKyNkZWZpbmUgQVNDQ09OX0ZERQkJMHgwMDAwMDIwMAorI2RlZmluZSBBU0NDT05fUgkJMHgwMDAwODAwMAorI2RlZmluZSBBU0NDT05fRkVOCQkweDAwMDIwMDAwCisjZGVmaW5lIEFTQ0NPTl9ST0VOCQkweDAwMDgwMDAwCisjZGVmaW5lIEFTQ0NPTl9UT0VOCQkweDAwMTAwMDAwCisjZGVmaW5lIEFTQ1NUQVRFX1BFCQkweDAwMDEwMDAwCisjZGVmaW5lIEFTQ1NUQVRFX0ZFCQkweDAwMDIwMDAwCisjZGVmaW5lIEFTQ1NUQVRFX1JPRQkJMHgwMDA4MDAwMAorI2RlZmluZSBBU0NTVEFURV9BTlkJCShBU0NTVEFURV9ST0V8QVNDU1RBVEVfUEV8QVNDU1RBVEVfRkUpCisjZGVmaW5lIEFTQ1dIQlNUQVRFX0NMUlJFTgkweDAwMDAwMDAxCisjZGVmaW5lIEFTQ1dIQlNUQVRFX1NFVFJFTgkweDAwMDAwMDAyCisjZGVmaW5lIEFTQ1dIQlNUQVRFX0NMUlBFCTB4MDAwMDAwMDQKKyNkZWZpbmUgQVNDV0hCU1RBVEVfQ0xSRkUJMHgwMDAwMDAwOAorI2RlZmluZSBBU0NXSEJTVEFURV9DTFJST0UJMHgwMDAwMDAyMAorI2RlZmluZSBBU0NUWEZDT05fVFhGRU4JCTB4MDAwMQorI2RlZmluZSBBU0NUWEZDT05fVFhGRkxVCTB4MDAwMgorI2RlZmluZSBBU0NUWEZDT05fVFhGSVRMTUFTSwkweDNGMDAKKyNkZWZpbmUgQVNDVFhGQ09OX1RYRklUTE9GRgk4CisjZGVmaW5lIEFTQ1JYRkNPTl9SWEZFTgkJMHgwMDAxCisjZGVmaW5lIEFTQ1JYRkNPTl9SWEZGTFUJMHgwMDAyCisjZGVmaW5lIEFTQ1JYRkNPTl9SWEZJVExNQVNLCTB4M0YwMAorI2RlZmluZSBBU0NSWEZDT05fUlhGSVRMT0ZGCTgKKyNkZWZpbmUgQVNDRlNUQVRfUlhGRkxNQVNLCTB4MDAzRgorI2RlZmluZSBBU0NGU1RBVF9UWEZGTE1BU0sJMHgzRjAwCisjZGVmaW5lIEFTQ0ZTVEFUX1RYRlJFRU1BU0sJMHgzRjAwMDAwMAorI2RlZmluZSBBU0NGU1RBVF9UWEZSRUVPRkYJMjQKKworc3RhdGljIHZvaWQgbHFhc2NfdHhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CitzdGF0aWMgc3RydWN0IGx0cV91YXJ0X3BvcnQgKmxxYXNjX3BvcnRbTUFYUE9SVFNdOworc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBscWFzY19yZWc7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGx0cV9hc2NfbG9jayk7CisKK3N0cnVjdCBsdHFfdWFydF9wb3J0IHsKKwlzdHJ1Y3QgdWFydF9wb3J0CXBvcnQ7CisJc3RydWN0IGNsawkJKmNsazsKKwl1bnNpZ25lZCBpbnQJCXR4X2lycTsKKwl1bnNpZ25lZCBpbnQJCXJ4X2lycTsKKwl1bnNpZ25lZCBpbnQJCWVycl9pcnE7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdAorbHRxX3VhcnRfcG9ydCAqdG9fbHRxX3VhcnRfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IGx0cV91YXJ0X3BvcnQsIHBvcnQpOworfQorCitzdGF0aWMgdm9pZAorbHFhc2Nfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX3N0YXJ0X3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHRxX2FzY19sb2NrLCBmbGFncyk7CisJbHFhc2NfdHhfY2hhcnMocG9ydCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHRxX2FzY19sb2NrLCBmbGFncyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorbHFhc2Nfc3RvcF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWx0cV93MzIoQVNDV0hCU1RBVEVfQ0xSUkVOLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7Cit9CisKK3N0YXRpYyB2b2lkCitscWFzY19lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKK30KKworc3RhdGljIGludAorbHFhc2NfcnhfY2hhcnMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+c3RhdGUtPnBvcnQpOworCXVuc2lnbmVkIGludCBjaCA9IDAsIHJzciA9IDAsIGZpZm9jbnQ7CisKKwlpZiAoIXR0eSkgeworCQlkZXZfZGJnKHBvcnQtPmRldiwgIiVzOnR0eSBpcyBidXN5IG5vdyIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJZmlmb2NudCA9CisJCWx0cV9yMzIocG9ydC0+bWVtYmFzZSArIExUUV9BU0NfRlNUQVQpICYgQVNDRlNUQVRfUlhGRkxNQVNLOworCXdoaWxlIChmaWZvY250LS0pIHsKKwkJdTggZmxhZyA9IFRUWV9OT1JNQUw7CisJCWNoID0gbHRxX3I4KHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1JCVUYpOworCQlyc3IgPSAobHRxX3IzMihwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19TVEFURSkKKwkJCSYgQVNDU1RBVEVfQU5ZKSB8IFVBUlRfRFVNTVlfVUVSX1JYOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQlwb3J0LT5pY291bnQucngrKzsKKworCQkvKgorCQkgKiBOb3RlIHRoYXQgdGhlIGVycm9yIGhhbmRsaW5nIGNvZGUgaXMKKwkJICogb3V0IG9mIHRoZSBtYWluIGV4ZWN1dGlvbiBwYXRoCisJCSAqLworCQlpZiAocnNyICYgQVNDU1RBVEVfQU5ZKSB7CisJCQlpZiAocnNyICYgQVNDU1RBVEVfUEUpIHsKKwkJCQlwb3J0LT5pY291bnQucGFyaXR5Kys7CisJCQkJbHRxX3czMl9tYXNrKDAsIEFTQ1dIQlNUQVRFX0NMUlBFLAorCQkJCQlwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7CisJCQl9IGVsc2UgaWYgKHJzciAmIEFTQ1NUQVRFX0ZFKSB7CisJCQkJcG9ydC0+aWNvdW50LmZyYW1lKys7CisJCQkJbHRxX3czMl9tYXNrKDAsIEFTQ1dIQlNUQVRFX0NMUkZFLAorCQkJCQlwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7CisJCQl9CisJCQlpZiAocnNyICYgQVNDU1RBVEVfUk9FKSB7CisJCQkJcG9ydC0+aWNvdW50Lm92ZXJydW4rKzsKKwkJCQlsdHFfdzMyX21hc2soMCwgQVNDV0hCU1RBVEVfQ0xSUk9FLAorCQkJCQlwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7CisJCQl9CisKKwkJCXJzciAmPSBwb3J0LT5yZWFkX3N0YXR1c19tYXNrOworCisJCQlpZiAocnNyICYgQVNDU1RBVEVfUEUpCisJCQkJZmxhZyA9IFRUWV9QQVJJVFk7CisJCQllbHNlIGlmIChyc3IgJiBBU0NTVEFURV9GRSkKKwkJCQlmbGFnID0gVFRZX0ZSQU1FOworCQl9CisKKwkJaWYgKChyc3IgJiBwb3J0LT5pZ25vcmVfc3RhdHVzX21hc2spID09IDApCisJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGNoLCBmbGFnKTsKKworCQlpZiAocnNyICYgQVNDU1RBVEVfUk9FKQorCQkJLyoKKwkJCSAqIE92ZXJydW4gaXMgc3BlY2lhbCwgc2luY2UgaXQncyByZXBvcnRlZAorCQkJICogaW1tZWRpYXRlbHksIGFuZCBkb2Vzbid0IGFmZmVjdCB0aGUgY3VycmVudAorCQkJICogY2hhcmFjdGVyCisJCQkgKi8KKwkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOworCX0KKwlpZiAoY2ggIT0gMCkKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwl0dHlfa3JlZl9wdXQodHR5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX3R4X2NoYXJzKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPnN0YXRlLT54bWl0OworCWlmICh1YXJ0X3R4X3N0b3BwZWQocG9ydCkpIHsKKwkJbHFhc2Nfc3RvcF90eChwb3J0KTsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgoKGx0cV9yMzIocG9ydC0+bWVtYmFzZSArIExUUV9BU0NfRlNUQVQpICYKKwkJQVNDRlNUQVRfVFhGUkVFTUFTSykgPj4gQVNDRlNUQVRfVFhGUkVFT0ZGKSAhPSAwKSB7CisJCWlmIChwb3J0LT54X2NoYXIpIHsKKwkJCWx0cV93OChwb3J0LT54X2NoYXIsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1RCVUYpOworCQkJcG9ydC0+aWNvdW50LnR4Kys7CisJCQlwb3J0LT54X2NoYXIgPSAwOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAodWFydF9jaXJjX2VtcHR5KHhtaXQpKQorCQkJYnJlYWs7CisKKwkJbHRxX3c4KHBvcnQtPnN0YXRlLT54bWl0LmJ1Zltwb3J0LT5zdGF0ZS0+eG1pdC50YWlsXSwKKwkJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1RCVUYpOworCQl4bWl0LT50YWlsID0gKHhtaXQtPnRhaWwgKyAxKSAmIChVQVJUX1hNSVRfU0laRSAtIDEpOworCQlwb3J0LT5pY291bnQudHgrKzsKKwl9CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJCXVhcnRfd3JpdGVfd2FrZXVwKHBvcnQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2xxYXNjX3R4X2ludChpbnQgaXJxLCB2b2lkICpfcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKV9wb3J0OworCXNwaW5fbG9ja19pcnFzYXZlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKwlsdHFfdzMyKEFTQ19JUk5DUl9USVIsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX0lSTkNSKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKwlscWFzY19zdGFydF90eChwb3J0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbHFhc2NfZXJyX2ludChpbnQgaXJxLCB2b2lkICpfcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAoc3RydWN0IHVhcnRfcG9ydCAqKV9wb3J0OworCXNwaW5fbG9ja19pcnFzYXZlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKwkvKiBjbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJbHRxX3czMl9tYXNrKDAsIEFTQ1dIQlNUQVRFX0NMUlBFIHwgQVNDV0hCU1RBVEVfQ0xSRkUgfAorCQlBU0NXSEJTVEFURV9DTFJST0UsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1dIQlNUQVRFKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorbHFhc2NfcnhfaW50KGludCBpcnEsIHZvaWQgKl9wb3J0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdWFydF9wb3J0ICopX3BvcnQ7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmx0cV9hc2NfbG9jaywgZmxhZ3MpOworCWx0cV93MzIoQVNDX0lSTkNSX1JJUiwgcG9ydC0+bWVtYmFzZSArIExUUV9BU0NfSVJOQ1IpOworCWxxYXNjX3J4X2NoYXJzKHBvcnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmx0cV9hc2NfbG9jaywgZmxhZ3MpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludAorbHFhc2NfdHhfZW1wdHkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgc3RhdHVzOworCXN0YXR1cyA9IGx0cV9yMzIocG9ydC0+bWVtYmFzZSArIExUUV9BU0NfRlNUQVQpICYgQVNDRlNUQVRfVFhGRkxNQVNLOworCXJldHVybiBzdGF0dXMgPyAwIDogVElPQ1NFUl9URU1UOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitscWFzY19nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gVElPQ01fQ1RTIHwgVElPQ01fQ0FSIHwgVElPQ01fRFNSOworfQorCitzdGF0aWMgdm9pZAorbHFhc2Nfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVfaW50IG1jdHJsKQoreworfQorCitzdGF0aWMgdm9pZAorbHFhc2NfYnJlYWtfY3RsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKK3sKK30KKworc3RhdGljIGludAorbHFhc2Nfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBsdHFfdWFydF9wb3J0ICpsdHFfcG9ydCA9IHRvX2x0cV91YXJ0X3BvcnQocG9ydCk7CisJaW50IHJldHZhbDsKKworCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUobHRxX3BvcnQtPmNsayk7CisKKwlsdHFfdzMyX21hc2soQVNDQ0xDX0RJU1MgfCBBU0NDTENfUk1DTUFTSywgKDEgPDwgQVNDQ0xDX1JNQ09GRlNFVCksCisJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX0NMQyk7CisKKwlsdHFfdzMyKDAsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1BJU0VMKTsKKwlsdHFfdzMyKAorCQkoKFRYRklGT19GTCA8PCBBU0NUWEZDT05fVFhGSVRMT0ZGKSAmIEFTQ1RYRkNPTl9UWEZJVExNQVNLKSB8CisJCUFTQ1RYRkNPTl9UWEZFTiB8IEFTQ1RYRkNPTl9UWEZGTFUsCisJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1RYRkNPTik7CisJbHRxX3czMigKKwkJKChSWEZJRk9fRkwgPDwgQVNDUlhGQ09OX1JYRklUTE9GRikgJiBBU0NSWEZDT05fUlhGSVRMTUFTSykKKwkJfCBBU0NSWEZDT05fUlhGRU4gfCBBU0NSWEZDT05fUlhGRkxVLAorCQlwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19SWEZDT04pOworCS8qIG1ha2Ugc3VyZSBvdGhlciBzZXR0aW5ncyBhcmUgd3JpdHRlbiB0byBoYXJkd2FyZSBiZWZvcmUKKwkgKiBzZXR0aW5nIGVuYWJsZSBiaXRzCisJICovCisJd21iKCk7CisJbHRxX3czMl9tYXNrKDAsIEFTQ0NPTl9NXzhBU1lOQyB8IEFTQ0NPTl9GRU4gfCBBU0NDT05fVE9FTiB8CisJCUFTQ0NPTl9ST0VOLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCisJcmV0dmFsID0gcmVxdWVzdF9pcnEobHRxX3BvcnQtPnR4X2lycSwgbHFhc2NfdHhfaW50LAorCQlJUlFGX0RJU0FCTEVELCAiYXNjX3R4IiwgcG9ydCk7CisJaWYgKHJldHZhbCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZXF1ZXN0IGxxYXNjX3R4X2ludFxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmV0dmFsID0gcmVxdWVzdF9pcnEobHRxX3BvcnQtPnJ4X2lycSwgbHFhc2NfcnhfaW50LAorCQlJUlFGX0RJU0FCTEVELCAiYXNjX3J4IiwgcG9ydCk7CisJaWYgKHJldHZhbCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZXF1ZXN0IGxxYXNjX3J4X2ludFxuIik7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShsdHFfcG9ydC0+ZXJyX2lycSwgbHFhc2NfZXJyX2ludCwKKwkJSVJRRl9ESVNBQkxFRCwgImFzY19lcnIiLCBwb3J0KTsKKwlpZiAocmV0dmFsKSB7CisJCXByX2VycigiZmFpbGVkIHRvIHJlcXVlc3QgbHFhc2NfZXJyX2ludFxuIik7CisJCWdvdG8gZXJyMjsKKwl9CisKKwlsdHFfdzMyKEFTQ19JUk5SRU5fUlggfCBBU0NfSVJOUkVOX0VSUiB8IEFTQ19JUk5SRU5fVFgsCisJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX0lSTlJFTik7CisJcmV0dXJuIDA7CisKK2VycjI6CisJZnJlZV9pcnEobHRxX3BvcnQtPnJ4X2lycSwgcG9ydCk7CitlcnIxOgorCWZyZWVfaXJxKGx0cV9wb3J0LT50eF9pcnEsIHBvcnQpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkCitscWFzY19zaHV0ZG93bihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBsdHFfdWFydF9wb3J0ICpsdHFfcG9ydCA9IHRvX2x0cV91YXJ0X3BvcnQocG9ydCk7CisJZnJlZV9pcnEobHRxX3BvcnQtPnR4X2lycSwgcG9ydCk7CisJZnJlZV9pcnEobHRxX3BvcnQtPnJ4X2lycSwgcG9ydCk7CisJZnJlZV9pcnEobHRxX3BvcnQtPmVycl9pcnEsIHBvcnQpOworCisJbHRxX3czMigwLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCWx0cV93MzJfbWFzayhBU0NSWEZDT05fUlhGRU4sIEFTQ1JYRkNPTl9SWEZGTFUsCisJCXBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1JYRkNPTik7CisJbHRxX3czMl9tYXNrKEFTQ1RYRkNPTl9UWEZFTiwgQVNDVFhGQ09OX1RYRkZMVSwKKwkJcG9ydC0+bWVtYmFzZSArIExUUV9BU0NfVFhGQ09OKTsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJc3RydWN0IGt0ZXJtaW9zICpuZXcsIHN0cnVjdCBrdGVybWlvcyAqb2xkKQoreworCXVuc2lnbmVkIGludCBjZmxhZzsKKwl1bnNpZ25lZCBpbnQgaWZsYWc7CisJdW5zaWduZWQgaW50IGRpdmlzb3I7CisJdW5zaWduZWQgaW50IGJhdWQ7CisJdW5zaWduZWQgaW50IGNvbiA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWNmbGFnID0gbmV3LT5jX2NmbGFnOworCWlmbGFnID0gbmV3LT5jX2lmbGFnOworCisJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CisJY2FzZSBDUzc6CisJCWNvbiA9IEFTQ0NPTl9NXzdBU1lOQzsKKwkJYnJlYWs7CisKKwljYXNlIENTNToKKwljYXNlIENTNjoKKwlkZWZhdWx0OgorCQluZXctPmNfY2ZsYWcgJj0gfiBDU0laRTsKKwkJbmV3LT5jX2NmbGFnIHw9IENTODsKKwkJY29uID0gQVNDQ09OX01fOEFTWU5DOworCQlicmVhazsKKwl9CisKKwljZmxhZyAmPSB+Q01TUEFSOyAvKiBNYXJrL1NwYWNlIHBhcml0eSBpcyBub3Qgc3VwcG9ydGVkICovCisKKwlpZiAoY2ZsYWcgJiBDU1RPUEIpCisJCWNvbiB8PSBBU0NDT05fU1RQOworCisJaWYgKGNmbGFnICYgUEFSRU5CKSB7CisJCWlmICghKGNmbGFnICYgUEFST0REKSkKKwkJCWNvbiAmPSB+QVNDQ09OX09ERDsKKwkJZWxzZQorCQkJY29uIHw9IEFTQ0NPTl9PREQ7CisJfQorCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IEFTQ1NUQVRFX1JPRTsKKwlpZiAoaWZsYWcgJiBJTlBDSykKKwkJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayB8PSBBU0NTVEFURV9GRSB8IEFTQ1NUQVRFX1BFOworCisJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKKwlpZiAoaWZsYWcgJiBJR05QQVIpCisJCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBBU0NTVEFURV9GRSB8IEFTQ1NUQVRFX1BFOworCisJaWYgKGlmbGFnICYgSUdOQlJLKSB7CisJCS8qCisJCSAqIElmIHdlJ3JlIGlnbm9yaW5nIHBhcml0eSBhbmQgYnJlYWsgaW5kaWNhdG9ycywKKwkJICogaWdub3JlIG92ZXJydW5zIHRvbyAoZm9yIHJlYWwgcmF3IHN1cHBvcnQpLgorCQkgKi8KKwkJaWYgKGlmbGFnICYgSUdOUEFSKQorCQkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IEFTQ1NUQVRFX1JPRTsKKwl9CisKKwlpZiAoKGNmbGFnICYgQ1JFQUQpID09IDApCisJCXBvcnQtPmlnbm9yZV9zdGF0dXNfbWFzayB8PSBVQVJUX0RVTU1ZX1VFUl9SWDsKKworCS8qIHNldCBlcnJvciBzaWduYWxzICAtIGZyYW1pbmcsIHBhcml0eSAgYW5kIG92ZXJydW4sIGVuYWJsZSByZWNlaXZlciAqLworCWNvbiB8PSBBU0NDT05fRkVOIHwgQVNDQ09OX1RPRU4gfCBBU0NDT05fUk9FTjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKworCS8qIHNldCB1cCBDT04gKi8KKwlsdHFfdzMyX21hc2soMCwgY29uLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCisJLyogU2V0IGJhdWQgcmF0ZSAtIHRha2UgYSBkaXZpZGVyIG9mIDIgaW50byBhY2NvdW50ICovCisJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCBuZXcsIG9sZCwgMCwgcG9ydC0+dWFydGNsayAvIDE2KTsKKwlkaXZpc29yID0gdWFydF9nZXRfZGl2aXNvcihwb3J0LCBiYXVkKTsKKwlkaXZpc29yID0gZGl2aXNvciAvIDIgLSAxOworCisJLyogZGlzYWJsZSB0aGUgYmF1ZHJhdGUgZ2VuZXJhdG9yICovCisJbHRxX3czMl9tYXNrKEFTQ0NPTl9SLCAwLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCisJLyogbWFrZSBzdXJlIHRoZSBmcmFjdGlvbmFsIGRpdmlkZXIgaXMgb2ZmICovCisJbHRxX3czMl9tYXNrKEFTQ0NPTl9GREUsIDAsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX0NPTik7CisKKwkvKiBzZXQgdXAgdG8gdXNlIGRpdmlzb3Igb2YgMiAqLworCWx0cV93MzJfbWFzayhBU0NDT05fQlJTLCAwLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19DT04pOworCisJLyogbm93IHdlIGNhbiB3cml0ZSB0aGUgbmV3IGJhdWRyYXRlIGludG8gdGhlIHJlZ2lzdGVyICovCisJbHRxX3czMihkaXZpc29yLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19CRyk7CisKKwkvKiB0dXJuIHRoZSBiYXVkcmF0ZSBnZW5lcmF0b3IgYmFjayBvbiAqLworCWx0cV93MzJfbWFzaygwLCBBU0NDT05fUiwgcG9ydC0+bWVtYmFzZSArIExUUV9BU0NfQ09OKTsKKworCS8qIGVuYWJsZSByeCAqLworCWx0cV93MzIoQVNDV0hCU1RBVEVfU0VUUkVOLCBwb3J0LT5tZW1iYXNlICsgTFRRX0FTQ19XSEJTVEFURSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsdHFfYXNjX2xvY2ssIGZsYWdzKTsKKworCS8qIERvbid0IHJld3JpdGUgQjAgKi8KKyAgICAgICAgaWYgKHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShuZXcpKQorCQl0dHlfdGVybWlvc19lbmNvZGVfYmF1ZF9yYXRlKG5ldywgYmF1ZCwgYmF1ZCk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKgorbHFhc2NfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWlmIChwb3J0LT50eXBlID09IFBPUlRfTFRRX0FTQykKKwkJcmV0dXJuIERSVk5BTUU7CisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX3JlbGVhc2VfcG9ydChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWlmIChwb3J0LT5mbGFncyAmIFVQRl9JT1JFTUFQKSB7CisJCWlvdW5tYXAocG9ydC0+bWVtYmFzZSk7CisJCXBvcnQtPm1lbWJhc2UgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludAorbHFhc2NfcmVxdWVzdF9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShwb3J0LT5kZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBzaXplOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3Qgb2J0YWluIEkvTyBtZW1vcnkgcmVnaW9uIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlzaXplID0gcmVzb3VyY2Vfc2l6ZShyZXMpOworCisJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJc2l6ZSwgZGV2X25hbWUoJnBkZXYtPmRldikpOworCWlmICghcmVzKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZXF1ZXN0IEkvTyBtZW1vcnkgcmVnaW9uIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0lPUkVNQVApIHsKKwkJcG9ydC0+bWVtYmFzZSA9IGRldm1faW9yZW1hcF9ub2NhY2hlKCZwZGV2LT5kZXYsCisJCQlwb3J0LT5tYXBiYXNlLCBzaXplKTsKKwkJaWYgKHBvcnQtPm1lbWJhc2UgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2xxYXNjX2NvbmZpZ19wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBmbGFncykKK3sKKwlpZiAoZmxhZ3MgJiBVQVJUX0NPTkZJR19UWVBFKSB7CisJCXBvcnQtPnR5cGUgPSBQT1JUX0xUUV9BU0M7CisJCWxxYXNjX3JlcXVlc3RfcG9ydChwb3J0KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK2xxYXNjX3ZlcmlmeV9wb3J0KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJc3RydWN0IHNlcmlhbF9zdHJ1Y3QgKnNlcikKK3sKKwlpbnQgcmV0ID0gMDsKKwlpZiAoc2VyLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBzZXItPnR5cGUgIT0gUE9SVF9MVFFfQVNDKQorCQlyZXQgPSAtRUlOVkFMOworCWlmIChzZXItPmlycSA8IDAgfHwgc2VyLT5pcnEgPj0gTlJfSVJRUykKKwkJcmV0ID0gLUVJTlZBTDsKKwlpZiAoc2VyLT5iYXVkX2Jhc2UgPCA5NjAwKQorCQlyZXQgPSAtRUlOVkFMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9vcHMgbHFhc2NfcG9wcyA9IHsKKwkudHhfZW1wdHkgPQlscWFzY190eF9lbXB0eSwKKwkuc2V0X21jdHJsID0JbHFhc2Nfc2V0X21jdHJsLAorCS5nZXRfbWN0cmwgPQlscWFzY19nZXRfbWN0cmwsCisJLnN0b3BfdHggPQlscWFzY19zdG9wX3R4LAorCS5zdGFydF90eCA9CWxxYXNjX3N0YXJ0X3R4LAorCS5zdG9wX3J4ID0JbHFhc2Nfc3RvcF9yeCwKKwkuZW5hYmxlX21zID0JbHFhc2NfZW5hYmxlX21zLAorCS5icmVha19jdGwgPQlscWFzY19icmVha19jdGwsCisJLnN0YXJ0dXAgPQlscWFzY19zdGFydHVwLAorCS5zaHV0ZG93biA9CWxxYXNjX3NodXRkb3duLAorCS5zZXRfdGVybWlvcyA9CWxxYXNjX3NldF90ZXJtaW9zLAorCS50eXBlID0JCWxxYXNjX3R5cGUsCisJLnJlbGVhc2VfcG9ydCA9CWxxYXNjX3JlbGVhc2VfcG9ydCwKKwkucmVxdWVzdF9wb3J0ID0JbHFhc2NfcmVxdWVzdF9wb3J0LAorCS5jb25maWdfcG9ydCA9CWxxYXNjX2NvbmZpZ19wb3J0LAorCS52ZXJpZnlfcG9ydCA9CWxxYXNjX3ZlcmlmeV9wb3J0LAorfTsKKworc3RhdGljIHZvaWQKK2xxYXNjX2NvbnNvbGVfcHV0Y2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBpbnQgY2gpCit7CisJaW50IGZpZm9mcmVlOworCisJaWYgKCFwb3J0LT5tZW1iYXNlKQorCQlyZXR1cm47CisKKwlkbyB7CisJCWZpZm9mcmVlID0gKGx0cV9yMzIocG9ydC0+bWVtYmFzZSArIExUUV9BU0NfRlNUQVQpCisJCQkmIEFTQ0ZTVEFUX1RYRlJFRU1BU0spID4+IEFTQ0ZTVEFUX1RYRlJFRU9GRjsKKwl9IHdoaWxlIChmaWZvZnJlZSA9PSAwKTsKKwlsdHFfdzgoY2gsIHBvcnQtPm1lbWJhc2UgKyBMVFFfQVNDX1RCVUYpOworfQorCisKK3N0YXRpYyB2b2lkCitscWFzY19jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdV9pbnQgY291bnQpCit7CisJc3RydWN0IGx0cV91YXJ0X3BvcnQgKmx0cV9wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChjby0+aW5kZXggPj0gTUFYUE9SVFMpCisJCXJldHVybjsKKworCWx0cV9wb3J0ID0gbHFhc2NfcG9ydFtjby0+aW5kZXhdOworCWlmICghbHRxX3BvcnQpCisJCXJldHVybjsKKworCXBvcnQgPSAmbHRxX3BvcnQtPnBvcnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHRxX2FzY19sb2NrLCBmbGFncyk7CisJdWFydF9jb25zb2xlX3dyaXRlKHBvcnQsIHMsIGNvdW50LCBscWFzY19jb25zb2xlX3B1dGNoYXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmx0cV9hc2NfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IF9faW5pdAorbHFhc2NfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCit7CisJc3RydWN0IGx0cV91YXJ0X3BvcnQgKmx0cV9wb3J0OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQ7CisJaW50IGJhdWQgPSAxMTUyMDA7CisJaW50IGJpdHMgPSA4OworCWludCBwYXJpdHkgPSAnbic7CisJaW50IGZsb3cgPSAnbic7CisKKwlpZiAoY28tPmluZGV4ID49IE1BWFBPUlRTKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWx0cV9wb3J0ID0gbHFhc2NfcG9ydFtjby0+aW5kZXhdOworCWlmICghbHRxX3BvcnQpCisJCXJldHVybiAtRU5PREVWOworCisJcG9ydCA9ICZsdHFfcG9ydC0+cG9ydDsKKworCXBvcnQtPnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUobHRxX3BvcnQtPmNsayk7CisKKwlpZiAob3B0aW9ucykKKwkJdWFydF9wYXJzZV9vcHRpb25zKG9wdGlvbnMsICZiYXVkLCAmcGFyaXR5LCAmYml0cywgJmZsb3cpOworCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKHBvcnQsIGNvLCBiYXVkLCBwYXJpdHksIGJpdHMsIGZsb3cpOworfQorCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgbHFhc2NfY29uc29sZSA9IHsKKwkubmFtZSA9CQkidHR5TFRRIiwKKwkud3JpdGUgPQlscWFzY19jb25zb2xlX3dyaXRlLAorCS5kZXZpY2UgPQl1YXJ0X2NvbnNvbGVfZGV2aWNlLAorCS5zZXR1cCA9CWxxYXNjX2NvbnNvbGVfc2V0dXAsCisJLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleCA9CS0xLAorCS5kYXRhID0JCSZscWFzY19yZWcsCit9OworCitzdGF0aWMgaW50IF9faW5pdAorbHFhc2NfY29uc29sZV9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfY29uc29sZSgmbHFhc2NfY29uc29sZSk7CisJcmV0dXJuIDA7Cit9Citjb25zb2xlX2luaXRjYWxsKGxxYXNjX2NvbnNvbGVfaW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgbHFhc2NfcmVnID0geworCS5vd25lciA9CVRISVNfTU9EVUxFLAorCS5kcml2ZXJfbmFtZSA9CURSVk5BTUUsCisJLmRldl9uYW1lID0JInR0eUxUUSIsCisJLm1ham9yID0JMCwKKwkubWlub3IgPQkwLAorCS5uciA9CQlNQVhQT1JUUywKKwkuY29ucyA9CQkmbHFhc2NfY29uc29sZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0CitscWFzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBsdHFfdWFydF9wb3J0ICpsdHFfcG9ydDsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0OworCXN0cnVjdCByZXNvdXJjZSAqbW1yZXMsICppcnFyZXM7CisJaW50IHR4X2lycSwgcnhfaXJxLCBlcnJfaXJxOworCXN0cnVjdCBjbGsgKmNsazsKKwlpbnQgcmV0OworCisJbW1yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlycXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFtbXJlcyB8fCAhaXJxcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChwZGV2LT5pZCA+PSBNQVhQT1JUUykKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChscWFzY19wb3J0W3BkZXYtPmlkXSAhPSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiZnBpIik7CisJaWYgKElTX0VSUihjbGspKSB7CisJCXByX2VycigiZmFpbGVkIHRvIGdldCBmcGkgY2xrXG4iKTsKKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJdHhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInR4Iik7CisJcnhfaXJxID0gcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgInJ4Iik7CisJZXJyX2lycSA9IHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJlcnIiKTsKKwlpZiAoKHR4X2lycSA8IDApIHwgKHJ4X2lycSA8IDApIHwgKGVycl9pcnEgPCAwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlsdHFfcG9ydCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsdHFfdWFydF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsdHFfcG9ydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwb3J0ID0gJmx0cV9wb3J0LT5wb3J0OworCisJcG9ydC0+aW90eXBlCT0gU0VSSUFMX0lPX01FTTsKKwlwb3J0LT5mbGFncwk9IEFTWU5DX0JPT1RfQVVUT0NPTkYgfCBVUEZfSU9SRU1BUDsKKwlwb3J0LT5vcHMJPSAmbHFhc2NfcG9wczsKKwlwb3J0LT5maWZvc2l6ZQk9IDE2OworCXBvcnQtPnR5cGUJPSBQT1JUX0xUUV9BU0MsCisJcG9ydC0+bGluZQk9IHBkZXYtPmlkOworCXBvcnQtPmRldgk9ICZwZGV2LT5kZXY7CisKKwlwb3J0LT5pcnEJPSB0eF9pcnE7IC8qIHVudXNlZCwganVzdCB0byBiZSBiYWNrd2FyZC1jb21wYXRpYmUgKi8KKwlwb3J0LT5tYXBiYXNlCT0gbW1yZXMtPnN0YXJ0OworCisJbHRxX3BvcnQtPmNsawk9IGNsazsKKworCWx0cV9wb3J0LT50eF9pcnEgPSB0eF9pcnE7CisJbHRxX3BvcnQtPnJ4X2lycSA9IHJ4X2lycTsKKwlsdHFfcG9ydC0+ZXJyX2lycSA9IGVycl9pcnE7CisKKwlscWFzY19wb3J0W3BkZXYtPmlkXSA9IGx0cV9wb3J0OworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGx0cV9wb3J0KTsKKworCXJldCA9IHVhcnRfYWRkX29uZV9wb3J0KCZscWFzY19yZWcsIHBvcnQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbHFhc2NfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9IERSVk5BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitpbnQgX19pbml0Citpbml0X2xxYXNjKHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZscWFzY19yZWcpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9wcm9iZSgmbHFhc2NfZHJpdmVyLCBscWFzY19wcm9iZSk7CisJaWYgKHJldCAhPSAwKQorCQl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZscWFzY19yZWcpOworCisJcmV0dXJuIHJldDsKK30KKworbW9kdWxlX2luaXQoaW5pdF9scWFzYyk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTGFudGlxIHNlcmlhbCBwb3J0IGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jIGIvZHJpdmVycy90dHkvc2VyaWFsL29mX3NlcmlhbC5jCmluZGV4IDBlOGVlYzUuLmM5MTFiMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdHR5L3NlcmlhbC9vZl9zZXJpYWwuYworKysgYi9kcml2ZXJzL3R0eS9zZXJpYWwvb2Zfc2VyaWFsLmMKQEAgLTgwLDE0ICs4MCwxNyBAQAogLyoKICAqIFRyeSB0byByZWdpc3RlciBhIHNlcmlhbCBwb3J0CiAgKi8KK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX3BsYXRmb3JtX3NlcmlhbF90YWJsZVtdOwogc3RhdGljIGludCBfX2RldmluaXQgb2ZfcGxhdGZvcm1fc2VyaWFsX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBvZl9zZXJpYWxfaW5mbyAqaW5mbzsKIAlzdHJ1Y3QgdWFydF9wb3J0IHBvcnQ7CiAJaW50IHBvcnRfdHlwZTsKIAlpbnQgcmV0OwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG9mX3BsYXRmb3JtX3NlcmlhbF90YWJsZSwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKG9mX2ZpbmRfcHJvcGVydHkob2ZkZXYtPmRldi5vZl9ub2RlLCAidXNlZC1ieS1ydGFzIiwgTlVMTCkpCkBAIC05Nyw3ICsxMDAsNyBAQAogCWlmIChpbmZvID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcG9ydF90eXBlID0gKHVuc2lnbmVkIGxvbmcpb2ZkZXYtPmRldi5vZl9tYXRjaC0+ZGF0YTsKKwlwb3J0X3R5cGUgPSAodW5zaWduZWQgbG9uZyltYXRjaC0+ZGF0YTsKIAlyZXQgPSBvZl9wbGF0Zm9ybV9zZXJpYWxfc2V0dXAob2ZkZXYsIHBvcnRfdHlwZSwgJnBvcnQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKaW5kZXggMzY2MTNiMy4uM2E2OGUwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCkBAIC0yNTM5LDE1ICsyNTM5LDE4IEBACiB9CiAKIC8qIERyaXZlciBwcm9iZSBmdW5jdGlvbnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHFlX3VkY19tYXRjaFtdOwogc3RhdGljIGludCBfX2RldmluaXQgcWVfdWRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogeworCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+ZGV2Lm9mX25vZGU7CiAJc3RydWN0IHFlX2VwICplcDsKIAl1bnNpZ25lZCBpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpbnQgaTsKIAljb25zdCB2b2lkICpwcm9wOwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKHFlX3VkY19tYXRjaCwgJm9mZGV2LT5kZXYpOworCWlmICghbWF0Y2gpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgIm1vZGUiLCBOVUxMKTsKQEAgLTI1NjEsNyArMjU2NCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXVkY19jb250cm9sbGVyLT5zb2NfdHlwZSA9ICh1bnNpZ25lZCBsb25nKW9mZGV2LT5kZXYub2ZfbWF0Y2gtPmRhdGE7CisJdWRjX2NvbnRyb2xsZXItPnNvY190eXBlID0gKHVuc2lnbmVkIGxvbmcpbWF0Y2gtPmRhdGE7CiAJdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzID0gb2ZfaW9tYXAobnAsIDApOwogCWlmICghdWRjX2NvbnRyb2xsZXItPnVzYl9yZWdzKSB7CiAJCXJldCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwppbmRleCA3ZTQxYTk1Li42MjdmM2E2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAvKiBFSENJIFJlZ2lzdGVyIFNldCAqLwogI2RlZmluZSBFSENJX0lOU05SRUcwNAkJCQkJKDB4QTApCkBAIC0xMTgsNiArMTE5LDggQEAKIAlzdHJ1Y3QgZWhjaV9oY2QJCQkJKm9tYXBfZWhjaTsKIAlpbnQJCQkJCXJldCA9IC1FTk9ERVY7CiAJaW50CQkJCQlpcnE7CisJaW50CQkJCQlpOworCWNoYXIJCQkJCXN1cHBseVs3XTsKIAogCWlmICh1c2JfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0xNTgsNiArMTYxLDIzIEBACiAJaGNkLT5yc3JjX2xlbiA9IHJlc291cmNlX3NpemUocmVzKTsKIAloY2QtPnJlZ3MgPSByZWdzOwogCisJLyogZ2V0IGVoY2kgcmVndWxhdG9yIGFuZCBlbmFibGUgKi8KKwlmb3IgKGkgPSAwIDsgaSA8IE9NQVAzX0hTX1VTQl9QT1JUUyA7IGkrKykgeworCQlpZiAocGRhdGEtPnBvcnRfbW9kZVtpXSAhPSBPTUFQX0VIQ0lfUE9SVF9NT0RFX1BIWSkgeworCQkJcGRhdGEtPnJlZ3VsYXRvcltpXSA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCQlzbnByaW50ZihzdXBwbHksIHNpemVvZihzdXBwbHkpLCAiaHN1c2IlZCIsIGkpOworCQlwZGF0YS0+cmVndWxhdG9yW2ldID0gcmVndWxhdG9yX2dldChkZXYsIHN1cHBseSk7CisJCWlmIChJU19FUlIocGRhdGEtPnJlZ3VsYXRvcltpXSkpIHsKKwkJCXBkYXRhLT5yZWd1bGF0b3JbaV0gPSBOVUxMOworCQkJZGV2X2RiZyhkZXYsCisJCQkiZmFpbGVkIHRvIGdldCBlaGNpIHBvcnQlZCByZWd1bGF0b3JcbiIsIGkpOworCQl9IGVsc2UgeworCQkJcmVndWxhdG9yX2VuYWJsZShwZGF0YS0+cmVndWxhdG9yW2ldKTsKKwkJfQorCX0KKwogCXJldCA9IG9tYXBfdXNiaHNfZW5hYmxlKGRldik7CiAJaWYgKHJldCkgewogCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzdGFydCB1c2JocyB3aXRoIGVyciAlZFxuIiwgcmV0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwppbmRleCA3OTUzNDVhLi43YjJlNjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCkBAIC0xNjMzLDYgKzE2MzMsNyBAQAogCQkJaW50c1tpXS5xaCA9IE5VTEw7CiAJCQlpbnRzW2ldLnF0ZCA9IE5VTEw7CiAKKwkJCXVyYi0+c3RhdHVzID0gc3RhdHVzOwogCQkJaXNwMTc2MF91cmJfZG9uZShoY2QsIHVyYik7CiAJCQlpZiAocXRkKQogCQkJCXBlKGhjZCwgcWgsIHF0ZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKaW5kZXggYTc4ZjJlYi4uNzNmNzVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYwpAQCAtNzc3LDcgKzc3Nyw3IEBACiAJCWlmICh0MSAhPSB0MikKIAkJCXhoY2lfd3JpdGVsKHhoY2ksIHQyLCBwb3J0X2FycmF5W3BvcnRfaW5kZXhdKTsKIAotCQlpZiAoREVWX0hJR0hTUEVFRCh0MSkpIHsKKwkJaWYgKGhjZC0+c3BlZWQgIT0gSENEX1VTQjMpIHsKIAkJCS8qIGVuYWJsZSByZW1vdGUgd2FrZSB1cCBmb3IgVVNCIDIuMCAqLwogCQkJdTMyIF9faW9tZW0gKmFkZHI7CiAJCQl1MzIgdG1wOwpAQCAtODY2LDYgKzg2NiwyMSBAQAogCQkJCXRlbXAgfD0gUE9SVF9MSU5LX1NUUk9CRSB8IFhERVZfVTA7CiAJCQkJeGhjaV93cml0ZWwoeGhjaSwgdGVtcCwgcG9ydF9hcnJheVtwb3J0X2luZGV4XSk7CiAJCQl9CisJCQkvKiB3YWl0IGZvciB0aGUgcG9ydCB0byBlbnRlciBVMCBhbmQgcmVwb3J0IHBvcnQgbGluaworCQkJICogc3RhdGUgY2hhbmdlLgorCQkJICovCisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisJCQltc2xlZXAoMjApOworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKworCQkJLyogQ2xlYXIgUExDICovCisJCQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCBwb3J0X2FycmF5W3BvcnRfaW5kZXhdKTsKKwkJCWlmICh0ZW1wICYgUE9SVF9QTEMpIHsKKwkJCQl0ZW1wID0geGhjaV9wb3J0X3N0YXRlX3RvX25ldXRyYWwodGVtcCk7CisJCQkJdGVtcCB8PSBQT1JUX1BMQzsKKwkJCQl4aGNpX3dyaXRlbCh4aGNpLCB0ZW1wLCBwb3J0X2FycmF5W3BvcnRfaW5kZXhdKTsKKwkJCX0KKwogCQkJc2xvdF9pZCA9IHhoY2lfZmluZF9zbG90X2lkX2J5X3BvcnQoaGNkLAogCQkJCQl4aGNpLCBwb3J0X2luZGV4ICsgMSk7CiAJCQlpZiAoc2xvdF9pZCkKQEAgLTg3Myw3ICs4ODgsNyBAQAogCQl9IGVsc2UKIAkJCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAsIHBvcnRfYXJyYXlbcG9ydF9pbmRleF0pOwogCi0JCWlmIChERVZfSElHSFNQRUVEKHRlbXApKSB7CisJCWlmIChoY2QtPnNwZWVkICE9IEhDRF9VU0IzKSB7CiAJCQkvKiBkaXNhYmxlIHJlbW90ZSB3YWtlIHVwIGZvciBVU0IgMi4wICovCiAJCQl1MzIgX19pb21lbSAqYWRkcjsKIAkJCXUzMiB0bXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfZ2FkZ2V0LmMKaW5kZXggNmRmYmY5Zi4uZjQ3YzIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwpAQCAtMTg4NywxMSArMTg4Nyw5IEBACiAJCQlvdGdfc2V0X3ZidXMobXVzYi0+eGNlaXYsIDEpOwogCiAJCWhjZC0+c2VsZi51c2VzX3Bpb19mb3JfY29udHJvbCA9IDE7Ci0KLQkJaWYgKG11c2ItPnhjZWl2LT5sYXN0X2V2ZW50ID09IFVTQl9FVkVOVF9OT05FKQotCQkJcG1fcnVudGltZV9wdXQobXVzYi0+Y29udHJvbGxlcik7Ci0KIAl9CisJaWYgKG11c2ItPnhjZWl2LT5sYXN0X2V2ZW50ID09IFVTQl9FVkVOVF9OT05FKQorCQlwbV9ydW50aW1lX3B1dChtdXNiLT5jb250cm9sbGVyKTsKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKaW5kZXggNTdhMjdmYS4uZTllNjBiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiAJCURCRyg0LCAiVkJVUyBEaXNjb25uZWN0XG4iKTsKIAogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwotCQlpZiAoaXNfb3RnX2VuYWJsZWQobXVzYikpCisJCWlmIChpc19vdGdfZW5hYmxlZChtdXNiKSB8fCBpc19wZXJpcGhlcmFsX2VuYWJsZWQobXVzYikpCiAJCQlpZiAobXVzYi0+Z2FkZ2V0X2RyaXZlcikKICNlbmRpZgogCQkJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC92aG9zdC5jIGIvZHJpdmVycy92aG9zdC92aG9zdC5jCmluZGV4IDJhYjI5MTIuLjdhYTRlZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYworKysgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKQEAgLTQsNyArNCw3IEBACiAgKiBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+CiAgKgogICogSW5zcGlyYXRpb24sIHNvbWUgY29kZSwgYW5kIG1vc3Qgd2l0dHkgY29tbWVudHMgY29tZSBmcm9tCi0gKiBEb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYywgYnkgUnVzdHkgUnVzc2VsbAorICogRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2xndWVzdC9sZ3Vlc3QuYywgYnkgUnVzdHkgUnVzc2VsbAogICoKICAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCmluZGV4IDgyYWNiOGQuLjYxODNhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCkBAIC02Niw3ICs2Niw3IEBACiAgKiBoYXZlLiAgQWxsb3cgMSUgZWl0aGVyIHdheSBvbiB0aGUgbm9taW5hbCBmb3IgVFZzLgogICovCiAjZGVmaW5lIE5SX01PTlRZUEVTCTYKLXN0YXRpYyBzdHJ1Y3QgZmJfbW9uc3BlY3MgbW9uc3BlY3NbTlJfTU9OVFlQRVNdIF9faW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IGZiX21vbnNwZWNzIG1vbnNwZWNzW05SX01PTlRZUEVTXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogVFYJCSovCiAJCS5oZm1pbgk9IDE1NDY5LAogCQkuaGZtYXgJPSAxNTc4MSwKQEAgLTg3Myw3ICs4NzMsNyBAQAogLyoKICAqIEV2ZXJ5dGhpbmcgYWZ0ZXIgaGVyZSBpcyBpbml0aWFsaXNhdGlvbiEhIQogICovCi1zdGF0aWMgc3RydWN0IGZiX3ZpZGVvbW9kZSBtb2RlZGJbXSBfX2luaXRkYXRhID0geworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgbW9kZWRiW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CS8qIDMyMHgyNTYgQCA1MEh6ICovCiAJCU5VTEwsIDUwLCAgMzIwLCAgMjU2LCAxMjUwMDAsICA5MiwgIDYyLCAgMzUsIDE5LCAgMzgsIDIsCiAJCUZCX1NZTkNfQ09NUF9ISUdIX0FDVCwKQEAgLTkyNSw4ICs5MjUsNyBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmJfdmlkZW9tb2RlIF9faW5pdGRhdGEKLWFjb3JuZmJfZGVmYXVsdF9tb2RlID0geworc3RhdGljIHN0cnVjdCBmYl92aWRlb21vZGUgYWNvcm5mYl9kZWZhdWx0X21vZGUgX19kZXZpbml0ZGF0YSA9IHsKIAkubmFtZSA9CQlOVUxMLAogCS5yZWZyZXNoID0JNjAsCiAJLnhyZXMgPQkJNjQwLApAQCAtOTQyLDcgKzk0MSw3IEBACiAJLnZtb2RlID0JRkJfVk1PREVfTk9OSU5URVJMQUNFRAogfTsKIAotc3RhdGljIHZvaWQgX19pbml0IGFjb3JuZmJfaW5pdF9mYmluZm8odm9pZCkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBhY29ybmZiX2luaXRfZmJpbmZvKHZvaWQpCiB7CiAJc3RhdGljIGludCBmaXJzdCA9IDE7CiAKQEAgLTEwMTgsOCArMTAxNyw3IEBACiAgKglzaXplIGNhbiBvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5ICdNJyBvciAnSycgZm9yCiAgKglNQiBvciBLQiByZXNwZWN0aXZlbHkuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdAotYWNvcm5mYl9wYXJzZV9tb24oY2hhciAqb3B0KQorc3RhdGljIHZvaWQgX19kZXZpbml0IGFjb3JuZmJfcGFyc2VfbW9uKGNoYXIgKm9wdCkKIHsKIAljaGFyICpwID0gb3B0OwogCkBAIC0xMDY2LDggKzEwNjQsNyBAQAogCWN1cnJlbnRfcGFyLm1vbnR5cGUgPSAtMTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0Ci1hY29ybmZiX3BhcnNlX21vbnR5cGUoY2hhciAqb3B0KQorc3RhdGljIHZvaWQgX19kZXZpbml0IGFjb3JuZmJfcGFyc2VfbW9udHlwZShjaGFyICpvcHQpCiB7CiAJY3VycmVudF9wYXIubW9udHlwZSA9IC0yOwogCkBAIC0xMTA4LDggKzExMDUsNyBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgX19pbml0Ci1hY29ybmZiX3BhcnNlX2RyYW0oY2hhciAqb3B0KQorc3RhdGljIHZvaWQgX19kZXZpbml0IGFjb3JuZmJfcGFyc2VfZHJhbShjaGFyICpvcHQpCiB7CiAJdW5zaWduZWQgaW50IHNpemU7CiAKQEAgLTExMzQsMTUgKzExMzAsMTQgQEAKIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9ucyB7CiAJY2hhciAqbmFtZTsKIAl2b2lkICgqcGFyc2UpKGNoYXIgKm9wdCk7Ci19IG9wdF90YWJsZVtdIF9faW5pdGRhdGEgPSB7Cit9IG9wdF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAibW9uIiwgICAgIGFjb3JuZmJfcGFyc2VfbW9uICAgICB9LAogCXsgIm1vbnR5cGUiLCBhY29ybmZiX3BhcnNlX21vbnR5cGUgfSwKIAl7ICJkcmFtIiwgICAgYWNvcm5mYl9wYXJzZV9kcmFtICAgIH0sCiAJeyBOVUxMLCBOVUxMIH0KIH07CiAKLWludCBfX2luaXQKLWFjb3JuZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFjb3JuZmJfc2V0dXAoY2hhciAqb3B0aW9ucykKIHsKIAlzdHJ1Y3Qgb3B0aW9ucyAqb3B0cDsKIAljaGFyICpvcHQ7CkBAIC0xMTc5LDggKzExNzQsNyBAQAogICogRGV0ZWN0IHR5cGUgb2YgbW9uaXRvciBjb25uZWN0ZWQKICAqICBGb3Igbm93LCB3ZSBqdXN0IGFzc3VtZSBTVkdBCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0Ci1hY29ybmZiX2RldGVjdF9tb25pdG9ydHlwZSh2b2lkKQorc3RhdGljIGludCBfX2RldmluaXQgYWNvcm5mYl9kZXRlY3RfbW9uaXRvcnR5cGUodm9pZCkKIHsKIAlyZXR1cm4gNDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXRhZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXRhZmIuYwppbmRleCA1YjJiNWVmLi42NGU0MWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0YWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hdGFmYi5jCkBAIC0zMTE3LDcgKzMxMTcsNyBAQAogCQkJYXRhZmJfb3BzLmZiX3NldGNvbHJlZyA9ICZmYWxjb25fc2V0Y29scmVnOwogCQkJZXJyb3IgPSByZXF1ZXN0X2lycShJUlFfQVVUT180LCBmYWxjb25fdmJsX3N3aXRjaGVyLAogCQkJCQkgICAgSVJRX1RZUEVfUFJJTywKLQkJCQkJICAgICJmcmFtZWJ1ZmZlci9tb2Rlc3dpdGNoIiwKKwkJCQkJICAgICJmcmFtZWJ1ZmZlcjptb2Rlc3dpdGNoIiwKIAkJCQkJICAgIGZhbGNvbl92Ymxfc3dpdGNoZXIpOwogCQkJaWYgKGVycm9yKQogCQkJCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwppbmRleCBlMGMyMjg0Li41YWFjMDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKKysrIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCkBAIC00Miw5ICs0MiwzNCBAQAogCiAjZGVmaW5lIEZCUElYTUFQU0laRQkoMTAyNCAqIDgpCiAKK3N0YXRpYyBERUZJTkVfTVVURVgocmVnaXN0cmF0aW9uX2xvY2spOwogc3RydWN0IGZiX2luZm8gKnJlZ2lzdGVyZWRfZmJbRkJfTUFYXSBfX3JlYWRfbW9zdGx5OwogaW50IG51bV9yZWdpc3RlcmVkX2ZiIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBzdHJ1Y3QgZmJfaW5mbyAqZ2V0X2ZiX2luZm8odW5zaWduZWQgaW50IGlkeCkKK3sKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbzsKKworCWlmIChpZHggPj0gRkJfTUFYKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKworCW11dGV4X2xvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKKwlmYl9pbmZvID0gcmVnaXN0ZXJlZF9mYltpZHhdOworCWlmIChmYl9pbmZvKQorCQlhdG9taWNfaW5jKCZmYl9pbmZvLT5jb3VudCk7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CisKKwlyZXR1cm4gZmJfaW5mbzsKK30KKworc3RhdGljIHZvaWQgcHV0X2ZiX2luZm8oc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCit7CisJaWYgKCFhdG9taWNfZGVjX2FuZF90ZXN0KCZmYl9pbmZvLT5jb3VudCkpCisJCXJldHVybjsKKwlpZiAoZmJfaW5mby0+ZmJvcHMtPmZiX2Rlc3Ryb3kpCisJCWZiX2luZm8tPmZib3BzLT5mYl9kZXN0cm95KGZiX2luZm8pOworfQorCiBpbnQgbG9ja19mYl9pbmZvKHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCW11dGV4X2xvY2soJmluZm8tPmxvY2spOwpAQCAtNjQ3LDYgKzY3Miw3IEBACiAKIHN0YXRpYyB2b2lkICpmYl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKKwltdXRleF9sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CiAJcmV0dXJuICgqcG9zIDwgRkJfTUFYKSA/IHBvcyA6IE5VTEw7CiB9CiAKQEAgLTY1OCw2ICs2ODQsNyBAQAogCiBzdGF0aWMgdm9pZCBmYl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJbXV0ZXhfdW5sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgZmJfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQpAQCAtNjkwLDEzICs3MTcsMzAgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKIAorLyoKKyAqIFdlIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIGZiX2luZm8gaW4gZmlsZS0+cHJpdmF0ZV9kYXRhLAorICogYnV0IGlmIHRoZSBjdXJyZW50IHJlZ2lzdGVyZWQgZmIgaGFzIGNoYW5nZWQsIHdlIGRvbid0CisgKiBhY3R1YWxseSB3YW50IHRvIHVzZSBpdC4KKyAqCisgKiBTbyBsb29rIHVwIHRoZSBmYl9pbmZvIHVzaW5nIHRoZSBpbm9kZSBtaW5vciBudW1iZXIsCisgKiBhbmQganVzdCB2ZXJpZnkgaXQgYWdhaW5zdCB0aGUgcmVmZXJlbmNlIHdlIGhhdmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmJfaW5mbyAqZmlsZV9mYl9pbmZvKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCWludCBmYmlkeCA9IGltaW5vcihpbm9kZSk7CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKKworCWlmIChpbmZvICE9IGZpbGUtPnByaXZhdGVfZGF0YSkKKwkJaW5mbyA9IE5VTEw7CisJcmV0dXJuIGluZm87Cit9CisKIHN0YXRpYyBzc2l6ZV90CiBmYl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7CiAJdTggKmJ1ZmZlciwgKmRzdDsKIAl1OCBfX2lvbWVtICpzcmM7CiAJaW50IGMsIGNudCA9IDAsIGVyciA9IDA7CkBAIC03NjEsOSArODA1LDcgQEAKIGZiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7CiAJdTggKmJ1ZmZlciwgKnNyYzsKIAl1OCBfX2lvbWVtICpkc3Q7CiAJaW50IGMsIGNudCA9IDAsIGVyciA9IDA7CkBAIC0xMTQxLDEwICsxMTgzLDEwIEBACiAKIHN0YXRpYyBsb25nIGZiX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07CisJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmaWxlX2ZiX2luZm8oZmlsZSk7CiAKKwlpZiAoIWluZm8pCisJCXJldHVybiAtRU5PREVWOwogCXJldHVybiBkb19mYl9pb2N0bChpbmZvLCBjbWQsIGFyZyk7CiB9CiAKQEAgLTEyNjUsMTIgKzEzMDcsMTMgQEAKIHN0YXRpYyBsb25nIGZiX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKIAkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgZmJpZHggPSBpbWlub3IoaW5vZGUpOwotCXN0cnVjdCBmYl9pbmZvICppbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0Jc3RydWN0IGZiX29wcyAqZmIgPSBpbmZvLT5mYm9wczsKKwlzdHJ1Y3QgZmJfaW5mbyAqaW5mbyA9IGZpbGVfZmJfaW5mbyhmaWxlKTsKKwlzdHJ1Y3QgZmJfb3BzICpmYjsKIAlsb25nIHJldCA9IC1FTk9JT0NUTENNRDsKIAorCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CisJZmIgPSBpbmZvLT5mYm9wczsKIAlzd2l0Y2goY21kKSB7CiAJY2FzZSBGQklPR0VUX1ZTQ1JFRU5JTkZPOgogCWNhc2UgRkJJT1BVVF9WU0NSRUVOSU5GTzoKQEAgLTEzMDMsMTYgKzEzNDYsMTggQEAKIHN0YXRpYyBpbnQKIGZiX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKIHsKLQlpbnQgZmJpZHggPSBpbWlub3IoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKLQlzdHJ1Y3QgZmJfb3BzICpmYiA9IGluZm8tPmZib3BzOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZmlsZV9mYl9pbmZvKGZpbGUpOworCXN0cnVjdCBmYl9vcHMgKmZiOwogCXVuc2lnbmVkIGxvbmcgb2ZmOwogCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CiAJdTMyIGxlbjsKIAorCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKHZtYS0+dm1fcGdvZmYgPiAofjBVTCA+PiBQQUdFX1NISUZUKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJb2ZmID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCWZiID0gaW5mby0+ZmJvcHM7CiAJaWYgKCFmYikKIAkJcmV0dXJuIC1FTk9ERVY7CiAJbXV0ZXhfbG9jaygmaW5mby0+bW1fbG9jayk7CkBAIC0xMzYxLDE0ICsxNDA2LDE2IEBACiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IHJlcyA9IDA7CiAKLQlpZiAoZmJpZHggPj0gRkJfTUFYKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpbmZvID0gcmVnaXN0ZXJlZF9mYltmYmlkeF07Ci0JaWYgKCFpbmZvKQorCWluZm8gPSBnZXRfZmJfaW5mbyhmYmlkeCk7CisJaWYgKCFpbmZvKSB7CiAJCXJlcXVlc3RfbW9kdWxlKCJmYiVkIiwgZmJpZHgpOwotCWluZm8gPSByZWdpc3RlcmVkX2ZiW2ZiaWR4XTsKLQlpZiAoIWluZm8pCi0JCXJldHVybiAtRU5PREVWOworCQlpbmZvID0gZ2V0X2ZiX2luZm8oZmJpZHgpOworCQlpZiAoIWluZm8pCisJCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJaWYgKElTX0VSUihpbmZvKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5mbyk7CisKIAltdXRleF9sb2NrKCZpbmZvLT5sb2NrKTsKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGluZm8tPmZib3BzLT5vd25lcikpIHsKIAkJcmVzID0gLUVOT0RFVjsKQEAgLTEzODYsNiArMTQzMyw4IEBACiAjZW5kaWYKIG91dDoKIAltdXRleF91bmxvY2soJmluZm8tPmxvY2spOworCWlmIChyZXMpCisJCXB1dF9mYl9pbmZvKGluZm8pOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTE0MDEsNiArMTQ1MCw3IEBACiAJCWluZm8tPmZib3BzLT5mYl9yZWxlYXNlKGluZm8sMSk7CiAJbW9kdWxlX3B1dChpbmZvLT5mYm9wcy0+b3duZXIpOwogCW11dGV4X3VubG9jaygmaW5mby0+bG9jayk7CisJcHV0X2ZiX2luZm8oaW5mbyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0ODcsOCArMTUzNywxMCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGludCBkb191bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKTsKKwogI2RlZmluZSBWR0FfRkJfUEhZUyAweEEwMDAwCi12b2lkIHJlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMoc3RydWN0IGFwZXJ0dXJlc19zdHJ1Y3QgKmEsCitzdGF0aWMgdm9pZCBkb19yZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKHN0cnVjdCBhcGVydHVyZXNfc3RydWN0ICphLAogCQkJCSAgICAgY29uc3QgY2hhciAqbmFtZSwgYm9vbCBwcmltYXJ5KQogewogCWludCBpOwpAQCAtMTUxMCw0MyArMTU2MiwzMiBAQAogCQkJcHJpbnRrKEtFUk5fSU5GTyAiZmI6IGNvbmZsaWN0aW5nIGZiIGh3IHVzYWdlICIKIAkJCSAgICAgICAiJXMgdnMgJXMgLSByZW1vdmluZyBnZW5lcmljIGRyaXZlclxuIiwKIAkJCSAgICAgICBuYW1lLCByZWdpc3RlcmVkX2ZiW2ldLT5maXguaWQpOwotCQkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihyZWdpc3RlcmVkX2ZiW2ldKTsKKwkJCWRvX3VucmVnaXN0ZXJfZnJhbWVidWZmZXIocmVnaXN0ZXJlZF9mYltpXSk7CiAJCX0KIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKHJlbW92ZV9jb25mbGljdGluZ19mcmFtZWJ1ZmZlcnMpOwogCi0vKioKLSAqCXJlZ2lzdGVyX2ZyYW1lYnVmZmVyIC0gcmVnaXN0ZXJzIGEgZnJhbWUgYnVmZmVyIGRldmljZQotICoJQGZiX2luZm86IGZyYW1lIGJ1ZmZlciBpbmZvIHN0cnVjdHVyZQotICoKLSAqCVJlZ2lzdGVycyBhIGZyYW1lIGJ1ZmZlciBkZXZpY2UgQGZiX2luZm8uCi0gKgotICoJUmV0dXJucyBuZWdhdGl2ZSBlcnJubyBvbiBlcnJvciwgb3IgemVybyBmb3Igc3VjY2Vzcy4KLSAqCi0gKi8KLQotaW50Ci1yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3N0YXRpYyBpbnQgZG9fcmVnaXN0ZXJfZnJhbWVidWZmZXIoc3RydWN0IGZiX2luZm8gKmZiX2luZm8pCiB7CiAJaW50IGk7CiAJc3RydWN0IGZiX2V2ZW50IGV2ZW50OwogCXN0cnVjdCBmYl92aWRlb21vZGUgbW9kZTsKIAotCWlmIChudW1fcmVnaXN0ZXJlZF9mYiA9PSBGQl9NQVgpCi0JCXJldHVybiAtRU5YSU87Ci0KIAlpZiAoZmJfY2hlY2tfZm9yZWlnbm5lc3MoZmJfaW5mbykpCiAJCXJldHVybiAtRU5PU1lTOwogCi0JcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhmYl9pbmZvLT5hcGVydHVyZXMsIGZiX2luZm8tPmZpeC5pZCwKKwlkb19yZW1vdmVfY29uZmxpY3RpbmdfZnJhbWVidWZmZXJzKGZiX2luZm8tPmFwZXJ0dXJlcywgZmJfaW5mby0+Zml4LmlkLAogCQkJCQkgZmJfaXNfcHJpbWFyeV9kZXZpY2UoZmJfaW5mbykpOwogCisJaWYgKG51bV9yZWdpc3RlcmVkX2ZiID09IEZCX01BWCkKKwkJcmV0dXJuIC1FTlhJTzsKKwogCW51bV9yZWdpc3RlcmVkX2ZiKys7CiAJZm9yIChpID0gMCA7IGkgPCBGQl9NQVg7IGkrKykKIAkJaWYgKCFyZWdpc3RlcmVkX2ZiW2ldKQogCQkJYnJlYWs7CiAJZmJfaW5mby0+bm9kZSA9IGk7CisJYXRvbWljX3NldCgmZmJfaW5mby0+Y291bnQsIDEpOwogCW11dGV4X2luaXQoJmZiX2luZm8tPmxvY2spOwogCW11dGV4X2luaXQoJmZiX2luZm8tPm1tX2xvY2spOwogCkBAIC0xNTkyLDYgKzE2MzMsNjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkb191bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKHN0cnVjdCBmYl9pbmZvICpmYl9pbmZvKQoreworCXN0cnVjdCBmYl9ldmVudCBldmVudDsKKwlpbnQgaSwgcmV0ID0gMDsKKworCWkgPSBmYl9pbmZvLT5ub2RlOworCWlmIChpIDwgMCB8fCBpID49IEZCX01BWCB8fCByZWdpc3RlcmVkX2ZiW2ldICE9IGZiX2luZm8pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFsb2NrX2ZiX2luZm8oZmJfaW5mbykpCisJCXJldHVybiAtRU5PREVWOworCWV2ZW50LmluZm8gPSBmYl9pbmZvOworCXJldCA9IGZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfRkJfVU5CSU5ELCAmZXZlbnQpOworCXVubG9ja19mYl9pbmZvKGZiX2luZm8pOworCisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZmJfaW5mby0+cGl4bWFwLmFkZHIgJiYKKwkgICAgKGZiX2luZm8tPnBpeG1hcC5mbGFncyAmIEZCX1BJWE1BUF9ERUZBVUxUKSkKKwkJa2ZyZWUoZmJfaW5mby0+cGl4bWFwLmFkZHIpOworCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJmZiX2luZm8tPm1vZGVsaXN0KTsKKwlyZWdpc3RlcmVkX2ZiW2ldID0gTlVMTDsKKwludW1fcmVnaXN0ZXJlZF9mYi0tOworCWZiX2NsZWFudXBfZGV2aWNlKGZiX2luZm8pOworCWRldmljZV9kZXN0cm95KGZiX2NsYXNzLCBNS0RFVihGQl9NQUpPUiwgaSkpOworCWV2ZW50LmluZm8gPSBmYl9pbmZvOworCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfRkJfVU5SRUdJU1RFUkVELCAmZXZlbnQpOworCisJLyogdGhpcyBtYXkgZnJlZSBmYiBpbmZvICovCisJcHV0X2ZiX2luZm8oZmJfaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgYXBlcnR1cmVzX3N0cnVjdCAqYSwKKwkJCQkgICAgIGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgcHJpbWFyeSkKK3sKKwltdXRleF9sb2NrKCZyZWdpc3RyYXRpb25fbG9jayk7CisJZG9fcmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyhhLCBuYW1lLCBwcmltYXJ5KTsKKwltdXRleF91bmxvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKK30KK0VYUE9SVF9TWU1CT0wocmVtb3ZlX2NvbmZsaWN0aW5nX2ZyYW1lYnVmZmVycyk7CisKKy8qKgorICoJcmVnaXN0ZXJfZnJhbWVidWZmZXIgLSByZWdpc3RlcnMgYSBmcmFtZSBidWZmZXIgZGV2aWNlCisgKglAZmJfaW5mbzogZnJhbWUgYnVmZmVyIGluZm8gc3RydWN0dXJlCisgKgorICoJUmVnaXN0ZXJzIGEgZnJhbWUgYnVmZmVyIGRldmljZSBAZmJfaW5mby4KKyAqCisgKglSZXR1cm5zIG5lZ2F0aXZlIGVycm5vIG9uIGVycm9yLCBvciB6ZXJvIGZvciBzdWNjZXNzLgorICoKKyAqLworaW50CityZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOworCXJldCA9IGRvX3JlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiX2luZm8pOworCW11dGV4X3VubG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KIAogLyoqCiAgKgl1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyIC0gcmVsZWFzZXMgYSBmcmFtZSBidWZmZXIgZGV2aWNlCkBAIC0xNjA5LDQ2ICsxNzEzLDE1IEBACiAgKiAgICAgIHRoYXQgdGhlIGRyaXZlciBpbXBsZW1lbnRzIGZiX29wZW4oKSBhbmQgZmJfcmVsZWFzZSgpIHRvCiAgKiAgICAgIGNoZWNrIHRoYXQgbm8gcHJvY2Vzc2VzIGFyZSB1c2luZyB0aGUgZGV2aWNlLgogICovCi0KIGludAogdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbykKIHsKLQlzdHJ1Y3QgZmJfZXZlbnQgZXZlbnQ7Ci0JaW50IGksIHJldCA9IDA7CisJaW50IHJldDsKIAotCWkgPSBmYl9pbmZvLT5ub2RlOwotCWlmICghcmVnaXN0ZXJlZF9mYltpXSkgewotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQorCW11dGV4X2xvY2soJnJlZ2lzdHJhdGlvbl9sb2NrKTsKKwlyZXQgPSBkb191bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiX2luZm8pOworCW11dGV4X3VubG9jaygmcmVnaXN0cmF0aW9uX2xvY2spOwogCi0KLQlpZiAoIWxvY2tfZmJfaW5mbyhmYl9pbmZvKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JZXZlbnQuaW5mbyA9IGZiX2luZm87Ci0JcmV0ID0gZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9GQl9VTkJJTkQsICZldmVudCk7Ci0JdW5sb2NrX2ZiX2luZm8oZmJfaW5mbyk7Ci0KLQlpZiAocmV0KSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoZmJfaW5mby0+cGl4bWFwLmFkZHIgJiYKLQkgICAgKGZiX2luZm8tPnBpeG1hcC5mbGFncyAmIEZCX1BJWE1BUF9ERUZBVUxUKSkKLQkJa2ZyZWUoZmJfaW5mby0+cGl4bWFwLmFkZHIpOwotCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJmZiX2luZm8tPm1vZGVsaXN0KTsKLQlyZWdpc3RlcmVkX2ZiW2ldPU5VTEw7Ci0JbnVtX3JlZ2lzdGVyZWRfZmItLTsKLQlmYl9jbGVhbnVwX2RldmljZShmYl9pbmZvKTsKLQlkZXZpY2VfZGVzdHJveShmYl9jbGFzcywgTUtERVYoRkJfTUFKT1IsIGkpKTsKLQlldmVudC5pbmZvID0gZmJfaW5mbzsKLQlmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX0ZCX1VOUkVHSVNURVJFRCwgJmV2ZW50KTsKLQotCS8qIHRoaXMgbWF5IGZyZWUgZmIgaW5mbyAqLwotCWlmIChmYl9pbmZvLT5mYm9wcy0+ZmJfZGVzdHJveSkKLQkJZmJfaW5mby0+ZmJvcHMtPmZiX2Rlc3Ryb3koZmJfaW5mbyk7Ci1kb25lOgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCA0ZmI1YjJiLi40YmNjOGI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC01OTAsMTUgKzU5MCwxMCBAQAogCiBzdGF0aWMgdm9pZCB2aXJ0aW9fcGNpX3JlbGVhc2VfZGV2KHN0cnVjdCBkZXZpY2UgKl9kKQogewotCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoX2QsIHN0cnVjdCB2aXJ0aW9fZGV2aWNlLCBkZXYpOworCXN0cnVjdCB2aXJ0aW9fZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2YoX2QsIHN0cnVjdCB2aXJ0aW9fZGV2aWNlLAorCQkJCQkJIGRldik7CiAJc3RydWN0IHZpcnRpb19wY2lfZGV2aWNlICp2cF9kZXYgPSB0b192cF9kZXZpY2UoZGV2KTsKLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHZwX2Rldi0+cGNpX2RldjsKIAotCXZwX2RlbF92cXMoZGV2KTsKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7Ci0JcGNpX2lvdW5tYXAocGNpX2RldiwgdnBfZGV2LT5pb2FkZHIpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpX2Rldik7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBjaV9kZXYpOwogCWtmcmVlKHZwX2Rldik7CiB9CiAKQEAgLTY4MSw2ICs2NzYsMTIgQEAKIAlzdHJ1Y3QgdmlydGlvX3BjaV9kZXZpY2UgKnZwX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKIAogCXVucmVnaXN0ZXJfdmlydGlvX2RldmljZSgmdnBfZGV2LT52ZGV2KTsKKworCXZwX2RlbF92cXMoJnZwX2Rldi0+dmRldik7CisJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOworCXBjaV9pb3VubWFwKHBjaV9kZXYsIHZwX2Rldi0+aW9hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBjaV9kZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwY2lfZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19yaW5nLmMKaW5kZXggY2MyZjczZS4uYjAwNDNmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aXJ0aW8vdmlydGlvX3JpbmcuYworKysgYi9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcmluZy5jCkBAIC0zNzEsNiArMzcxLDcgQEAKIAkJLyogZGV0YWNoX2J1ZiBjbGVhcnMgZGF0YSwgc28gZ3JhYiBpdCBub3cuICovCiAJCWJ1ZiA9IHZxLT5kYXRhW2ldOwogCQlkZXRhY2hfYnVmKHZxLCBpKTsKKwkJdnEtPnZyaW5nLmF2YWlsLT5pZHgtLTsKIAkJRU5EX1VTRSh2cSk7CiAJCXJldHVybiBidWY7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IDFiMGY5OGIuLjAyMmY5ZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTk5MCw2ICs5OTAsMTIgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBsb2FkYWJsZSBtb2R1bGUsIGNob29zZSBNIGhlcmUuCiAJICBUaGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJjbTYzeHhfd2R0LgogCitjb25maWcgTEFOVElRX1dEVAorCXRyaXN0YXRlICJMYW50aXEgU29DIHdhdGNoZG9nIgorCWRlcGVuZHMgb24gTEFOVElRCisJaGVscAorCSAgSGFyZHdhcmUgZHJpdmVyIGZvciB0aGUgTGFudGlxIFNvQyBXYXRjaGRvZyBUaW1lci4KKwogIyBQQVJJU0MgQXJjaGl0ZWN0dXJlCiAKICMgUE9XRVJQQyBBcmNoaXRlY3R1cmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUgYi9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IDNmODYwOGIuLmVkMjZmNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKKysrIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQpAQCAtMTIzLDYgKzEyMyw3IEBACiBvYmotJChDT05GSUdfVFhYOV9XRFQpICs9IHR4eDl3ZHQubwogb2JqLSQoQ09ORklHX09DVEVPTl9XRFQpICs9IG9jdGVvbi13ZHQubwogb2N0ZW9uLXdkdC15IDo9IG9jdGVvbi13ZHQtbWFpbi5vIG9jdGVvbi13ZHQtbm1pLm8KK29iai0kKENPTkZJR19MQU5USVFfV0RUKSArPSBsYW50aXFfd2R0Lm8KIAogIyBQQVJJU0MgQXJjaGl0ZWN0dXJlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwppbmRleCAzNWEwZDEyLi41ZmQwMjBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC0zNSw2ICszNSw3IEBACiAgKglkb2N1bWVudCBudW1iZXIgMzI0NjQ1LTAwMSwgMzI0NjQ2LTAwMTogQ291Z2FyIFBvaW50IChDUFQpCiAgKglkb2N1bWVudCBudW1iZXIgVEJEICAgICAgICAgICAgICAgICAgIDogUGF0c2J1cmcgKFBCRykKICAqCWRvY3VtZW50IG51bWJlciBUQkQgICAgICAgICAgICAgICAgICAgOiBESDg5eHhDQworICoJZG9jdW1lbnQgbnVtYmVyIFRCRCAgICAgICAgICAgICAgICAgICA6IFBhbnRoZXIgUG9pbnQKICAqLwogCiAvKgpAQCAtMTUzLDYgKzE1NCwzOCBAQAogCVRDT19QQkcxLAkvKiBQYXRzYnVyZyAqLwogCVRDT19QQkcyLAkvKiBQYXRzYnVyZyAqLwogCVRDT19ESDg5WFhDQywJLyogREg4OXh4Q0MgKi8KKwlUQ09fUFBUMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxLAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDIsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUMywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQ0LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDUsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUNiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQ3LAkvKiBQYW50aGVyIFBvaW50ICovCisJVENPX1BQVDgsCS8qIFBhbnRoZXIgUG9pbnQgKi8KKwlUQ09fUFBUOSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxMywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxNywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxOCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQxOSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyMywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNiwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyNywJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyOCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQyOSwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQzMCwJLyogUGFudGhlciBQb2ludCAqLworCVRDT19QUFQzMSwJLyogUGFudGhlciBQb2ludCAqLwogfTsKIAogc3RhdGljIHN0cnVjdCB7CkBAIC0yNDQsNiArMjc3LDM4IEBACiAJeyJQYXRzYnVyZyIsIDJ9LAogCXsiUGF0c2J1cmciLCAyfSwKIAl7IkRIODl4eENDIiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCisJeyJQYW50aGVyIFBvaW50IiwgMn0sCiAJe05VTEwsIDB9CiB9OwogCkBAIC0zNjMsNiArNDI4LDM4IEBACiAJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZDQwLAkJCQlUQ09fUEJHMSl9LAogCXsgSVRDT19QQ0lfREVWSUNFKDB4MWQ0MSwJCQkJVENPX1BCRzIpfSwKIAl7IElUQ09fUENJX0RFVklDRSgweDIzMTAsCQkJCVRDT19ESDg5WFhDQyl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0MCwJCQkJVENPX1BQVDApfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDEsCQkJCVRDT19QUFQxKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQyLAkJCQlUQ09fUFBUMil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0MywJCQkJVENPX1BQVDMpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDQsCQkJCVRDT19QUFQ0KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQ1LAkJCQlUQ09fUFBUNSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0NiwJCQkJVENPX1BQVDYpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNDcsCQkJCVRDT19QUFQ3KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTQ4LAkJCQlUQ09fUFBUOCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0OSwJCQkJVENPX1BQVDkpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNGEsCQkJCVRDT19QUFQxMCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0YiwJCQkJVENPX1BQVDExKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTRjLAkJCQlUQ09fUFBUMTIpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNGQsCQkJCVRDT19QUFQxMyl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU0ZSwJCQkJVENPX1BQVDE0KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTRmLAkJCQlUQ09fUFBUMTUpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTAsCQkJCVRDT19QUFQxNil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1MSwJCQkJVENPX1BQVDE3KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTUyLAkJCQlUQ09fUFBUMTgpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTMsCQkJCVRDT19QUFQxOSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1NCwJCQkJVENPX1BQVDIwKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTU1LAkJCQlUQ09fUFBUMjEpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTYsCQkJCVRDT19QUFQyMil9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1NywJCQkJVENPX1BQVDIzKX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTU4LAkJCQlUQ09fUFBUMjQpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNTksCQkJCVRDT19QUFQyNSl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1YSwJCQkJVENPX1BQVDI2KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTViLAkJCQlUQ09fUFBUMjcpfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNWMsCQkJCVRDT19QUFQyOCl9LAorCXsgSVRDT19QQ0lfREVWSUNFKDB4MWU1ZCwJCQkJVENPX1BQVDI5KX0sCisJeyBJVENPX1BDSV9ERVZJQ0UoMHgxZTVlLAkJCQlUQ09fUFBUMzApfSwKKwl7IElUQ09fUENJX0RFVklDRSgweDFlNWYsCQkJCVRDT19QUFQzMSl9LAogCXsgMCwgfSwJCQkvKiBFbmQgb2YgbGlzdCAqLwogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpVENPX3dkdF9wY2lfdGJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbGFudGlxX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9sYW50aXFfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q4MmFkYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbGFudGlxX3dkdC5jCkBAIC0wLDAgKzEsMjYxIEBACisvKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDEwIEpvaG4gQ3Jpc3BpbiA8YmxvZ2ljQG9wZW53cnQub3JnPgorICogIEJhc2VkIG9uIEVQOTN4eCB3ZHQgZHJpdmVyCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsYW50aXEuaD4KKworLyogU2VjdGlvbiAzLjQgb2YgdGhlIGRhdGFzaGVldAorICogVGhlIHBhc3N3b3JkIHNlcXVlbmNlIHByb3RlY3RzIHRoZSBXRFQgY29udHJvbCByZWdpc3RlciBmcm9tIHVuaW50ZW5kZWQKKyAqIHdyaXRlIGFjdGlvbnMsIHdoaWNoIG1pZ2h0IGNhdXNlIG1hbGZ1bmN0aW9uIG9mIHRoZSBXRFQuCisgKgorICogZXNzZW50aWFsbHkgdGhlIGZvbGxvd2luZyB0d28gbWFnaWMgcGFzc3dvcmRzIG5lZWQgdG8gYmUgd3JpdHRlbiB0byBhbGxvdworICogSU8gYWNjZXNzIHRvIHRoZSBXRFQgY29yZQorICovCisjZGVmaW5lIExUUV9XRFRfUFcxCQkweDAwQkUwMDAwCisjZGVmaW5lIExUUV9XRFRfUFcyCQkweDAwREMwMDAwCisKKyNkZWZpbmUgTFRRX1dEVF9DUgkJMHgwCS8qIHdhdGNoZG9nIGNvbnRyb2wgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTFRRX1dEVF9TUgkJMHg4CS8qIHdhdGNoZG9nIHN0YXR1cyByZWdpc3RlciAqLworCisjZGVmaW5lIExUUV9XRFRfU1JfRU4JCSgweDEgPDwgMzEpCS8qIGVuYWJsZSBiaXQgKi8KKyNkZWZpbmUgTFRRX1dEVF9TUl9QV0QJCSgweDMgPDwgMjYpCS8qIHR1cm4gb24gcG93ZXIgKi8KKyNkZWZpbmUgTFRRX1dEVF9TUl9DTEtESVYJKDB4MyA8PCAyNCkJLyogdHVybiBvbiBjbG9jayBhbmQgc2V0ICovCisJCQkJCQkvKiBkaXZpZGVyIHRvIDB4NDAwMDAgKi8KKyNkZWZpbmUgTFRRX1dEVF9ESVZJREVSCQkweDQwMDAwCisjZGVmaW5lIExUUV9NQVhfVElNRU9VVAkJKCgxIDw8IDE2KSAtIDEpCS8qIHRoZSByZWxvYWQgZmllbGQgaXMgMTYgYml0ICovCisKK3N0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKKworc3RhdGljIHZvaWQgX19pb21lbSAqbHRxX3dkdF9tZW1iYXNlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbHRxX2lvX3JlZ2lvbl9jbGtfcmF0ZTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbHRxX3dkdF9ib290c3RhdHVzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbHRxX3dkdF9pbl91c2U7CitzdGF0aWMgaW50IGx0cV93ZHRfdGltZW91dCA9IDMwOworc3RhdGljIGludCBsdHFfd2R0X29rX3RvX2Nsb3NlOworCitzdGF0aWMgdm9pZAorbHRxX3dkdF9lbmFibGUodm9pZCkKK3sKKwlsdHFfd2R0X3RpbWVvdXQgPSBsdHFfd2R0X3RpbWVvdXQgKgorCQkJKGx0cV9pb19yZWdpb25fY2xrX3JhdGUgLyBMVFFfV0RUX0RJVklERVIpICsgMHgxMDAwOworCWlmIChsdHFfd2R0X3RpbWVvdXQgPiBMVFFfTUFYX1RJTUVPVVQpCisJCWx0cV93ZHRfdGltZW91dCA9IExUUV9NQVhfVElNRU9VVDsKKworCS8qIHdyaXRlIHRoZSBmaXJzdCBwYXNzd29yZCBtYWdpYyAqLworCWx0cV93MzIoTFRRX1dEVF9QVzEsIGx0cV93ZHRfbWVtYmFzZSArIExUUV9XRFRfQ1IpOworCS8qIHdyaXRlIHRoZSBzZWNvbmQgbWFnaWMgcGx1cyB0aGUgY29uZmlndXJhdGlvbiBhbmQgbmV3IHRpbWVvdXQgKi8KKwlsdHFfdzMyKExUUV9XRFRfU1JfRU4gfCBMVFFfV0RUX1NSX1BXRCB8IExUUV9XRFRfU1JfQ0xLRElWIHwKKwkJTFRRX1dEVF9QVzIgfCBsdHFfd2R0X3RpbWVvdXQsIGx0cV93ZHRfbWVtYmFzZSArIExUUV9XRFRfQ1IpOworfQorCitzdGF0aWMgdm9pZAorbHRxX3dkdF9kaXNhYmxlKHZvaWQpCit7CisJLyogd3JpdGUgdGhlIGZpcnN0IHBhc3N3b3JkIG1hZ2ljICovCisJbHRxX3czMihMVFFfV0RUX1BXMSwgbHRxX3dkdF9tZW1iYXNlICsgTFRRX1dEVF9DUik7CisJLyogd3JpdGUgdGhlIHNlY29uZCBwYXNzd29yZCBtYWdpYyB3aXRoIG5vIGNvbmZpZworCSAqIHRoaXMgdHVybnMgdGhlIHdhdGNoZG9nIG9mZgorCSAqLworCWx0cV93MzIoTFRRX1dEVF9QVzIsIGx0cV93ZHRfbWVtYmFzZSArIExUUV9XRFRfQ1IpOworfQorCitzdGF0aWMgc3NpemVfdAorbHRxX3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCisJCXNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKK3sKKwlpZiAobGVuKSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQlsdHFfd2R0X29rX3RvX2Nsb3NlID0gMDsKKwkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKwkJCQljaGFyIGM7CisKKwkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlpZiAoYyA9PSAnVicpCisJCQkJCWx0cV93ZHRfb2tfdG9fY2xvc2UgPSAxOworCQkJCWVsc2UKKwkJCQkJbHRxX3dkdF9va190b19jbG9zZSA9IDA7CisJCQl9CisJCX0KKwkJbHRxX3dkdF9lbmFibGUoKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJLm9wdGlvbnMgPSBXRElPRl9NQUdJQ0NMT1NFIHwgV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcgfAorCQkJV0RJT0ZfQ0FSRFJFU0VULAorCS5pZGVudGl0eSA9ICJsdHFfd2R0IiwKK307CisKK3N0YXRpYyBsb25nCitsdHFfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAorCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgcmV0ID0gLUVOT1RUWTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlyZXQgPSBjb3B5X3RvX3VzZXIoKHN0cnVjdCB3YXRjaGRvZ19pbmZvIF9fdXNlciAqKWFyZywgJmlkZW50LAorCQkJCXNpemVvZihpZGVudCkpID8gLUVGQVVMVCA6IDA7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQlyZXQgPSBwdXRfdXNlcihsdHFfd2R0X2Jvb3RzdGF0dXMsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFNUQVRVUzoKKwkJcmV0ID0gcHV0X3VzZXIoMCwgKGludCBfX3VzZXIgKilhcmcpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJcmV0ID0gZ2V0X3VzZXIobHRxX3dkdF90aW1lb3V0LCAoaW50IF9fdXNlciAqKWFyZyk7CisJCWlmICghcmV0KQorCQkJbHRxX3dkdF9lbmFibGUoKTsKKwkJLyogaW50ZW50aW9uYWwgZHJvcCB0aHJvdWdoICovCisJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQlyZXQgPSBwdXRfdXNlcihsdHFfd2R0X3RpbWVvdXQsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJbHRxX3dkdF9lbmFibGUoKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK2x0cV93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgwLCAmbHRxX3dkdF9pbl91c2UpKQorCQlyZXR1cm4gLUVCVVNZOworCWx0cV93ZHRfaW5fdXNlID0gMTsKKwlsdHFfd2R0X2VuYWJsZSgpOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50CitsdHFfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKGx0cV93ZHRfb2tfdG9fY2xvc2UpCisJCWx0cV93ZHRfZGlzYWJsZSgpOworCWVsc2UKKwkJcHJfZXJyKCJsdHFfd2R0OiB3YXRjaGRvZyBjbG9zZWQgd2l0aG91dCB3YXJuaW5nXG4iKTsKKwlsdHFfd2R0X29rX3RvX2Nsb3NlID0gMDsKKwljbGVhcl9iaXQoMCwgJmx0cV93ZHRfaW5fdXNlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsdHFfd2R0X2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS53cml0ZQkJPSBsdHFfd2R0X3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IGx0cV93ZHRfaW9jdGwsCisJLm9wZW4JCT0gbHRxX3dkdF9vcGVuLAorCS5yZWxlYXNlCT0gbHRxX3dkdF9yZWxlYXNlLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGx0cV93ZHRfbWlzY2RldiA9IHsKKwkubWlub3IJPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZQk9ICJ3YXRjaGRvZyIsCisJLmZvcHMJPSAmbHRxX3dkdF9mb3BzLAorfTsKKworc3RhdGljIGludCBfX2luaXQKK2x0cV93ZHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJc3RydWN0IGNsayAqY2xrOworCisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IG9idGFpbiBJL08gbWVtb3J5IHJlZ2lvbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisJcmVzID0gZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJcmVzb3VyY2Vfc2l6ZShyZXMpLCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFyZXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgSS9PIG1lbW9yeSByZWdpb24iKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisJbHRxX3dkdF9tZW1iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwKKwkJcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWx0cV93ZHRfbWVtYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgSS9PIG1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiB3ZSBkbyBub3QgbmVlZCB0byBlbmFibGUgdGhlIGNsb2NrIGFzIGl0IGlzIGFsd2F5cyBydW5uaW5nICovCisJY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiaW8iKTsKKwlXQVJOX09OKCFjbGspOworCWx0cV9pb19yZWdpb25fY2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKKwljbGtfcHV0KGNsayk7CisKKwlpZiAobHRxX3Jlc2V0X2NhdXNlKCkgPT0gTFRRX1JTVF9DQVVTRV9XRFRSU1QpCisJCWx0cV93ZHRfYm9vdHN0YXR1cyA9IFdESU9GX0NBUkRSRVNFVDsKKworCXJldHVybiBtaXNjX3JlZ2lzdGVyKCZsdHFfd2R0X21pc2NkZXYpOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdAorbHRxX3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJmx0cV93ZHRfbWlzY2Rldik7CisKKwlpZiAobHRxX3dkdF9tZW1iYXNlKQorCQlpb3VubWFwKGx0cV93ZHRfbWVtYmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBsdHFfd2R0X2RyaXZlciA9IHsKKwkucmVtb3ZlID0gX19kZXZleGl0X3AobHRxX3dkdF9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImx0cV93ZHQiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQKK2luaXRfbHRxX3dkdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJmx0cV93ZHRfZHJpdmVyLCBsdHFfd2R0X3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0CitleGl0X2x0cV93ZHQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJmx0cV93ZHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9sdHFfd2R0KTsKK21vZHVsZV9leGl0KGV4aXRfbHRxX3dkdCk7CisKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQiKTsKKworTU9EVUxFX0FVVEhPUigiSm9obiBDcmlzcGluIDxibG9naWNAb3BlbndydC5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxhbnRpcSBTb0MgV2F0Y2hkb2ciKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYwppbmRleCA1MjhiY2ViLi5lZWQ1NDM2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGM4eHh4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYwpAQCAtMTg1LDE3ICsxODUsMjAgQEAKIAkuZm9wcwk9ICZtcGM4eHh4X3dkdF9mb3BzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjOHh4eF93ZHRfbWF0Y2hbXTsKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1wYzh4eHhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KQogewogCWludCByZXQ7CisJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2g7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IG9mZGV2LT5kZXYub2Zfbm9kZTsKIAlzdHJ1Y3QgbXBjOHh4eF93ZHRfdHlwZSAqd2R0X3R5cGU7CiAJdTMyIGZyZXEgPSBmc2xfZ2V0X3N5c19mcmVxKCk7CiAJYm9vbCBlbmFibGVkOwogCi0JaWYgKCFvZmRldi0+ZGV2Lm9mX21hdGNoKQorCW1hdGNoID0gb2ZfbWF0Y2hfZGV2aWNlKG1wYzh4eHhfd2R0X21hdGNoLCAmb2ZkZXYtPmRldik7CisJaWYgKCFtYXRjaCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jd2R0X3R5cGUgPSBvZmRldi0+ZGV2Lm9mX21hdGNoLT5kYXRhOworCXdkdF90eXBlID0gbWF0Y2gtPmRhdGE7CiAKIAlpZiAoIWZyZXEgfHwgZnJlcSA9PSAtMSkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tdHgtMV93ZHQuYwppbmRleCA1ZWM1YWMxLi4xNDc5ZGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL210eC0xX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXR4LTFfd2R0LmMKQEAgLTY2LDYgKzY2LDcgQEAKIAlpbnQgZGVmYXVsdF90aWNrczsKIAl1bnNpZ25lZCBsb25nIGludXNlOwogCXVuc2lnbmVkIGdwaW87CisJaW50IGdzdGF0ZTsKIH0gbXR4MV93ZHRfZGV2aWNlOwogCiBzdGF0aWMgdm9pZCBtdHgxX3dkdF90cmlnZ2VyKHVuc2lnbmVkIGxvbmcgdW51c2VkKQpAQCAtNzUsMTMgKzc2LDEzIEBACiAJc3Bpbl9sb2NrKCZtdHgxX3dkdF9kZXZpY2UubG9jayk7CiAJaWYgKG10eDFfd2R0X2RldmljZS5ydW5uaW5nKQogCQl0aWNrcy0tOwotCS8qCi0JICogdG9nZ2xlIEdQSU8yXzE1Ci0JICovCi0JdG1wID0gYXVfcmVhZGwoR1BJTzJfRElSKTsKLQl0bXAgPSAodG1wICYgfigxIDw8IG10eDFfd2R0X2RldmljZS5ncGlvKSkgfAotCSAgICAgICgofnRtcCkgJiAoMSA8PCBtdHgxX3dkdF9kZXZpY2UuZ3BpbykpOwotCWF1X3dyaXRlbCh0bXAsIEdQSU8yX0RJUik7CisKKwkvKiB0b2dnbGUgd2R0IGdwaW8gKi8KKwltdHgxX3dkdF9kZXZpY2UuZ3N0YXRlID0gfm10eDFfd2R0X2RldmljZS5nc3RhdGU7CisJaWYgKG10eDFfd2R0X2RldmljZS5nc3RhdGUpCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChtdHgxX3dkdF9kZXZpY2UuZ3BpbywgMSk7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChtdHgxX3dkdF9kZXZpY2UuZ3Bpbyk7CiAKIAlpZiAobXR4MV93ZHRfZGV2aWNlLnF1ZXVlICYmIHRpY2tzKQogCQltb2RfdGltZXIoJm10eDFfd2R0X2RldmljZS50aW1lciwgamlmZmllcyArIE1UWDFfV0RUX0lOVEVSVkFMKTsKQEAgLTEwMyw3ICsxMDQsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZtdHgxX3dkdF9kZXZpY2UubG9jaywgZmxhZ3MpOwogCWlmICghbXR4MV93ZHRfZGV2aWNlLnF1ZXVlKSB7CiAJCW10eDFfd2R0X2RldmljZS5xdWV1ZSA9IDE7Ci0JCWdwaW9fc2V0X3ZhbHVlKG10eDFfd2R0X2RldmljZS5ncGlvLCAxKTsKKwkJbXR4MV93ZHRfZGV2aWNlLmdzdGF0ZSA9IDE7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChtdHgxX3dkdF9kZXZpY2UuZ3BpbywgMSk7CiAJCW1vZF90aW1lcigmbXR4MV93ZHRfZGV2aWNlLnRpbWVyLCBqaWZmaWVzICsgTVRYMV9XRFRfSU5URVJWQUwpOwogCX0KIAltdHgxX3dkdF9kZXZpY2UucnVubmluZysrOwpAQCAtMTE3LDcgKzExOSw4IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJm10eDFfd2R0X2RldmljZS5sb2NrLCBmbGFncyk7CiAJaWYgKG10eDFfd2R0X2RldmljZS5xdWV1ZSkgewogCQltdHgxX3dkdF9kZXZpY2UucXVldWUgPSAwOwotCQlncGlvX3NldF92YWx1ZShtdHgxX3dkdF9kZXZpY2UuZ3BpbywgMCk7CisJCW10eDFfd2R0X2RldmljZS5nc3RhdGUgPSAwOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQobXR4MV93ZHRfZGV2aWNlLmdwaW8sIDApOwogCX0KIAl0aWNrcyA9IG10eDFfd2R0X2RldmljZS5kZWZhdWx0X3RpY2tzOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm10eDFfd2R0X2RldmljZS5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9NYWtlZmlsZSBiL2RyaXZlcnMveGVuL01ha2VmaWxlCmluZGV4IGY0MjBmMWYuLjQ3ODFmODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL01ha2VmaWxlCisrKyBiL2RyaXZlcnMveGVuL01ha2VmaWxlCkBAIC00LDIxICs0LDIxIEBACiBub3N0YWNrcCA6PSAkKGNhbGwgY2Mtb3B0aW9uLCAtZm5vLXN0YWNrLXByb3RlY3RvcikKIENGTEFHU19mZWF0dXJlcy5vCQkJOj0gJChub3N0YWNrcCkKIAotb2JqLSQoQ09ORklHX0JMT0NLKQkJKz0gYmlvbWVyZ2Uubwotb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBjcHVfaG90cGx1Zy5vCi1vYmotJChDT05GSUdfWEVOX1hFTkNPTU0pCSs9IHhlbmNvbW0ubwotb2JqLSQoQ09ORklHX1hFTl9CQUxMT09OKQkrPSB4ZW4tYmFsbG9vbi5vCi1vYmotJChDT05GSUdfWEVOX0RFVl9FVlRDSE4pCSs9IHhlbi1ldnRjaG4ubwotb2JqLSQoQ09ORklHX1hFTl9HTlRERVYpCSs9IHhlbi1nbnRkZXYubworb2JqLSQoQ09ORklHX0JMT0NLKQkJCSs9IGJpb21lcmdlLm8KK29iai0kKENPTkZJR19IT1RQTFVHX0NQVSkJCSs9IGNwdV9ob3RwbHVnLm8KK29iai0kKENPTkZJR19YRU5fWEVOQ09NTSkJCSs9IHhlbmNvbW0ubworb2JqLSQoQ09ORklHX1hFTl9CQUxMT09OKQkJKz0geGVuLWJhbGxvb24ubworb2JqLSQoQ09ORklHX1hFTl9ERVZfRVZUQ0hOKQkJKz0geGVuLWV2dGNobi5vCitvYmotJChDT05GSUdfWEVOX0dOVERFVikJCSs9IHhlbi1nbnRkZXYubwogb2JqLSQoQ09ORklHX1hFTl9HUkFOVF9ERVZfQUxMT0MpCSs9IHhlbi1nbnRhbGxvYy5vCi1vYmotJChDT05GSUdfWEVORlMpCQkrPSB4ZW5mcy8KK29iai0kKENPTkZJR19YRU5GUykJCQkrPSB4ZW5mcy8KIG9iai0kKENPTkZJR19YRU5fU1lTX0hZUEVSVklTT1IpCSs9IHN5cy1oeXBlcnZpc29yLm8KLW9iai0kKENPTkZJR19YRU5fUExBVEZPUk1fUENJKQkrPSB4ZW4tcGxhdGZvcm0tcGNpLm8KLW9iai0kKENPTkZJR19TV0lPVExCX1hFTikJKz0gc3dpb3RsYi14ZW4ubwotb2JqLSQoQ09ORklHX1hFTl9ET00wKQkJKz0gcGNpLm8KK29iai0kKENPTkZJR19YRU5fUExBVEZPUk1fUENJKQkJKz0geGVuLXBsYXRmb3JtLXBjaS5vCitvYmotJChDT05GSUdfU1dJT1RMQl9YRU4pCQkrPSBzd2lvdGxiLXhlbi5vCitvYmotJChDT05GSUdfWEVOX0RPTTApCQkJKz0gcGNpLm8KIAoteGVuLWV2dGNobi15CQkJOj0gZXZ0Y2huLm8KK3hlbi1ldnRjaG4teQkJCQk6PSBldnRjaG4ubwogeGVuLWdudGRldi15CQkJCTo9IGdudGRldi5vCiB4ZW4tZ250YWxsb2MteQkJCQk6PSBnbnRhbGxvYy5vCiAKLXhlbi1wbGF0Zm9ybS1wY2kteQkJOj0gcGxhdGZvcm0tcGNpLm8KK3hlbi1wbGF0Zm9ybS1wY2kteQkJCTo9IHBsYXRmb3JtLXBjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9iYWxsb29uLmMgYi9kcml2ZXJzL3hlbi9iYWxsb29uLmMKaW5kZXggMDQzYWY4YS4uZjU0MjkwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMveGVuL2JhbGxvb24uYwpAQCAtMTE0LDcgKzExNCw2IEBACiAJaWYgKFBhZ2VIaWdoTWVtKHBhZ2UpKSB7CiAJCWxpc3RfYWRkX3RhaWwoJnBhZ2UtPmxydSwgJmJhbGxvb25lZF9wYWdlcyk7CiAJCWJhbGxvb25fc3RhdHMuYmFsbG9vbl9oaWdoKys7Ci0JCWRlY190b3RhbGhpZ2hfcGFnZXMoKTsKIAl9IGVsc2UgewogCQlsaXN0X2FkZCgmcGFnZS0+bHJ1LCAmYmFsbG9vbmVkX3BhZ2VzKTsKIAkJYmFsbG9vbl9zdGF0cy5iYWxsb29uX2xvdysrOwpAQCAtMTI0LDYgKzEyMyw4IEBACiBzdGF0aWMgdm9pZCBiYWxsb29uX2FwcGVuZChzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAlfX2JhbGxvb25fYXBwZW5kKHBhZ2UpOworCWlmIChQYWdlSGlnaE1lbShwYWdlKSkKKwkJZGVjX3RvdGFsaGlnaF9wYWdlcygpOwogCXRvdGFscmFtX3BhZ2VzLS07CiB9CiAKQEAgLTE5Myw3ICsxOTQsNyBAQAogCXJldHVybiBCUF9FQUdBSU47CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGN1cnJlbnRfdGFyZ2V0KHZvaWQpCitzdGF0aWMgbG9uZyBjdXJyZW50X2NyZWRpdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgdGFyZ2V0ID0gYmFsbG9vbl9zdGF0cy50YXJnZXRfcGFnZXM7CiAKQEAgLTIwMiw3ICsyMDMsNyBAQAogCQkgICAgIGJhbGxvb25fc3RhdHMuYmFsbG9vbl9sb3cgKwogCQkgICAgIGJhbGxvb25fc3RhdHMuYmFsbG9vbl9oaWdoKTsKIAotCXJldHVybiB0YXJnZXQ7CisJcmV0dXJuIHRhcmdldCAtIGJhbGxvb25fc3RhdHMuY3VycmVudF9wYWdlczsKIH0KIAogc3RhdGljIGVudW0gYnBfc3RhdGUgaW5jcmVhc2VfcmVzZXJ2YXRpb24odW5zaWduZWQgbG9uZyBucl9wYWdlcykKQEAgLTI0Niw3ICsyNDcsNyBAQAogCQlzZXRfcGh5c190b19tYWNoaW5lKHBmbiwgZnJhbWVfbGlzdFtpXSk7CiAKIAkJLyogTGluayBiYWNrIGludG8gdGhlIHBhZ2UgdGFibGVzIGlmIG5vdCBoaWdobWVtLiAqLwotCQlpZiAoIXhlbl9odm1fZG9tYWluKCkgJiYgcGZuIDwgbWF4X2xvd19wZm4pIHsKKwkJaWYgKHhlbl9wdl9kb21haW4oKSAmJiAhUGFnZUhpZ2hNZW0ocGFnZSkpIHsKIAkJCWludCByZXQ7CiAJCQlyZXQgPSBIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKAogCQkJCSh1bnNpZ25lZCBsb25nKV9fdmEocGZuIDw8IFBBR0VfU0hJRlQpLApAQCAtMjkzLDcgKzI5NCw3IEBACiAKIAkJc2NydWJfcGFnZShwYWdlKTsKIAotCQlpZiAoIXhlbl9odm1fZG9tYWluKCkgJiYgIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCWlmICh4ZW5fcHZfZG9tYWluKCkgJiYgIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CiAJCQlyZXQgPSBIWVBFUlZJU09SX3VwZGF0ZV92YV9tYXBwaW5nKAogCQkJCSh1bnNpZ25lZCBsb25nKV9fdmEocGZuIDw8IFBBR0VfU0hJRlQpLAogCQkJCV9fcHRlX21hKDApLCAwKTsKQEAgLTMzNyw3ICszMzgsNyBAQAogCW11dGV4X2xvY2soJmJhbGxvb25fbXV0ZXgpOwogCiAJZG8gewotCQljcmVkaXQgPSBjdXJyZW50X3RhcmdldCgpIC0gYmFsbG9vbl9zdGF0cy5jdXJyZW50X3BhZ2VzOworCQljcmVkaXQgPSBjdXJyZW50X2NyZWRpdCgpOwogCiAJCWlmIChjcmVkaXQgPiAwKQogCQkJc3RhdGUgPSBpbmNyZWFzZV9yZXNlcnZhdGlvbihjcmVkaXQpOwpAQCAtNDIwLDcgKzQyMSw3IEBACiAJfQogCiAJLyogVGhlIGJhbGxvb24gbWF5IGJlIHRvbyBsYXJnZSBub3cuIFNocmluayBpdCBpZiBuZWVkZWQuICovCi0JaWYgKGN1cnJlbnRfdGFyZ2V0KCkgIT0gYmFsbG9vbl9zdGF0cy5jdXJyZW50X3BhZ2VzKQorCWlmIChjdXJyZW50X2NyZWRpdCgpKQogCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmJhbGxvb25fd29ya2VyLCAwKTsKIAogCW11dGV4X3VubG9jaygmYmFsbG9vbl9tdXRleCk7CkBAIC00MjksNyArNDMwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYmFsbG9vbl9pbml0KHZvaWQpCiB7Ci0gCXVuc2lnbmVkIGxvbmcgcGZuLCBucl9wYWdlcywgZXh0cmFfcGZuX2VuZDsKKwl1bnNpZ25lZCBsb25nIHBmbiwgZXh0cmFfcGZuX2VuZDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAogCWlmICgheGVuX2RvbWFpbigpKQpAQCAtNDM3LDExICs0MzgsNyBAQAogCiAJcHJfaW5mbygieGVuL2JhbGxvb246IEluaXRpYWxpc2luZyBiYWxsb29uIGRyaXZlci5cbiIpOwogCi0gCWlmICh4ZW5fcHZfZG9tYWluKCkpCi0gCQlucl9wYWdlcyA9IHhlbl9zdGFydF9pbmZvLT5ucl9wYWdlczsKLSAJZWxzZQotIAkJbnJfcGFnZXMgPSBtYXhfcGZuOwotIAliYWxsb29uX3N0YXRzLmN1cnJlbnRfcGFnZXMgPSBtaW4obnJfcGFnZXMsIG1heF9wZm4pOworCWJhbGxvb25fc3RhdHMuY3VycmVudF9wYWdlcyA9IHhlbl9wdl9kb21haW4oKSA/IG1pbih4ZW5fc3RhcnRfaW5mby0+bnJfcGFnZXMsIG1heF9wZm4pIDogbWF4X3BmbjsKIAliYWxsb29uX3N0YXRzLnRhcmdldF9wYWdlcyAgPSBiYWxsb29uX3N0YXRzLmN1cnJlbnRfcGFnZXM7CiAJYmFsbG9vbl9zdGF0cy5iYWxsb29uX2xvdyAgID0gMDsKIAliYWxsb29uX3N0YXRzLmJhbGxvb25faGlnaCAgPSAwOwpAQCAtNDY2LDcgKzQ2Myw3IEBACiAJICAgICBwZm4gPCBleHRyYV9wZm5fZW5kOwogCSAgICAgcGZuKyspIHsKIAkJcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCS8qIHRvdGFscmFtX3BhZ2VzIGRvZXNuJ3QgaW5jbHVkZSB0aGUgYm9vdC10aW1lCisJCS8qIHRvdGFscmFtX3BhZ2VzIGFuZCB0b3RhbGhpZ2hfcGFnZXMgZG8gbm90IGluY2x1ZGUgdGhlIGJvb3QtdGltZQogCQkgICBiYWxsb29uIGV4dGVuc2lvbiwgc28gZG9uJ3Qgc3VidHJhY3QgZnJvbSBpdC4gKi8KIAkJX19iYWxsb29uX2FwcGVuZChwYWdlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9ldmVudHMuYyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCmluZGV4IDMzMTY3YjQuLjNmZjgyMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL2V2ZW50cy5jCisrKyBiL2RyaXZlcnMveGVuL2V2ZW50cy5jCkBAIC0xMDEsNiArMTAxLDcgQEAKIAkJCXVuc2lnbmVkIHNob3J0IGdzaTsKIAkJCXVuc2lnbmVkIGNoYXIgdmVjdG9yOwogCQkJdW5zaWduZWQgY2hhciBmbGFnczsKKwkJCXVpbnQxNl90IGRvbWlkOwogCQl9IHBpcnE7CiAJfSB1OwogfTsKQEAgLTExOCw2ICsxMTksOCBAQAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4ZW5fZHluYW1pY19jaGlwOwogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCB4ZW5fcGVyY3B1X2NoaXA7CiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHhlbl9waXJxX2NoaXA7CitzdGF0aWMgdm9pZCBlbmFibGVfZHluaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2R5bmlycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOwogCiAvKiBHZXQgaW5mbyBmb3IgSVJRICovCiBzdGF0aWMgc3RydWN0IGlycV9pbmZvICppbmZvX2Zvcl9pcnEodW5zaWduZWQgaXJxKQpAQCAtMTg0LDYgKzE4Nyw3IEBACiAJCQkJICAgdW5zaWduZWQgc2hvcnQgcGlycSwKIAkJCQkgICB1bnNpZ25lZCBzaG9ydCBnc2ksCiAJCQkJICAgdW5zaWduZWQgc2hvcnQgdmVjdG9yLAorCQkJCSAgIHVpbnQxNl90IGRvbWlkLAogCQkJCSAgIHVuc2lnbmVkIGNoYXIgZmxhZ3MpCiB7CiAJc3RydWN0IGlycV9pbmZvICppbmZvID0gaW5mb19mb3JfaXJxKGlycSk7CkBAIC0xOTMsNiArMTk3LDcgQEAKIAlpbmZvLT51LnBpcnEucGlycSA9IHBpcnE7CiAJaW5mby0+dS5waXJxLmdzaSA9IGdzaTsKIAlpbmZvLT51LnBpcnEudmVjdG9yID0gdmVjdG9yOworCWluZm8tPnUucGlycS5kb21pZCA9IGRvbWlkOwogCWluZm8tPnUucGlycS5mbGFncyA9IGZsYWdzOwogfQogCkBAIC00NzMsMTYgKzQ3OCw2IEBACiAJaXJxX2ZyZWVfZGVzYyhpcnEpOwogfQogCi1zdGF0aWMgdm9pZCBwaXJxX3VubWFza19ub3RpZnkoaW50IGlycSkKLXsKLQlzdHJ1Y3QgcGh5c2Rldl9lb2kgZW9pID0geyAuaXJxID0gcGlycV9mcm9tX2lycShpcnEpIH07Ci0KLQlpZiAodW5saWtlbHkocGlycV9uZWVkc19lb2koaXJxKSkpIHsKLQkJaW50IHJjID0gSFlQRVJWSVNPUl9waHlzZGV2X29wKFBIWVNERVZPUF9lb2ksICZlb2kpOwotCQlXQVJOX09OKHJjKTsKLQl9Ci19Ci0KIHN0YXRpYyB2b2lkIHBpcnFfcXVlcnlfdW5tYXNrKGludCBpcnEpCiB7CiAJc3RydWN0IHBoeXNkZXZfaXJxX3N0YXR1c19xdWVyeSBpcnFfc3RhdHVzOwpAQCAtNTA2LDYgKzUwMSwyOSBAQAogCXJldHVybiBkZXNjICYmIGRlc2MtPmFjdGlvbiA9PSBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBlb2lfcGlycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJaW50IGV2dGNobiA9IGV2dGNobl9mcm9tX2lycShkYXRhLT5pcnEpOworCXN0cnVjdCBwaHlzZGV2X2VvaSBlb2kgPSB7IC5pcnEgPSBwaXJxX2Zyb21faXJxKGRhdGEtPmlycSkgfTsKKwlpbnQgcmMgPSAwOworCisJaXJxX21vdmVfaXJxKGRhdGEpOworCisJaWYgKFZBTElEX0VWVENITihldnRjaG4pKQorCQljbGVhcl9ldnRjaG4oZXZ0Y2huKTsKKworCWlmIChwaXJxX25lZWRzX2VvaShkYXRhLT5pcnEpKSB7CisJCXJjID0gSFlQRVJWSVNPUl9waHlzZGV2X29wKFBIWVNERVZPUF9lb2ksICZlb2kpOworCQlXQVJOX09OKHJjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG1hc2tfYWNrX3BpcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQoreworCWRpc2FibGVfZHluaXJxKGRhdGEpOworCWVvaV9waXJxKGRhdGEpOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IF9fc3RhcnR1cF9waXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJc3RydWN0IGV2dGNobl9iaW5kX3BpcnEgYmluZF9waXJxOwpAQCAtNTM5LDcgKzU1Nyw3IEBACiAKIG91dDoKIAl1bm1hc2tfZXZ0Y2huKGV2dGNobik7Ci0JcGlycV91bm1hc2tfbm90aWZ5KGlycSk7CisJZW9pX3BpcnEoaXJxX2dldF9pcnFfZGF0YShpcnEpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTc5LDE4ICs1OTcsNyBAQAogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX3BpcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQogewotfQotCi1zdGF0aWMgdm9pZCBhY2tfcGlycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCi17Ci0JaW50IGV2dGNobiA9IGV2dGNobl9mcm9tX2lycShkYXRhLT5pcnEpOwotCi0JaXJxX21vdmVfaXJxKGRhdGEpOwotCi0JaWYgKFZBTElEX0VWVENITihldnRjaG4pKSB7Ci0JCW1hc2tfZXZ0Y2huKGV2dGNobik7Ci0JCWNsZWFyX2V2dGNobihldnRjaG4pOwotCX0KKwlkaXNhYmxlX2R5bmlycShkYXRhKTsKIH0KIAogc3RhdGljIGludCBmaW5kX2lycV9ieV9nc2kodW5zaWduZWQgZ3NpKQpAQCAtNjM5LDkgKzY0Niw2IEBACiAJaWYgKGlycSA8IDApCiAJCWdvdG8gb3V0OwogCi0JaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX3BpcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSwKLQkJCQkgICAgICBuYW1lKTsKLQogCWlycV9vcC5pcnEgPSBpcnE7CiAJaXJxX29wLnZlY3RvciA9IDA7CiAKQEAgLTY1NSw5ICs2NTksMzUgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JeGVuX2lycV9pbmZvX3BpcnFfaW5pdChpcnEsIDAsIHBpcnEsIGdzaSwgaXJxX29wLnZlY3RvciwKKwl4ZW5faXJxX2luZm9fcGlycV9pbml0KGlycSwgMCwgcGlycSwgZ3NpLCBpcnFfb3AudmVjdG9yLCBET01JRF9TRUxGLAogCQkJICAgICAgIHNoYXJlYWJsZSA/IFBJUlFfU0hBUkVBQkxFIDogMCk7CiAKKwlwaXJxX3F1ZXJ5X3VubWFzayhpcnEpOworCS8qIFdlIHRyeSB0byB1c2UgdGhlIGhhbmRsZXIgd2l0aCB0aGUgYXBwcm9wcmlhdGUgc2VtYW50aWMgZm9yIHRoZQorCSAqIHR5cGUgb2YgaW50ZXJydXB0OiBpZiB0aGUgaW50ZXJydXB0IGRvZXNuJ3QgbmVlZCBhbiBlb2kKKwkgKiAocGlycV9uZWVkc19lb2kgcmV0dXJucyBmYWxzZSksIHdlIHRyZWF0IGl0IGxpa2UgYW4gZWRnZQorCSAqIHRyaWdnZXJlZCBpbnRlcnJ1cHQgc28gd2UgdXNlIGhhbmRsZV9lZGdlX2lycS4KKwkgKiBBcyBhIG1hdHRlciBvZiBmYWN0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcKKwkgKiBwaHlzaWNhbCBpbnRlcnJ1cHQgaXMgZWRnZSB0cmlnZ2VyZWQgb3IgYW4gbXNpLgorCSAqCisJICogT24gdGhlIG90aGVyIGhhbmQgaWYgdGhlIGludGVycnVwdCBuZWVkcyBhbiBlb2kgKHBpcnFfbmVlZHNfZW9pCisJICogcmV0dXJucyB0cnVlKSB3ZSB0cmVhdCBpdCBsaWtlIGEgbGV2ZWwgdHJpZ2dlcmVkIGludGVycnVwdCBzbyB3ZQorCSAqIHVzZSBoYW5kbGVfZmFzdGVvaV9pcnEgbGlrZSB0aGUgbmF0aXZlIGNvZGUgZG9lcyBmb3IgdGhpcyBraW5kIG9mCisJICogaW50ZXJydXB0cy4KKwkgKiBEZXBlbmRpbmcgb24gdGhlIFhlbiB2ZXJzaW9uLCBwaXJxX25lZWRzX2VvaSBtaWdodCByZXR1cm4gdHJ1ZQorCSAqIG5vdCBvbmx5IGZvciBsZXZlbCB0cmlnZ2VyZWQgaW50ZXJydXB0cyBidXQgZm9yIGVkZ2UgdHJpZ2dlcmVkCisJICogaW50ZXJydXB0cyB0b28uIEluIGFueSBjYXNlIFhlbiBhbHdheXMgaG9ub3JzIHRoZSBlb2kgbWVjaGFuaXNtLAorCSAqIG5vdCBpbmplY3RpbmcgYW55IG1vcmUgcGlycXMgb2YgdGhlIHNhbWUga2luZCBpZiB0aGUgZmlyc3Qgb25lCisJICogaGFzbid0IHJlY2VpdmVkIGFuIGVvaSB5ZXQuIFRoZXJlZm9yZSB1c2luZyB0aGUgZmFzdGVvaSBoYW5kbGVyCisJICogaXMgdGhlIHJpZ2h0IGNob2ljZSBlaXRoZXIgd2F5LgorCSAqLworCWlmIChwaXJxX25lZWRzX2VvaShpcnEpKQorCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ4ZW5fcGlycV9jaGlwLAorCQkJCWhhbmRsZV9mYXN0ZW9pX2lycSwgbmFtZSk7CisJZWxzZQorCQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ4ZW5fcGlycV9jaGlwLAorCQkJCWhhbmRsZV9lZGdlX2lycSwgbmFtZSk7CisKIG91dDoKIAlzcGluX3VubG9jaygmaXJxX21hcHBpbmdfdXBkYXRlX2xvY2spOwogCkBAIC02ODAsNyArNzEwLDggQEAKIH0KIAogaW50IHhlbl9iaW5kX3BpcnFfbXNpX3RvX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2MsCi0JCQkgICAgIGludCBwaXJxLCBpbnQgdmVjdG9yLCBjb25zdCBjaGFyICpuYW1lKQorCQkJICAgICBpbnQgcGlycSwgaW50IHZlY3RvciwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgZG9taWRfdCBkb21pZCkKIHsKIAlpbnQgaXJxLCByZXQ7CiAKQEAgLTY5MCwxMCArNzIxLDEwIEBACiAJaWYgKGlycSA9PSAtMSkKIAkJZ290byBvdXQ7CiAKLQlpcnFfc2V0X2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsICZ4ZW5fcGlycV9jaGlwLCBoYW5kbGVfbGV2ZWxfaXJxLAotCQkJCSAgICAgIG5hbWUpOworCWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJnhlbl9waXJxX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwKKwkJCW5hbWUpOwogCi0JeGVuX2lycV9pbmZvX3BpcnFfaW5pdChpcnEsIDAsIHBpcnEsIDAsIHZlY3RvciwgMCk7CisJeGVuX2lycV9pbmZvX3BpcnFfaW5pdChpcnEsIDAsIHBpcnEsIDAsIHZlY3RvciwgZG9taWQsIDApOwogCXJldCA9IGlycV9zZXRfbXNpX2Rlc2MoaXJxLCBtc2lkZXNjKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJvcl9pcnE7CkBAIC03MjIsOSArNzUzLDE2IEBACiAKIAlpZiAoeGVuX2luaXRpYWxfZG9tYWluKCkpIHsKIAkJdW5tYXBfaXJxLnBpcnEgPSBpbmZvLT51LnBpcnEucGlycTsKLQkJdW5tYXBfaXJxLmRvbWlkID0gRE9NSURfU0VMRjsKKwkJdW5tYXBfaXJxLmRvbWlkID0gaW5mby0+dS5waXJxLmRvbWlkOwogCQlyYyA9IEhZUEVSVklTT1JfcGh5c2Rldl9vcChQSFlTREVWT1BfdW5tYXBfcGlycSwgJnVubWFwX2lycSk7Ci0JCWlmIChyYykgeworCQkvKiBJZiBhbm90aGVyIGRvbWFpbiBxdWl0cyB3aXRob3V0IG1ha2luZyB0aGUgcGNpX2Rpc2FibGVfbXNpeAorCQkgKiBjYWxsLCB0aGUgWGVuIGh5cGVydmlzb3IgdGFrZXMgY2FyZSBvZiBmcmVlaW5nIHRoZSBQSVJRcworCQkgKiAoZnJlZV9kb21haW5fcGlycXMpLgorCQkgKi8KKwkJaWYgKChyYyA9PSAtRVNSQ0ggJiYgaW5mby0+dS5waXJxLmRvbWlkICE9IERPTUlEX1NFTEYpKQorCQkJcHJpbnRrKEtFUk5fSU5GTyAiZG9tYWluICVkIGRvZXMgbm90IGhhdmUgJWQgYW55bW9yZVxuIiwKKwkJCQlpbmZvLT51LnBpcnEuZG9taWQsIGluZm8tPnUucGlycS5waXJxKTsKKwkJZWxzZSBpZiAocmMpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgInVubWFwIGlycSBmYWlsZWQgJWRcbiIsIHJjKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC03NTksNiArNzk3LDEyIEBACiAJcmV0dXJuIGlycTsKIH0KIAorCitpbnQgeGVuX3BpcnFfZnJvbV9pcnEodW5zaWduZWQgaXJxKQoreworCXJldHVybiBwaXJxX2Zyb21faXJxKGlycSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fcGlycV9mcm9tX2lycSk7CiBpbnQgYmluZF9ldnRjaG5fdG9faXJxKHVuc2lnbmVkIGludCBldnRjaG4pCiB7CiAJaW50IGlycTsKQEAgLTc3Myw3ICs4MTcsNyBAQAogCQkJZ290byBvdXQ7CiAKIAkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmeGVuX2R5bmFtaWNfY2hpcCwKLQkJCQkJICAgICAgaGFuZGxlX2Zhc3Rlb2lfaXJxLCAiZXZlbnQiKTsKKwkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZXZlbnQiKTsKIAogCQl4ZW5faXJxX2luZm9fZXZ0Y2huX2luaXQoaXJxLCBldnRjaG4pOwogCX0KQEAgLTExNzksOSArMTIyMyw2IEBACiAJCQkJcG9ydCA9ICh3b3JkX2lkeCAqIEJJVFNfUEVSX0xPTkcpICsgYml0X2lkeDsKIAkJCQlpcnEgPSBldnRjaG5fdG9faXJxW3BvcnRdOwogCi0JCQkJbWFza19ldnRjaG4ocG9ydCk7Ci0JCQkJY2xlYXJfZXZ0Y2huKHBvcnQpOwotCiAJCQkJaWYgKGlycSAhPSAtMSkgewogCQkJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAkJCQkJaWYgKGRlc2MpCkBAIC0xMzM3LDEwICsxMzc4LDE2IEBACiB7CiAJaW50IGV2dGNobiA9IGV2dGNobl9mcm9tX2lycShkYXRhLT5pcnEpOwogCi0JaXJxX21vdmVfbWFza2VkX2lycShkYXRhKTsKKwlpcnFfbW92ZV9pcnEoZGF0YSk7CiAKIAlpZiAoVkFMSURfRVZUQ0hOKGV2dGNobikpCi0JCXVubWFza19ldnRjaG4oZXZ0Y2huKTsKKwkJY2xlYXJfZXZ0Y2huKGV2dGNobik7Cit9CisKK3N0YXRpYyB2b2lkIG1hc2tfYWNrX2R5bmlycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpCit7CisJZGlzYWJsZV9keW5pcnEoZGF0YSk7CisJYWNrX2R5bmlycShkYXRhKTsKIH0KIAogc3RhdGljIGludCByZXRyaWdnZXJfZHluaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkKQEAgLTE1MDIsNiArMTU0OSwxOCBAQAogCXhlbl9wb2xsX2lycV90aW1lb3V0KGlycSwgMCAvKiBubyB0aW1lb3V0ICovKTsKIH0KIAorLyogQ2hlY2sgd2hldGhlciB0aGUgSVJRIGxpbmUgaXMgc2hhcmVkIHdpdGggb3RoZXIgZ3Vlc3RzLiAqLworaW50IHhlbl90ZXN0X2lycV9zaGFyZWQoaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXJxX2luZm8gKmluZm8gPSBpbmZvX2Zvcl9pcnEoaXJxKTsKKwlzdHJ1Y3QgcGh5c2Rldl9pcnFfc3RhdHVzX3F1ZXJ5IGlycV9zdGF0dXMgPSB7IC5pcnEgPSBpbmZvLT51LnBpcnEucGlycSB9OworCisJaWYgKEhZUEVSVklTT1JfcGh5c2Rldl9vcChQSFlTREVWT1BfaXJxX3N0YXR1c19xdWVyeSwgJmlycV9zdGF0dXMpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gIShpcnFfc3RhdHVzLmZsYWdzICYgWEVOSVJRU1RBVF9zaGFyZWQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3Rlc3RfaXJxX3NoYXJlZCk7CisKIHZvaWQgeGVuX2lycV9yZXN1bWUodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1LCBldnRjaG47CkBAIC0xNTM1LDcgKzE1OTQsOSBAQAogCS5pcnFfbWFzawkJPSBkaXNhYmxlX2R5bmlycSwKIAkuaXJxX3VubWFzawkJPSBlbmFibGVfZHluaXJxLAogCi0JLmlycV9lb2kJCT0gYWNrX2R5bmlycSwKKwkuaXJxX2FjawkJPSBhY2tfZHluaXJxLAorCS5pcnFfbWFza19hY2sJCT0gbWFza19hY2tfZHluaXJxLAorCiAJLmlycV9zZXRfYWZmaW5pdHkJPSBzZXRfYWZmaW5pdHlfaXJxLAogCS5pcnFfcmV0cmlnZ2VyCQk9IHJldHJpZ2dlcl9keW5pcnEsCiB9OwpAQCAtMTU0NSwxNCArMTYwNiwxNSBAQAogCiAJLmlycV9zdGFydHVwCQk9IHN0YXJ0dXBfcGlycSwKIAkuaXJxX3NodXRkb3duCQk9IHNodXRkb3duX3BpcnEsCi0KIAkuaXJxX2VuYWJsZQkJPSBlbmFibGVfcGlycSwKLQkuaXJxX3VubWFzawkJPSBlbmFibGVfcGlycSwKLQogCS5pcnFfZGlzYWJsZQkJPSBkaXNhYmxlX3BpcnEsCi0JLmlycV9tYXNrCQk9IGRpc2FibGVfcGlycSwKIAotCS5pcnFfYWNrCQk9IGFja19waXJxLAorCS5pcnFfbWFzawkJPSBkaXNhYmxlX2R5bmlycSwKKwkuaXJxX3VubWFzawkJPSBlbmFibGVfZHluaXJxLAorCisJLmlycV9hY2sJCT0gZW9pX3BpcnEsCisJLmlycV9lb2kJCT0gZW9pX3BpcnEsCisJLmlycV9tYXNrX2FjawkJPSBtYXNrX2Fja19waXJxLAogCiAJLmlycV9zZXRfYWZmaW5pdHkJPSBzZXRfYWZmaW5pdHlfaXJxLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9nbnRhbGxvYy5jIGIvZHJpdmVycy94ZW4vZ250YWxsb2MuYwppbmRleCBhN2ZmZGZlLi5mNjgzMmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9nbnRhbGxvYy5jCisrKyBiL2RyaXZlcnMveGVuL2dudGFsbG9jLmMKQEAgLTQyNyw2ICs0MjcsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZ250YWxsb2Nfdm1hX29wZW4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGdudGFsbG9jX2dyZWYgKmdyZWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlpZiAoIWdyZWYpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmZ3JlZl9sb2NrKTsKKwlncmVmLT51c2VycysrOworCXNwaW5fdW5sb2NrKCZncmVmX2xvY2spOworfQorCiBzdGF0aWMgdm9pZCBnbnRhbGxvY192bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGdudGFsbG9jX2dyZWYgKmdyZWYgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKQEAgLTQ0MSw2ICs0NTIsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdudGFsbG9jX3Ztb3BzID0geworCS5vcGVuID0gZ250YWxsb2Nfdm1hX29wZW4sCiAJLmNsb3NlID0gZ250YWxsb2Nfdm1hX2Nsb3NlLAogfTsKIApAQCAtNDcxLDggKzQ4Myw2IEBACiAJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBncmVmOwogCiAJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsKLQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRDT1BZOwotCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUEZOTUFQIHwgVk1fUEZOX0FUX01NQVA7CiAKIAl2bWEtPnZtX29wcyA9ICZnbnRhbGxvY192bW9wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZ250ZGV2LmMgYi9kcml2ZXJzL3hlbi9nbnRkZXYuYwppbmRleCBiMGY5ZThmLi5mOTE0YjI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9nbnRkZXYuYworKysgYi9kcml2ZXJzL3hlbi9nbnRkZXYuYwpAQCAtMzMwLDE3ICszMzAsMjYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyB2b2lkIGdudGRldl92bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgZ3JhbnRfbWFwICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKworCXByX2RlYnVnKCJnbnRkZXZfdm1hX29wZW4gJXBcbiIsIHZtYSk7CisJYXRvbWljX2luYygmbWFwLT51c2Vycyk7Cit9CisKIHN0YXRpYyB2b2lkIGdudGRldl92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGdyYW50X21hcCAqbWFwID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CiAKLQlwcl9kZWJ1ZygiY2xvc2UgJXBcbiIsIHZtYSk7CisJcHJfZGVidWcoImdudGRldl92bWFfY2xvc2UgJXBcbiIsIHZtYSk7CiAJbWFwLT52bWEgPSBOVUxMOwogCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlnbnRkZXZfcHV0X21hcChtYXApOwogfQogCiBzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGdudGRldl92bW9wcyA9IHsKKwkub3BlbiA9IGdudGRldl92bWFfb3BlbiwKIAkuY2xvc2UgPSBnbnRkZXZfdm1hX2Nsb3NlLAogfTsKIApAQCAtNjUyLDcgKzY2MSwxMCBAQAogCiAJdm1hLT52bV9vcHMgPSAmZ250ZGV2X3Ztb3BzOwogCi0Jdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRHxWTV9ET05UQ09QWXxWTV9ET05URVhQQU5EfFZNX1BGTk1BUDsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEfFZNX0RPTlRFWFBBTkQ7CisKKwlpZiAodXNlX3B0ZW1vZCkKKwkJdm1hLT52bV9mbGFncyB8PSBWTV9ET05UQ09QWXxWTV9QRk5NQVA7CiAKIAl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYyBiL2RyaXZlcnMveGVuL2dyYW50LXRhYmxlLmMKaW5kZXggMzc0NWEzMS4uZmQ3MjVjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vZ3JhbnQtdGFibGUuYworKysgYi9kcml2ZXJzL3hlbi9ncmFudC10YWJsZS5jCkBAIC00NjYsMTMgKzQ2NiwzMCBAQAogCQlpZiAobWFwX29wc1tpXS5zdGF0dXMpCiAJCQljb250aW51ZTsKIAotCQkvKiBtMnAgb3ZlcnJpZGUgb25seSBzdXBwb3J0ZWQgZm9yIEdOVE1BUF9jb250YWluc19wdGUgbWFwcGluZ3MgKi8KLQkJaWYgKCEobWFwX29wc1tpXS5mbGFncyAmIEdOVE1BUF9jb250YWluc19wdGUpKQotCQkJY29udGludWU7Ci0JCXB0ZSA9IChwdGVfdCAqKSAobWZuX3RvX3ZpcnQoUEZOX0RPV04obWFwX29wc1tpXS5ob3N0X2FkZHIpKSArCisJCWlmIChtYXBfb3BzW2ldLmZsYWdzICYgR05UTUFQX2NvbnRhaW5zX3B0ZSkgeworCQkJcHRlID0gKHB0ZV90ICopIChtZm5fdG9fdmlydChQRk5fRE9XTihtYXBfb3BzW2ldLmhvc3RfYWRkcikpICsKIAkJCQkobWFwX29wc1tpXS5ob3N0X2FkZHIgJiB+UEFHRV9NQVNLKSk7Ci0JCW1mbiA9IHB0ZV9tZm4oKnB0ZSk7Ci0JCXJldCA9IG0ycF9hZGRfb3ZlcnJpZGUobWZuLCBwYWdlc1tpXSk7CisJCQltZm4gPSBwdGVfbWZuKCpwdGUpOworCQl9IGVsc2UgeworCQkJLyogSWYgeW91IHJlYWxseSB3YW50ZWQgdG8gZG8gdGhpczoKKwkJCSAqIG1mbiA9IFBGTl9ET1dOKG1hcF9vcHNbaV0uZGV2X2J1c19hZGRyKTsKKwkJCSAqCisJCQkgKiBUaGUgcmVhc29uIHdlIGRvIG5vdCBpbXBsZW1lbnQgaXQgaXMgYi9jIG9uIHRoZQorCQkJICogdW5tYXAgcGF0aCAoZ250dGFiX3VubWFwX3JlZnMpIHdlIGhhdmUgbm8gbWVhbnMgb2YKKwkJCSAqIGNoZWNraW5nIHdoZXRoZXIgdGhlIHBhZ2UgaXMgIUdOVE1BUF9jb250YWluc19wdGUuCisJCQkgKgorCQkJICogVGhhdCBpcyB3aXRob3V0IHNvbWUgZXh0cmEgZGF0YS1zdHJ1Y3R1cmUgdG8gY2FycnkKKwkJCSAqIHRoZSBzdHJ1Y3QgcGFnZSwgYm9vbCBjbGVhcl9wdGUsIGFuZCBsaXN0X2hlYWQgbmV4dAorCQkJICogdHVwbGVzIGFuZCBkZWFsIHdpdGggYWxsb2NhdGlvbi9kZWxhbGxvY2F0aW9uLCBldGMuCisJCQkgKgorCQkJICogVGhlIHVzZXJzIG9mIHRoaXMgQVBJIHNldCB0aGUgR05UTUFQX2NvbnRhaW5zX3B0ZQorCQkJICogZmxhZyBzbyBsZXRzIGp1c3QgcmV0dXJuIG5vdCBzdXBwb3J0ZWQgdW50aWwgaXQKKwkJCSAqIGJlY29tZXMgbmVjY2Vzc2FyeSB0byBpbXBsZW1lbnQuCisJCQkgKi8KKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJfQorCQlyZXQgPSBtMnBfYWRkX292ZXJyaWRlKG1mbiwgcGFnZXNbaV0sCisJCQkJICAgICAgIG1hcF9vcHNbaV0uZmxhZ3MgJiBHTlRNQVBfY29udGFpbnNfcHRlKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtNDk0LDcgKzUxMSw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlyZXQgPSBtMnBfcmVtb3ZlX292ZXJyaWRlKHBhZ2VzW2ldKTsKKwkJcmV0ID0gbTJwX3JlbW92ZV9vdmVycmlkZShwYWdlc1tpXSwgdHJ1ZSAvKiBjbGVhciB0aGUgUFRFICovKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vbWFuYWdlLmMgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwppbmRleCAxYWM5NDEyLi4wYjUzNjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9tYW5hZ2UuYworKysgYi9kcml2ZXJzL3hlbi9tYW5hZ2UuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zeXNycS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0b3BfbWFjaGluZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8eGVuL3hlbi5oPgogI2luY2x1ZGUgPHhlbi94ZW5idXMuaD4KQEAgLTY5LDkgKzcwLDkgQEAKIAogCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAotCWVyciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfRlJFRVpFKTsKKwllcnIgPSBzeXNjb3JlX3N1c3BlbmQoKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGVuX3N1c3BlbmQ6IHN5c2Rldl9zdXNwZW5kIGZhaWxlZDogJWRcbiIsCisJCXByaW50ayhLRVJOX0VSUiAieGVuX3N1c3BlbmQ6IHN5c3RlbSBjb3JlIHN1c3BlbmQgZmFpbGVkOiAlZFxuIiwKIAkJCWVycik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtOTUsNyArOTYsNyBAQAogCQl4ZW5fdGltZXJfcmVzdW1lKCk7CiAJfQogCi0Jc3lzZGV2X3Jlc3VtZSgpOworCXN5c2NvcmVfcmVzdW1lKCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL3N5cy1oeXBlcnZpc29yLmMgYi9kcml2ZXJzL3hlbi9zeXMtaHlwZXJ2aXNvci5jCmluZGV4IDYwZjE4MjcuLjFlMGZlMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMveGVuL3N5cy1oeXBlcnZpc29yLmMKKysrIGIvZHJpdmVycy94ZW4vc3lzLWh5cGVydmlzb3IuYwpAQCAtMjE1LDcgKzIxNSw3IEBACiAJLmF0dHJzID0geGVuX2NvbXBpbGVfYXR0cnMsCiB9OwogCi1pbnQgX19pbml0IHN0YXRpYyB4ZW5fY29tcGlsYXRpb25faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgeGVuX2NvbXBpbGF0aW9uX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gc3lzZnNfY3JlYXRlX2dyb3VwKGh5cGVydmlzb3Jfa29iaiwgJnhlbl9jb21waWxhdGlvbl9ncm91cCk7CiB9CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDUxNDdiZGQuLjI1N2IwMGUgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0xMTAyLDYgKzExMDIsNyBAQAogCQkJaWYgKCFiZGV2LT5iZF9wYXJ0KQogCQkJCWdvdG8gb3V0X2NsZWFyOwogCisJCQlyZXQgPSAwOwogCQkJaWYgKGRpc2stPmZvcHMtPm9wZW4pIHsKIAkJCQlyZXQgPSBkaXNrLT5mb3BzLT5vcGVuKGJkZXYsIG1vZGUpOwogCQkJCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7CkBAIC0xMTE4LDkgKzExMTksMTggQEAKIAkJCQkJcHV0X2Rpc2soZGlzayk7CiAJCQkJCWdvdG8gcmVzdGFydDsKIAkJCQl9Ci0JCQkJaWYgKHJldCkKLQkJCQkJZ290byBvdXRfY2xlYXI7CiAJCQl9CisJCQkvKgorCQkJICogSWYgdGhlIGRldmljZSBpcyBpbnZhbGlkYXRlZCwgcmVzY2FuIHBhcnRpdGlvbgorCQkJICogaWYgb3BlbiBzdWNjZWVkZWQgb3IgZmFpbGVkIHdpdGggLUVOT01FRElVTS4KKwkJCSAqIFRoZSBsYXR0ZXIgaXMgbmVjZXNzYXJ5IHRvIHByZXZlbnQgZ2hvc3QKKwkJCSAqIHBhcnRpdGlvbnMgb24gYSByZW1vdmVkIG1lZGl1bS4KKwkJCSAqLworCQkJaWYgKGJkZXYtPmJkX2ludmFsaWRhdGVkICYmICghcmV0IHx8IHJldCA9PSAtRU5PTUVESVVNKSkKKwkJCQlyZXNjYW5fcGFydGl0aW9ucyhkaXNrLCBiZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRfY2xlYXI7CisKIAkJCWlmICghYmRldi0+YmRfb3BlbmVycykgewogCQkJCWJkX3NldF9zaXplKGJkZXYsKGxvZmZfdClnZXRfY2FwYWNpdHkoZGlzayk8PDkpOwogCQkJCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhiZGV2KTsKQEAgLTExMjgsOCArMTEzOCw2IEBACiAJCQkJCWJkaSA9ICZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm87CiAJCQkJYmRldl9pbm9kZV9zd2l0Y2hfYmRpKGJkZXYtPmJkX2lub2RlLCBiZGkpOwogCQkJfQotCQkJaWYgKGJkZXYtPmJkX2ludmFsaWRhdGVkKQotCQkJCXJlc2Nhbl9wYXJ0aXRpb25zKGRpc2ssIGJkZXYpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGJsb2NrX2RldmljZSAqd2hvbGU7CiAJCQl3aG9sZSA9IGJkZ2V0X2Rpc2soZGlzaywgMCk7CkBAIC0xMTUzLDEzICsxMTYxLDE0IEBACiAJCX0KIAl9IGVsc2UgewogCQlpZiAoYmRldi0+YmRfY29udGFpbnMgPT0gYmRldikgewotCQkJaWYgKGJkZXYtPmJkX2Rpc2stPmZvcHMtPm9wZW4pIHsKKwkJCXJldCA9IDA7CisJCQlpZiAoYmRldi0+YmRfZGlzay0+Zm9wcy0+b3BlbikKIAkJCQlyZXQgPSBiZGV2LT5iZF9kaXNrLT5mb3BzLT5vcGVuKGJkZXYsIG1vZGUpOwotCQkJCWlmIChyZXQpCi0JCQkJCWdvdG8gb3V0X3VubG9ja19iZGV2OwotCQkJfQotCQkJaWYgKGJkZXYtPmJkX2ludmFsaWRhdGVkKQorCQkJLyogdGhlIHNhbWUgYXMgZmlyc3Qgb3BlbmVyIGNhc2UsIHJlYWQgY29tbWVudCB0aGVyZSAqLworCQkJaWYgKGJkZXYtPmJkX2ludmFsaWRhdGVkICYmICghcmV0IHx8IHJldCA9PSAtRU5PTUVESVVNKSkKIAkJCQlyZXNjYW5fcGFydGl0aW9ucyhiZGV2LT5iZF9kaXNrLCBiZGV2KTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXRfdW5sb2NrX2JkZXY7CiAJCX0KIAkJLyogb25seSBvbmUgb3BlbmVyIGhvbGRzIHJlZnMgdG8gdGhlIG1vZHVsZSBhbmQgZGlzayAqLwogCQltb2R1bGVfcHV0KGRpc2stPmZvcHMtPm93bmVyKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2FjbC5jIGIvZnMvYnRyZnMvYWNsLmMKaW5kZXggZGUzNGJmYS4uNDRlYTViOSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvYWNsLmMKKysrIGIvZnMvYnRyZnMvYWNsLmMKQEAgLTE3OCwxNiArMTc4LDE4IEBACiAKIAlpZiAodmFsdWUpIHsKIAkJYWNsID0gcG9zaXhfYWNsX2Zyb21feGF0dHIodmFsdWUsIHNpemUpOwotCQlpZiAoYWNsID09IE5VTEwpIHsKLQkJCXZhbHVlID0gTlVMTDsKLQkJCXNpemUgPSAwOwotCQl9IGVsc2UgaWYgKElTX0VSUihhY2wpKSB7CisJCWlmIChJU19FUlIoYWNsKSkKIAkJCXJldHVybiBQVFJfRVJSKGFjbCk7CisKKwkJaWYgKGFjbCkgeworCQkJcmV0ID0gcG9zaXhfYWNsX3ZhbGlkKGFjbCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gb3V0OwogCQl9CiAJfQogCiAJcmV0ID0gYnRyZnNfc2V0X2FjbChOVUxMLCBkZW50cnktPmRfaW5vZGUsIGFjbCwgdHlwZSk7Ci0KK291dDoKIAlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2N0cmVlLmggYi9mcy9idHJmcy9jdHJlZS5oCmluZGV4IDM0NThiNTcuLjhmNGI4MWQgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2N0cmVlLmgKKysrIGIvZnMvYnRyZnMvY3RyZWUuaApAQCAtNzE4LDcgKzcxOCw3IEBACiAJdTY0IHRvdGFsX2J5dGVzOwkvKiB0b3RhbCBieXRlcyBpbiB0aGUgc3BhY2UsCiAJCQkJICAgdGhpcyBkb2Vzbid0IHRha2UgbWlycm9ycyBpbnRvIGFjY291bnQgKi8KIAl1NjQgYnl0ZXNfdXNlZDsJCS8qIHRvdGFsIGJ5dGVzIHVzZWQsCi0JCQkJICAgdGhpcyBkb2VzJ3QgdGFrZSBtaXJyb3JzIGludG8gYWNjb3VudCAqLworCQkJCSAgIHRoaXMgZG9lc24ndCB0YWtlIG1pcnJvcnMgaW50byBhY2NvdW50ICovCiAJdTY0IGJ5dGVzX3Bpbm5lZDsJLyogdG90YWwgYnl0ZXMgcGlubmVkLCB3aWxsIGJlIGZyZWVkIHdoZW4gdGhlCiAJCQkJICAgdHJhbnNhY3Rpb24gZmluaXNoZXMgKi8KIAl1NjQgYnl0ZXNfcmVzZXJ2ZWQ7CS8qIHRvdGFsIGJ5dGVzIHRoZSBhbGxvY2F0b3IgaGFzIHJlc2VydmVkIGZvcgpAQCAtNzQwLDggKzc0MCwxMCBAQAogCSAqLwogCXVuc2lnbmVkIGxvbmcgcmVzZXJ2YXRpb25fcHJvZ3Jlc3M7CiAKLQlpbnQgZnVsbDsJCS8qIGluZGljYXRlcyB0aGF0IHdlIGNhbm5vdCBhbGxvY2F0ZSBhbnkgbW9yZQorCWludCBmdWxsOjE7CQkvKiBpbmRpY2F0ZXMgdGhhdCB3ZSBjYW5ub3QgYWxsb2NhdGUgYW55IG1vcmUKIAkJCQkgICBjaHVua3MgZm9yIHRoaXMgc3BhY2UgKi8KKwlpbnQgY2h1bmtfYWxsb2M6MTsJLyogc2V0IGlmIHdlIGFyZSBhbGxvY2F0aW5nIGEgY2h1bmsgKi8KKwogCWludCBmb3JjZV9hbGxvYzsJLyogc2V0IGlmIHdlIG5lZWQgdG8gZm9yY2UgYSBjaHVuayBhbGxvYyBmb3IKIAkJCQkgICB0aGlzIHNwYWNlICovCiAKQEAgLTI1NzYsNiArMjU3OCwxMSBAQAogaW50IGJ0cmZzX21hcmtfZXh0ZW50X3dyaXR0ZW4oc3RydWN0IGJ0cmZzX3RyYW5zX2hhbmRsZSAqdHJhbnMsCiAJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc3RhcnQsIHU2NCBlbmQpOwogaW50IGJ0cmZzX3JlbGVhc2VfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Cit2b2lkIGJ0cmZzX2Ryb3BfcGFnZXMoc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG51bV9wYWdlcyk7CitpbnQgYnRyZnNfZGlydHlfcGFnZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCSAgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBudW1fcGFnZXMsCisJCSAgICAgIGxvZmZfdCBwb3MsIHNpemVfdCB3cml0ZV9ieXRlcywKKwkJICAgICAgc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZCk7CiAKIC8qIHRyZWUtZGVmcmFnLmMgKi8KIGludCBidHJmc19kZWZyYWdfbGVhdmVzKHN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZGlzay1pby5jIGIvZnMvYnRyZnMvZGlzay1pby5jCmluZGV4IDhmMWQ0NGIuLjIyOGNmMzYgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2Rpc2staW8uYworKysgYi9mcy9idHJmcy9kaXNrLWlvLmMKQEAgLTI4MjQsNiArMjgyNCw3IEBACiAKIAlzcGluX2xvY2soJmRlbGF5ZWRfcmVmcy0+bG9jayk7CiAJaWYgKGRlbGF5ZWRfcmVmcy0+bnVtX2VudHJpZXMgPT0gMCkgeworCQlzcGluX3VubG9jaygmZGVsYXllZF9yZWZzLT5sb2NrKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZGVsYXllZF9yZWZzIGhhcyBOTyBlbnRyeVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMzA1Nyw3ICszMDU4LDcgQEAKIAkJYnRyZnNfZGVzdHJveV9waW5uZWRfZXh0ZW50KHJvb3QsCiAJCQkJCSAgICByb290LT5mc19pbmZvLT5waW5uZWRfZXh0ZW50cyk7CiAKLQkJdC0+dXNlX2NvdW50ID0gMDsKKwkJYXRvbWljX3NldCgmdC0+dXNlX2NvdW50LCAwKTsKIAkJbGlzdF9kZWxfaW5pdCgmdC0+bGlzdCk7CiAJCW1lbXNldCh0LCAwLCBzaXplb2YoKnQpKTsKIAkJa21lbV9jYWNoZV9mcmVlKGJ0cmZzX3RyYW5zYWN0aW9uX2NhY2hlcCwgdCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jIGIvZnMvYnRyZnMvZXh0ZW50LXRyZWUuYwppbmRleCBmNjE5YzNjLi45ZWU2YmQ1IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnQtdHJlZS5jCisrKyBiL2ZzL2J0cmZzL2V4dGVudC10cmVlLmMKQEAgLTMzLDYgKzMzLDI1IEBACiAjaW5jbHVkZSAibG9ja2luZy5oIgogI2luY2x1ZGUgImZyZWUtc3BhY2UtY2FjaGUuaCIKIAorLyogY29udHJvbCBmbGFncyBmb3IgZG9fY2h1bmtfYWxsb2MncyBmb3JjZSBmaWVsZAorICogQ0hVTktfQUxMT0NfTk9fRk9SQ0UgbWVhbnMgdG8gb25seSBhbGxvY2F0ZSBhIGNodW5rCisgKiBpZiB3ZSByZWFsbHkgbmVlZCBvbmUuCisgKgorICogQ0hVTktfQUxMT0NfRk9SQ0UgbWVhbnMgaXQgbXVzdCB0cnkgdG8gYWxsb2NhdGUgb25lCisgKgorICogQ0hVTktfQUxMT0NfTElNSVRFRCBtZWFucyB0byBvbmx5IHRyeSBhbmQgYWxsb2NhdGUgb25lCisgKiBpZiB3ZSBoYXZlIHZlcnkgZmV3IGNodW5rcyBhbHJlYWR5IGFsbG9jYXRlZC4gIFRoaXMgaXMKKyAqIHVzZWQgYXMgcGFydCBvZiB0aGUgY2x1c3RlcmluZyBjb2RlIHRvIGhlbHAgbWFrZSBzdXJlCisgKiB3ZSBoYXZlIGEgZ29vZCBwb29sIG9mIHN0b3JhZ2UgdG8gY2x1c3RlciBpbiwgd2l0aG91dAorICogZmlsbGluZyB0aGUgRlMgd2l0aCBlbXB0eSBjaHVua3MKKyAqCisgKi8KK2VudW0geworCUNIVU5LX0FMTE9DX05PX0ZPUkNFID0gMCwKKwlDSFVOS19BTExPQ19GT1JDRSA9IDEsCisJQ0hVTktfQUxMT0NfTElNSVRFRCA9IDIsCit9OworCiBzdGF0aWMgaW50IHVwZGF0ZV9ibG9ja19ncm91cChzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICp0cmFucywKIAkJCSAgICAgIHN0cnVjdCBidHJmc19yb290ICpyb290LAogCQkJICAgICAgdTY0IGJ5dGVuciwgdTY0IG51bV9ieXRlcywgaW50IGFsbG9jKTsKQEAgLTMwMTksNyArMzAzOCw4IEBACiAJZm91bmQtPmJ5dGVzX3JlYWRvbmx5ID0gMDsKIAlmb3VuZC0+Ynl0ZXNfbWF5X3VzZSA9IDA7CiAJZm91bmQtPmZ1bGwgPSAwOwotCWZvdW5kLT5mb3JjZV9hbGxvYyA9IDA7CisJZm91bmQtPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTk9fRk9SQ0U7CisJZm91bmQtPmNodW5rX2FsbG9jID0gMDsKIAkqc3BhY2VfaW5mbyA9IGZvdW5kOwogCWxpc3RfYWRkX3JjdSgmZm91bmQtPmxpc3QsICZpbmZvLT5zcGFjZV9pbmZvKTsKIAlhdG9taWNfc2V0KCZmb3VuZC0+Y2FjaGluZ190aHJlYWRzLCAwKTsKQEAgLTMxNTAsNyArMzE3MCw3IEBACiAJCWlmICghZGF0YV9zaW5mby0+ZnVsbCAmJiBhbGxvY19jaHVuaykgewogCQkJdTY0IGFsbG9jX3RhcmdldDsKIAotCQkJZGF0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSAxOworCQkJZGF0YV9zaW5mby0+Zm9yY2VfYWxsb2MgPSBDSFVOS19BTExPQ19GT1JDRTsKIAkJCXNwaW5fdW5sb2NrKCZkYXRhX3NpbmZvLT5sb2NrKTsKIGFsbG9jOgogCQkJYWxsb2NfdGFyZ2V0ID0gYnRyZnNfZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgMSk7CkBAIC0zMTYwLDcgKzMxODAsOCBAQAogCiAJCQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdC0+ZnNfaW5mby0+ZXh0ZW50X3Jvb3QsCiAJCQkJCSAgICAgYnl0ZXMgKyAyICogMTAyNCAqIDEwMjQsCi0JCQkJCSAgICAgYWxsb2NfdGFyZ2V0LCAwKTsKKwkJCQkJICAgICBhbGxvY190YXJnZXQsCisJCQkJCSAgICAgQ0hVTktfQUxMT0NfTk9fRk9SQ0UpOwogCQkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIAkJCWlmIChyZXQgPCAwKSB7CiAJCQkJaWYgKHJldCAhPSAtRU5PU1BDKQpAQCAtMzIzOSwzMSArMzI2MCw1NiBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShmb3VuZCwgaGVhZCwgbGlzdCkgewogCQlpZiAoZm91bmQtPmZsYWdzICYgQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEpCi0JCQlmb3VuZC0+Zm9yY2VfYWxsb2MgPSAxOworCQkJZm91bmQtPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfRk9SQ0U7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdGF0aWMgaW50IHNob3VsZF9hbGxvY19jaHVuayhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwKLQkJCSAgICAgIHN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzaW5mbywgdTY0IGFsbG9jX2J5dGVzKQorCQkJICAgICAgc3RydWN0IGJ0cmZzX3NwYWNlX2luZm8gKnNpbmZvLCB1NjQgYWxsb2NfYnl0ZXMsCisJCQkgICAgICBpbnQgZm9yY2UpCiB7CiAJdTY0IG51bV9ieXRlcyA9IHNpbmZvLT50b3RhbF9ieXRlcyAtIHNpbmZvLT5ieXRlc19yZWFkb25seTsKKwl1NjQgbnVtX2FsbG9jYXRlZCA9IHNpbmZvLT5ieXRlc191c2VkICsgc2luZm8tPmJ5dGVzX3Jlc2VydmVkOwogCXU2NCB0aHJlc2g7CiAKLQlpZiAoc2luZm8tPmJ5dGVzX3VzZWQgKyBzaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKwotCSAgICBhbGxvY19ieXRlcyArIDI1NiAqIDEwMjQgKiAxMDI0IDwgbnVtX2J5dGVzKQorCWlmIChmb3JjZSA9PSBDSFVOS19BTExPQ19GT1JDRSkKKwkJcmV0dXJuIDE7CisKKwkvKgorCSAqIGluIGxpbWl0ZWQgbW9kZSwgd2Ugd2FudCB0byBoYXZlIHNvbWUgZnJlZSBzcGFjZSB1cCB0bworCSAqIGFib3V0IDElIG9mIHRoZSBGUyBzaXplLgorCSAqLworCWlmIChmb3JjZSA9PSBDSFVOS19BTExPQ19MSU1JVEVEKSB7CisJCXRocmVzaCA9IGJ0cmZzX3N1cGVyX3RvdGFsX2J5dGVzKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKKwkJdGhyZXNoID0gbWF4X3QodTY0LCA2NCAqIDEwMjQgKiAxMDI0LAorCQkJICAgICAgIGRpdl9mYWN0b3JfZmluZSh0aHJlc2gsIDEpKTsKKworCQlpZiAobnVtX2J5dGVzIC0gbnVtX2FsbG9jYXRlZCA8IHRocmVzaCkKKwkJCXJldHVybiAxOworCX0KKworCS8qCisJICogd2UgaGF2ZSB0d28gc2ltaWxhciBjaGVja3MgaGVyZSwgb25lIGJhc2VkIG9uIHBlcmNlbnRhZ2UKKwkgKiBhbmQgb25jZSBiYXNlZCBvbiBhIGhhcmQgbnVtYmVyIG9mIDI1Nk1CLiAgVGhlIGlkZWEKKwkgKiBpcyB0aGF0IGlmIHdlIGhhdmUgYSBnb29kIGFtb3VudCBvZiBmcmVlCisJICogcm9vbSwgZG9uJ3QgYWxsb2NhdGUgYSBjaHVuay4gIEEgZ29vZCBtb3VudCBpcworCSAqIGxlc3MgdGhhbiA4MCUgdXRpbGl6ZWQgb2YgdGhlIGNodW5rcyB3ZSBoYXZlIGFsbG9jYXRlZCwKKwkgKiBvciBtb3JlIHRoYW4gMjU2TUIgZnJlZQorCSAqLworCWlmIChudW1fYWxsb2NhdGVkICsgYWxsb2NfYnl0ZXMgKyAyNTYgKiAxMDI0ICogMTAyNCA8IG51bV9ieXRlcykKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc2luZm8tPmJ5dGVzX3VzZWQgKyBzaW5mby0+Ynl0ZXNfcmVzZXJ2ZWQgKwotCSAgICBhbGxvY19ieXRlcyA8IGRpdl9mYWN0b3IobnVtX2J5dGVzLCA4KSkKKwlpZiAobnVtX2FsbG9jYXRlZCArIGFsbG9jX2J5dGVzIDwgZGl2X2ZhY3RvcihudW1fYnl0ZXMsIDgpKQogCQlyZXR1cm4gMDsKIAogCXRocmVzaCA9IGJ0cmZzX3N1cGVyX3RvdGFsX2J5dGVzKCZyb290LT5mc19pbmZvLT5zdXBlcl9jb3B5KTsKKworCS8qIDI1Nk1CIG9yIDUlIG9mIHRoZSBGUyAqLwogCXRocmVzaCA9IG1heF90KHU2NCwgMjU2ICogMTAyNCAqIDEwMjQsIGRpdl9mYWN0b3JfZmluZSh0aHJlc2gsIDUpKTsKIAogCWlmIChudW1fYnl0ZXMgPiB0aHJlc2ggJiYgc2luZm8tPmJ5dGVzX3VzZWQgPCBkaXZfZmFjdG9yKG51bV9ieXRlcywgMykpCiAJCXJldHVybiAwOwotCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTMyNzMsMTAgKzMzMTksOSBAQAogewogCXN0cnVjdCBidHJmc19zcGFjZV9pbmZvICpzcGFjZV9pbmZvOwogCXN0cnVjdCBidHJmc19mc19pbmZvICpmc19pbmZvID0gZXh0ZW50X3Jvb3QtPmZzX2luZm87CisJaW50IHdhaXRfZm9yX2FsbG9jID0gMDsKIAlpbnQgcmV0ID0gMDsKIAotCW11dGV4X2xvY2soJmZzX2luZm8tPmNodW5rX211dGV4KTsKLQogCWZsYWdzID0gYnRyZnNfcmVkdWNlX2FsbG9jX3Byb2ZpbGUoZXh0ZW50X3Jvb3QsIGZsYWdzKTsKIAogCXNwYWNlX2luZm8gPSBfX2ZpbmRfc3BhY2VfaW5mbyhleHRlbnRfcm9vdC0+ZnNfaW5mbywgZmxhZ3MpOwpAQCAtMzI4NywyMSArMzMzMiw0MCBAQAogCX0KIAlCVUdfT04oIXNwYWNlX2luZm8pOwogCithZ2FpbjoKIAlzcGluX2xvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCWlmIChzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYykKLQkJZm9yY2UgPSAxOworCQlmb3JjZSA9IHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jOwogCWlmIChzcGFjZV9pbmZvLT5mdWxsKSB7CiAJCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KIAotCWlmICghZm9yY2UgJiYgIXNob3VsZF9hbGxvY19jaHVuayhleHRlbnRfcm9vdCwgc3BhY2VfaW5mbywKLQkJCQkJICBhbGxvY19ieXRlcykpIHsKKwlpZiAoIXNob3VsZF9hbGxvY19jaHVuayhleHRlbnRfcm9vdCwgc3BhY2VfaW5mbywgYWxsb2NfYnl0ZXMsIGZvcmNlKSkgewogCQlzcGluX3VubG9jaygmc3BhY2VfaW5mby0+bG9jayk7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKHNwYWNlX2luZm8tPmNodW5rX2FsbG9jKSB7CisJCXdhaXRfZm9yX2FsbG9jID0gMTsKKwl9IGVsc2UgeworCQlzcGFjZV9pbmZvLT5jaHVua19hbGxvYyA9IDE7CiAJfQorCiAJc3Bpbl91bmxvY2soJnNwYWNlX2luZm8tPmxvY2spOwogCisJbXV0ZXhfbG9jaygmZnNfaW5mby0+Y2h1bmtfbXV0ZXgpOworCisJLyoKKwkgKiBUaGUgY2h1bmtfbXV0ZXggaXMgaGVsZCB0aHJvdWdob3V0IHRoZSBlbnRpcmV0eSBvZiBhIGNodW5rCisJICogYWxsb2NhdGlvbiwgc28gb25jZSB3ZSd2ZSBhY3F1aXJlZCB0aGUgY2h1bmtfbXV0ZXggd2Uga25vdyB0aGF0IHRoZQorCSAqIG90aGVyIGd1eSBpcyBkb25lIGFuZCB3ZSBuZWVkIHRvIHJlY2hlY2sgYW5kIHNlZSBpZiB3ZSBzaG91bGQKKwkgKiBhbGxvY2F0ZS4KKwkgKi8KKwlpZiAod2FpdF9mb3JfYWxsb2MpIHsKKwkJbXV0ZXhfdW5sb2NrKCZmc19pbmZvLT5jaHVua19tdXRleCk7CisJCXdhaXRfZm9yX2FsbG9jID0gMDsKKwkJZ290byBhZ2FpbjsKKwl9CisKIAkvKgogCSAqIElmIHdlIGhhdmUgbWl4ZWQgZGF0YS9tZXRhZGF0YSBjaHVua3Mgd2Ugd2FudCB0byBtYWtlIHN1cmUgd2Uga2VlcAogCSAqIGFsbG9jYXRpbmcgbWl4ZWQgY2h1bmtzIGluc3RlYWQgb2YgaW5kaXZpZHVhbCBjaHVua3MuCkBAIC0zMzI3LDkgKzMzOTEsMTAgQEAKIAkJc3BhY2VfaW5mby0+ZnVsbCA9IDE7CiAJZWxzZQogCQlyZXQgPSAxOwotCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gMDsKKworCXNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID0gQ0hVTktfQUxMT0NfTk9fRk9SQ0U7CisJc3BhY2VfaW5mby0+Y2h1bmtfYWxsb2MgPSAwOwogCXNwaW5fdW5sb2NrKCZzcGFjZV9pbmZvLT5sb2NrKTsKLW91dDoKIAltdXRleF91bmxvY2soJmV4dGVudF9yb290LT5mc19pbmZvLT5jaHVua19tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTUzMDMsMTEgKzUzNjgsMTMgQEAKIAogCQlpZiAoYWxsb3dlZF9jaHVua19hbGxvYykgewogCQkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIG51bV9ieXRlcyArCi0JCQkJCSAgICAgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAxKTsKKwkJCQkJICAgICAyICogMTAyNCAqIDEwMjQsIGRhdGEsCisJCQkJCSAgICAgQ0hVTktfQUxMT0NfTElNSVRFRCk7CiAJCQlhbGxvd2VkX2NodW5rX2FsbG9jID0gMDsKIAkJCWRvbmVfY2h1bmtfYWxsb2MgPSAxOwotCQl9IGVsc2UgaWYgKCFkb25lX2NodW5rX2FsbG9jKSB7Ci0JCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IDE7CisJCX0gZWxzZSBpZiAoIWRvbmVfY2h1bmtfYWxsb2MgJiYKKwkJCSAgIHNwYWNlX2luZm8tPmZvcmNlX2FsbG9jID09IENIVU5LX0FMTE9DX05PX0ZPUkNFKSB7CisJCQlzcGFjZV9pbmZvLT5mb3JjZV9hbGxvYyA9IENIVU5LX0FMTE9DX0xJTUlURUQ7CiAJCX0KIAogCQlpZiAobG9vcCA8IExPT1BfTk9fRU1QVFlfU0laRSkgewpAQCAtNTM5Myw3ICs1NDYwLDggQEAKIAkgKi8KIAlpZiAoZW1wdHlfc2l6ZSB8fCByb290LT5yZWZfY293cykKIAkJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAotCQkJCSAgICAgbnVtX2J5dGVzICsgMiAqIDEwMjQgKiAxMDI0LCBkYXRhLCAwKTsKKwkJCQkgICAgIG51bV9ieXRlcyArIDIgKiAxMDI0ICogMTAyNCwgZGF0YSwKKwkJCQkgICAgIENIVU5LX0FMTE9DX05PX0ZPUkNFKTsKIAogCVdBUk5fT04obnVtX2J5dGVzIDwgcm9vdC0+c2VjdG9yc2l6ZSk7CiAJcmV0ID0gZmluZF9mcmVlX2V4dGVudCh0cmFucywgcm9vdCwgbnVtX2J5dGVzLCBlbXB0eV9zaXplLApAQCAtNTQwNSw3ICs1NDczLDcgQEAKIAkJbnVtX2J5dGVzID0gbnVtX2J5dGVzICYgfihyb290LT5zZWN0b3JzaXplIC0gMSk7CiAJCW51bV9ieXRlcyA9IG1heChudW1fYnl0ZXMsIG1pbl9hbGxvY19zaXplKTsKIAkJZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QtPmZzX2luZm8tPmV4dGVudF9yb290LAotCQkJICAgICAgIG51bV9ieXRlcywgZGF0YSwgMSk7CisJCQkgICAgICAgbnVtX2J5dGVzLCBkYXRhLCBDSFVOS19BTExPQ19GT1JDRSk7CiAJCWdvdG8gYWdhaW47CiAJfQogCWlmIChyZXQgPT0gLUVOT1NQQyAmJiBidHJmc190ZXN0X29wdChyb290LCBFTk9TUENfREVCVUcpKSB7CkBAIC03OTkxLDYgKzgwNTksMTAgQEAKIAkJCQl1NjQgZ3JvdXBfc3RhcnQgPSBncm91cC0+a2V5Lm9iamVjdGlkOwogCQkJCW5ld19leHRlbnRzID0ga21hbGxvYyhzaXplb2YoKm5ld19leHRlbnRzKSwKIAkJCQkJCSAgICAgIEdGUF9OT0ZTKTsKKwkJCQlpZiAoIW5ld19leHRlbnRzKSB7CisJCQkJCXJldCA9IC1FTk9NRU07CisJCQkJCWdvdG8gb3V0OworCQkJCX0KIAkJCQlucl9leHRlbnRzID0gMTsKIAkJCQlyZXQgPSBnZXRfbmV3X2xvY2F0aW9ucyhyZWxvY19pbm9kZSwKIAkJCQkJCQlleHRlbnRfa2V5LApAQCAtODEwOSwxMyArODE4MSwxNSBAQAogCiAJYWxsb2NfZmxhZ3MgPSB1cGRhdGVfYmxvY2tfZ3JvdXBfZmxhZ3Mocm9vdCwgY2FjaGUtPmZsYWdzKTsKIAlpZiAoYWxsb2NfZmxhZ3MgIT0gY2FjaGUtPmZsYWdzKQotCQlkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7CisJCWRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCAyICogMTAyNCAqIDEwMjQsIGFsbG9jX2ZsYWdzLAorCQkJICAgICAgIENIVU5LX0FMTE9DX0ZPUkNFKTsKIAogCXJldCA9IHNldF9ibG9ja19ncm91cF9ybyhjYWNoZSk7CiAJaWYgKCFyZXQpCiAJCWdvdG8gb3V0OwogCWFsbG9jX2ZsYWdzID0gZ2V0X2FsbG9jX3Byb2ZpbGUocm9vdCwgY2FjaGUtPnNwYWNlX2luZm8tPmZsYWdzKTsKLQlyZXQgPSBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7CisJcmV0ID0gZG9fY2h1bmtfYWxsb2ModHJhbnMsIHJvb3QsIDIgKiAxMDI0ICogMTAyNCwgYWxsb2NfZmxhZ3MsCisJCQkgICAgIENIVU5LX0FMTE9DX0ZPUkNFKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAJcmV0ID0gc2V0X2Jsb2NrX2dyb3VwX3JvKGNhY2hlKTsKQEAgLTgxMjgsNyArODIwMiw4IEBACiAJCQkgICAgc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsIHU2NCB0eXBlKQogewogCXU2NCBhbGxvY19mbGFncyA9IGdldF9hbGxvY19wcm9maWxlKHJvb3QsIHR5cGUpOwotCXJldHVybiBkb19jaHVua19hbGxvYyh0cmFucywgcm9vdCwgMiAqIDEwMjQgKiAxMDI0LCBhbGxvY19mbGFncywgMSk7CisJcmV0dXJuIGRvX2NodW5rX2FsbG9jKHRyYW5zLCByb290LCAyICogMTAyNCAqIDEwMjQsIGFsbG9jX2ZsYWdzLAorCQkJICAgICAgQ0hVTktfQUxMT0NfRk9SQ0UpOwogfQogCiAvKgpAQCAtODc4MSwyMyArODg1NiwzOCBAQAogaW50IGJ0cmZzX2luaXRfc3BhY2VfaW5mbyhzdHJ1Y3QgYnRyZnNfZnNfaW5mbyAqZnNfaW5mbykKIHsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqc3BhY2VfaW5mbzsKKwlzdHJ1Y3QgYnRyZnNfc3VwZXJfYmxvY2sgKmRpc2tfc3VwZXI7CisJdTY0IGZlYXR1cmVzOworCXU2NCBmbGFnczsKKwlpbnQgbWl4ZWQgPSAwOwogCWludCByZXQ7CiAKLQlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBCVFJGU19CTE9DS19HUk9VUF9TWVNURU0sIDAsIDAsCi0JCQkJCQkJCSAmc3BhY2VfaW5mbyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwlkaXNrX3N1cGVyID0gJmZzX2luZm8tPnN1cGVyX2NvcHk7CisJaWYgKCFidHJmc19zdXBlcl9yb290KGRpc2tfc3VwZXIpKQorCQlyZXR1cm4gMTsKIAotCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIEJUUkZTX0JMT0NLX0dST1VQX01FVEFEQVRBLCAwLCAwLAotCQkJCQkJCQkgJnNwYWNlX2luZm8pOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJZmVhdHVyZXMgPSBidHJmc19zdXBlcl9pbmNvbXBhdF9mbGFncyhkaXNrX3N1cGVyKTsKKwlpZiAoZmVhdHVyZXMgJiBCVFJGU19GRUFUVVJFX0lOQ09NUEFUX01JWEVEX0dST1VQUykKKwkJbWl4ZWQgPSAxOwogCi0JcmV0ID0gdXBkYXRlX3NwYWNlX2luZm8oZnNfaW5mbywgQlRSRlNfQkxPQ0tfR1JPVVBfREFUQSwgMCwgMCwKLQkJCQkJCQkJICZzcGFjZV9pbmZvKTsKKwlmbGFncyA9IEJUUkZTX0JMT0NLX0dST1VQX1NZU1RFTTsKKwlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBmbGFncywgMCwgMCwgJnNwYWNlX2luZm8pOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gb3V0OwogCisJaWYgKG1peGVkKSB7CisJCWZsYWdzID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEEgfCBCVFJGU19CTE9DS19HUk9VUF9EQVRBOworCQlyZXQgPSB1cGRhdGVfc3BhY2VfaW5mbyhmc19pbmZvLCBmbGFncywgMCwgMCwgJnNwYWNlX2luZm8pOworCX0gZWxzZSB7CisJCWZsYWdzID0gQlRSRlNfQkxPQ0tfR1JPVVBfTUVUQURBVEE7CisJCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIGZsYWdzLCAwLCAwLCAmc3BhY2VfaW5mbyk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKworCQlmbGFncyA9IEJUUkZTX0JMT0NLX0dST1VQX0RBVEE7CisJCXJldCA9IHVwZGF0ZV9zcGFjZV9pbmZvKGZzX2luZm8sIGZsYWdzLCAwLCAwLCAmc3BhY2VfaW5mbyk7CisJfQorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggMjBkZGIyOC4uYmE0MWRhNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTY5MCw2ICs2OTAsMTUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHVuY2FjaGVfc3RhdGUoc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZF9wdHIpCit7CisJaWYgKGNhY2hlZF9wdHIgJiYgKCpjYWNoZWRfcHRyKSkgeworCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpzdGF0ZSA9ICpjYWNoZWRfcHRyOworCQkqY2FjaGVkX3B0ciA9IE5VTEw7CisJCWZyZWVfZXh0ZW50X3N0YXRlKHN0YXRlKTsKKwl9Cit9CisKIC8qCiAgKiBzZXQgc29tZSBiaXRzIG9uIGEgcmFuZ2UgaW4gdGhlIHRyZWUuICBUaGlzIG1heSByZXF1aXJlIGFsbG9jYXRpb25zIG9yCiAgKiBzbGVlcGluZywgc28gdGhlIGdmcCBtYXNrIGlzIHVzZWQgdG8gaW5kaWNhdGUgd2hhdCBpcyBhbGxvd2VkLgpAQCAtOTQwLDEwICs5NDksMTAgQEAKIH0KIAogaW50IHNldF9leHRlbnRfdXB0b2RhdGUoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCQlnZnBfdCBtYXNrKQorCQkJc3RydWN0IGV4dGVudF9zdGF0ZSAqKmNhY2hlZF9zdGF0ZSwgZ2ZwX3QgbWFzaykKIHsKLQlyZXR1cm4gc2V0X2V4dGVudF9iaXQodHJlZSwgc3RhcnQsIGVuZCwgRVhURU5UX1VQVE9EQVRFLCAwLCBOVUxMLAotCQkJICAgICAgTlVMTCwgbWFzayk7CisJcmV0dXJuIHNldF9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9VUFRPREFURSwgMCwKKwkJCSAgICAgIE5VTEwsIGNhY2hlZF9zdGF0ZSwgbWFzayk7CiB9CiAKIHN0YXRpYyBpbnQgY2xlYXJfZXh0ZW50X3VwdG9kYXRlKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LApAQCAtMTAxMiw4ICsxMDIxLDcgQEAKIAkJCQltYXNrKTsKIH0KIAotaW50IHVubG9ja19leHRlbnQoc3RydWN0IGV4dGVudF9pb190cmVlICp0cmVlLCB1NjQgc3RhcnQsIHU2NCBlbmQsCi0JCSAgZ2ZwX3QgbWFzaykKK2ludCB1bmxvY2tfZXh0ZW50KHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLCBnZnBfdCBtYXNrKQogewogCXJldHVybiBjbGVhcl9leHRlbnRfYml0KHRyZWUsIHN0YXJ0LCBlbmQsIEVYVEVOVF9MT0NLRUQsIDEsIDAsIE5VTEwsCiAJCQkJbWFzayk7CkBAIC0xNzM1LDYgKzE3NDMsOSBAQAogCiAJZG8gewogCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisJCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZCA9IE5VTEw7CisJCXN0cnVjdCBleHRlbnRfc3RhdGUgKnN0YXRlOworCiAJCXRyZWUgPSAmQlRSRlNfSShwYWdlLT5tYXBwaW5nLT5ob3N0KS0+aW9fdHJlZTsKIAogCQlzdGFydCA9ICgodTY0KXBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQpICsKQEAgLTE3NDksOSArMTc2MCwyMCBAQAogCQlpZiAoKytidmVjIDw9IGJ2ZWNfZW5kKQogCQkJcHJlZmV0Y2h3KCZidmVjLT5idl9wYWdlLT5mbGFncyk7CiAKKwkJc3Bpbl9sb2NrKCZ0cmVlLT5sb2NrKTsKKwkJc3RhdGUgPSBmaW5kX2ZpcnN0X2V4dGVudF9iaXRfc3RhdGUodHJlZSwgc3RhcnQsIEVYVEVOVF9MT0NLRUQpOworCQlpZiAoc3RhdGUgJiYgc3RhdGUtPnN0YXJ0ID09IHN0YXJ0KSB7CisJCQkvKgorCQkJICogdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGUgc3RhdGUsIHVubG9jayB3aWxsIGRyb3AKKwkJCSAqIHRoZSByZWYKKwkJCSAqLworCQkJY2FjaGVfc3RhdGUoc3RhdGUsICZjYWNoZWQpOworCQl9CisJCXNwaW5fdW5sb2NrKCZ0cmVlLT5sb2NrKTsKKwogCQlpZiAodXB0b2RhdGUgJiYgdHJlZS0+b3BzICYmIHRyZWUtPm9wcy0+cmVhZHBhZ2VfZW5kX2lvX2hvb2spIHsKIAkJCXJldCA9IHRyZWUtPm9wcy0+cmVhZHBhZ2VfZW5kX2lvX2hvb2socGFnZSwgc3RhcnQsIGVuZCwKLQkJCQkJCQkgICAgICBOVUxMKTsKKwkJCQkJCQkgICAgICBzdGF0ZSk7CiAJCQlpZiAocmV0KQogCQkJCXVwdG9kYXRlID0gMDsKIAkJfQpAQCAtMTc2NCwxNSArMTc4NiwxNiBAQAogCQkJCQl0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKIAkJCQlpZiAoZXJyKQogCQkJCQl1cHRvZGF0ZSA9IDA7CisJCQkJdW5jYWNoZV9zdGF0ZSgmY2FjaGVkKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQogCiAJCWlmICh1cHRvZGF0ZSkgewotCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBzdGFydCwgZW5kLAorCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBzdGFydCwgZW5kLCAmY2FjaGVkLAogCQkJCQkgICAgR0ZQX0FUT01JQyk7CiAJCX0KLQkJdW5sb2NrX2V4dGVudCh0cmVlLCBzdGFydCwgZW5kLCBHRlBfQVRPTUlDKTsKKwkJdW5sb2NrX2V4dGVudF9jYWNoZWQodHJlZSwgc3RhcnQsIGVuZCwgJmNhY2hlZCwgR0ZQX0FUT01JQyk7CiAKIAkJaWYgKHdob2xlX3BhZ2UpIHsKIAkJCWlmICh1cHRvZGF0ZSkgewpAQCAtMTgxMSw2ICsxODM0LDcgQEAKIAogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidmVjLT5idl9wYWdlOworCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICpjYWNoZWQgPSBOVUxMOwogCQl0cmVlID0gJkJUUkZTX0kocGFnZS0+bWFwcGluZy0+aG9zdCktPmlvX3RyZWU7CiAKIAkJc3RhcnQgPSAoKHU2NClwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArCkBAIC0xODIxLDEzICsxODQ1LDE0IEBACiAJCQlwcmVmZXRjaHcoJmJ2ZWMtPmJ2X3BhZ2UtPmZsYWdzKTsKIAogCQlpZiAodXB0b2RhdGUpIHsKLQkJCXNldF9leHRlbnRfdXB0b2RhdGUodHJlZSwgc3RhcnQsIGVuZCwgR0ZQX0FUT01JQyk7CisJCQlzZXRfZXh0ZW50X3VwdG9kYXRlKHRyZWUsIHN0YXJ0LCBlbmQsICZjYWNoZWQsCisJCQkJCSAgICBHRlBfQVRPTUlDKTsKIAkJfSBlbHNlIHsKIAkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwogCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwogCQl9CiAKLQkJdW5sb2NrX2V4dGVudCh0cmVlLCBzdGFydCwgZW5kLCBHRlBfQVRPTUlDKTsKKwkJdW5sb2NrX2V4dGVudF9jYWNoZWQodHJlZSwgc3RhcnQsIGVuZCwgJmNhY2hlZCwgR0ZQX0FUT01JQyk7CiAKIAl9IHdoaWxlIChidmVjID49IGJpby0+YmlfaW9fdmVjKTsKIApAQCAtMjAxNiwxNCArMjA0MSwxNyBAQAogCXdoaWxlIChjdXIgPD0gZW5kKSB7CiAJCWlmIChjdXIgPj0gbGFzdF9ieXRlKSB7CiAJCQljaGFyICp1c2VycGFnZTsKKwkJCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZCA9IE5VTEw7CisKIAkJCWlvc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRSAtIHBhZ2Vfb2Zmc2V0OwogCQkJdXNlcnBhZ2UgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJCQltZW1zZXQodXNlcnBhZ2UgKyBwYWdlX29mZnNldCwgMCwgaW9zaXplKTsKIAkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJa3VubWFwX2F0b21pYyh1c2VycGFnZSwgS01fVVNFUjApOwogCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBjdXIsIGN1ciArIGlvc2l6ZSAtIDEsCi0JCQkJCSAgICBHRlBfTk9GUyk7Ci0JCQl1bmxvY2tfZXh0ZW50KHRyZWUsIGN1ciwgY3VyICsgaW9zaXplIC0gMSwgR0ZQX05PRlMpOworCQkJCQkgICAgJmNhY2hlZCwgR0ZQX05PRlMpOworCQkJdW5sb2NrX2V4dGVudF9jYWNoZWQodHJlZSwgY3VyLCBjdXIgKyBpb3NpemUgLSAxLAorCQkJCQkgICAgICZjYWNoZWQsIEdGUF9OT0ZTKTsKIAkJCWJyZWFrOwogCQl9CiAJCWVtID0gZ2V0X2V4dGVudChpbm9kZSwgcGFnZSwgcGFnZV9vZmZzZXQsIGN1ciwKQEAgLTIwNjMsMTQgKzIwOTEsMTcgQEAKIAkJLyogd2UndmUgZm91bmQgYSBob2xlLCBqdXN0IHplcm8gYW5kIGdvIG9uICovCiAJCWlmIChibG9ja19zdGFydCA9PSBFWFRFTlRfTUFQX0hPTEUpIHsKIAkJCWNoYXIgKnVzZXJwYWdlOworCQkJc3RydWN0IGV4dGVudF9zdGF0ZSAqY2FjaGVkID0gTlVMTDsKKwogCQkJdXNlcnBhZ2UgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CiAJCQltZW1zZXQodXNlcnBhZ2UgKyBwYWdlX29mZnNldCwgMCwgaW9zaXplKTsKIAkJCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOwogCQkJa3VubWFwX2F0b21pYyh1c2VycGFnZSwgS01fVVNFUjApOwogCiAJCQlzZXRfZXh0ZW50X3VwdG9kYXRlKHRyZWUsIGN1ciwgY3VyICsgaW9zaXplIC0gMSwKLQkJCQkJICAgIEdGUF9OT0ZTKTsKLQkJCXVubG9ja19leHRlbnQodHJlZSwgY3VyLCBjdXIgKyBpb3NpemUgLSAxLCBHRlBfTk9GUyk7CisJCQkJCSAgICAmY2FjaGVkLCBHRlBfTk9GUyk7CisJCQl1bmxvY2tfZXh0ZW50X2NhY2hlZCh0cmVlLCBjdXIsIGN1ciArIGlvc2l6ZSAtIDEsCisJCQkgICAgICAgICAgICAgICAgICAgICAmY2FjaGVkLCBHRlBfTk9GUyk7CiAJCQljdXIgPSBjdXIgKyBpb3NpemU7CiAJCQlwYWdlX29mZnNldCArPSBpb3NpemU7CiAJCQljb250aW51ZTsKQEAgLTI2NTAsNyArMjY4MSw3IEBACiAJCXByZWZldGNodygmcGFnZS0+ZmxhZ3MpOwogCQlsaXN0X2RlbCgmcGFnZS0+bHJ1KTsKIAkJaWYgKCFhZGRfdG9fcGFnZV9jYWNoZV9scnUocGFnZSwgbWFwcGluZywKLQkJCQkJcGFnZS0+aW5kZXgsIEdGUF9LRVJORUwpKSB7CisJCQkJCXBhZ2UtPmluZGV4LCBHRlBfTk9GUykpIHsKIAkJCV9fZXh0ZW50X3JlYWRfZnVsbF9wYWdlKHRyZWUsIHBhZ2UsIGdldF9leHRlbnQsCiAJCQkJCQkmYmlvLCAwLCAmYmlvX2ZsYWdzKTsKIAkJfQpAQCAtMjc4OSw5ICsyODIwLDEyIEBACiAJCQlpb2NvdW50Kys7CiAJCQlibG9ja19zdGFydCA9IGJsb2NrX3N0YXJ0ICsgaW9zaXplOwogCQl9IGVsc2UgewotCQkJc2V0X2V4dGVudF91cHRvZGF0ZSh0cmVlLCBibG9ja19zdGFydCwgY3VyX2VuZCwKKwkJCXN0cnVjdCBleHRlbnRfc3RhdGUgKmNhY2hlZCA9IE5VTEw7CisKKwkJCXNldF9leHRlbnRfdXB0b2RhdGUodHJlZSwgYmxvY2tfc3RhcnQsIGN1cl9lbmQsICZjYWNoZWQsCiAJCQkJCSAgICBHRlBfTk9GUyk7Ci0JCQl1bmxvY2tfZXh0ZW50KHRyZWUsIGJsb2NrX3N0YXJ0LCBjdXJfZW5kLCBHRlBfTk9GUyk7CisJCQl1bmxvY2tfZXh0ZW50X2NhY2hlZCh0cmVlLCBibG9ja19zdGFydCwgY3VyX2VuZCwKKwkJCQkJICAgICAmY2FjaGVkLCBHRlBfTk9GUyk7CiAJCQlibG9ja19zdGFydCA9IGN1cl9lbmQgKyAxOwogCQl9CiAJCXBhZ2Vfb2Zmc2V0ID0gYmxvY2tfc3RhcnQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CkBAIC0zNDU3LDcgKzM0OTEsNyBAQAogCW51bV9wYWdlcyA9IG51bV9leHRlbnRfcGFnZXMoZWItPnN0YXJ0LCBlYi0+bGVuKTsKIAogCXNldF9leHRlbnRfdXB0b2RhdGUodHJlZSwgZWItPnN0YXJ0LCBlYi0+c3RhcnQgKyBlYi0+bGVuIC0gMSwKLQkJCSAgICBHRlBfTk9GUyk7CisJCQkgICAgTlVMTCwgR0ZQX05PRlMpOwogCWZvciAoaSA9IDA7IGkgPCBudW1fcGFnZXM7IGkrKykgewogCQlwYWdlID0gZXh0ZW50X2J1ZmZlcl9wYWdlKGViLCBpKTsKIAkJaWYgKChpID09IDAgJiYgKGViLT5zdGFydCAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKSkpIHx8CkBAIC0zODg1LDYgKzM5MTksMTIgQEAKIAlrdW5tYXBfYXRvbWljKGRzdF9rYWRkciwgS01fVVNFUjApOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgYXJlYXNfb3ZlcmxhcCh1bnNpZ25lZCBsb25nIHNyYywgdW5zaWduZWQgbG9uZyBkc3QsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgZGlzdGFuY2UgPSAoc3JjID4gZHN0KSA/IHNyYyAtIGRzdCA6IGRzdCAtIHNyYzsKKwlyZXR1cm4gZGlzdGFuY2UgPCBsZW47Cit9CisKIHN0YXRpYyB2b2lkIGNvcHlfcGFnZXMoc3RydWN0IHBhZ2UgKmRzdF9wYWdlLCBzdHJ1Y3QgcGFnZSAqc3JjX3BhZ2UsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nIGRzdF9vZmYsIHVuc2lnbmVkIGxvbmcgc3JjX29mZiwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuKQpAQCAtMzg5MiwxMCArMzkzMiwxMiBAQAogCWNoYXIgKmRzdF9rYWRkciA9IGttYXBfYXRvbWljKGRzdF9wYWdlLCBLTV9VU0VSMCk7CiAJY2hhciAqc3JjX2thZGRyOwogCi0JaWYgKGRzdF9wYWdlICE9IHNyY19wYWdlKQorCWlmIChkc3RfcGFnZSAhPSBzcmNfcGFnZSkgewogCQlzcmNfa2FkZHIgPSBrbWFwX2F0b21pYyhzcmNfcGFnZSwgS01fVVNFUjEpOwotCWVsc2UKKwl9IGVsc2UgewogCQlzcmNfa2FkZHIgPSBkc3Rfa2FkZHI7CisJCUJVR19PTihhcmVhc19vdmVybGFwKHNyY19vZmYsIGRzdF9vZmYsIGxlbikpOworCX0KIAogCW1lbWNweShkc3Rfa2FkZHIgKyBkc3Rfb2ZmLCBzcmNfa2FkZHIgKyBzcmNfb2ZmLCBsZW4pOwogCWt1bm1hcF9hdG9taWMoZHN0X2thZGRyLCBLTV9VU0VSMCk7CkBAIC0zOTcwLDcgKzQwMTIsNyBAQAogCQkgICAgICAgImxlbiAlbHUgbGVuICVsdVxuIiwgZHN0X29mZnNldCwgbGVuLCBkc3QtPmxlbik7CiAJCUJVR19PTigxKTsKIAl9Ci0JaWYgKGRzdF9vZmZzZXQgPCBzcmNfb2Zmc2V0KSB7CisJaWYgKCFhcmVhc19vdmVybGFwKHNyY19vZmZzZXQsIGRzdF9vZmZzZXQsIGxlbikpIHsKIAkJbWVtY3B5X2V4dGVudF9idWZmZXIoZHN0LCBkc3Rfb2Zmc2V0LCBzcmNfb2Zmc2V0LCBsZW4pOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvZXh0ZW50X2lvLmggYi9mcy9idHJmcy9leHRlbnRfaW8uaAppbmRleCBmNjJjNTQ0Li5hZjJkNzE3IDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfaW8uaAorKysgYi9mcy9idHJmcy9leHRlbnRfaW8uaApAQCAtMjA4LDcgKzIwOCw3IEBACiAJCSAgIGludCBiaXRzLCBpbnQgZXhjbHVzaXZlX2JpdHMsIHU2NCAqZmFpbGVkX3N0YXJ0LAogCQkgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICoqY2FjaGVkX3N0YXRlLCBnZnBfdCBtYXNrKTsKIGludCBzZXRfZXh0ZW50X3VwdG9kYXRlKHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwgdTY0IHN0YXJ0LCB1NjQgZW5kLAotCQkJZ2ZwX3QgbWFzayk7CisJCQlzdHJ1Y3QgZXh0ZW50X3N0YXRlICoqY2FjaGVkX3N0YXRlLCBnZnBfdCBtYXNrKTsKIGludCBzZXRfZXh0ZW50X25ldyhzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsIHU2NCBzdGFydCwgdTY0IGVuZCwKIAkJICAgZ2ZwX3QgbWFzayk7CiBpbnQgc2V0X2V4dGVudF9kaXJ0eShzdHJ1Y3QgZXh0ZW50X2lvX3RyZWUgKnRyZWUsIHU2NCBzdGFydCwgdTY0IGVuZCwKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZpbGUuYyBiL2ZzL2J0cmZzL2ZpbGUuYwppbmRleCBlNjIxZWE1Li43NTg5OWEwIDEwMDY0NAotLS0gYS9mcy9idHJmcy9maWxlLmMKKysrIGIvZnMvYnRyZnMvZmlsZS5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIC8qCiAgKiB1bmxvY2tzIHBhZ2VzIGFmdGVyIGJ0cmZzX2ZpbGVfd3JpdGUgaXMgZG9uZSB3aXRoIHRoZW0KICAqLwotc3RhdGljIG5vaW5saW5lIHZvaWQgYnRyZnNfZHJvcF9wYWdlcyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzaXplX3QgbnVtX3BhZ2VzKQordm9pZCBidHJmc19kcm9wX3BhZ2VzKHN0cnVjdCBwYWdlICoqcGFnZXMsIHNpemVfdCBudW1fcGFnZXMpCiB7CiAJc2l6ZV90IGk7CiAJZm9yIChpID0gMDsgaSA8IG51bV9wYWdlczsgaSsrKSB7CkBAIC0xMjcsMTYgKzEyNywxMyBAQAogICogdGhpcyBhbHNvIG1ha2VzIHRoZSBkZWNpc2lvbiBhYm91dCBjcmVhdGluZyBhbiBpbmxpbmUgZXh0ZW50IHZzCiAgKiBkb2luZyByZWFsIGRhdGEgZXh0ZW50cywgbWFya2luZyBwYWdlcyBkaXJ0eSBhbmQgZGVsYWxsb2MgYXMgcmVxdWlyZWQuCiAgKi8KLXN0YXRpYyBub2lubGluZSBpbnQgZGlydHlfYW5kX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJ0cmZzX3Jvb3QgKnJvb3QsCi0JCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsCi0JCQkJCSAgICBzaXplX3QgbnVtX3BhZ2VzLAotCQkJCQkgICAgbG9mZl90IHBvcywKLQkJCQkJICAgIHNpemVfdCB3cml0ZV9ieXRlcykKK2ludCBidHJmc19kaXJ0eV9wYWdlcyhzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICAgc3RydWN0IHBhZ2UgKipwYWdlcywgc2l6ZV90IG51bV9wYWdlcywKKwkJICAgICAgbG9mZl90IHBvcywgc2l6ZV90IHdyaXRlX2J5dGVzLAorCQkgICAgICBzdHJ1Y3QgZXh0ZW50X3N0YXRlICoqY2FjaGVkKQogewogCWludCBlcnIgPSAwOwogCWludCBpOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmZGVudHJ5KGZpbGUpLT5kX2lub2RlOwogCXU2NCBudW1fYnl0ZXM7CiAJdTY0IHN0YXJ0X3BvczsKIAl1NjQgZW5kX29mX2xhc3RfYmxvY2s7CkBAIC0xNDksNyArMTQ2LDcgQEAKIAogCWVuZF9vZl9sYXN0X2Jsb2NrID0gc3RhcnRfcG9zICsgbnVtX2J5dGVzIC0gMTsKIAllcnIgPSBidHJmc19zZXRfZXh0ZW50X2RlbGFsbG9jKGlub2RlLCBzdGFydF9wb3MsIGVuZF9vZl9sYXN0X2Jsb2NrLAotCQkJCQlOVUxMKTsKKwkJCQkJY2FjaGVkKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC05OTIsOSArOTg5LDkgQEAKIAkJfQogCiAJCWlmIChjb3BpZWQgPiAwKSB7Ci0JCQlyZXQgPSBkaXJ0eV9hbmRfcmVsZWFzZV9wYWdlcyhyb290LCBmaWxlLCBwYWdlcywKLQkJCQkJCSAgICAgIGRpcnR5X3BhZ2VzLCBwb3MsCi0JCQkJCQkgICAgICBjb3BpZWQpOworCQkJcmV0ID0gYnRyZnNfZGlydHlfcGFnZXMocm9vdCwgaW5vZGUsIHBhZ2VzLAorCQkJCQkJZGlydHlfcGFnZXMsIHBvcywgY29waWVkLAorCQkJCQkJTlVMTCk7CiAJCQlpZiAocmV0KSB7CiAJCQkJYnRyZnNfZGVsYWxsb2NfcmVsZWFzZV9zcGFjZShpbm9kZSwKIAkJCQkJZGlydHlfcGFnZXMgPDwgUEFHRV9DQUNIRV9TSElGVCk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMgYi9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKaW5kZXggZjU2MWM5NS4uNjM3MzFhMSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCisrKyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwpAQCAtNTA4LDYgKzUwOCw3IEBACiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpuOworCXN0cnVjdCBwYWdlICoqcGFnZXM7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJc3RydWN0IGV4dGVudF9zdGF0ZSAqY2FjaGVkX3N0YXRlID0gTlVMTDsKIAlzdHJ1Y3QgYnRyZnNfZnJlZV9jbHVzdGVyICpjbHVzdGVyID0gTlVMTDsKQEAgLTUxNywxMyArNTE4LDEzIEBACiAJdTY0IHN0YXJ0LCBlbmQsIGxlbjsKIAl1NjQgYnl0ZXMgPSAwOwogCXUzMiAqY3JjLCAqY2hlY2tzdW1zOwotCXBnb2ZmX3QgaW5kZXggPSAwLCBsYXN0X2luZGV4ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZpcnN0X3BhZ2Vfb2Zmc2V0OwotCWludCBudW1fY2hlY2tzdW1zOworCWludCBpbmRleCA9IDAsIG51bV9wYWdlcyA9IDA7CiAJaW50IGVudHJpZXMgPSAwOwogCWludCBiaXRtYXBzID0gMDsKIAlpbnQgcmV0ID0gMDsKIAlib29sIG5leHRfcGFnZSA9IGZhbHNlOworCWJvb2wgb3V0X29mX3NwYWNlID0gZmFsc2U7CiAKIAlyb290ID0gcm9vdC0+ZnNfaW5mby0+dHJlZV9yb290OwogCkBAIC01NTEsMjQgKzU1MiwzMSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlsYXN0X2luZGV4ID0gKGlfc2l6ZV9yZWFkKGlub2RlKSAtIDEpID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisJbnVtX3BhZ2VzID0gKGlfc2l6ZV9yZWFkKGlub2RlKSArIFBBR0VfQ0FDSEVfU0laRSAtIDEpID4+CisJCVBBR0VfQ0FDSEVfU0hJRlQ7CiAJZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKIAlidHJmc193YWl0X29yZGVyZWRfcmFuZ2UoaW5vZGUsIGlub2RlLT5pX3NpemUgJgogCQkJCSB+KHJvb3QtPnNlY3RvcnNpemUgLSAxKSwgKHU2NCktMSk7CiAKIAkvKiBXZSBuZWVkIGEgY2hlY2tzdW0gcGVyIHBhZ2UuICovCi0JbnVtX2NoZWNrc3VtcyA9IGlfc2l6ZV9yZWFkKGlub2RlKSAvIFBBR0VfQ0FDSEVfU0laRTsKLQljcmMgPSBjaGVja3N1bXMgID0ga3phbGxvYyhzaXplb2YodTMyKSAqIG51bV9jaGVja3N1bXMsIEdGUF9OT0ZTKTsKKwljcmMgPSBjaGVja3N1bXMgPSBremFsbG9jKHNpemVvZih1MzIpICogbnVtX3BhZ2VzLCBHRlBfTk9GUyk7CiAJaWYgKCFjcmMpIHsKIAkJaXB1dChpbm9kZSk7CiAJCXJldHVybiAwOwogCX0KIAorCXBhZ2VzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBhZ2UgKikgKiBudW1fcGFnZXMsIEdGUF9OT0ZTKTsKKwlpZiAoIXBhZ2VzKSB7CisJCWtmcmVlKGNyYyk7CisJCWlwdXQoaW5vZGUpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKiBTaW5jZSB0aGUgZmlyc3QgcGFnZSBoYXMgYWxsIG9mIG91ciBjaGVja3N1bXMgYW5kIG91ciBnZW5lcmF0aW9uIHdlCiAJICogbmVlZCB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCBpbnRvIHRoZSBwYWdlIHRoYXQgd2UgY2FuIHN0YXJ0IHdyaXRpbmcKIAkgKiBvdXIgZW50cmllcy4KIAkgKi8KLQlmaXJzdF9wYWdlX29mZnNldCA9IChzaXplb2YodTMyKSAqIG51bV9jaGVja3N1bXMpICsgc2l6ZW9mKHU2NCk7CisJZmlyc3RfcGFnZV9vZmZzZXQgPSAoc2l6ZW9mKHUzMikgKiBudW1fcGFnZXMpICsgc2l6ZW9mKHU2NCk7CiAKIAkvKiBHZXQgdGhlIGNsdXN0ZXIgZm9yIHRoaXMgYmxvY2tfZ3JvdXAgaWYgaXQgZXhpc3RzICovCiAJaWYgKCFsaXN0X2VtcHR5KCZibG9ja19ncm91cC0+Y2x1c3Rlcl9saXN0KSkKQEAgLTU5MCwyMCArNTk4LDE4IEBACiAJICogYWZ0ZXIgZmluZF9nZXRfcGFnZSBhdCB0aGlzIHBvaW50LiAgSnVzdCBwdXR0aW5nIHRoaXMgaGVyZSBzbyBwZW9wbGUKIAkgKiBrbm93IGFuZCBkb24ndCBmcmVhayBvdXQuCiAJICovCi0Jd2hpbGUgKGluZGV4IDw9IGxhc3RfaW5kZXgpIHsKKwl3aGlsZSAoaW5kZXggPCBudW1fcGFnZXMpIHsKIAkJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCk7CiAJCWlmICghcGFnZSkgewotCQkJcGdvZmZfdCBpID0gMDsKKwkJCWludCBpOwogCi0JCQl3aGlsZSAoaSA8IGluZGV4KSB7Ci0JCQkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaSk7Ci0JCQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCQlpKys7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspIHsKKwkJCQl1bmxvY2tfcGFnZShwYWdlc1tpXSk7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2VzW2ldKTsKIAkJCX0KIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KKwkJcGFnZXNbaW5kZXhdID0gcGFnZTsKIAkJaW5kZXgrKzsKIAl9CiAKQEAgLTYzMSw3ICs2MzcsMTIgQEAKIAkJCW9mZnNldCA9IHN0YXJ0X29mZnNldDsKIAkJfQogCi0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGluZGV4KTsKKwkJaWYgKGluZGV4ID49IG51bV9wYWdlcykgeworCQkJb3V0X29mX3NwYWNlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJcGFnZSA9IHBhZ2VzW2luZGV4XTsKIAogCQlhZGRyID0ga21hcChwYWdlKTsKIAkJZW50cnkgPSBhZGRyICsgc3RhcnRfb2Zmc2V0OwpAQCAtNzA4LDIzICs3MTksNiBAQAogCiAJCWJ5dGVzICs9IFBBR0VfQ0FDSEVfU0laRTsKIAotCQlDbGVhclBhZ2VDaGVja2VkKHBhZ2UpOwotCQlzZXRfcGFnZV9leHRlbnRfbWFwcGVkKHBhZ2UpOwotCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCi0JCS8qCi0JCSAqIFdlIG5lZWQgdG8gcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHdlIGdvdCBmb3IgZ3JhYl9jYWNoZV9wYWdlLAotCQkgKiBleGNlcHQgZm9yIHRoZSBmaXJzdCBwYWdlIHdoaWNoIHdpbGwgaG9sZCBvdXIgY2hlY2tzdW1zLCB3ZQotCQkgKiBkbyB0aGF0IGJlbG93LgotCQkgKi8KLQkJaWYgKGluZGV4ICE9IDApIHsKLQkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQl9Ci0KLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCiAJCWluZGV4Kys7CiAJfSB3aGlsZSAobm9kZSB8fCBuZXh0X3BhZ2UpOwogCkBAIC03MzQsNyArNzI4LDExIEBACiAJCXN0cnVjdCBidHJmc19mcmVlX3NwYWNlICplbnRyeSA9CiAJCQlsaXN0X2VudHJ5KHBvcywgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIGxpc3QpOwogCi0JCXBhZ2UgPSBmaW5kX2dldF9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGluZGV4KTsKKwkJaWYgKGluZGV4ID49IG51bV9wYWdlcykgeworCQkJb3V0X29mX3NwYWNlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCXBhZ2UgPSBwYWdlc1tpbmRleF07CiAKIAkJYWRkciA9IGttYXAocGFnZSk7CiAJCW1lbWNweShhZGRyLCBlbnRyeS0+Yml0bWFwLCBQQUdFX0NBQ0hFX1NJWkUpOwpAQCAtNzQ1LDY0ICs3NDMsNTggQEAKIAkJY3JjKys7CiAJCWJ5dGVzICs9IFBBR0VfQ0FDSEVfU0laRTsKIAotCQlDbGVhclBhZ2VDaGVja2VkKHBhZ2UpOwotCQlzZXRfcGFnZV9leHRlbnRfbWFwcGVkKHBhZ2UpOwotCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7Ci0JCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJCWxpc3RfZGVsX2luaXQoJmVudHJ5LT5saXN0KTsKIAkJaW5kZXgrKzsKIAl9CiAKKwlpZiAob3V0X29mX3NwYWNlKSB7CisJCWJ0cmZzX2Ryb3BfcGFnZXMocGFnZXMsIG51bV9wYWdlcyk7CisJCXVubG9ja19leHRlbnRfY2FjaGVkKCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwgMCwKKwkJCQkgICAgIGlfc2l6ZV9yZWFkKGlub2RlKSAtIDEsICZjYWNoZWRfc3RhdGUsCisJCQkJICAgICBHRlBfTk9GUyk7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCiAJLyogWmVybyBvdXQgdGhlIHJlc3Qgb2YgdGhlIHBhZ2VzIGp1c3QgdG8gbWFrZSBzdXJlICovCi0Jd2hpbGUgKGluZGV4IDw9IGxhc3RfaW5kZXgpIHsKKwl3aGlsZSAoaW5kZXggPCBudW1fcGFnZXMpIHsKIAkJdm9pZCAqYWRkcjsKIAotCQlwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpbmRleCk7Ci0KKwkJcGFnZSA9IHBhZ2VzW2luZGV4XTsKIAkJYWRkciA9IGttYXAocGFnZSk7CiAJCW1lbXNldChhZGRyLCAwLCBQQUdFX0NBQ0hFX1NJWkUpOwogCQlrdW5tYXAocGFnZSk7Ci0JCUNsZWFyUGFnZUNoZWNrZWQocGFnZSk7Ci0JCXNldF9wYWdlX2V4dGVudF9tYXBwZWQocGFnZSk7Ci0JCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKLQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCXVubG9ja19wYWdlKHBhZ2UpOwotCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJYnl0ZXMgKz0gUEFHRV9DQUNIRV9TSVpFOwogCQlpbmRleCsrOwogCX0KIAotCWJ0cmZzX3NldF9leHRlbnRfZGVsYWxsb2MoaW5vZGUsIDAsIGJ5dGVzIC0gMSwgJmNhY2hlZF9zdGF0ZSk7Ci0KIAkvKiBXcml0ZSB0aGUgY2hlY2tzdW1zIGFuZCB0cmFucyBpZCB0byB0aGUgZmlyc3QgcGFnZSAqLwogCXsKIAkJdm9pZCAqYWRkcjsKIAkJdTY0ICpnZW47CiAKLQkJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgMCk7CisJCXBhZ2UgPSBwYWdlc1swXTsKIAogCQlhZGRyID0ga21hcChwYWdlKTsKLQkJbWVtY3B5KGFkZHIsIGNoZWNrc3Vtcywgc2l6ZW9mKHUzMikgKiBudW1fY2hlY2tzdW1zKTsKLQkJZ2VuID0gYWRkciArIChzaXplb2YodTMyKSAqIG51bV9jaGVja3N1bXMpOworCQltZW1jcHkoYWRkciwgY2hlY2tzdW1zLCBzaXplb2YodTMyKSAqIG51bV9wYWdlcyk7CisJCWdlbiA9IGFkZHIgKyAoc2l6ZW9mKHUzMikgKiBudW1fcGFnZXMpOwogCQkqZ2VuID0gdHJhbnMtPnRyYW5zaWQ7CiAJCWt1bm1hcChwYWdlKTsKLQkJQ2xlYXJQYWdlQ2hlY2tlZChwYWdlKTsKLQkJc2V0X3BhZ2VfZXh0ZW50X21hcHBlZChwYWdlKTsKLQkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKLQkJdW5sb2NrX3BhZ2UocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCX0KLQlCVFJGU19JKGlub2RlKS0+Z2VuZXJhdGlvbiA9IHRyYW5zLT50cmFuc2lkOwogCisJcmV0ID0gYnRyZnNfZGlydHlfcGFnZXMocm9vdCwgaW5vZGUsIHBhZ2VzLCBudW1fcGFnZXMsIDAsCisJCQkJCSAgICBieXRlcywgJmNhY2hlZF9zdGF0ZSk7CisJYnRyZnNfZHJvcF9wYWdlcyhwYWdlcywgbnVtX3BhZ2VzKTsKIAl1bmxvY2tfZXh0ZW50X2NhY2hlZCgmQlRSRlNfSShpbm9kZSktPmlvX3RyZWUsIDAsCiAJCQkgICAgIGlfc2l6ZV9yZWFkKGlub2RlKSAtIDEsICZjYWNoZWRfc3RhdGUsIEdGUF9OT0ZTKTsKIAorCWlmIChyZXQpIHsKKwkJcmV0ID0gMDsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlCVFJGU19JKGlub2RlKS0+Z2VuZXJhdGlvbiA9IHRyYW5zLT50cmFuc2lkOworCiAJZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKIAogCWtleS5vYmplY3RpZCA9IEJUUkZTX0ZSRUVfU1BBQ0VfT0JKRUNUSUQ7CkBAIC04NTMsNiArODQ1LDcgQEAKIAkJQlRSRlNfSShpbm9kZSktPmdlbmVyYXRpb24gPSAwOwogCX0KIAlrZnJlZShjaGVja3N1bXMpOworCWtmcmVlKHBhZ2VzKTsKIAlidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKIAlpcHV0KGlub2RlKTsKIAlyZXR1cm4gcmV0OwpAQCAtMTc3NSwxMCArMTc2OCwxMyBAQAogCiAJd2hpbGUgKChub2RlID0gcmJfbGFzdCgmYmxvY2tfZ3JvdXAtPmZyZWVfc3BhY2Vfb2Zmc2V0KSkgIT0gTlVMTCkgewogCQlpbmZvID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGJ0cmZzX2ZyZWVfc3BhY2UsIG9mZnNldF9pbmRleCk7Ci0JCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBpbmZvKTsKLQkJaWYgKGluZm8tPmJpdG1hcCkKLQkJCWtmcmVlKGluZm8tPmJpdG1hcCk7Ci0JCWttZW1fY2FjaGVfZnJlZShidHJmc19mcmVlX3NwYWNlX2NhY2hlcCwgaW5mbyk7CisJCWlmICghaW5mby0+Yml0bWFwKSB7CisJCQl1bmxpbmtfZnJlZV9zcGFjZShibG9ja19ncm91cCwgaW5mbyk7CisJCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfZnJlZV9zcGFjZV9jYWNoZXAsIGluZm8pOworCQl9IGVsc2UgeworCQkJZnJlZV9iaXRtYXAoYmxvY2tfZ3JvdXAsIGluZm8pOworCQl9CisKIAkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CiAJCQlzcGluX3VubG9jaygmYmxvY2tfZ3JvdXAtPnRyZWVfbG9jayk7CiAJCQljb25kX3Jlc2NoZWQoKTsKQEAgLTIzMDgsNyArMjMwNCw3IEBACiAJCQlzdGFydCA9IGVudHJ5LT5vZmZzZXQ7CiAJCQlieXRlcyA9IG1pbihlbnRyeS0+Ynl0ZXMsIGVuZCAtIHN0YXJ0KTsKIAkJCXVubGlua19mcmVlX3NwYWNlKGJsb2NrX2dyb3VwLCBlbnRyeSk7Ci0JCQlrZnJlZShlbnRyeSk7CisJCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfZnJlZV9zcGFjZV9jYWNoZXAsIGVudHJ5KTsKIAkJfQogCiAJCXNwaW5fdW5sb2NrKCZibG9ja19ncm91cC0+dHJlZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2lub2RlLmMgYi9mcy9idHJmcy9pbm9kZS5jCmluZGV4IDVjYzY0YWIuLjdjZDhhYjAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL2lub2RlLmMKKysrIGIvZnMvYnRyZnMvaW5vZGUuYwpAQCAtOTU0LDYgKzk1NCw3IEBACiAJCQkgMSwgMCwgTlVMTCwgR0ZQX05PRlMpOwogCXdoaWxlIChzdGFydCA8IGVuZCkgewogCQlhc3luY19jb3cgPSBrbWFsbG9jKHNpemVvZigqYXN5bmNfY293KSwgR0ZQX05PRlMpOworCQlCVUdfT04oIWFzeW5jX2Nvdyk7CiAJCWFzeW5jX2Nvdy0+aW5vZGUgPSBpbm9kZTsKIAkJYXN5bmNfY293LT5yb290ID0gcm9vdDsKIAkJYXN5bmNfY293LT5sb2NrZWRfcGFnZSA9IGxvY2tlZF9wYWdlOwpAQCAtMTc3MCw5ICsxNzcxLDEyIEBACiAJYWRkX3BlbmRpbmdfY3N1bXModHJhbnMsIGlub2RlLCBvcmRlcmVkX2V4dGVudC0+ZmlsZV9vZmZzZXQsCiAJCQkgICZvcmRlcmVkX2V4dGVudC0+bGlzdCk7CiAKLQlidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoaW5vZGUsIDAsIG9yZGVyZWRfZXh0ZW50KTsKLQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKLQlCVUdfT04ocmV0KTsKKwlyZXQgPSBidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoaW5vZGUsIDAsIG9yZGVyZWRfZXh0ZW50KTsKKwlpZiAoIXJldCkgeworCQlyZXQgPSBidHJmc191cGRhdGVfaW5vZGUodHJhbnMsIHJvb3QsIGlub2RlKTsKKwkJQlVHX09OKHJldCk7CisJfQorCXJldCA9IDA7CiBvdXQ6CiAJaWYgKG5vbG9jaykgewogCQlpZiAodHJhbnMpCkBAIC0yNTkwLDYgKzI1OTQsMTMgQEAKIAkJCSAgICBzdHJ1Y3QgYnRyZnNfaW5vZGVfaXRlbSAqaXRlbSwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCWlmICghbGVhZi0+bWFwX3Rva2VuKQorCQltYXBfcHJpdmF0ZV9leHRlbnRfYnVmZmVyKGxlYWYsICh1bnNpZ25lZCBsb25nKWl0ZW0sCisJCQkJCSAgc2l6ZW9mKHN0cnVjdCBidHJmc19pbm9kZV9pdGVtKSwKKwkJCQkJICAmbGVhZi0+bWFwX3Rva2VuLCAmbGVhZi0+a2FkZHIsCisJCQkJCSAgJmxlYWYtPm1hcF9zdGFydCwgJmxlYWYtPm1hcF9sZW4sCisJCQkJCSAgS01fVVNFUjEpOworCiAJYnRyZnNfc2V0X2lub2RlX3VpZChsZWFmLCBpdGVtLCBpbm9kZS0+aV91aWQpOwogCWJ0cmZzX3NldF9pbm9kZV9naWQobGVhZiwgaXRlbSwgaW5vZGUtPmlfZ2lkKTsKIAlidHJmc19zZXRfaW5vZGVfc2l6ZShsZWFmLCBpdGVtLCBCVFJGU19JKGlub2RlKS0+ZGlza19pX3NpemUpOwpAQCAtMjYxOCw2ICsyNjI5LDExIEBACiAJYnRyZnNfc2V0X2lub2RlX3JkZXYobGVhZiwgaXRlbSwgaW5vZGUtPmlfcmRldik7CiAJYnRyZnNfc2V0X2lub2RlX2ZsYWdzKGxlYWYsIGl0ZW0sIEJUUkZTX0koaW5vZGUpLT5mbGFncyk7CiAJYnRyZnNfc2V0X2lub2RlX2Jsb2NrX2dyb3VwKGxlYWYsIGl0ZW0sIEJUUkZTX0koaW5vZGUpLT5ibG9ja19ncm91cCk7CisKKwlpZiAobGVhZi0+bWFwX3Rva2VuKSB7CisJCXVubWFwX2V4dGVudF9idWZmZXIobGVhZiwgbGVhZi0+bWFwX3Rva2VuLCBLTV9VU0VSMSk7CisJCWxlYWYtPm1hcF90b2tlbiA9IE5VTEw7CisJfQogfQogCiAvKgpAQCAtNDIwNywxMCArNDIyMyw4IEBACiAJc3RydWN0IGJ0cmZzX2tleSBmb3VuZF9rZXk7CiAJc3RydWN0IGJ0cmZzX3BhdGggKnBhdGg7CiAJaW50IHJldDsKLQl1MzIgbnJpdGVtczsKIAlzdHJ1Y3QgZXh0ZW50X2J1ZmZlciAqbGVhZjsKIAlpbnQgc2xvdDsKLQlpbnQgYWR2YW5jZTsKIAl1bnNpZ25lZCBjaGFyIGRfdHlwZTsKIAlpbnQgb3ZlciA9IDA7CiAJdTMyIGRpX2N1cjsKQEAgLTQyNTMsMjcgKzQyNjcsMTkgQEAKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7Ci0JYWR2YW5jZSA9IDA7CiAKIAl3aGlsZSAoMSkgewogCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKIAkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCQlpZiAoYWR2YW5jZSB8fCBzbG90ID49IG5yaXRlbXMpIHsKLQkJCWlmIChzbG90ID49IG5yaXRlbXMgLSAxKSB7Ci0JCQkJcmV0ID0gYnRyZnNfbmV4dF9sZWFmKHJvb3QsIHBhdGgpOwotCQkJCWlmIChyZXQpCi0JCQkJCWJyZWFrOwotCQkJCWxlYWYgPSBwYXRoLT5ub2Rlc1swXTsKLQkJCQlucml0ZW1zID0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZik7Ci0JCQkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwotCQkJfSBlbHNlIHsKLQkJCQlzbG90Kys7Ci0JCQkJcGF0aC0+c2xvdHNbMF0rKzsKLQkJCX0KKwkJaWYgKHNsb3QgPj0gYnRyZnNfaGVhZGVyX25yaXRlbXMobGVhZikpIHsKKwkJCXJldCA9IGJ0cmZzX25leHRfbGVhZihyb290LCBwYXRoKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gZXJyOworCQkJZWxzZSBpZiAocmV0ID4gMCkKKwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOwogCQl9CiAKLQkJYWR2YW5jZSA9IDE7CiAJCWl0ZW0gPSBidHJmc19pdGVtX25yKGxlYWYsIHNsb3QpOwogCQlidHJmc19pdGVtX2tleV90b19jcHUobGVhZiwgJmZvdW5kX2tleSwgc2xvdCk7CiAKQEAgLTQyODIsNyArNDI4OCw3IEBACiAJCWlmIChidHJmc19rZXlfdHlwZSgmZm91bmRfa2V5KSAhPSBrZXlfdHlwZSkKIAkJCWJyZWFrOwogCQlpZiAoZm91bmRfa2V5Lm9mZnNldCA8IGZpbHAtPmZfcG9zKQotCQkJY29udGludWU7CisJCQlnb3RvIG5leHQ7CiAKIAkJZmlscC0+Zl9wb3MgPSBmb3VuZF9rZXkub2Zmc2V0OwogCkBAIC00MzM1LDYgKzQzNDEsOCBAQAogCQkJZGlfY3VyICs9IGRpX2xlbjsKIAkJCWRpID0gKHN0cnVjdCBidHJmc19kaXJfaXRlbSAqKSgoY2hhciAqKWRpICsgZGlfbGVuKTsKIAkJfQorbmV4dDoKKwkJcGF0aC0+c2xvdHNbMF0rKzsKIAl9CiAKIAkvKiBSZWFjaGVkIGVuZCBvZiBkaXJlY3Rvcnkvcm9vdC4gQnVtcCBwb3MgcGFzdCB0aGUgbGFzdCBpdGVtLiAqLwpAQCAtNDUyNywxNCArNDUzNSwxNyBAQAogCUJVR19PTighcGF0aCk7CiAKIAlpbm9kZSA9IG5ld19pbm9kZShyb290LT5mc19pbmZvLT5zYik7Ci0JaWYgKCFpbm9kZSkKKwlpZiAoIWlub2RlKSB7CisJCWJ0cmZzX2ZyZWVfcGF0aChwYXRoKTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQogCiAJaWYgKGRpcikgewogCQl0cmFjZV9idHJmc19pbm9kZV9yZXF1ZXN0KGRpcik7CiAKIAkJcmV0ID0gYnRyZnNfc2V0X2lub2RlX2luZGV4KGRpciwgaW5kZXgpOwogCQlpZiAocmV0KSB7CisJCQlidHJmc19mcmVlX3BhdGgocGF0aCk7CiAJCQlpcHV0KGlub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CiAJCX0KQEAgLTQ3MjEsOSArNDczMiwxMCBAQAogCWlub2RlID0gYnRyZnNfbmV3X2lub2RlKHRyYW5zLCByb290LCBkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJZGVudHJ5LT5kX25hbWUubGVuLCBkaXItPmlfaW5vLCBvYmplY3RpZCwKIAkJCQlCVFJGU19JKGRpciktPmJsb2NrX2dyb3VwLCBtb2RlLCAmaW5kZXgpOwotCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCWlmIChJU19FUlIoaW5vZGUpKQorCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQlnb3RvIG91dF91bmxvY2s7CisJfQogCiAJZXJyID0gYnRyZnNfaW5pdF9pbm9kZV9zZWN1cml0eSh0cmFucywgaW5vZGUsIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAoZXJyKSB7CkBAIC00NzgyLDkgKzQ3OTQsMTAgQEAKIAlpbm9kZSA9IGJ0cmZzX25ld19pbm9kZSh0cmFucywgcm9vdCwgZGlyLCBkZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCWRlbnRyeS0+ZF9uYW1lLmxlbiwgZGlyLT5pX2lubywgb2JqZWN0aWQsCiAJCQkJQlRSRlNfSShkaXIpLT5ibG9ja19ncm91cCwgbW9kZSwgJmluZGV4KTsKLQllcnIgPSBQVFJfRVJSKGlub2RlKTsKLQlpZiAoSVNfRVJSKGlub2RlKSkKKwlpZiAoSVNfRVJSKGlub2RlKSkgeworCQllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAkJZ290byBvdXRfdW5sb2NrOworCX0KIAogCWVyciA9IGJ0cmZzX2luaXRfaW5vZGVfc2VjdXJpdHkodHJhbnMsIGlub2RlLCBkaXIsICZkZW50cnktPmRfbmFtZSk7CiAJaWYgKGVycikgewpAQCAtNDgzNCw5ICs0ODQ3LDYgQEAKIAlpZiAoaW5vZGUtPmlfbmxpbmsgPT0gfjBVKQogCQlyZXR1cm4gLUVNTElOSzsKIAotCWJ0cmZzX2luY19ubGluayhpbm9kZSk7Ci0JaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0KIAllcnIgPSBidHJmc19zZXRfaW5vZGVfaW5kZXgoZGlyLCAmaW5kZXgpOwogCWlmIChlcnIpCiAJCWdvdG8gZmFpbDsKQEAgLTQ4NTIsNiArNDg2Miw5IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAKKwlidHJmc19pbmNfbmxpbmsoaW5vZGUpOworCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCiAJYnRyZnNfc2V0X3RyYW5zX2Jsb2NrX2dyb3VwKHRyYW5zLCBkaXIpOwogCWlob2xkKGlub2RlKTsKIApAQCAtNDk4OSw2ICs1MDAyLDggQEAKIAlpbmxpbmVfc2l6ZSA9IGJ0cmZzX2ZpbGVfZXh0ZW50X2lubGluZV9pdGVtX2xlbihsZWFmLAogCQkJCQlidHJmc19pdGVtX25yKGxlYWYsIHBhdGgtPnNsb3RzWzBdKSk7CiAJdG1wID0ga21hbGxvYyhpbmxpbmVfc2l6ZSwgR0ZQX05PRlMpOworCWlmICghdG1wKQorCQlyZXR1cm4gLUVOT01FTTsKIAlwdHIgPSBidHJmc19maWxlX2V4dGVudF9pbmxpbmVfc3RhcnQoaXRlbSk7CiAKIAlyZWFkX2V4dGVudF9idWZmZXIobGVhZiwgdG1wLCBwdHIsIGlubGluZV9zaXplKTsKQEAgLTUyMjEsNyArNTIzNiw3IEBACiAJCQlidHJmc19tYXJrX2J1ZmZlcl9kaXJ0eShsZWFmKTsKIAkJfQogCQlzZXRfZXh0ZW50X3VwdG9kYXRlKGlvX3RyZWUsIGVtLT5zdGFydCwKLQkJCQkgICAgZXh0ZW50X21hcF9lbmQoZW0pIC0gMSwgR0ZQX05PRlMpOworCQkJCSAgICBleHRlbnRfbWFwX2VuZChlbSkgLSAxLCBOVUxMLCBHRlBfTk9GUyk7CiAJCWdvdG8gaW5zZXJ0OwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnRyZnMgdW5rbm93biBmb3VuZF90eXBlICVkXG4iLCBmb3VuZF90eXBlKTsKQEAgLTU0MjgsMTcgKzU0NDMsMzAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBleHRlbnRfbWFwICpidHJmc19uZXdfZXh0ZW50X2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQkJICBzdHJ1Y3QgZXh0ZW50X21hcCAqZW0sCiAJCQkJCQkgIHU2NCBzdGFydCwgdTY0IGxlbikKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwotCXN0cnVjdCBleHRlbnRfbWFwICplbTsKIAlzdHJ1Y3QgZXh0ZW50X21hcF90cmVlICplbV90cmVlID0gJkJUUkZTX0koaW5vZGUpLT5leHRlbnRfdHJlZTsKIAlzdHJ1Y3QgYnRyZnNfa2V5IGluczsKIAl1NjQgYWxsb2NfaGludDsKIAlpbnQgcmV0OworCWJvb2wgaW5zZXJ0ID0gZmFsc2U7CiAKLQlidHJmc19kcm9wX2V4dGVudF9jYWNoZShpbm9kZSwgc3RhcnQsIHN0YXJ0ICsgbGVuIC0gMSwgMCk7CisJLyoKKwkgKiBPayBpZiB0aGUgZXh0ZW50IG1hcCB3ZSBsb29rZWQgdXAgaXMgYSBob2xlIGFuZCBpcyBmb3IgdGhlIGV4YWN0CisJICogcmFuZ2Ugd2Ugd2FudCwgdGhlcmUgaXMgbm8gcmVhc29uIHRvIGFsbG9jYXRlIGEgbmV3IG9uZSwgaG93ZXZlciBpZgorCSAqIGl0IGlzIG5vdCByaWdodCB0aGVuIHdlIG5lZWQgdG8gZnJlZSB0aGlzIG9uZSBhbmQgZHJvcCB0aGUgY2FjaGUgZm9yCisJICogb3VyIHJhbmdlLgorCSAqLworCWlmIChlbS0+YmxvY2tfc3RhcnQgIT0gRVhURU5UX01BUF9IT0xFIHx8IGVtLT5zdGFydCAhPSBzdGFydCB8fAorCSAgICBlbS0+bGVuICE9IGxlbikgeworCQlmcmVlX2V4dGVudF9tYXAoZW0pOworCQllbSA9IE5VTEw7CisJCWluc2VydCA9IHRydWU7CisJCWJ0cmZzX2Ryb3BfZXh0ZW50X2NhY2hlKGlub2RlLCBzdGFydCwgc3RhcnQgKyBsZW4gLSAxLCAwKTsKKwl9CiAKIAl0cmFucyA9IGJ0cmZzX2pvaW5fdHJhbnNhY3Rpb24ocm9vdCwgMCk7CiAJaWYgKElTX0VSUih0cmFucykpCkBAIC01NDU0LDEwICs1NDgyLDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWVtID0gYWxsb2NfZXh0ZW50X21hcChHRlBfTk9GUyk7CiAJaWYgKCFlbSkgewotCQllbSA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCWdvdG8gb3V0OworCQllbSA9IGFsbG9jX2V4dGVudF9tYXAoR0ZQX05PRlMpOworCQlpZiAoIWVtKSB7CisJCQllbSA9IEVSUl9QVFIoLUVOT01FTSk7CisJCQlnb3RvIG91dDsKKwkJfQogCX0KIAogCWVtLT5zdGFydCA9IHN0YXJ0OwpAQCAtNTQ2Nyw5ICs1NDk3LDE1IEBACiAJZW0tPmJsb2NrX3N0YXJ0ID0gaW5zLm9iamVjdGlkOwogCWVtLT5ibG9ja19sZW4gPSBpbnMub2Zmc2V0OwogCWVtLT5iZGV2ID0gcm9vdC0+ZnNfaW5mby0+ZnNfZGV2aWNlcy0+bGF0ZXN0X2JkZXY7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZG8gdGhpcyBiZWNhdXNlIGlmIHdlJ3JlIHVzaW5nIHRoZSBvcmlnaW5hbCBlbSB3ZSBzZWFyY2hlZAorCSAqIGZvciwgd2UgY291bGQgaGF2ZSBFWFRFTlRfRkxBR19WQUNBTkNZIHNldCwgYW5kIHdlIGRvbid0IHdhbnQgdGhhdC4KKwkgKi8KKwllbS0+ZmxhZ3MgPSAwOwogCXNldF9iaXQoRVhURU5UX0ZMQUdfUElOTkVELCAmZW0tPmZsYWdzKTsKIAotCXdoaWxlICgxKSB7CisJd2hpbGUgKGluc2VydCkgewogCQl3cml0ZV9sb2NrKCZlbV90cmVlLT5sb2NrKTsKIAkJcmV0ID0gYWRkX2V4dGVudF9tYXBwaW5nKGVtX3RyZWUsIGVtKTsKIAkJd3JpdGVfdW5sb2NrKCZlbV90cmVlLT5sb2NrKTsKQEAgLTU2ODcsOCArNTcyMyw3IEBACiAJICogaXQgYWJvdmUKIAkgKi8KIAlsZW4gPSBiaF9yZXN1bHQtPmJfc2l6ZTsKLQlmcmVlX2V4dGVudF9tYXAoZW0pOwotCWVtID0gYnRyZnNfbmV3X2V4dGVudF9kaXJlY3QoaW5vZGUsIHN0YXJ0LCBsZW4pOworCWVtID0gYnRyZnNfbmV3X2V4dGVudF9kaXJlY3QoaW5vZGUsIGVtLCBzdGFydCwgbGVuKTsKIAlpZiAoSVNfRVJSKGVtKSkKIAkJcmV0dXJuIFBUUl9FUlIoZW0pOwogCWxlbiA9IG1pbihsZW4sIGVtLT5sZW4gLSAoc3RhcnQgLSBlbS0+c3RhcnQpKTsKQEAgLTU4NTEsOCArNTg4NiwxMCBAQAogCX0KIAogCWFkZF9wZW5kaW5nX2NzdW1zKHRyYW5zLCBpbm9kZSwgb3JkZXJlZC0+ZmlsZV9vZmZzZXQsICZvcmRlcmVkLT5saXN0KTsKLQlidHJmc19vcmRlcmVkX3VwZGF0ZV9pX3NpemUoaW5vZGUsIDAsIG9yZGVyZWQpOwotCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOworCXJldCA9IGJ0cmZzX29yZGVyZWRfdXBkYXRlX2lfc2l6ZShpbm9kZSwgMCwgb3JkZXJlZCk7CisJaWYgKCFyZXQpCisJCWJ0cmZzX3VwZGF0ZV9pbm9kZSh0cmFucywgcm9vdCwgaW5vZGUpOworCXJldCA9IDA7CiBvdXRfdW5sb2NrOgogCXVubG9ja19leHRlbnRfY2FjaGVkKCZCVFJGU19JKGlub2RlKS0+aW9fdHJlZSwgb3JkZXJlZC0+ZmlsZV9vZmZzZXQsCiAJCQkgICAgIG9yZGVyZWQtPmZpbGVfb2Zmc2V0ICsgb3JkZXJlZC0+bGVuIC0gMSwKQEAgLTU5MzgsNyArNTk3NSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fYnRyZnNfc3VibWl0X2Rpb19iaW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgaW50IHJ3LCB1NjQgZmlsZV9vZmZzZXQsIGludCBza2lwX3N1bSwKLQkJCQkJIHUzMiAqY3N1bXMpCisJCQkJCSB1MzIgKmNzdW1zLCBpbnQgYXN5bmNfc3VibWl0KQogewogCWludCB3cml0ZSA9IHJ3ICYgUkVRX1dSSVRFOwogCXN0cnVjdCBidHJmc19yb290ICpyb290ID0gQlRSRlNfSShpbm9kZSktPnJvb3Q7CkBAIC01OTQ5LDEzICs1OTg2LDI0IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQlpZiAod3JpdGUgJiYgIXNraXBfc3VtKSB7CisJaWYgKHNraXBfc3VtKQorCQlnb3RvIG1hcDsKKworCWlmICh3cml0ZSAmJiBhc3luY19zdWJtaXQpIHsKIAkJcmV0ID0gYnRyZnNfd3Ffc3VibWl0X2Jpbyhyb290LT5mc19pbmZvLAogCQkJCSAgIGlub2RlLCBydywgYmlvLCAwLCAwLAogCQkJCSAgIGZpbGVfb2Zmc2V0LAogCQkJCSAgIF9fYnRyZnNfc3VibWl0X2Jpb19zdGFydF9kaXJlY3RfaW8sCiAJCQkJICAgX19idHJmc19zdWJtaXRfYmlvX2RvbmUpOwogCQlnb3RvIGVycjsKKwl9IGVsc2UgaWYgKHdyaXRlKSB7CisJCS8qCisJCSAqIElmIHdlIGFyZW4ndCBkb2luZyBhc3luYyBzdWJtaXQsIGNhbGN1bGF0ZSB0aGUgY3N1bSBvZiB0aGUKKwkJICogYmlvIG5vdy4KKwkJICovCisJCXJldCA9IGJ0cmZzX2NzdW1fb25lX2Jpbyhyb290LCBpbm9kZSwgYmlvLCBmaWxlX29mZnNldCwgMSk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjsKIAl9IGVsc2UgaWYgKCFza2lwX3N1bSkgewogCQlyZXQgPSBidHJmc19sb29rdXBfYmlvX3N1bXNfZGlvKHJvb3QsIGlub2RlLCBiaW8sCiAJCQkJCSAgZmlsZV9vZmZzZXQsIGNzdW1zKTsKQEAgLTU5NjMsNyArNjAxMSw4IEBACiAJCQlnb3RvIGVycjsKIAl9CiAKLQlyZXQgPSBidHJmc19tYXBfYmlvKHJvb3QsIHJ3LCBiaW8sIDAsIDEpOworbWFwOgorCXJldCA9IGJ0cmZzX21hcF9iaW8ocm9vdCwgcncsIGJpbywgMCwgYXN5bmNfc3VibWl0KTsKIGVycjoKIAliaW9fcHV0KGJpbyk7CiAJcmV0dXJuIHJldDsKQEAgLTU5ODUsOCArNjAzNCwyMyBAQAogCWludCBucl9wYWdlcyA9IDA7CiAJdTMyICpjc3VtcyA9IGRpcC0+Y3N1bXM7CiAJaW50IHJldCA9IDA7CisJaW50IGFzeW5jX3N1Ym1pdCA9IDA7CiAJaW50IHdyaXRlID0gcncgJiBSRVFfV1JJVEU7CiAKKwltYXBfbGVuZ3RoID0gb3JpZ19iaW8tPmJpX3NpemU7CisJcmV0ID0gYnRyZnNfbWFwX2Jsb2NrKG1hcF90cmVlLCBSRUFELCBzdGFydF9zZWN0b3IgPDwgOSwKKwkJCSAgICAgICZtYXBfbGVuZ3RoLCBOVUxMLCAwKTsKKwlpZiAocmV0KSB7CisJCWJpb19wdXQob3JpZ19iaW8pOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAobWFwX2xlbmd0aCA+PSBvcmlnX2Jpby0+Ymlfc2l6ZSkgeworCQliaW8gPSBvcmlnX2JpbzsKKwkJZ290byBzdWJtaXQ7CisJfQorCisJYXN5bmNfc3VibWl0ID0gMTsKIAliaW8gPSBidHJmc19kaW9fYmlvX2FsbG9jKG9yaWdfYmlvLT5iaV9iZGV2LCBzdGFydF9zZWN0b3IsIEdGUF9OT0ZTKTsKIAlpZiAoIWJpbykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01OTk0LDE0ICs2MDU4LDYgQEAKIAliaW8tPmJpX2VuZF9pbyA9IGJ0cmZzX2VuZF9kaW9fYmlvOwogCWF0b21pY19pbmMoJmRpcC0+cGVuZGluZ19iaW9zKTsKIAotCW1hcF9sZW5ndGggPSBvcmlnX2Jpby0+Ymlfc2l6ZTsKLQlyZXQgPSBidHJmc19tYXBfYmxvY2sobWFwX3RyZWUsIFJFQUQsIHN0YXJ0X3NlY3RvciA8PCA5LAotCQkJICAgICAgJm1hcF9sZW5ndGgsIE5VTEwsIDApOwotCWlmIChyZXQpIHsKLQkJYmlvX3B1dChiaW8pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KIAl3aGlsZSAoYnZlYyA8PSAob3JpZ19iaW8tPmJpX2lvX3ZlYyArIG9yaWdfYmlvLT5iaV92Y250IC0gMSkpIHsKIAkJaWYgKHVubGlrZWx5KG1hcF9sZW5ndGggPCBzdWJtaXRfbGVuICsgYnZlYy0+YnZfbGVuIHx8CiAJCSAgICBiaW9fYWRkX3BhZ2UoYmlvLCBidmVjLT5idl9wYWdlLCBidmVjLT5idl9sZW4sCkBAIC02MDE1LDcgKzYwNzEsNyBAQAogCQkJYXRvbWljX2luYygmZGlwLT5wZW5kaW5nX2Jpb3MpOwogCQkJcmV0ID0gX19idHJmc19zdWJtaXRfZGlvX2JpbyhiaW8sIGlub2RlLCBydywKIAkJCQkJCSAgICAgZmlsZV9vZmZzZXQsIHNraXBfc3VtLAotCQkJCQkJICAgICBjc3Vtcyk7CisJCQkJCQkgICAgIGNzdW1zLCBhc3luY19zdWJtaXQpOwogCQkJaWYgKHJldCkgewogCQkJCWJpb19wdXQoYmlvKTsKIAkJCQlhdG9taWNfZGVjKCZkaXAtPnBlbmRpbmdfYmlvcyk7CkBAIC02MDUyLDggKzYxMDgsOSBAQAogCQl9CiAJfQogCitzdWJtaXQ6CiAJcmV0ID0gX19idHJmc19zdWJtaXRfZGlvX2JpbyhiaW8sIGlub2RlLCBydywgZmlsZV9vZmZzZXQsIHNraXBfc3VtLAotCQkJCSAgICAgY3N1bXMpOworCQkJCSAgICAgY3N1bXMsIGFzeW5jX3N1Ym1pdCk7CiAJaWYgKCFyZXQpCiAJCXJldHVybiAwOwogCkBAIC02MTQ4LDYgKzYyMDUsNyBAQAogCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzKQogewogCWludCBzZWc7CisJaW50IGk7CiAJc2l6ZV90IHNpemU7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXVuc2lnbmVkIGJsb2Nrc2l6ZV9tYXNrID0gcm9vdC0+c2VjdG9yc2l6ZSAtIDE7CkBAIC02MTYyLDggKzYyMjAsMjIgQEAKIAkJYWRkciA9ICh1bnNpZ25lZCBsb25nKWlvdltzZWddLmlvdl9iYXNlOwogCQlzaXplID0gaW92W3NlZ10uaW92X2xlbjsKIAkJZW5kICs9IHNpemU7Ci0JCWlmICgoYWRkciAmIGJsb2Nrc2l6ZV9tYXNrKSB8fCAoc2l6ZSAmIGJsb2Nrc2l6ZV9tYXNrKSkgCisJCWlmICgoYWRkciAmIGJsb2Nrc2l6ZV9tYXNrKSB8fCAoc2l6ZSAmIGJsb2Nrc2l6ZV9tYXNrKSkKIAkJCWdvdG8gb3V0OworCisJCS8qIElmIHRoaXMgaXMgYSB3cml0ZSB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGFueW1vcmUgKi8KKwkJaWYgKHJ3ICYgV1JJVEUpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDaGVjayB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZSBkdXBsaWNhdGUgaW92X2Jhc2UncyBpbiB0aGlzCisJCSAqIGlvdmVjLCBpZiBzbyByZXR1cm4gRUlOVkFMLCBvdGhlcndpc2Ugd2UnbGwgZ2V0IGNzdW0gZXJyb3JzCisJCSAqIHdoZW4gcmVhZGluZyBiYWNrLgorCQkgKi8KKwkJZm9yIChpID0gc2VnICsgMTsgaSA8IG5yX3NlZ3M7IGkrKykgeworCQkJaWYgKGlvdltzZWddLmlvdl9iYXNlID09IGlvdltpXS5pb3ZfYmFzZSkKKwkJCQlnb3RvIG91dDsKKwkJfQogCX0KIAlyZXR2YWwgPSAwOwogb3V0OgpAQCAtNzIwNiw5ICs3Mjc4LDEwIEBACiAJCQkJZGVudHJ5LT5kX25hbWUubGVuLCBkaXItPmlfaW5vLCBvYmplY3RpZCwKIAkJCQlCVFJGU19JKGRpciktPmJsb2NrX2dyb3VwLCBTX0lGTE5LfFNfSVJXWFVHTywKIAkJCQkmaW5kZXgpOwotCWVyciA9IFBUUl9FUlIoaW5vZGUpOwotCWlmIChJU19FUlIoaW5vZGUpKQorCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCQlnb3RvIG91dF91bmxvY2s7CisJfQogCiAJZXJyID0gYnRyZnNfaW5pdF9pbm9kZV9zZWN1cml0eSh0cmFucywgaW5vZGUsIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAoZXJyKSB7CmRpZmYgLS1naXQgYS9mcy9idHJmcy9pb2N0bC5jIGIvZnMvYnRyZnMvaW9jdGwuYwppbmRleCBjZmMyNjRmLi4yNjE2ZjdlIDEwMDY0NAotLS0gYS9mcy9idHJmcy9pb2N0bC5jCisrKyBiL2ZzL2J0cmZzL2lvY3RsLmMKQEAgLTgxLDYgKzgxLDEzIEBACiAJCWlmbGFncyB8PSBGU19OT0FUSU1FX0ZMOwogCWlmIChmbGFncyAmIEJUUkZTX0lOT0RFX0RJUlNZTkMpCiAJCWlmbGFncyB8PSBGU19ESVJTWU5DX0ZMOworCWlmIChmbGFncyAmIEJUUkZTX0lOT0RFX05PREFUQUNPVykKKwkJaWZsYWdzIHw9IEZTX05PQ09XX0ZMOworCisJaWYgKChmbGFncyAmIEJUUkZTX0lOT0RFX0NPTVBSRVNTKSAmJiAhKGZsYWdzICYgQlRSRlNfSU5PREVfTk9DT01QUkVTUykpCisJCWlmbGFncyB8PSBGU19DT01QUl9GTDsKKwllbHNlIGlmIChmbGFncyAmIEJUUkZTX0lOT0RFX05PQ09NUFJFU1MpCisJCWlmbGFncyB8PSBGU19OT0NPTVBfRkw7CiAKIAlyZXR1cm4gaWZsYWdzOwogfQpAQCAtMTQ0LDE2ICsxNTEsMTMgQEAKIAlpZiAoZmxhZ3MgJiB+KEZTX0lNTVVUQUJMRV9GTCB8IEZTX0FQUEVORF9GTCB8IFwKIAkJICAgICAgRlNfTk9BVElNRV9GTCB8IEZTX05PRFVNUF9GTCB8IFwKIAkJICAgICAgRlNfU1lOQ19GTCB8IEZTX0RJUlNZTkNfRkwgfCBcCi0JCSAgICAgIEZTX05PQ09NUF9GTCB8IEZTX0NPTVBSX0ZMIHwgXAotCQkgICAgICBGU19OT0NPV19GTCB8IEZTX0NPV19GTCkpCisJCSAgICAgIEZTX05PQ09NUF9GTCB8IEZTX0NPTVBSX0ZMIHwKKwkJICAgICAgRlNfTk9DT1dfRkwpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlpZiAoKGZsYWdzICYgRlNfTk9DT01QX0ZMKSAmJiAoZmxhZ3MgJiBGU19DT01QUl9GTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChmbGFncyAmIEZTX05PQ09XX0ZMKSAmJiAoZmxhZ3MgJiBGU19DT1dfRkwpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCXJldHVybiAwOwogfQogCkBAIC0yMTgsNiArMjIyLDEwIEBACiAJCWlwLT5mbGFncyB8PSBCVFJGU19JTk9ERV9ESVJTWU5DOwogCWVsc2UKIAkJaXAtPmZsYWdzICY9IH5CVFJGU19JTk9ERV9ESVJTWU5DOworCWlmIChmbGFncyAmIEZTX05PQ09XX0ZMKQorCQlpcC0+ZmxhZ3MgfD0gQlRSRlNfSU5PREVfTk9EQVRBQ09XOworCWVsc2UKKwkJaXAtPmZsYWdzICY9IH5CVFJGU19JTk9ERV9OT0RBVEFDT1c7CiAKIAkvKgogCSAqIFRoZSBDT01QUkVTUyBmbGFnIGNhbiBvbmx5IGJlIGNoYW5nZWQgYnkgdXNlcnMsIHdoaWxlIHRoZSBOT0NPTVBSRVNTCkBAIC0yMzAsMTEgKzIzOCw5IEBACiAJfSBlbHNlIGlmIChmbGFncyAmIEZTX0NPTVBSX0ZMKSB7CiAJCWlwLT5mbGFncyB8PSBCVFJGU19JTk9ERV9DT01QUkVTUzsKIAkJaXAtPmZsYWdzICY9IH5CVFJGU19JTk9ERV9OT0NPTVBSRVNTOworCX0gZWxzZSB7CisJCWlwLT5mbGFncyAmPSB+KEJUUkZTX0lOT0RFX0NPTVBSRVNTIHwgQlRSRlNfSU5PREVfTk9DT01QUkVTUyk7CiAJfQotCWlmIChmbGFncyAmIEZTX05PQ09XX0ZMKQotCQlpcC0+ZmxhZ3MgfD0gQlRSRlNfSU5PREVfTk9EQVRBQ09XOwotCWVsc2UgaWYgKGZsYWdzICYgRlNfQ09XX0ZMKQotCQlpcC0+ZmxhZ3MgJj0gfkJUUkZTX0lOT0RFX05PREFUQUNPVzsKIAogCXRyYW5zID0gYnRyZnNfam9pbl90cmFuc2FjdGlvbihyb290LCAxKTsKIAlCVUdfT04oSVNfRVJSKHRyYW5zKSk7CkBAIC0yMjg3LDcgKzIyOTMsNyBAQAogCXN0cnVjdCBidHJmc19pb2N0bF9zcGFjZV9pbmZvIHNwYWNlOwogCXN0cnVjdCBidHJmc19pb2N0bF9zcGFjZV9pbmZvICpkZXN0OwogCXN0cnVjdCBidHJmc19pb2N0bF9zcGFjZV9pbmZvICpkZXN0X29yaWc7Ci0Jc3RydWN0IGJ0cmZzX2lvY3RsX3NwYWNlX2luZm8gKnVzZXJfZGVzdDsKKwlzdHJ1Y3QgYnRyZnNfaW9jdGxfc3BhY2VfaW5mbyBfX3VzZXIgKnVzZXJfZGVzdDsKIAlzdHJ1Y3QgYnRyZnNfc3BhY2VfaW5mbyAqaW5mbzsKIAl1NjQgdHlwZXNbXSA9IHtCVFJGU19CTE9DS19HUk9VUF9EQVRBLAogCQkgICAgICAgQlRSRlNfQkxPQ0tfR1JPVVBfU1lTVEVNLApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvc3VwZXIuYyBiL2ZzL2J0cmZzL3N1cGVyLmMKaW5kZXggNThlN2RlOS4uMGFjNzEyZSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3VwZXIuYworKysgYi9mcy9idHJmcy9zdXBlci5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAlPcHRfY29tcHJlc3NfdHlwZSwgT3B0X2NvbXByZXNzX2ZvcmNlLCBPcHRfY29tcHJlc3NfZm9yY2VfdHlwZSwKIAlPcHRfbm90cmVlbG9nLCBPcHRfcmF0aW8sIE9wdF9mbHVzaG9uY29tbWl0LCBPcHRfZGlzY2FyZCwKIAlPcHRfc3BhY2VfY2FjaGUsIE9wdF9jbGVhcl9jYWNoZSwgT3B0X3VzZXJfc3Vidm9sX3JtX2FsbG93ZWQsCi0JT3B0X2Vub3NwY19kZWJ1ZywgT3B0X2VyciwKKwlPcHRfZW5vc3BjX2RlYnVnLCBPcHRfc3Vidm9scm9vdGlkLCBPcHRfZXJyLAogfTsKIAogc3RhdGljIG1hdGNoX3RhYmxlX3QgdG9rZW5zID0gewpAQCAtMTg5LDYgKzE4OSw3IEBACiAJe09wdF9jbGVhcl9jYWNoZSwgImNsZWFyX2NhY2hlIn0sCiAJe09wdF91c2VyX3N1YnZvbF9ybV9hbGxvd2VkLCAidXNlcl9zdWJ2b2xfcm1fYWxsb3dlZCJ9LAogCXtPcHRfZW5vc3BjX2RlYnVnLCAiZW5vc3BjX2RlYnVnIn0sCisJe09wdF9zdWJ2b2xyb290aWQsICJzdWJ2b2xyb290aWQ9JWQifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCkBAIC0yMzIsNiArMjMzLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9zdWJ2b2w6CiAJCWNhc2UgT3B0X3N1YnZvbGlkOgorCQljYXNlIE9wdF9zdWJ2b2xyb290aWQ6CiAJCWNhc2UgT3B0X2RldmljZToKIAkJCS8qCiAJCQkgKiBUaGVzZSBhcmUgcGFyc2VkIGJ5IGJ0cmZzX3BhcnNlX2Vhcmx5X29wdGlvbnMKQEAgLTM4OCw3ICszOTAsNyBAQAogICovCiBzdGF0aWMgaW50IGJ0cmZzX3BhcnNlX2Vhcmx5X29wdGlvbnMoY29uc3QgY2hhciAqb3B0aW9ucywgZm1vZGVfdCBmbGFncywKIAkJdm9pZCAqaG9sZGVyLCBjaGFyICoqc3Vidm9sX25hbWUsIHU2NCAqc3Vidm9sX29iamVjdGlkLAotCQlzdHJ1Y3QgYnRyZnNfZnNfZGV2aWNlcyAqKmZzX2RldmljZXMpCisJCXU2NCAqc3Vidm9sX3Jvb3RpZCwgc3RydWN0IGJ0cmZzX2ZzX2RldmljZXMgKipmc19kZXZpY2VzKQogewogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKIAljaGFyICpvcHRzLCAqb3JpZywgKnA7CkBAIC00MjksNiArNDMxLDE4IEBACiAJCQkJCSpzdWJ2b2xfb2JqZWN0aWQgPSBpbnRhcmc7CiAJCQl9CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfc3Vidm9scm9vdGlkOgorCQkJaW50YXJnID0gMDsKKwkJCWVycm9yID0gbWF0Y2hfaW50KCZhcmdzWzBdLCAmaW50YXJnKTsKKwkJCWlmICghZXJyb3IpIHsKKwkJCQkvKiB3ZSB3YW50IHRoZSBvcmlnaW5hbCBmc190cmVlICovCisJCQkJaWYgKCFpbnRhcmcpCisJCQkJCSpzdWJ2b2xfcm9vdGlkID0KKwkJCQkJCUJUUkZTX0ZTX1RSRUVfT0JKRUNUSUQ7CisJCQkJZWxzZQorCQkJCQkqc3Vidm9sX3Jvb3RpZCA9IGludGFyZzsKKwkJCX0KKwkJCWJyZWFrOwogCQljYXNlIE9wdF9kZXZpY2U6CiAJCQllcnJvciA9IGJ0cmZzX3NjYW5fb25lX2RldmljZShtYXRjaF9zdHJkdXAoJmFyZ3NbMF0pLAogCQkJCQlmbGFncywgaG9sZGVyLCBmc19kZXZpY2VzKTsKQEAgLTczNiw2ICs3NTAsNyBAQAogCWZtb2RlX3QgbW9kZSA9IEZNT0RFX1JFQUQ7CiAJY2hhciAqc3Vidm9sX25hbWUgPSBOVUxMOwogCXU2NCBzdWJ2b2xfb2JqZWN0aWQgPSAwOworCXU2NCBzdWJ2b2xfcm9vdGlkID0gMDsKIAlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKCEoZmxhZ3MgJiBNU19SRE9OTFkpKQpAQCAtNzQzLDcgKzc1OCw3IEBACiAKIAllcnJvciA9IGJ0cmZzX3BhcnNlX2Vhcmx5X29wdGlvbnMoZGF0YSwgbW9kZSwgZnNfdHlwZSwKIAkJCQkJICAmc3Vidm9sX25hbWUsICZzdWJ2b2xfb2JqZWN0aWQsCi0JCQkJCSAgJmZzX2RldmljZXMpOworCQkJCQkgICZzdWJ2b2xfcm9vdGlkLCAmZnNfZGV2aWNlcyk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAKQEAgLTgwNywxNSArODIyLDE3IEBACiAJCXMtPnNfZmxhZ3MgfD0gTVNfQUNUSVZFOwogCX0KIAotCXJvb3QgPSBnZXRfZGVmYXVsdF9yb290KHMsIHN1YnZvbF9vYmplY3RpZCk7Ci0JaWYgKElTX0VSUihyb290KSkgewotCQllcnJvciA9IFBUUl9FUlIocm9vdCk7Ci0JCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHMpOwotCQlnb3RvIGVycm9yX2ZyZWVfc3Vidm9sX25hbWU7Ci0JfQogCS8qIGlmIHRoZXkgZ2F2ZSB1cyBhIHN1YnZvbHVtZSBuYW1lIGJpbmQgbW91bnQgaW50byB0aGF0ICovCiAJaWYgKHN0cmNtcChzdWJ2b2xfbmFtZSwgIi4iKSkgewogCQlzdHJ1Y3QgZGVudHJ5ICpuZXdfcm9vdDsKKworCQlyb290ID0gZ2V0X2RlZmF1bHRfcm9vdChzLCBzdWJ2b2xfcm9vdGlkKTsKKwkJaWYgKElTX0VSUihyb290KSkgeworCQkJZXJyb3IgPSBQVFJfRVJSKHJvb3QpOworCQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7CisJCQlnb3RvIGVycm9yX2ZyZWVfc3Vidm9sX25hbWU7CisJCX0KKwogCQltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKIAkJbmV3X3Jvb3QgPSBsb29rdXBfb25lX2xlbihzdWJ2b2xfbmFtZSwgcm9vdCwKIAkJCQkgICAgICBzdHJsZW4oc3Vidm9sX25hbWUpKTsKQEAgLTgzNiw2ICs4NTMsMTMgQEAKIAkJfQogCQlkcHV0KHJvb3QpOwogCQlyb290ID0gbmV3X3Jvb3Q7CisJfSBlbHNlIHsKKwkJcm9vdCA9IGdldF9kZWZhdWx0X3Jvb3Qocywgc3Vidm9sX29iamVjdGlkKTsKKwkJaWYgKElTX0VSUihyb290KSkgeworCQkJZXJyb3IgPSBQVFJfRVJSKHJvb3QpOworCQkJZGVhY3RpdmF0ZV9sb2NrZWRfc3VwZXIocyk7CisJCQlnb3RvIGVycm9yX2ZyZWVfc3Vidm9sX25hbWU7CisJCX0KIAl9CiAKIAlrZnJlZShzdWJ2b2xfbmFtZSk7CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCA1YjE1OGRhLi5jNTcxNzM0IDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTMyLDEwICszMiw4IEBACiAKIHN0YXRpYyBub2lubGluZSB2b2lkIHB1dF90cmFuc2FjdGlvbihzdHJ1Y3QgYnRyZnNfdHJhbnNhY3Rpb24gKnRyYW5zYWN0aW9uKQogewotCVdBUk5fT04odHJhbnNhY3Rpb24tPnVzZV9jb3VudCA9PSAwKTsKLQl0cmFuc2FjdGlvbi0+dXNlX2NvdW50LS07Ci0JaWYgKHRyYW5zYWN0aW9uLT51c2VfY291bnQgPT0gMCkgewotCQlsaXN0X2RlbF9pbml0KCZ0cmFuc2FjdGlvbi0+bGlzdCk7CisJV0FSTl9PTihhdG9taWNfcmVhZCgmdHJhbnNhY3Rpb24tPnVzZV9jb3VudCkgPT0gMCk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnRyYW5zYWN0aW9uLT51c2VfY291bnQpKSB7CiAJCW1lbXNldCh0cmFuc2FjdGlvbiwgMCwgc2l6ZW9mKCp0cmFuc2FjdGlvbikpOwogCQlrbWVtX2NhY2hlX2ZyZWUoYnRyZnNfdHJhbnNhY3Rpb25fY2FjaGVwLCB0cmFuc2FjdGlvbik7CiAJfQpAQCAtNjAsMTQgKzU4LDE0IEBACiAJCWlmICghY3VyX3RyYW5zKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCXJvb3QtPmZzX2luZm8tPmdlbmVyYXRpb24rKzsKLQkJY3VyX3RyYW5zLT5udW1fd3JpdGVycyA9IDE7CisJCWF0b21pY19zZXQoJmN1cl90cmFucy0+bnVtX3dyaXRlcnMsIDEpOwogCQljdXJfdHJhbnMtPm51bV9qb2luZWQgPSAwOwogCQljdXJfdHJhbnMtPnRyYW5zaWQgPSByb290LT5mc19pbmZvLT5nZW5lcmF0aW9uOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmY3VyX3RyYW5zLT5jb21taXRfd2FpdCk7CiAJCWN1cl90cmFucy0+aW5fY29tbWl0ID0gMDsKIAkJY3VyX3RyYW5zLT5ibG9ja2VkID0gMDsKLQkJY3VyX3RyYW5zLT51c2VfY291bnQgPSAxOworCQlhdG9taWNfc2V0KCZjdXJfdHJhbnMtPnVzZV9jb3VudCwgMSk7CiAJCWN1cl90cmFucy0+Y29tbWl0X2RvbmUgPSAwOwogCQljdXJfdHJhbnMtPnN0YXJ0X3RpbWUgPSBnZXRfc2Vjb25kcygpOwogCkBAIC04OCw3ICs4Niw3IEBACiAJCXJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24gPSBjdXJfdHJhbnM7CiAJCXNwaW5fdW5sb2NrKCZyb290LT5mc19pbmZvLT5uZXdfdHJhbnNfbG9jayk7CiAJfSBlbHNlIHsKLQkJY3VyX3RyYW5zLT5udW1fd3JpdGVycysrOworCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPm51bV93cml0ZXJzKTsKIAkJY3VyX3RyYW5zLT5udW1fam9pbmVkKys7CiAJfQogCkBAIC0xNDUsNyArMTQzLDcgQEAKIAljdXJfdHJhbnMgPSByb290LT5mc19pbmZvLT5ydW5uaW5nX3RyYW5zYWN0aW9uOwogCWlmIChjdXJfdHJhbnMgJiYgY3VyX3RyYW5zLT5ibG9ja2VkKSB7CiAJCURFRklORV9XQUlUKHdhaXQpOwotCQljdXJfdHJhbnMtPnVzZV9jb3VudCsrOworCQlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CiAJCXdoaWxlICgxKSB7CiAJCQlwcmVwYXJlX3RvX3dhaXQoJnJvb3QtPmZzX2luZm8tPnRyYW5zYWN0aW9uX3dhaXQsICZ3YWl0LAogCQkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CkBAIC0xODEsNiArMTc5LDcgQEAKIHsKIAlzdHJ1Y3QgYnRyZnNfdHJhbnNfaGFuZGxlICpoOwogCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiAqY3VyX3RyYW5zOworCWludCByZXRyaWVzID0gMDsKIAlpbnQgcmV0OwogCiAJaWYgKHJvb3QtPmZzX2luZm8tPmZzX3N0YXRlICYgQlRSRlNfU1VQRVJfRkxBR19FUlJPUikKQEAgLTIwNCw3ICsyMDMsNyBAQAogCX0KIAogCWN1cl90cmFucyA9IHJvb3QtPmZzX2luZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb247Ci0JY3VyX3RyYW5zLT51c2VfY291bnQrKzsKKwlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CiAJaWYgKHR5cGUgIT0gVFJBTlNfSk9JTl9OT0xPQ0spCiAJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCkBAIC0yMjQsMTAgKzIyMywxOCBAQAogCiAJaWYgKG51bV9pdGVtcyA+IDApIHsKIAkJcmV0ID0gYnRyZnNfdHJhbnNfcmVzZXJ2ZV9tZXRhZGF0YShoLCByb290LCBudW1faXRlbXMpOwotCQlpZiAocmV0ID09IC1FQUdBSU4pIHsKKwkJaWYgKHJldCA9PSAtRUFHQUlOICYmICFyZXRyaWVzKSB7CisJCQlyZXRyaWVzKys7CiAJCQlidHJmc19jb21taXRfdHJhbnNhY3Rpb24oaCwgcm9vdCk7CiAJCQlnb3RvIGFnYWluOworCQl9IGVsc2UgaWYgKHJldCA9PSAtRUFHQUlOKSB7CisJCQkvKgorCQkJICogV2UgaGF2ZSBhbHJlYWR5IHJldHJpZWQgYW5kIGdvdCBFQUdBSU4sIHNvIHJlYWxseSB3ZQorCQkJICogZG9uJ3QgaGF2ZSBzcGFjZSwgc28gc2V0IHJldCB0byAtRU5PU1BDLgorCQkJICovCisJCQlyZXQgPSAtRU5PU1BDOwogCQl9CisKIAkJaWYgKHJldCA8IDApIHsKIAkJCWJ0cmZzX2VuZF90cmFuc2FjdGlvbihoLCByb290KTsKIAkJCXJldHVybiBFUlJfUFRSKHJldCk7CkBAIC0zMjcsNyArMzM0LDcgQEAKIAkJCWdvdG8gb3V0X3VubG9jazsgIC8qIG5vdGhpbmcgY29tbWl0dGluZ3xjb21taXR0ZWQgKi8KIAl9CiAKLQljdXJfdHJhbnMtPnVzZV9jb3VudCsrOworCWF0b21pY19pbmMoJmN1cl90cmFucy0+dXNlX2NvdW50KTsKIAltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAogCXdhaXRfZm9yX2NvbW1pdChyb290LCBjdXJfdHJhbnMpOwpAQCAtNDU3LDE4ICs0NjQsMTQgQEAKIAkJCXdha2VfdXBfcHJvY2VzcyhpbmZvLT50cmFuc2FjdGlvbl9rdGhyZWFkKTsKIAl9CiAKLQlpZiAobG9jaykKLQkJbXV0ZXhfbG9jaygmaW5mby0+dHJhbnNfbXV0ZXgpOwogCVdBUk5fT04oY3VyX3RyYW5zICE9IGluZm8tPnJ1bm5pbmdfdHJhbnNhY3Rpb24pOwotCVdBUk5fT04oY3VyX3RyYW5zLT5udW1fd3JpdGVycyA8IDEpOwotCWN1cl90cmFucy0+bnVtX3dyaXRlcnMtLTsKKwlXQVJOX09OKGF0b21pY19yZWFkKCZjdXJfdHJhbnMtPm51bV93cml0ZXJzKSA8IDEpOworCWF0b21pY19kZWMoJmN1cl90cmFucy0+bnVtX3dyaXRlcnMpOwogCiAJc21wX21iKCk7CiAJaWYgKHdhaXRxdWV1ZV9hY3RpdmUoJmN1cl90cmFucy0+d3JpdGVyX3dhaXQpKQogCQl3YWtlX3VwKCZjdXJfdHJhbnMtPndyaXRlcl93YWl0KTsKIAlwdXRfdHJhbnNhY3Rpb24oY3VyX3RyYW5zKTsKLQlpZiAobG9jaykKLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT50cmFuc19tdXRleCk7CiAKIAlpZiAoY3VycmVudC0+am91cm5hbF9pbmZvID09IHRyYW5zKQogCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSBOVUxMOwpAQCAtMTE3OCw3ICsxMTgxLDcgQEAKIAkvKiB0YWtlIHRyYW5zYWN0aW9uIHJlZmVyZW5jZSAqLwogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAljdXJfdHJhbnMgPSB0cmFucy0+dHJhbnNhY3Rpb247Ci0JY3VyX3RyYW5zLT51c2VfY291bnQrKzsKKwlhdG9taWNfaW5jKCZjdXJfdHJhbnMtPnVzZV9jb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAKIAlidHJmc19lbmRfdHJhbnNhY3Rpb24odHJhbnMsIHJvb3QpOwpAQCAtMTIzNyw3ICsxMjQwLDcgQEAKIAogCW11dGV4X2xvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAlpZiAoY3VyX3RyYW5zLT5pbl9jb21taXQpIHsKLQkJY3VyX3RyYW5zLT51c2VfY291bnQrKzsKKwkJYXRvbWljX2luYygmY3VyX3RyYW5zLT51c2VfY291bnQpOwogCQltdXRleF91bmxvY2soJnJvb3QtPmZzX2luZm8tPnRyYW5zX211dGV4KTsKIAkJYnRyZnNfZW5kX3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKIApAQCAtMTI1OSw3ICsxMjYyLDcgQEAKIAkJcHJldl90cmFucyA9IGxpc3RfZW50cnkoY3VyX3RyYW5zLT5saXN0LnByZXYsCiAJCQkJCXN0cnVjdCBidHJmc190cmFuc2FjdGlvbiwgbGlzdCk7CiAJCWlmICghcHJldl90cmFucy0+Y29tbWl0X2RvbmUpIHsKLQkJCXByZXZfdHJhbnMtPnVzZV9jb3VudCsrOworCQkJYXRvbWljX2luYygmcHJldl90cmFucy0+dXNlX2NvdW50KTsKIAkJCW11dGV4X3VubG9jaygmcm9vdC0+ZnNfaW5mby0+dHJhbnNfbXV0ZXgpOwogCiAJCQl3YWl0X2Zvcl9jb21taXQocm9vdCwgcHJldl90cmFucyk7CkBAIC0xMzAwLDE0ICsxMzAzLDE0IEBACiAJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCiAJCXNtcF9tYigpOwotCQlpZiAoY3VyX3RyYW5zLT5udW1fd3JpdGVycyA+IDEpCisJCWlmIChhdG9taWNfcmVhZCgmY3VyX3RyYW5zLT5udW1fd3JpdGVycykgPiAxKQogCQkJc2NoZWR1bGVfdGltZW91dChNQVhfU0NIRURVTEVfVElNRU9VVCk7CiAJCWVsc2UgaWYgKHNob3VsZF9ncm93KQogCQkJc2NoZWR1bGVfdGltZW91dCgxKTsKIAogCQltdXRleF9sb2NrKCZyb290LT5mc19pbmZvLT50cmFuc19tdXRleCk7CiAJCWZpbmlzaF93YWl0KCZjdXJfdHJhbnMtPndyaXRlcl93YWl0LCAmd2FpdCk7Ci0JfSB3aGlsZSAoY3VyX3RyYW5zLT5udW1fd3JpdGVycyA+IDEgfHwKKwl9IHdoaWxlIChhdG9taWNfcmVhZCgmY3VyX3RyYW5zLT5udW1fd3JpdGVycykgPiAxIHx8CiAJCSAoc2hvdWxkX2dyb3cgJiYgY3VyX3RyYW5zLT5udW1fam9pbmVkICE9IGpvaW5lZCkpOwogCiAJcmV0ID0gY3JlYXRlX3BlbmRpbmdfc25hcHNob3RzKHRyYW5zLCByb290LT5mc19pbmZvKTsKQEAgLTEzOTQsNiArMTM5Nyw3IEBACiAKIAl3YWtlX3VwKCZjdXJfdHJhbnMtPmNvbW1pdF93YWl0KTsKIAorCWxpc3RfZGVsX2luaXQoJmN1cl90cmFucy0+bGlzdCk7CiAJcHV0X3RyYW5zYWN0aW9uKGN1cl90cmFucyk7CiAJcHV0X3RyYW5zYWN0aW9uKGN1cl90cmFucyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmggYi9mcy9idHJmcy90cmFuc2FjdGlvbi5oCmluZGV4IDIyOWE1OTQuLmU0NDFhY2MgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmgKKysrIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uaApAQCAtMjcsMTEgKzI3LDExIEBACiAJICogdG90YWwgd3JpdGVycyBpbiB0aGlzIHRyYW5zYWN0aW9uLCBpdCBtdXN0IGJlIHplcm8gYmVmb3JlIHRoZQogCSAqIHRyYW5zYWN0aW9uIGNhbiBlbmQKIAkgKi8KLQl1bnNpZ25lZCBsb25nIG51bV93cml0ZXJzOworCWF0b21pY190IG51bV93cml0ZXJzOwogCiAJdW5zaWduZWQgbG9uZyBudW1fam9pbmVkOwogCWludCBpbl9jb21taXQ7Ci0JaW50IHVzZV9jb3VudDsKKwlhdG9taWNfdCB1c2VfY291bnQ7CiAJaW50IGNvbW1pdF9kb25lOwogCWludCBibG9ja2VkOwogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMgYi9mcy9idHJmcy90cmVlLWxvZy5jCmluZGV4IGM1MDI3MWEuLmY5OTdlYzAgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3RyZWUtbG9nLmMKKysrIGIvZnMvYnRyZnMvdHJlZS1sb2cuYwpAQCAtMjIwOSw4ICsyMjA5LDEwIEBACiAKIAlsb2cgPSByb290LT5sb2dfcm9vdDsKIAlwYXRoID0gYnRyZnNfYWxsb2NfcGF0aCgpOwotCWlmICghcGF0aCkKLQkJcmV0dXJuIC1FTk9NRU07CisJaWYgKCFwYXRoKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CiAKIAlkaSA9IGJ0cmZzX2xvb2t1cF9kaXJfaXRlbSh0cmFucywgbG9nLCBwYXRoLCBkaXItPmlfaW5vLAogCQkJCSAgIG5hbWUsIG5hbWVfbGVuLCAtMSk7CkBAIC0yMjcxLDYgKzIyNzMsNyBAQAogCX0KIGZhaWw6CiAJYnRyZnNfZnJlZV9wYXRoKHBhdGgpOworb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJkJUUkZTX0koZGlyKS0+bG9nX211dGV4KTsKIAlpZiAocmV0ID09IC1FTk9TUEMpIHsKIAkJcm9vdC0+ZnNfaW5mby0+bGFzdF90cmFuc19sb2dfZnVsbF9jb21taXQgPSB0cmFucy0+dHJhbnNpZDsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3ZvbHVtZXMuYyBiL2ZzL2J0cmZzL3ZvbHVtZXMuYwppbmRleCAzMDlhNTdiLi5jNzM2N2FlIDEwMDY0NAotLS0gYS9mcy9idHJmcy92b2x1bWVzLmMKKysrIGIvZnMvYnRyZnMvdm9sdW1lcy5jCkBAIC0xNTUsNiArMTU1LDE1IEBACiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKIAl1bnNpZ25lZCBsb25nIGxhc3Rfd2FpdGVkID0gMDsKIAlpbnQgZm9yY2VfcmVnID0gMDsKKwlzdHJ1Y3QgYmxrX3BsdWcgcGx1ZzsKKworCS8qCisJICogdGhpcyBmdW5jdGlvbiBydW5zIGFsbCB0aGUgYmlvcyB3ZSd2ZSBjb2xsZWN0ZWQgZm9yCisJICogYSBwYXJ0aWN1bGFyIGRldmljZS4gIFdlIGRvbid0IHdhbnQgdG8gd2FuZGVyIG9mZiB0bworCSAqIGFub3RoZXIgZGV2aWNlIHdpdGhvdXQgZmlyc3Qgc2VuZGluZyBhbGwgb2YgdGhlc2UgZG93bi4KKwkgKiBTbywgc2V0dXAgYSBwbHVnIGhlcmUgYW5kIGZpbmlzaCBpdCBvZmYgYmVmb3JlIHdlIHJldHVybgorCSAqLworCWJsa19zdGFydF9wbHVnKCZwbHVnKTsKIAogCWJkaSA9IGJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhkZXZpY2UtPmJkZXYpOwogCWZzX2luZm8gPSBkZXZpY2UtPmRldl9yb290LT5mc19pbmZvOwpAQCAtMjk0LDYgKzMwMyw3IEBACiAJc3Bpbl91bmxvY2soJmRldmljZS0+aW9fbG9jayk7CiAKIGRvbmU6CisJYmxrX2ZpbmlzaF9wbHVnKCZwbHVnKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMveGF0dHIuYyBiL2ZzL2J0cmZzL3hhdHRyLmMKaW5kZXggYTUzMDNiOC4uY2ZkNjYwNSAxMDA2NDQKLS0tIGEvZnMvYnRyZnMveGF0dHIuYworKysgYi9mcy9idHJmcy94YXR0ci5jCkBAIC0xODAsMTEgKzE4MCwxMCBAQAogCXN0cnVjdCBidHJmc19wYXRoICpwYXRoOwogCXN0cnVjdCBleHRlbnRfYnVmZmVyICpsZWFmOwogCXN0cnVjdCBidHJmc19kaXJfaXRlbSAqZGk7Ci0JaW50IHJldCA9IDAsIHNsb3QsIGFkdmFuY2U7CisJaW50IHJldCA9IDAsIHNsb3Q7CiAJc2l6ZV90IHRvdGFsX3NpemUgPSAwLCBzaXplX2xlZnQgPSBzaXplOwogCXVuc2lnbmVkIGxvbmcgbmFtZV9wdHI7CiAJc2l6ZV90IG5hbWVfbGVuOwotCXUzMiBucml0ZW1zOwogCiAJLyoKIAkgKiBvayB3ZSB3YW50IGFsbCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlkLgpAQCAtMjA0LDM0ICsyMDMsMjQgQEAKIAlyZXQgPSBidHJmc19zZWFyY2hfc2xvdChOVUxMLCByb290LCAma2V5LCBwYXRoLCAwLCAwKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnI7Ci0JYWR2YW5jZSA9IDA7CisKIAl3aGlsZSAoMSkgewogCQlsZWFmID0gcGF0aC0+bm9kZXNbMF07Ci0JCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKIAkJc2xvdCA9IHBhdGgtPnNsb3RzWzBdOwogCiAJCS8qIHRoaXMgaXMgd2hlcmUgd2Ugc3RhcnQgd2Fsa2luZyB0aHJvdWdoIHRoZSBwYXRoICovCi0JCWlmIChhZHZhbmNlIHx8IHNsb3QgPj0gbnJpdGVtcykgeworCQlpZiAoc2xvdCA+PSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKSkgewogCQkJLyoKIAkJCSAqIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlIGxhc3Qgc2xvdCBpbiB0aGlzIGxlYWYgd2UgbmVlZAogCQkJICogdG8gZ28gdG8gdGhlIG5leHQgbGVhZiBhbmQgcmVzZXQgZXZlcnl0aGluZwogCQkJICovCi0JCQlpZiAoc2xvdCA+PSBucml0ZW1zLTEpIHsKLQkJCQlyZXQgPSBidHJmc19uZXh0X2xlYWYocm9vdCwgcGF0aCk7Ci0JCQkJaWYgKHJldCkKLQkJCQkJYnJlYWs7Ci0JCQkJbGVhZiA9IHBhdGgtPm5vZGVzWzBdOwotCQkJCW5yaXRlbXMgPSBidHJmc19oZWFkZXJfbnJpdGVtcyhsZWFmKTsKLQkJCQlzbG90ID0gcGF0aC0+c2xvdHNbMF07Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICoganVzdCB3YWxraW5nIHRocm91Z2ggdGhlIHNsb3RzIG9uIHRoaXMgbGVhZgotCQkJCSAqLwotCQkJCXNsb3QrKzsKLQkJCQlwYXRoLT5zbG90c1swXSsrOwotCQkJfQorCQkJcmV0ID0gYnRyZnNfbmV4dF9sZWFmKHJvb3QsIHBhdGgpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBlcnI7CisJCQllbHNlIGlmIChyZXQgPiAwKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CiAJCX0KLQkJYWR2YW5jZSA9IDE7CiAKIAkJYnRyZnNfaXRlbV9rZXlfdG9fY3B1KGxlYWYsICZmb3VuZF9rZXksIHNsb3QpOwogCkBAIC0yNTAsNyArMjM5LDcgQEAKIAogCQkvKiB3ZSBhcmUganVzdCBsb29raW5nIGZvciBob3cgYmlnIG91ciBidWZmZXIgbmVlZHMgdG8gYmUgKi8KIAkJaWYgKCFzaXplKQotCQkJY29udGludWU7CisJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKCFidWZmZXIgfHwgKG5hbWVfbGVuICsgMSkgPiBzaXplX2xlZnQpIHsKIAkJCXJldCA9IC1FUkFOR0U7CkBAIC0yNjMsNiArMjUyLDggQEAKIAogCQlzaXplX2xlZnQgLT0gbmFtZV9sZW4gKyAxOwogCQlidWZmZXIgKz0gbmFtZV9sZW4gKyAxOworbmV4dDoKKwkJcGF0aC0+c2xvdHNbMF0rKzsKIAl9CiAJcmV0ID0gdG90YWxfc2l6ZTsKIApkaWZmIC0tZ2l0IGEvZnMvY2VwaC9hZGRyLmMgYi9mcy9jZXBoL2FkZHIuYwppbmRleCBlMTU5YzUyLi4zOGI4YWI1IDEwMDY0NAotLS0gYS9mcy9jZXBoL2FkZHIuYworKysgYi9mcy9jZXBoL2FkZHIuYwpAQCAtNzc1LDYgKzc3NSwxMyBAQAogCQkJCQkgICAgY2ktPmlfdHJ1bmNhdGVfc2VxLAogCQkJCQkgICAgY2ktPmlfdHJ1bmNhdGVfc2l6ZSwKIAkJCQkJICAgICZpbm9kZS0+aV9tdGltZSwgdHJ1ZSwgMSwgMCk7CisKKwkJCQlpZiAoIXJlcSkgeworCQkJCQlyYyA9IC1FTk9NRU07CisJCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCQlicmVhazsKKwkJCQl9CisKIAkJCQltYXhfcGFnZXMgPSByZXEtPnJfbnVtX3BhZ2VzOwogCiAJCQkJYWxsb2NfcGFnZV92ZWMoZnNjLCByZXEpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9jYXBzLmMgYi9mcy9jZXBoL2NhcHMuYwppbmRleCA1MzIzYzMzLi4yYTU0MDRjIDEwMDY0NAotLS0gYS9mcy9jZXBoL2NhcHMuYworKysgYi9mcy9jZXBoL2NhcHMuYwpAQCAtODE5LDcgKzgxOSw3IEBACiAJCXVzZWQgfD0gQ0VQSF9DQVBfRklMRV9DQUNIRTsKIAlpZiAoY2ktPmlfd3JfcmVmKQogCQl1c2VkIHw9IENFUEhfQ0FQX0ZJTEVfV1I7Ci0JaWYgKGNpLT5pX3dyYnVmZmVyX3JlZikKKwlpZiAoY2ktPmlfd2JfcmVmIHx8IGNpLT5pX3dyYnVmZmVyX3JlZikKIAkJdXNlZCB8PSBDRVBIX0NBUF9GSUxFX0JVRkZFUjsKIAlyZXR1cm4gdXNlZDsKIH0KQEAgLTEzMzEsMTAgKzEzMzEsMTEgQEAKIH0KIAogLyoKLSAqIE1hcmsgY2FwcyBkaXJ0eS4gIElmIGlub2RlIGlzIG5ld2x5IGRpcnR5LCBhZGQgdG8gdGhlIGdsb2JhbCBkaXJ0eQotICogbGlzdC4KKyAqIE1hcmsgY2FwcyBkaXJ0eS4gIElmIGlub2RlIGlzIG5ld2x5IGRpcnR5LCByZXR1cm4gdGhlIGRpcnR5IGZsYWdzLgorICogQ2FsbGVyIGlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGNhbGxpbmcgX19tYXJrX2lub2RlX2RpcnR5IHdpdGggdGhlCisgKiByZXR1cm5lZCBmbGFncyB2YWx1ZS4KICAqLwotdm9pZCBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgbWFzaykKK2ludCBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgbWFzaykKIHsKIAlzdHJ1Y3QgY2VwaF9tZHNfY2xpZW50ICptZHNjID0KIAkJY2VwaF9zYl90b19jbGllbnQoY2ktPnZmc19pbm9kZS5pX3NiKS0+bWRzYzsKQEAgLTEzNTcsNyArMTM1OCw3IEBACiAJCWxpc3RfYWRkKCZjaS0+aV9kaXJ0eV9pdGVtLCAmbWRzYy0+Y2FwX2RpcnR5KTsKIAkJc3Bpbl91bmxvY2soJm1kc2MtPmNhcF9kaXJ0eV9sb2NrKTsKIAkJaWYgKGNpLT5pX2ZsdXNoaW5nX2NhcHMgPT0gMCkgewotCQkJaWdyYWIoaW5vZGUpOworCQkJaWhvbGQoaW5vZGUpOwogCQkJZGlydHkgfD0gSV9ESVJUWV9TWU5DOwogCQl9CiAJfQpAQCAtMTM2NSw5ICsxMzY2LDggQEAKIAlpZiAoKCh3YXMgfCBjaS0+aV9mbHVzaGluZ19jYXBzKSAmIENFUEhfQ0FQX0ZJTEVfQlVGRkVSKSAmJgogCSAgICAobWFzayAmIENFUEhfQ0FQX0ZJTEVfQlVGRkVSKSkKIAkJZGlydHkgfD0gSV9ESVJUWV9EQVRBU1lOQzsKLQlpZiAoZGlydHkpCi0JCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgZGlydHkpOwogCV9fY2FwX2RlbGF5X3JlcXVldWUobWRzYywgY2kpOworCXJldHVybiBkaXJ0eTsKIH0KIAogLyoKQEAgLTE5OTAsMTEgKzE5OTAsMTEgQEAKIAlpZiAoZ290ICYgQ0VQSF9DQVBfRklMRV9XUikKIAkJY2ktPmlfd3JfcmVmKys7CiAJaWYgKGdvdCAmIENFUEhfQ0FQX0ZJTEVfQlVGRkVSKSB7Ci0JCWlmIChjaS0+aV93cmJ1ZmZlcl9yZWYgPT0gMCkKLQkJCWlncmFiKCZjaS0+dmZzX2lub2RlKTsKLQkJY2ktPmlfd3JidWZmZXJfcmVmKys7Ci0JCWRvdXQoIl9fdGFrZV9jYXBfcmVmcyAlcCB3cmJ1ZmZlciAlZCAtPiAlZCAoPylcbiIsCi0JCSAgICAgJmNpLT52ZnNfaW5vZGUsIGNpLT5pX3dyYnVmZmVyX3JlZi0xLCBjaS0+aV93cmJ1ZmZlcl9yZWYpOworCQlpZiAoY2ktPmlfd2JfcmVmID09IDApCisJCQlpaG9sZCgmY2ktPnZmc19pbm9kZSk7CisJCWNpLT5pX3diX3JlZisrOworCQlkb3V0KCJfX3Rha2VfY2FwX3JlZnMgJXAgd2IgJWQgLT4gJWQgKD8pXG4iLAorCQkgICAgICZjaS0+dmZzX2lub2RlLCBjaS0+aV93Yl9yZWYtMSwgY2ktPmlfd2JfcmVmKTsKIAl9CiB9CiAKQEAgLTIxNjksMTIgKzIxNjksMTIgQEAKIAkJaWYgKC0tY2ktPmlfcmRjYWNoZV9yZWYgPT0gMCkKIAkJCWxhc3QrKzsKIAlpZiAoaGFkICYgQ0VQSF9DQVBfRklMRV9CVUZGRVIpIHsKLQkJaWYgKC0tY2ktPmlfd3JidWZmZXJfcmVmID09IDApIHsKKwkJaWYgKC0tY2ktPmlfd2JfcmVmID09IDApIHsKIAkJCWxhc3QrKzsKIAkJCXB1dCsrOwogCQl9Ci0JCWRvdXQoInB1dF9jYXBfcmVmcyAlcCB3cmJ1ZmZlciAlZCAtPiAlZCAoPylcbiIsCi0JCSAgICAgaW5vZGUsIGNpLT5pX3dyYnVmZmVyX3JlZisxLCBjaS0+aV93cmJ1ZmZlcl9yZWYpOworCQlkb3V0KCJwdXRfY2FwX3JlZnMgJXAgd2IgJWQgLT4gJWQgKD8pXG4iLAorCQkgICAgIGlub2RlLCBjaS0+aV93Yl9yZWYrMSwgY2ktPmlfd2JfcmVmKTsKIAl9CiAJaWYgKGhhZCAmIENFUEhfQ0FQX0ZJTEVfV1IpCiAJCWlmICgtLWNpLT5pX3dyX3JlZiA9PSAwKSB7CmRpZmYgLS1naXQgYS9mcy9jZXBoL2ZpbGUuYyBiL2ZzL2NlcGgvZmlsZS5jCmluZGV4IDE1OWI1MTIuLjIwMzI1MmQgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvZmlsZS5jCisrKyBiL2ZzL2NlcGgvZmlsZS5jCkBAIC03MzQsOSArNzM0LDEyIEBACiAJCX0KIAl9CiAJaWYgKHJldCA+PSAwKSB7CisJCWludCBkaXJ0eTsKIAkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQkJX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgQ0VQSF9DQVBfRklMRV9XUik7CisJCWRpcnR5ID0gX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgQ0VQSF9DQVBfRklMRV9XUik7CiAJCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwkJaWYgKGRpcnR5KQorCQkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBkaXJ0eSk7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9mcy9jZXBoL2lub2RlLmMgYi9mcy9jZXBoL2lub2RlLmMKaW5kZXggYjU0Yzk3ZC4uNzBiNmE0OCAxMDA2NDQKLS0tIGEvZnMvY2VwaC9pbm9kZS5jCisrKyBiL2ZzL2NlcGgvaW5vZGUuYwpAQCAtMzU1LDYgKzM1NSw3IEBACiAJY2ktPmlfcmRfcmVmID0gMDsKIAljaS0+aV9yZGNhY2hlX3JlZiA9IDA7CiAJY2ktPmlfd3JfcmVmID0gMDsKKwljaS0+aV93Yl9yZWYgPSAwOwogCWNpLT5pX3dyYnVmZmVyX3JlZiA9IDA7CiAJY2ktPmlfd3JidWZmZXJfcmVmX2hlYWQgPSAwOwogCWNpLT5pX3NoYXJlZF9nZW4gPSAwOwpAQCAtMTU2Nyw2ICsxNTY4LDcgQEAKIAlpbnQgcmVsZWFzZSA9IDAsIGRpcnRpZWQgPSAwOwogCWludCBtYXNrID0gMDsKIAlpbnQgZXJyID0gMDsKKwlpbnQgaW5vZGVfZGlydHlfZmxhZ3MgPSAwOwogCiAJaWYgKGNlcGhfc25hcChpbm9kZSkgIT0gQ0VQSF9OT1NOQVApCiAJCXJldHVybiAtRVJPRlM7CkBAIC0xNzI1LDEzICsxNzI3LDE2IEBACiAJCWRvdXQoInNldGF0dHIgJXAgQVRUUl9GSUxFIC4uLiBocm0hXG4iLCBpbm9kZSk7CiAKIAlpZiAoZGlydGllZCkgewotCQlfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBkaXJ0aWVkKTsKKwkJaW5vZGVfZGlydHlfZmxhZ3MgPSBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBkaXJ0aWVkKTsKIAkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJfQogCiAJcmVsZWFzZSAmPSBpc3N1ZWQ7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCisJaWYgKGlub2RlX2RpcnR5X2ZsYWdzKQorCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIGlub2RlX2RpcnR5X2ZsYWdzKTsKKwogCWlmIChtYXNrKSB7CiAJCXJlcS0+cl9pbm9kZSA9IGlncmFiKGlub2RlKTsKIAkJcmVxLT5yX2lub2RlX2Ryb3AgPSByZWxlYXNlOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9tZHNfY2xpZW50LmMgYi9mcy9jZXBoL21kc19jbGllbnQuYwppbmRleCBmNjBiMDdiLi5kMGZhZTRjIDEwMDY0NAotLS0gYS9mcy9jZXBoL21kc19jbGllbnQuYworKysgYi9mcy9jZXBoL21kc19jbGllbnQuYwpAQCAtMzMwNCw4ICszMzA0LDggQEAKIHsKIAlzdHJ1Y3QgY2VwaF9tZHNfc2Vzc2lvbiAqcyA9IGNvbi0+cHJpdmF0ZTsKIAorCWRvdXQoIm1kc2MgY29uX3B1dCAlcCAoJWQpXG4iLCBzLCBhdG9taWNfcmVhZCgmcy0+c19yZWYpIC0gMSk7CiAJY2VwaF9wdXRfbWRzX3Nlc3Npb24ocyk7Ci0JZG91dCgibWRzYyBjb25fcHV0ICVwICglZClcbiIsIHMsIGF0b21pY19yZWFkKCZzLT5zX3JlZikpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zbmFwLmMgYi9mcy9jZXBoL3NuYXAuYwppbmRleCBlODZlYzExLi4yNDA2N2Q2IDEwMDY0NAotLS0gYS9mcy9jZXBoL3NuYXAuYworKysgYi9mcy9jZXBoL3NuYXAuYwpAQCAtMjA2LDcgKzIwNiw3IEBACiAJCXVwX3dyaXRlKCZtZHNjLT5zbmFwX3J3c2VtKTsKIAl9IGVsc2UgewogCQlzcGluX2xvY2soJm1kc2MtPnNuYXBfZW1wdHlfbG9jayk7Ci0JCWxpc3RfYWRkKCZtZHNjLT5zbmFwX2VtcHR5LCAmcmVhbG0tPmVtcHR5X2l0ZW0pOworCQlsaXN0X2FkZCgmcmVhbG0tPmVtcHR5X2l0ZW0sICZtZHNjLT5zbmFwX2VtcHR5KTsKIAkJc3Bpbl91bmxvY2soJm1kc2MtPnNuYXBfZW1wdHlfbG9jayk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZnMvY2VwaC9zdXBlci5oIGIvZnMvY2VwaC9zdXBlci5oCmluZGV4IDYxOWZlNzEuLmY1Y2FiZWYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgvc3VwZXIuaAorKysgYi9mcy9jZXBoL3N1cGVyLmgKQEAgLTI5Myw3ICsyOTMsNyBAQAogCiAJLyogaGVsZCByZWZlcmVuY2VzIHRvIGNhcHMgKi8KIAlpbnQgaV9waW5fcmVmOwotCWludCBpX3JkX3JlZiwgaV9yZGNhY2hlX3JlZiwgaV93cl9yZWY7CisJaW50IGlfcmRfcmVmLCBpX3JkY2FjaGVfcmVmLCBpX3dyX3JlZiwgaV93Yl9yZWY7CiAJaW50IGlfd3JidWZmZXJfcmVmLCBpX3dyYnVmZmVyX3JlZl9oZWFkOwogCXUzMiBpX3NoYXJlZF9nZW47ICAgICAgIC8qIGluY3JlbWVudCBlYWNoIHRpbWUgd2UgZ2V0IEZJTEVfU0hBUkVEICovCiAJdTMyIGlfcmRjYWNoZV9nZW47ICAgICAgLyogaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHdlIGdldCBGSUxFX0NBQ0hFLiAqLwpAQCAtNTA2LDcgKzUwNiw3IEBACiB7CiAJcmV0dXJuIGNpLT5pX2RpcnR5X2NhcHMgfCBjaS0+aV9mbHVzaGluZ19jYXBzOwogfQotZXh0ZXJuIHZvaWQgX19jZXBoX21hcmtfZGlydHlfY2FwcyhzdHJ1Y3QgY2VwaF9pbm9kZV9pbmZvICpjaSwgaW50IG1hc2spOworZXh0ZXJuIGludCBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgbWFzayk7CiAKIGV4dGVybiBpbnQgY2VwaF9jYXBzX3Jldm9raW5nKHN0cnVjdCBjZXBoX2lub2RlX2luZm8gKmNpLCBpbnQgbWFzayk7CiBleHRlcm4gaW50IF9fY2VwaF9jYXBzX3VzZWQoc3RydWN0IGNlcGhfaW5vZGVfaW5mbyAqY2kpOwpkaWZmIC0tZ2l0IGEvZnMvY2VwaC94YXR0ci5jIGIvZnMvY2VwaC94YXR0ci5jCmluZGV4IDhjOWViYTYuLmYyYjYyODYgMTAwNjQ0Ci0tLSBhL2ZzL2NlcGgveGF0dHIuYworKysgYi9mcy9jZXBoL3hhdHRyLmMKQEAgLTcwMyw2ICs3MDMsNyBAQAogCXN0cnVjdCBjZXBoX2lub2RlX3hhdHRyICp4YXR0ciA9IE5VTEw7CiAJaW50IGlzc3VlZDsKIAlpbnQgcmVxdWlyZWRfYmxvYl9zaXplOworCWludCBkaXJ0eTsKIAogCWlmIChjZXBoX3NuYXAoaW5vZGUpICE9IENFUEhfTk9TTkFQKQogCQlyZXR1cm4gLUVST0ZTOwpAQCAtNzYzLDExICs3NjQsMTIgQEAKIAlkb3V0KCJzZXR4YXR0ciAlcCBpc3N1ZWQgJXNcbiIsIGlub2RlLCBjZXBoX2NhcF9zdHJpbmcoaXNzdWVkKSk7CiAJZXJyID0gX19zZXRfeGF0dHIoY2ksIG5ld25hbWUsIG5hbWVfbGVuLCBuZXd2YWwsCiAJCQkgIHZhbF9sZW4sIDEsIDEsIDEsICZ4YXR0cik7Ci0JX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgQ0VQSF9DQVBfWEFUVFJfRVhDTCk7CisJZGlydHkgPSBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBDRVBIX0NBUF9YQVRUUl9FWENMKTsKIAljaS0+aV94YXR0cnMuZGlydHkgPSB0cnVlOwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQorCWlmIChkaXJ0eSkKKwkJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBkaXJ0eSk7CiAJcmV0dXJuIGVycjsKIAogZG9fc3luYzoKQEAgLTgxMCw2ICs4MTIsNyBAQAogCXN0cnVjdCBjZXBoX3Z4YXR0cl9jYiAqdnhhdHRycyA9IGNlcGhfaW5vZGVfdnhhdHRycyhpbm9kZSk7CiAJaW50IGlzc3VlZDsKIAlpbnQgZXJyOworCWludCBkaXJ0eTsKIAogCWlmIChjZXBoX3NuYXAoaW5vZGUpICE9IENFUEhfTk9TTkFQKQogCQlyZXR1cm4gLUVST0ZTOwpAQCAtODMzLDEyICs4MzYsMTMgQEAKIAkJZ290byBkb19zeW5jOwogCiAJZXJyID0gX19yZW1vdmVfeGF0dHJfYnlfbmFtZShjZXBoX2lub2RlKGlub2RlKSwgbmFtZSk7Ci0JX19jZXBoX21hcmtfZGlydHlfY2FwcyhjaSwgQ0VQSF9DQVBfWEFUVFJfRVhDTCk7CisJZGlydHkgPSBfX2NlcGhfbWFya19kaXJ0eV9jYXBzKGNpLCBDRVBIX0NBUF9YQVRUUl9FWENMKTsKIAljaS0+aV94YXR0cnMuZGlydHkgPSB0cnVlOwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCisJaWYgKGRpcnR5KQorCQlfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIGRpcnR5KTsKIAlyZXR1cm4gZXJyOwogZG9fc3luYzoKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5jIGIvZnMvY2lmcy9jaWZzX3VuaWNvZGUuYwppbmRleCAyM2Q0M2NkLi4xYjJlMTgwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfdW5pY29kZS5jCisrKyBiL2ZzL2NpZnMvY2lmc191bmljb2RlLmMKQEAgLTI3Nyw2ICsyNzcsNyBAQAogCiAJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBzcmNsZW47IGorKykgewogCQlzcmNfY2hhciA9IHNvdXJjZVtpXTsKKwkJY2hhcmxlbiA9IDE7CiAJCXN3aXRjaCAoc3JjX2NoYXIpIHsKIAkJY2FzZSAwOgogCQkJcHV0X3VuYWxpZ25lZCgwLCAmdGFyZ2V0W2pdKTsKQEAgLTMxNiwxNiArMzE3LDEzIEBACiAJCQkJZHN0X2NoYXIgPSBjcHVfdG9fbGUxNigweDAwM2YpOwogCQkJCWNoYXJsZW4gPSAxOwogCQkJfQotCQkJLyoKLQkJCSAqIGNoYXJhY3RlciBtYXkgdGFrZSBtb3JlIHRoYW4gb25lIGJ5dGUgaW4gdGhlIHNvdXJjZQotCQkJICogc3RyaW5nLCBidXQgd2lsbCB0YWtlIGV4YWN0bHkgdHdvIGJ5dGVzIGluIHRoZQotCQkJICogdGFyZ2V0IHN0cmluZwotCQkJICovCi0JCQlpICs9IGNoYXJsZW47Ci0JCQljb250aW51ZTsKIAkJfQorCQkvKgorCQkgKiBjaGFyYWN0ZXIgbWF5IHRha2UgbW9yZSB0aGFuIG9uZSBieXRlIGluIHRoZSBzb3VyY2Ugc3RyaW5nLAorCQkgKiBidXQgd2lsbCB0YWtlIGV4YWN0bHkgdHdvIGJ5dGVzIGluIHRoZSB0YXJnZXQgc3RyaW5nCisJCSAqLworCQlpICs9IGNoYXJsZW47CiAJCXB1dF91bmFsaWduZWQoZHN0X2NoYXIsICZ0YXJnZXRbal0pOwotCQlpKys7IC8qIG1vdmUgdG8gbmV4dCBjaGFyIGluIHNvdXJjZSBzdHJpbmcgKi8KIAl9CiAKIGN0b1VDU19vdXQ6CmRpZmYgLS1naXQgYS9mcy9jaWZzL2Nvbm5lY3QuYyBiL2ZzL2NpZnMvY29ubmVjdC5jCmluZGV4IGRiOWQ1NWIuLjI3NzI2MmEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY29ubmVjdC5jCisrKyBiL2ZzL2NpZnMvY29ubmVjdC5jCkBAIC0yNzQsNyArMjc0LDggQEAKIAljaGFyICpkYXRhX2FyZWFfb2ZfdGFyZ2V0OwogCWNoYXIgKmRhdGFfYXJlYV9vZl9idWYyOwogCWludCByZW1haW5pbmc7Ci0JX191MTYgYnl0ZV9jb3VudCwgdG90YWxfZGF0YV9zaXplLCB0b3RhbF9pbl9idWYsIHRvdGFsX2luX2J1ZjI7CisJdW5zaWduZWQgaW50IGJ5dGVfY291bnQsIHRvdGFsX2luX2J1ZjsKKwlfX3UxNiB0b3RhbF9kYXRhX3NpemUsIHRvdGFsX2luX2J1ZjI7CiAKIAl0b3RhbF9kYXRhX3NpemUgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJnBTTUJ0LT50Ml9yc3AuVG90YWxEYXRhQ291bnQpOwogCkBAIC0yODcsNyArMjg4LDcgQEAKIAlyZW1haW5pbmcgPSB0b3RhbF9kYXRhX3NpemUgLSB0b3RhbF9pbl9idWY7CiAKIAlpZiAocmVtYWluaW5nIDwgMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRVBST1RPOwogCiAJaWYgKHJlbWFpbmluZyA9PSAwKSAvKiBub3RoaW5nIHRvIGRvLCBpZ25vcmUgKi8KIAkJcmV0dXJuIDA7CkBAIC0zMDgsMjAgKzMwOSwyOSBAQAogCWRhdGFfYXJlYV9vZl90YXJnZXQgKz0gdG90YWxfaW5fYnVmOwogCiAJLyogY29weSBzZWNvbmQgYnVmZmVyIGludG8gZW5kIG9mIGZpcnN0IGJ1ZmZlciAqLwotCW1lbWNweShkYXRhX2FyZWFfb2ZfdGFyZ2V0LCBkYXRhX2FyZWFfb2ZfYnVmMiwgdG90YWxfaW5fYnVmMik7CiAJdG90YWxfaW5fYnVmICs9IHRvdGFsX2luX2J1ZjI7CisJLyogaXMgdGhlIHJlc3VsdCB0b28gYmlnIGZvciB0aGUgZmllbGQ/ICovCisJaWYgKHRvdGFsX2luX2J1ZiA+IFVTSFJUX01BWCkKKwkJcmV0dXJuIC1FUFJPVE87CiAJcHV0X3VuYWxpZ25lZF9sZTE2KHRvdGFsX2luX2J1ZiwgJnBTTUJ0LT50Ml9yc3AuRGF0YUNvdW50KTsKKworCS8qIGZpeCB1cCB0aGUgQkNDICovCiAJYnl0ZV9jb3VudCA9IGdldF9iY2NfbGUocFRhcmdldFNNQik7CiAJYnl0ZV9jb3VudCArPSB0b3RhbF9pbl9idWYyOworCS8qIGlzIHRoZSByZXN1bHQgdG9vIGJpZyBmb3IgdGhlIGZpZWxkPyAqLworCWlmIChieXRlX2NvdW50ID4gVVNIUlRfTUFYKQorCQlyZXR1cm4gLUVQUk9UTzsKIAlwdXRfYmNjX2xlKGJ5dGVfY291bnQsIHBUYXJnZXRTTUIpOwogCiAJYnl0ZV9jb3VudCA9IHBUYXJnZXRTTUItPnNtYl9idWZfbGVuZ3RoOwogCWJ5dGVfY291bnQgKz0gdG90YWxfaW5fYnVmMjsKLQotCS8qIEJCIGFsc28gYWRkIGNoZWNrIHRoYXQgd2UgYXJlIG5vdCBiZXlvbmQgbWF4aW11bSBidWZmZXIgc2l6ZSAqLwotCisJLyogZG9uJ3QgYWxsb3cgYnVmZmVyIHRvIG92ZXJmbG93ICovCisJaWYgKGJ5dGVfY291bnQgPiBDSUZTTWF4QnVmU2l6ZSkKKwkJcmV0dXJuIC1FTk9CVUZTOwogCXBUYXJnZXRTTUItPnNtYl9idWZfbGVuZ3RoID0gYnl0ZV9jb3VudDsKIAorCW1lbWNweShkYXRhX2FyZWFfb2ZfdGFyZ2V0LCBkYXRhX2FyZWFfb2ZfYnVmMiwgdG90YWxfaW5fYnVmMik7CisKIAlpZiAocmVtYWluaW5nID09IHRvdGFsX2luX2J1ZjIpIHsKIAkJY0ZZSSgxLCAiZm91bmQgdGhlIGxhc3Qgc2Vjb25kYXJ5IHJlc3BvbnNlIik7CiAJCXJldHVybiAwOyAvKiB3ZSBhcmUgZG9uZSAqLwpAQCAtNjA3LDU5ICs2MTcsNjMgQEAKIAkJbGlzdF9mb3JfZWFjaF9zYWZlKHRtcCwgdG1wMiwgJnNlcnZlci0+cGVuZGluZ19taWRfcSkgewogCQkJbWlkX2VudHJ5ID0gbGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBtaWRfcV9lbnRyeSwgcWhlYWQpOwogCi0JCQlpZiAoKG1pZF9lbnRyeS0+bWlkID09IHNtYl9idWZmZXItPk1pZCkgJiYKLQkJCSAgICAobWlkX2VudHJ5LT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpICYmCi0JCQkgICAgKG1pZF9lbnRyeS0+Y29tbWFuZCA9PSBzbWJfYnVmZmVyLT5Db21tYW5kKSkgewotCQkJCWlmIChsZW5ndGggPT0gMCAmJgotCQkJCSAgIGNoZWNrMm5kVDIoc21iX2J1ZmZlciwgc2VydmVyLT5tYXhCdWYpID4gMCkgewotCQkJCQkvKiBXZSBoYXZlIGEgbXVsdGlwYXJ0IHRyYW5zYWN0MiByZXNwICovCi0JCQkJCWlzTXVsdGlSc3AgPSB0cnVlOwotCQkJCQlpZiAobWlkX2VudHJ5LT5yZXNwX2J1ZikgewotCQkJCQkJLyogbWVyZ2UgcmVzcG9uc2UgLSBmaXggdXAgMXN0Ki8KLQkJCQkJCWlmIChjb2FsZXNjZV90MihzbWJfYnVmZmVyLAotCQkJCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYpKSB7Ci0JCQkJCQkJbWlkX2VudHJ5LT5tdWx0aVJzcCA9Ci0JCQkJCQkJCSB0cnVlOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkvKiBhbGwgcGFydHMgcmVjZWl2ZWQgKi8KLQkJCQkJCQltaWRfZW50cnktPm11bHRpRW5kID0KLQkJCQkJCQkJIHRydWU7Ci0JCQkJCQkJZ290byBtdWx0aV90Ml9mbmQ7Ci0JCQkJCQl9CisJCQlpZiAobWlkX2VudHJ5LT5taWQgIT0gc21iX2J1ZmZlci0+TWlkIHx8CisJCQkgICAgbWlkX2VudHJ5LT5taWRTdGF0ZSAhPSBNSURfUkVRVUVTVF9TVUJNSVRURUQgfHwKKwkJCSAgICBtaWRfZW50cnktPmNvbW1hbmQgIT0gc21iX2J1ZmZlci0+Q29tbWFuZCkgeworCQkJCW1pZF9lbnRyeSA9IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChsZW5ndGggPT0gMCAmJgorCQkJICAgIGNoZWNrMm5kVDIoc21iX2J1ZmZlciwgc2VydmVyLT5tYXhCdWYpID4gMCkgeworCQkJCS8qIFdlIGhhdmUgYSBtdWx0aXBhcnQgdHJhbnNhY3QyIHJlc3AgKi8KKwkJCQlpc011bHRpUnNwID0gdHJ1ZTsKKwkJCQlpZiAobWlkX2VudHJ5LT5yZXNwX2J1ZikgeworCQkJCQkvKiBtZXJnZSByZXNwb25zZSAtIGZpeCB1cCAxc3QqLworCQkJCQlsZW5ndGggPSBjb2FsZXNjZV90MihzbWJfYnVmZmVyLAorCQkJCQkJCW1pZF9lbnRyeS0+cmVzcF9idWYpOworCQkJCQlpZiAobGVuZ3RoID4gMCkgeworCQkJCQkJbGVuZ3RoID0gMDsKKwkJCQkJCW1pZF9lbnRyeS0+bXVsdGlSc3AgPSB0cnVlOworCQkJCQkJYnJlYWs7CiAJCQkJCX0gZWxzZSB7Ci0JCQkJCQlpZiAoIWlzTGFyZ2VCdWYpIHsKLQkJCQkJCQljRVJST1IoMSwgIjFzdCB0cmFuczIgcmVzcCBuZWVkcyBiaWdidWYiKTsKLQkJCQkJLyogQkIgbWF5YmUgd2UgY2FuIGZpeCB0aGlzIHVwLCAgc3dpdGNoCi0JCQkJCSAgIHRvIGFscmVhZHkgYWxsb2NhdGVkIGxhcmdlIGJ1ZmZlcj8gKi8KLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJLyogSGF2ZSBmaXJzdCBidWZmZXIgKi8KLQkJCQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0KLQkJCQkJCQkJIHNtYl9idWZmZXI7Ci0JCQkJCQkJbWlkX2VudHJ5LT5sYXJnZUJ1ZiA9Ci0JCQkJCQkJCSB0cnVlOwotCQkJCQkJCWJpZ2J1ZiA9IE5VTEw7Ci0JCQkJCQl9CisJCQkJCQkvKiBhbGwgcGFydHMgcmVjZWl2ZWQgb3IKKwkJCQkJCSAqIHBhY2tldCBpcyBtYWxmb3JtZWQKKwkJCQkJCSAqLworCQkJCQkJbWlkX2VudHJ5LT5tdWx0aUVuZCA9IHRydWU7CisJCQkJCQlnb3RvIG11bHRpX3QyX2ZuZDsKIAkJCQkJfQotCQkJCQlicmVhazsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoIWlzTGFyZ2VCdWYpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBGSVhNRTogc3dpdGNoIHRvIGFscmVhZHkKKwkJCQkJCSAqICAgICAgICBhbGxvY2F0ZWQgbGFyZ2VidWY/CisJCQkJCQkgKi8KKwkJCQkJCWNFUlJPUigxLCAiMXN0IHRyYW5zMiByZXNwICIKKwkJCQkJCQkgICJuZWVkcyBiaWdidWYiKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCS8qIEhhdmUgZmlyc3QgYnVmZmVyICovCisJCQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0KKwkJCQkJCQkgc21iX2J1ZmZlcjsKKwkJCQkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSB0cnVlOworCQkJCQkJYmlnYnVmID0gTlVMTDsKKwkJCQkJfQogCQkJCX0KLQkJCQltaWRfZW50cnktPnJlc3BfYnVmID0gc21iX2J1ZmZlcjsKLQkJCQltaWRfZW50cnktPmxhcmdlQnVmID0gaXNMYXJnZUJ1ZjsKLW11bHRpX3QyX2ZuZDoKLQkJCQlpZiAobGVuZ3RoID09IDApCi0JCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPQotCQkJCQkJCU1JRF9SRVNQT05TRV9SRUNFSVZFRDsKLQkJCQllbHNlCi0JCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPQotCQkJCQkJCU1JRF9SRVNQT05TRV9NQUxGT1JNRUQ7Ci0jaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCi0JCQkJbWlkX2VudHJ5LT53aGVuX3JlY2VpdmVkID0gamlmZmllczsKLSNlbmRpZgotCQkJCWxpc3RfZGVsX2luaXQoJm1pZF9lbnRyeS0+cWhlYWQpOwotCQkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCW1pZF9lbnRyeSA9IE5VTEw7CisJCQltaWRfZW50cnktPnJlc3BfYnVmID0gc21iX2J1ZmZlcjsKKwkJCW1pZF9lbnRyeS0+bGFyZ2VCdWYgPSBpc0xhcmdlQnVmOworbXVsdGlfdDJfZm5kOgorCQkJaWYgKGxlbmd0aCA9PSAwKQorCQkJCW1pZF9lbnRyeS0+bWlkU3RhdGUgPSBNSURfUkVTUE9OU0VfUkVDRUlWRUQ7CisJCQllbHNlCisJCQkJbWlkX2VudHJ5LT5taWRTdGF0ZSA9IE1JRF9SRVNQT05TRV9NQUxGT1JNRUQ7CisjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCisJCQltaWRfZW50cnktPndoZW5fcmVjZWl2ZWQgPSBqaWZmaWVzOworI2VuZGlmCisJCQlsaXN0X2RlbF9pbml0KCZtaWRfZW50cnktPnFoZWFkKTsKKwkJCW1pZF9lbnRyeS0+Y2FsbGJhY2sobWlkX2VudHJ5KTsKKwkJCWJyZWFrOwogCQl9CiAJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAKQEAgLTgwNyw4ICs4MjEsNyBAQAogY2lmc19wYXJzZV9tb3VudF9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKmRldm5hbWUsCiAJCQkgc3RydWN0IHNtYl92b2wgKnZvbCkKIHsKLQljaGFyICp2YWx1ZTsKLQljaGFyICpkYXRhOworCWNoYXIgKnZhbHVlLCAqZGF0YSwgKmVuZDsKIAl1bnNpZ25lZCBpbnQgIHRlbXBfbGVuLCBpLCBqOwogCWNoYXIgc2VwYXJhdG9yWzJdOwogCXNob3J0IGludCBvdmVycmlkZV91aWQgPSAtMTsKQEAgLTg1MSw2ICs4NjQsNyBAQAogCWlmICghb3B0aW9ucykKIAkJcmV0dXJuIDE7CiAKKwllbmQgPSBvcHRpb25zICsgc3RybGVuKG9wdGlvbnMpOwogCWlmIChzdHJuY21wKG9wdGlvbnMsICJzZXA9IiwgNCkgPT0gMCkgewogCQlpZiAob3B0aW9uc1s0XSAhPSAwKSB7CiAJCQlzZXBhcmF0b3JbMF0gPSBvcHRpb25zWzRdOwpAQCAtOTE2LDYgKzkzMCw3IEBACiAJCQl0aGUgb25seSBpbGxlZ2FsIGNoYXJhY3RlciBpbiBhIHBhc3N3b3JkIGlzIG51bGwgKi8KIAogCQkJaWYgKCh2YWx1ZVt0ZW1wX2xlbl0gPT0gMCkgJiYKKwkJCSAgICAodmFsdWUgKyB0ZW1wX2xlbiA8IGVuZCkgJiYKIAkJCSAgICAodmFsdWVbdGVtcF9sZW4rMV0gPT0gc2VwYXJhdG9yWzBdKSkgewogCQkJCS8qIHJlaW5zZXJ0IGNvbW1hICovCiAJCQkJdmFsdWVbdGVtcF9sZW5dID0gc2VwYXJhdG9yWzBdOwpAQCAtMjY1OCw2ICsyNjczLDExIEBACiAJCQkgICAgICAwIC8qIG5vdCBsZWdhY3kgKi8sIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCSAgICAgIGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYKIAkJCQlDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CisKKwlpZiAocmMgPT0gLUVPUE5PVFNVUFAgfHwgcmMgPT0gLUVJTlZBTCkKKwkJcmMgPSBTTUJRdWVyeUluZm9ybWF0aW9uKHhpZCwgdGNvbiwgZnVsbF9wYXRoLCBwZmlsZV9pbmZvLAorCQkJCWNpZnNfc2ItPmxvY2FsX25scywgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgorCQkJCSAgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCWtmcmVlKHBmaWxlX2luZm8pOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc2Vzcy5jIGIvZnMvY2lmcy9zZXNzLmMKaW5kZXggZjY3MjhlYi4uNjQ1MTE0YSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9zZXNzLmMKKysrIGIvZnMvY2lmcy9zZXNzLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZGVjb2RlX3VuaWNvZGVfc3NldHVwKGNoYXIgKipwYmNjX2FyZWEsIF9fdTE2IGJsZWZ0LCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywKK2RlY29kZV91bmljb2RlX3NzZXR1cChjaGFyICoqcGJjY19hcmVhLCBpbnQgYmxlZnQsIHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLAogCQkgICAgICBjb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY3ApCiB7CiAJaW50IGxlbjsKQEAgLTI4NCwxOSArMjg0LDYgQEAKIAogCWNGWUkoMSwgImJsZWZ0ICVkIiwgYmxlZnQpOwogCi0JLyoKLQkgKiBXaW5kb3dzIHNlcnZlcnMgZG8gbm90IGFsd2F5cyBkb3VibGUgbnVsbCB0ZXJtaW5hdGUgdGhlaXIgZmluYWwKLQkgKiBVbmljb2RlIHN0cmluZy4gQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbiB1bmV2ZW4gbnVtYmVyIG9mIGJ5dGVzCi0JICogbGVmdC4gSWYgc28sIHRoZW4gYWRkIGFuIGV4dHJhIE5VTEwgcGFkIGJ5dGUgdG8gdGhlIGVuZCBvZiB0aGUKLQkgKiByZXNwb25zZS4KLQkgKgotCSAqIFNlZSBzZWN0aW9uIDIuNy4yIGluICJJbXBsZW1lbnRpbmcgQ0lGUyIgZm9yIGRldGFpbHMKLQkgKi8KLQlpZiAoYmxlZnQgJSAyKSB7Ci0JCWRhdGFbYmxlZnRdID0gMDsKLQkJKytibGVmdDsKLQl9Ci0KIAlrZnJlZShzZXMtPnNlcnZlck9TKTsKIAlzZXMtPnNlcnZlck9TID0gY2lmc19zdHJuZHVwX2Zyb21fdWNzKGRhdGEsIGJsZWZ0LCB0cnVlLCBubHNfY3ApOwogCWNGWUkoMSwgInNlcnZlck9TPSVzIiwgc2VzLT5zZXJ2ZXJPUyk7CkBAIC05MjksNyArOTE2LDkgQEAKIAl9CiAKIAkvKiBCQiBjaGVjayBpZiBVbmljb2RlIGFuZCBkZWNvZGUgc3RyaW5ncyAqLwotCWlmIChzbWJfYnVmLT5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKKwlpZiAoYnl0ZXNfcmVtYWluaW5nID09IDApIHsKKwkJLyogbm8gc3RyaW5nIGFyZWEgdG8gZGVjb2RlLCBkbyBub3RoaW5nICovCisJfSBlbHNlIGlmIChzbWJfYnVmLT5GbGFnczIgJiBTTUJGTEcyX1VOSUNPREUpIHsKIAkJLyogdW5pY29kZSBzdHJpbmcgYXJlYSBtdXN0IGJlIHdvcmQtYWxpZ25lZCAqLwogCQlpZiAoKCh1bnNpZ25lZCBsb25nKSBiY2NfcHRyIC0gKHVuc2lnbmVkIGxvbmcpIHNtYl9idWYpICUgMikgewogCQkJKytiY2NfcHRyOwpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCAzMzEzZGQxLi45YTM3YTliIDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9kaXIuYworKysgYi9mcy9jb25maWdmcy9kaXIuYwpAQCAtNTMsMTEgKzUzLDE0IEBACiBzdGF0aWMgdm9pZCBjb25maWdmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwKIAkJCSAgICBzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKLQlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICogc2QgPSBkZW50cnktPmRfZnNkYXRhOworCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAogCWlmIChzZCkgewogCQlCVUdfT04oc2QtPnNfZGVudHJ5ICE9IGRlbnRyeSk7CisJCS8qIENvb3JkaW5hdGUgd2l0aCBjb25maWdmc19yZWFkZGlyICovCisJCXNwaW5fbG9jaygmY29uZmlnZnNfZGlyZW50X2xvY2spOwogCQlzZC0+c19kZW50cnkgPSBOVUxMOworCQlzcGluX3VubG9jaygmY29uZmlnZnNfZGlyZW50X2xvY2spOwogCQljb25maWdmc19wdXQoc2QpOwogCX0KIAlpcHV0KGlub2RlKTsKQEAgLTY4OSw3ICs2OTIsOCBAQAogCQkJc2QgPSBjaGlsZC0+ZF9mc2RhdGE7CiAJCQlzZC0+c190eXBlIHw9IENPTkZJR0ZTX1VTRVRfREVGQVVMVDsKIAkJfSBlbHNlIHsKLQkJCWRfZGVsZXRlKGNoaWxkKTsKKwkJCUJVR19PTihjaGlsZC0+ZF9pbm9kZSk7CisJCQlkX2Ryb3AoY2hpbGQpOwogCQkJZHB1dChjaGlsZCk7CiAJCX0KIAl9CkBAIC0xNTQ1LDcgKzE1NDksNyBAQAogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKiBwYXJlbnRfc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKmN1cnNvciA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqcSA9ICZjdXJzb3ItPnNfc2libGluZzsKLQlpbm9fdCBpbm87CisJaW5vX3QgaW5vID0gMDsKIAlpbnQgaSA9IGZpbHAtPmZfcG9zOwogCiAJc3dpdGNoIChpKSB7CkBAIC0xNTczLDYgKzE1NzcsNyBAQAogCQkJCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKm5leHQ7CiAJCQkJY29uc3QgY2hhciAqIG5hbWU7CiAJCQkJaW50IGxlbjsKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAogCQkJCW5leHQgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBjb25maWdmc19kaXJlbnQsCiAJCQkJCQkgICBzX3NpYmxpbmcpOwpAQCAtMTU4MSw5ICsxNTg2LDI4IEBACiAKIAkJCQluYW1lID0gY29uZmlnZnNfZ2V0X25hbWUobmV4dCk7CiAJCQkJbGVuID0gc3RybGVuKG5hbWUpOwotCQkJCWlmIChuZXh0LT5zX2RlbnRyeSkKLQkJCQkJaW5vID0gbmV4dC0+c19kZW50cnktPmRfaW5vZGUtPmlfaW5vOwotCQkJCWVsc2UKKworCQkJCS8qCisJCQkJICogV2UnbGwgaGF2ZSBhIGRlbnRyeSBhbmQgYW4gaW5vZGUgZm9yCisJCQkJICogUElOTkVEIGl0ZW1zIGFuZCBmb3Igb3BlbiBhdHRyaWJ1dGUKKwkJCQkgKiBmaWxlcy4gIFdlIGxvY2sgaGVyZSB0byBwcmV2ZW50IGEgcmFjZQorCQkJCSAqIHdpdGggY29uZmlnZnNfZF9pcHV0KCkgY2xlYXJpbmcKKwkJCQkgKiBzX2RlbnRyeSBiZWZvcmUgY2FsbGluZyBpcHV0KCkuCisJCQkJICoKKwkJCQkgKiBXaHkgZG8gd2UgZ28gdG8gdGhlIHRyb3VibGU/ICBJZgorCQkJCSAqIHNvbWVvbmUgaGFzIGFuIGF0dHJpYnV0ZSBmaWxlIG9wZW4sCisJCQkJICogdGhlIGlub2RlIG51bWJlciBzaG91bGQgbWF0Y2ggdW50aWwKKwkJCQkgKiB0aGV5IGNsb3NlIGl0LiAgQmV5b25kIHRoYXQsIHdlIGRvbid0CisJCQkJICogY2FyZS4KKwkJCQkgKi8KKwkJCQlzcGluX2xvY2soJmNvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKKwkJCQlkZW50cnkgPSBuZXh0LT5zX2RlbnRyeTsKKwkJCQlpZiAoZGVudHJ5KQorCQkJCQlpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwkJCQlpZiAoaW5vZGUpCisJCQkJCWlubyA9IGlub2RlLT5pX2lubzsKKwkJCQlzcGluX3VubG9jaygmY29uZmlnZnNfZGlyZW50X2xvY2spOworCQkJCWlmICghaW5vZGUpCiAJCQkJCWlubyA9IGl1bmlxdWUoY29uZmlnZnNfc2IsIDIpOwogCiAJCQkJaWYgKGZpbGxkaXIoZGlyZW50LCBuYW1lLCBsZW4sIGZpbHAtPmZfcG9zLCBpbm8sCkBAIC0xNjgzLDcgKzE3MDcsOCBAQAogCQllcnIgPSBjb25maWdmc19hdHRhY2hfZ3JvdXAoc2QtPnNfZWxlbWVudCwgJmdyb3VwLT5jZ19pdGVtLAogCQkJCQkgICAgZGVudHJ5KTsKIAkJaWYgKGVycikgewotCQkJZF9kZWxldGUoZGVudHJ5KTsKKwkJCUJVR19PTihkZW50cnktPmRfaW5vZGUpOworCQkJZF9kcm9wKGRlbnRyeSk7CiAJCQlkcHV0KGRlbnRyeSk7CiAJCX0gZWxzZSB7CiAJCQlzcGluX2xvY2soJmNvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggMTI5YTM1Ny4uMjJhMGVmNCAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTk5LDEyICs5OSw5IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGRfaGFzaF9tYXNrIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGRfaGFzaF9zaGlmdCBfX3JlYWRfbW9zdGx5OwogCi1zdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0IHsKLQlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCBoZWFkOwotfTsKLXN0YXRpYyBzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpkZW50cnlfaGFzaHRhYmxlIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgc3RydWN0IGhsaXN0X2JsX2hlYWQgKmRlbnRyeV9oYXNodGFibGUgX19yZWFkX21vc3RseTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpkX2hhc2goc3RydWN0IGRlbnRyeSAqcGFyZW50LAorc3RhdGljIGlubGluZSBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqZF9oYXNoKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKIAkJCQkJdW5zaWduZWQgbG9uZyBoYXNoKQogewogCWhhc2ggKz0gKCh1bnNpZ25lZCBsb25nKSBwYXJlbnQgXiBHT0xERU5fUkFUSU9fUFJJTUUpIC8gTDFfQ0FDSEVfQllURVM7CkBAIC0xMTIsMTYgKzEwOSw2IEBACiAJcmV0dXJuIGRlbnRyeV9oYXNodGFibGUgKyAoaGFzaCAmIERfSEFTSE1BU0spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3Bpbl9sb2NrX2J1Y2tldChzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpiKQotewotCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmYi0+aGVhZC5maXJzdCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX3VubG9ja19idWNrZXQoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYikKLXsKLQlfX2JpdF9zcGluX3VubG9jaygwLCAodW5zaWduZWQgbG9uZyAqKSZiLT5oZWFkLmZpcnN0KTsKLX0KLQogLyogU3RhdGlzdGljcyBnYXRoZXJpbmcuICovCiBzdHJ1Y3QgZGVudHJ5X3N0YXRfdCBkZW50cnlfc3RhdCA9IHsKIAkuYWdlX2xpbWl0ID0gNDUsCkBAIC0xNjcsOCArMTU0LDggQEAKIAlpZiAoZGVudHJ5LT5kX29wICYmIGRlbnRyeS0+ZF9vcC0+ZF9yZWxlYXNlKQogCQlkZW50cnktPmRfb3AtPmRfcmVsZWFzZShkZW50cnkpOwogCi0JLyogaWYgZGVudHJ5IHdhcyBuZXZlciBpbnNlcnRlZCBpbnRvIGhhc2gsIGltbWVkaWF0ZSBmcmVlIGlzIE9LICovCi0JaWYgKGhsaXN0X2JsX3VuaGFzaGVkKCZkZW50cnktPmRfaGFzaCkpCisJLyogaWYgZGVudHJ5IHdhcyBuZXZlciB2aXNpYmxlIHRvIFJDVSwgaW1tZWRpYXRlIGZyZWUgaXMgT0sgKi8KKwlpZiAoIShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfUkNVQUNDRVNTKSkKIAkJX19kX2ZyZWUoJmRlbnRyeS0+ZF91LmRfcmN1KTsKIAllbHNlCiAJCWNhbGxfcmN1KCZkZW50cnktPmRfdS5kX3JjdSwgX19kX2ZyZWUpOwpAQCAtMzMwLDI4ICszMTcsMTkgQEAKICAqLwogdm9pZCBfX2RfZHJvcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JaWYgKCEoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX1VOSEFTSEVEKSkgewotCQlpZiAodW5saWtlbHkoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX0RJU0NPTk5FQ1RFRCkpIHsKLQkJCWJpdF9zcGluX2xvY2soMCwKLQkJCQkodW5zaWduZWQgbG9uZyAqKSZkZW50cnktPmRfc2ItPnNfYW5vbi5maXJzdCk7Ci0JCQlkZW50cnktPmRfZmxhZ3MgfD0gRENBQ0hFX1VOSEFTSEVEOwotCQkJaGxpc3RfYmxfZGVsX2luaXQoJmRlbnRyeS0+ZF9oYXNoKTsKLQkJCV9fYml0X3NwaW5fdW5sb2NrKDAsCi0JCQkJKHVuc2lnbmVkIGxvbmcgKikmZGVudHJ5LT5kX3NiLT5zX2Fub24uZmlyc3QpOwotCQl9IGVsc2UgewotCQkJc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYjsKKwlpZiAoIWRfdW5oYXNoZWQoZGVudHJ5KSkgeworCQlzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYjsKKwkJaWYgKHVubGlrZWx5KGRlbnRyeS0+ZF9mbGFncyAmIERDQUNIRV9ESVNDT05ORUNURUQpKQorCQkJYiA9ICZkZW50cnktPmRfc2ItPnNfYW5vbjsKKwkJZWxzZQogCQkJYiA9IGRfaGFzaChkZW50cnktPmRfcGFyZW50LCBkZW50cnktPmRfbmFtZS5oYXNoKTsKLQkJCXNwaW5fbG9ja19idWNrZXQoYik7Ci0JCQkvKgotCQkJICogV2UgbWF5IG5vdCBhY3R1YWxseSBuZWVkIHRvIHB1dCBEQ0FDSEVfVU5IQVNIRUQKLQkJCSAqIG1hbmlwdWxhdGlvbnMgdW5kZXIgdGhlIGhhc2ggbG9jaywgYnV0IGZvbGxvdwotCQkJICogdGhlIHByaW5jaXBsZSBvZiBsZWFzdCBzdXJwcmlzZS4KLQkJCSAqLwotCQkJZGVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9VTkhBU0hFRDsKLQkJCWhsaXN0X2JsX2RlbF9yY3UoJmRlbnRyeS0+ZF9oYXNoKTsKLQkJCXNwaW5fdW5sb2NrX2J1Y2tldChiKTsKLQkJCWRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoZGVudHJ5KTsKLQkJfQorCisJCWhsaXN0X2JsX2xvY2soYik7CisJCV9faGxpc3RfYmxfZGVsKCZkZW50cnktPmRfaGFzaCk7CisJCWRlbnRyeS0+ZF9oYXNoLnBwcmV2ID0gTlVMTDsKKwkJaGxpc3RfYmxfdW5sb2NrKGIpOworCisJCWRlbnRyeV9yY3V3YWxrX2JhcnJpZXIoZGVudHJ5KTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fZF9kcm9wKTsKQEAgLTEzMDQsNyArMTI4Miw3IEBACiAJZG5hbWVbbmFtZS0+bGVuXSA9IDA7CiAKIAlkZW50cnktPmRfY291bnQgPSAxOwotCWRlbnRyeS0+ZF9mbGFncyA9IERDQUNIRV9VTkhBU0hFRDsKKwlkZW50cnktPmRfZmxhZ3MgPSAwOwogCXNwaW5fbG9ja19pbml0KCZkZW50cnktPmRfbG9jayk7CiAJc2VxY291bnRfaW5pdCgmZGVudHJ5LT5kX3NlcSk7CiAJZGVudHJ5LT5kX2lub2RlID0gTlVMTDsKQEAgLTE2MDYsMTAgKzE1ODQsOSBAQAogCXRtcC0+ZF9pbm9kZSA9IGlub2RlOwogCXRtcC0+ZF9mbGFncyB8PSBEQ0FDSEVfRElTQ09OTkVDVEVEOwogCWxpc3RfYWRkKCZ0bXAtPmRfYWxpYXMsICZpbm9kZS0+aV9kZW50cnkpOwotCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmdG1wLT5kX3NiLT5zX2Fub24uZmlyc3QpOwotCXRtcC0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOworCWhsaXN0X2JsX2xvY2soJnRtcC0+ZF9zYi0+c19hbm9uKTsKIAlobGlzdF9ibF9hZGRfaGVhZCgmdG1wLT5kX2hhc2gsICZ0bXAtPmRfc2ItPnNfYW5vbik7Ci0JX19iaXRfc3Bpbl91bmxvY2soMCwgKHVuc2lnbmVkIGxvbmcgKikmdG1wLT5kX3NiLT5zX2Fub24uZmlyc3QpOworCWhsaXN0X2JsX3VubG9jaygmdG1wLT5kX3NiLT5zX2Fub24pOwogCXNwaW5fdW5sb2NrKCZ0bXAtPmRfbG9jayk7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUodG1wLCBpbm9kZSk7CkBAIC0xNzg5LDcgKzE3NjYsNyBAQAogCXVuc2lnbmVkIGludCBsZW4gPSBuYW1lLT5sZW47CiAJdW5zaWduZWQgaW50IGhhc2ggPSBuYW1lLT5oYXNoOwogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciA9IG5hbWUtPm5hbWU7Ci0Jc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYiA9IGRfaGFzaChwYXJlbnQsIGhhc2gpOworCXN0cnVjdCBobGlzdF9ibF9oZWFkICpiID0gZF9oYXNoKHBhcmVudCwgaGFzaCk7CiAJc3RydWN0IGhsaXN0X2JsX25vZGUgKm5vZGU7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCkBAIC0xODEzLDcgKzE3OTAsNyBAQAogCSAqCiAJICogU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcGF0aC1sb29rdXAudHh0IGZvciBtb3JlIGRldGFpbHMuCiAJICovCi0JaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1KGRlbnRyeSwgbm9kZSwgJmItPmhlYWQsIGRfaGFzaCkgeworCWhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdShkZW50cnksIG5vZGUsIGIsIGRfaGFzaCkgewogCQlzdHJ1Y3QgaW5vZGUgKmk7CiAJCWNvbnN0IGNoYXIgKnRuYW1lOwogCQlpbnQgdGxlbjsKQEAgLTE5MDgsNyArMTg4NSw3IEBACiAJdW5zaWduZWQgaW50IGxlbiA9IG5hbWUtPmxlbjsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IG5hbWUtPmhhc2g7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqc3RyID0gbmFtZS0+bmFtZTsKLQlzdHJ1Y3QgZGNhY2hlX2hhc2hfYnVja2V0ICpiID0gZF9oYXNoKHBhcmVudCwgaGFzaCk7CisJc3RydWN0IGhsaXN0X2JsX2hlYWQgKmIgPSBkX2hhc2gocGFyZW50LCBoYXNoKTsKIAlzdHJ1Y3QgaGxpc3RfYmxfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpmb3VuZCA9IE5VTEw7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwpAQCAtMTkzNSw3ICsxOTEyLDcgQEAKIAkgKi8KIAlyY3VfcmVhZF9sb2NrKCk7CiAJCi0JaGxpc3RfYmxfZm9yX2VhY2hfZW50cnlfcmN1KGRlbnRyeSwgbm9kZSwgJmItPmhlYWQsIGRfaGFzaCkgeworCWhsaXN0X2JsX2Zvcl9lYWNoX2VudHJ5X3JjdShkZW50cnksIG5vZGUsIGIsIGRfaGFzaCkgewogCQljb25zdCBjaGFyICp0bmFtZTsKIAkJaW50IHRsZW47CiAKQEAgLTIwODYsMTMgKzIwNjMsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0woZF9kZWxldGUpOwogCi1zdGF0aWMgdm9pZCBfX2RfcmVoYXNoKHN0cnVjdCBkZW50cnkgKiBlbnRyeSwgc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCAqYikKK3N0YXRpYyB2b2lkIF9fZF9yZWhhc2goc3RydWN0IGRlbnRyeSAqIGVudHJ5LCBzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYikKIHsKIAlCVUdfT04oIWRfdW5oYXNoZWQoZW50cnkpKTsKLQlzcGluX2xvY2tfYnVja2V0KGIpOwotIAllbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX1VOSEFTSEVEOwotCWhsaXN0X2JsX2FkZF9oZWFkX3JjdSgmZW50cnktPmRfaGFzaCwgJmItPmhlYWQpOwotCXNwaW5fdW5sb2NrX2J1Y2tldChiKTsKKwlobGlzdF9ibF9sb2NrKGIpOworCWVudHJ5LT5kX2ZsYWdzIHw9IERDQUNIRV9SQ1VBQ0NFU1M7CisJaGxpc3RfYmxfYWRkX2hlYWRfcmN1KCZlbnRyeS0+ZF9oYXNoLCBiKTsKKwlobGlzdF9ibF91bmxvY2soYik7CiB9CiAKIHN0YXRpYyB2b2lkIF9kX3JlaGFzaChzdHJ1Y3QgZGVudHJ5ICogZW50cnkpCkBAIC0zMDI1LDcgKzMwMDIsNyBAQAogCiAJZGVudHJ5X2hhc2h0YWJsZSA9CiAJCWFsbG9jX2xhcmdlX3N5c3RlbV9oYXNoKCJEZW50cnkgY2FjaGUiLAotCQkJCQlzaXplb2Yoc3RydWN0IGRjYWNoZV9oYXNoX2J1Y2tldCksCisJCQkJCXNpemVvZihzdHJ1Y3QgaGxpc3RfYmxfaGVhZCksCiAJCQkJCWRoYXNoX2VudHJpZXMsCiAJCQkJCTEzLAogCQkJCQlIQVNIX0VBUkxZLApAQCAtMzAzNCw3ICszMDExLDcgQEAKIAkJCQkJMCk7CiAKIAlmb3IgKGxvb3AgPSAwOyBsb29wIDwgKDEgPDwgZF9oYXNoX3NoaWZ0KTsgbG9vcCsrKQotCQlJTklUX0hMSVNUX0JMX0hFQUQoJmRlbnRyeV9oYXNodGFibGVbbG9vcF0uaGVhZCk7CisJCUlOSVRfSExJU1RfQkxfSEVBRChkZW50cnlfaGFzaHRhYmxlICsgbG9vcCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkY2FjaGVfaW5pdCh2b2lkKQpAQCAtMzA1Nyw3ICszMDM0LDcgQEAKIAogCWRlbnRyeV9oYXNodGFibGUgPQogCQlhbGxvY19sYXJnZV9zeXN0ZW1faGFzaCgiRGVudHJ5IGNhY2hlIiwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBkY2FjaGVfaGFzaF9idWNrZXQpLAorCQkJCQlzaXplb2Yoc3RydWN0IGhsaXN0X2JsX2hlYWQpLAogCQkJCQlkaGFzaF9lbnRyaWVzLAogCQkJCQkxMywKIAkJCQkJMCwKQEAgLTMwNjYsNyArMzA0Myw3IEBACiAJCQkJCTApOwogCiAJZm9yIChsb29wID0gMDsgbG9vcCA8ICgxIDw8IGRfaGFzaF9zaGlmdCk7IGxvb3ArKykKLQkJSU5JVF9ITElTVF9CTF9IRUFEKCZkZW50cnlfaGFzaHRhYmxlW2xvb3BdLmhlYWQpOworCQlJTklUX0hMSVNUX0JMX0hFQUQoZGVudHJ5X2hhc2h0YWJsZSArIGxvb3ApOwogfQogCiAvKiBTTEFCIGNhY2hlIGZvciBfX2dldG5hbWUoKSBjb25zdW1lcnMgKi8KZGlmZiAtLWdpdCBhL2ZzL2RlYnVnZnMvZmlsZS5jIGIvZnMvZGVidWdmcy9maWxlLmMKaW5kZXggODlkMzk0ZC4uNTY4MzA0ZCAxMDA2NDQKLS0tIGEvZnMvZGVidWdmcy9maWxlLmMKKysrIGIvZnMvZGVidWdmcy9maWxlLmMKQEAgLTQyOSwyNSArNDI5LDE2IEBACiB7CiAJY2hhciBidWZbMzJdOwogCWludCBidWZfc2l6ZTsKKwlib29sIGJ2OwogCXUzMiAqdmFsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCiAJYnVmX3NpemUgPSBtaW4oY291bnQsIChzaXplb2YoYnVmKS0xKSk7CiAJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlzd2l0Y2ggKGJ1ZlswXSkgewotCWNhc2UgJ3knOgotCWNhc2UgJ1knOgotCWNhc2UgJzEnOgotCQkqdmFsID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSAnbic6Ci0JY2FzZSAnTic6Ci0JY2FzZSAnMCc6Ci0JCSp2YWwgPSAwOwotCQlicmVhazsKLQl9Ci0JCisJaWYgKHN0cnRvYm9vbChidWYsICZidikgPT0gMCkKKwkJKnZhbCA9IGJ2OworCiAJcmV0dXJuIGNvdW50OwogfQogCmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9jcnlwdG8uYyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCmluZGV4IGQyYTcwYTQuLmI4ZDVjODAgMTAwNjQ0Ci0tLSBhL2ZzL2VjcnlwdGZzL2NyeXB0by5jCisrKyBiL2ZzL2VjcnlwdGZzL2NyeXB0by5jCkBAIC0xNDUyLDYgKzE0NTIsMjUgQEAKIAljcnlwdF9zdGF0LT5tZXRhZGF0YV9zaXplID0gRUNSWVBURlNfTUlOSU1VTV9IRUFERVJfRVhURU5UX1NJWkU7CiB9CiAKK3ZvaWQgZWNyeXB0ZnNfaV9zaXplX2luaXQoY29uc3QgY2hhciAqcGFnZV92aXJ0LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0OworCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0OworCXU2NCBmaWxlX3NpemU7CisKKwljcnlwdF9zdGF0ID0gJmVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoaW5vZGUpLT5jcnlwdF9zdGF0OworCW1vdW50X2NyeXB0X3N0YXQgPQorCQkmZWNyeXB0ZnNfc3VwZXJibG9ja190b19wcml2YXRlKGlub2RlLT5pX3NiKS0+bW91bnRfY3J5cHRfc3RhdDsKKwlpZiAobW91bnRfY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19FTkNSWVBURURfVklFV19FTkFCTEVEKSB7CisJCWZpbGVfc2l6ZSA9IGlfc2l6ZV9yZWFkKGVjcnlwdGZzX2lub2RlX3RvX2xvd2VyKGlub2RlKSk7CisJCWlmIChjcnlwdF9zdGF0LT5mbGFncyAmIEVDUllQVEZTX01FVEFEQVRBX0lOX1hBVFRSKQorCQkJZmlsZV9zaXplICs9IGNyeXB0X3N0YXQtPm1ldGFkYXRhX3NpemU7CisJfSBlbHNlCisJCWZpbGVfc2l6ZSA9IGdldF91bmFsaWduZWRfYmU2NChwYWdlX3ZpcnQpOworCWlfc2l6ZV93cml0ZShpbm9kZSwgKGxvZmZfdClmaWxlX3NpemUpOworCWNyeXB0X3N0YXQtPmZsYWdzIHw9IEVDUllQVEZTX0lfU0laRV9JTklUSUFMSVpFRDsKK30KKwogLyoqCiAgKiBlY3J5cHRmc19yZWFkX2hlYWRlcnNfdmlydAogICogQHBhZ2VfdmlydDogVGhlIHZpcnR1YWwgYWRkcmVzcyBpbnRvIHdoaWNoIHRvIHJlYWQgdGhlIGhlYWRlcnMKQEAgLTE0ODIsNiArMTUwMSw4IEBACiAJCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQorCWlmICghKGNyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfSV9TSVpFX0lOSVRJQUxJWkVEKSkKKwkJZWNyeXB0ZnNfaV9zaXplX2luaXQocGFnZV92aXJ0LCBlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwogCW9mZnNldCArPSBNQUdJQ19FQ1JZUFRGU19NQVJLRVJfU0laRV9CWVRFUzsKIAlyYyA9IGVjcnlwdGZzX3Byb2Nlc3NfZmxhZ3MoY3J5cHRfc3RhdCwgKHBhZ2VfdmlydCArIG9mZnNldCksCiAJCQkJICAgICZieXRlc19yZWFkKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2VjcnlwdGZzX2tlcm5lbC5oIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKaW5kZXggYmQzY2FmZC4uZTcwMjgyNyAxMDA2NDQKLS0tIGEvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKKysrIGIvZnMvZWNyeXB0ZnMvZWNyeXB0ZnNfa2VybmVsLmgKQEAgLTI2OSw2ICsyNjksNyBAQAogI2RlZmluZSBFQ1JZUFRGU19FTkNGTl9VU0VfTU9VTlRfRk5FSyAweDAwMDAwODAwCiAjZGVmaW5lIEVDUllQVEZTX0VOQ0ZOX1VTRV9GRUsgICAgICAgIDB4MDAwMDEwMDAKICNkZWZpbmUgRUNSWVBURlNfVU5MSU5LX1NJR1MgICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBFQ1JZUFRGU19JX1NJWkVfSU5JVElBTElaRUQgICAweDAwMDA0MDAwCiAJdTMyIGZsYWdzOwogCXVuc2lnbmVkIGludCBmaWxlX3ZlcnNpb247CiAJc2l6ZV90IGl2X2J5dGVzOwpAQCAtMjk1LDYgKzI5Niw4IEBACiBzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyB7CiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKndpaV9pbm9kZTsKKwlzdHJ1Y3QgbXV0ZXggbG93ZXJfZmlsZV9tdXRleDsKKwlhdG9taWNfdCBsb3dlcl9maWxlX2NvdW50OwogCXN0cnVjdCBmaWxlICpsb3dlcl9maWxlOwogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0IGNyeXB0X3N0YXQ7CiB9OwpAQCAtNjI2LDYgKzYyOSw3IEBACiBpbnQgZWNyeXB0ZnNfaW50ZXJwb3NlKHN0cnVjdCBkZW50cnkgKmhpZGRlbl9kZW50cnksCiAJCSAgICAgICBzdHJ1Y3QgZGVudHJ5ICp0aGlzX2RlbnRyeSwgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJICAgICAgIHUzMiBmbGFncyk7Cit2b2lkIGVjcnlwdGZzX2lfc2l6ZV9pbml0KGNvbnN0IGNoYXIgKnBhZ2VfdmlydCwgc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgZWNyeXB0ZnNfbG9va3VwX2FuZF9pbnRlcnBvc2VfbG93ZXIoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5LAogCQkJCQlzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksCiAJCQkJCXN0cnVjdCBpbm9kZSAqZWNyeXB0ZnNfZGlyX2lub2RlKTsKQEAgLTc1Nyw3ICs3NjEsOCBAQAogCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpsb3dlcl9kZW50cnksCiAJCQkgICAgIHN0cnVjdCB2ZnNtb3VudCAqbG93ZXJfbW50LAogCQkJICAgICBjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCk7Ci1pbnQgZWNyeXB0ZnNfaW5pdF9wZXJzaXN0ZW50X2ZpbGUoc3RydWN0IGRlbnRyeSAqZWNyeXB0ZnNfZGVudHJ5KTsKK2ludCBlY3J5cHRmc19nZXRfbG93ZXJfZmlsZShzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnkpOwordm9pZCBlY3J5cHRmc19wdXRfbG93ZXJfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGludAogZWNyeXB0ZnNfd3JpdGVfdGFnXzcwX3BhY2tldChjaGFyICpkZXN0LCBzaXplX3QgKnJlbWFpbmluZ19ieXRlcywKIAkJCSAgICAgc2l6ZV90ICpwYWNrZXRfc2l6ZSwKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2ZpbGUuYyBiL2ZzL2VjcnlwdGZzL2ZpbGUuYwppbmRleCBjZWRjOTEzLi41NjZlNTQ3IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9maWxlLmMKKysrIGIvZnMvZWNyeXB0ZnMvZmlsZS5jCkBAIC0xOTEsMTAgKzE5MSwxMCBAQAogCQkJCSAgICAgIHwgRUNSWVBURlNfRU5DUllQVEVEKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZjcnlwdF9zdGF0LT5jc19tdXRleCk7Ci0JcmMgPSBlY3J5cHRmc19pbml0X3BlcnNpc3RlbnRfZmlsZShlY3J5cHRmc19kZW50cnkpOworCXJjID0gZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoZWNyeXB0ZnNfZGVudHJ5KTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byBpbml0aWFsaXplICIKLQkJCSJ0aGUgcGVyc2lzdGVudCBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCisJCQkidGhlIGxvd2VyIGZpbGUgZm9yIHRoZSBkZW50cnkgd2l0aCBuYW1lICIKIAkJCSJbJXNdOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLAogCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwgcmMpOwogCQlnb3RvIG91dF9mcmVlOwpAQCAtMjAyLDkgKzIwMiw5IEBACiAJaWYgKChlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKS0+bG93ZXJfZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkKIAkgICAgPT0gT19SRE9OTFkgJiYgKGZpbGUtPmZfZmxhZ3MgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZKSB7CiAJCXJjID0gLUVQRVJNOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogTG93ZXIgcGVyc2lzdGVudCBmaWxlIGlzIFJPOyBlQ3J5cHRmcyAiCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBMb3dlciBmaWxlIGlzIFJPOyBlQ3J5cHRmcyAiCiAJCSAgICAgICAiZmlsZSBtdXN0IGhlbmNlIGJlIG9wZW5lZCBST1xuIiwgX19mdW5jX18pOwotCQlnb3RvIG91dF9mcmVlOworCQlnb3RvIG91dF9wdXQ7CiAJfQogCWVjcnlwdGZzX3NldF9maWxlX2xvd2VyKAogCQlmaWxlLCBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKS0+bG93ZXJfZmlsZSk7CkBAIC0yMzIsMTAgKzIzMiwxMSBAQAogCQkJCSAgICAgICAiUGxhaW50ZXh0IHBhc3N0aHJvdWdoIG1vZGUgaXMgbm90ICIKIAkJCQkgICAgICAgImVuYWJsZWQ7IHJldHVybmluZyAtRUlPXG4iKTsKIAkJCQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKLQkJCQlnb3RvIG91dF9mcmVlOworCQkJCWdvdG8gb3V0X3B1dDsKIAkJCX0KIAkJCXJjID0gMDsKLQkJCWNyeXB0X3N0YXQtPmZsYWdzICY9IH4oRUNSWVBURlNfRU5DUllQVEVEKTsKKwkJCWNyeXB0X3N0YXQtPmZsYWdzICY9IH4oRUNSWVBURlNfSV9TSVpFX0lOSVRJQUxJWkVECisJCQkJCSAgICAgICB8IEVDUllQVEZTX0VOQ1JZUFRFRCk7CiAJCQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0yNDUsNiArMjQ2LDggQEAKIAkJCSJbMHglLjE2bHhdIHNpemU6IFsweCUuMTZsbHhdXG4iLCBpbm9kZSwgaW5vZGUtPmlfaW5vLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpX3NpemVfcmVhZChpbm9kZSkpOwogCWdvdG8gb3V0Oworb3V0X3B1dDoKKwllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShpbm9kZSk7CiBvdXRfZnJlZToKIAlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfZmlsZV9pbmZvX2NhY2hlLAogCQkJZWNyeXB0ZnNfZmlsZV90b19wcml2YXRlKGZpbGUpKTsKQEAgLTI1NCwxNyArMjU3LDEzIEBACiAKIHN0YXRpYyBpbnQgZWNyeXB0ZnNfZmx1c2goc3RydWN0IGZpbGUgKmZpbGUsIGZsX293bmVyX3QgdGQpCiB7Ci0JaW50IHJjID0gMDsKLQlzdHJ1Y3QgZmlsZSAqbG93ZXJfZmlsZSA9IE5VTEw7Ci0KLQlsb3dlcl9maWxlID0gZWNyeXB0ZnNfZmlsZV90b19sb3dlcihmaWxlKTsKLQlpZiAobG93ZXJfZmlsZS0+Zl9vcCAmJiBsb3dlcl9maWxlLT5mX29wLT5mbHVzaCkKLQkJcmMgPSBsb3dlcl9maWxlLT5mX29wLT5mbHVzaChsb3dlcl9maWxlLCB0ZCk7Ci0JcmV0dXJuIHJjOworCXJldHVybiBmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURQorCSAgICAgICA/IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoZmlsZS0+Zl9tYXBwaW5nKSA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgZWNyeXB0ZnNfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKKwllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShpbm9kZSk7CiAJa21lbV9jYWNoZV9mcmVlKGVjcnlwdGZzX2ZpbGVfaW5mb19jYWNoZSwKIAkJCWVjcnlwdGZzX2ZpbGVfdG9fcHJpdmF0ZShmaWxlKSk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9pbm9kZS5jIGIvZnMvZWNyeXB0ZnMvaW5vZGUuYwppbmRleCBmOTkwNTFiLi40ZDRjYzZhIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9pbm9kZS5jCisrKyBiL2ZzL2VjcnlwdGZzL2lub2RlLmMKQEAgLTE2OCwxOSArMTY4LDE4IEBACiAJCQkJImNvbnRleHQ7IHJjID0gWyVkXVxuIiwgcmMpOwogCQlnb3RvIG91dDsKIAl9Ci0JcmMgPSBlY3J5cHRmc19pbml0X3BlcnNpc3RlbnRfZmlsZShlY3J5cHRmc19kZW50cnkpOworCXJjID0gZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoZWNyeXB0ZnNfZGVudHJ5KTsKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgYXR0ZW1wdGluZyB0byBpbml0aWFsaXplICIKLQkJCSJ0aGUgcGVyc2lzdGVudCBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCisJCQkidGhlIGxvd2VyIGZpbGUgZm9yIHRoZSBkZW50cnkgd2l0aCBuYW1lICIKIAkJCSJbJXNdOyByYyA9IFslZF1cbiIsIF9fZnVuY19fLAogCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX25hbWUubmFtZSwgcmMpOwogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSBlY3J5cHRmc193cml0ZV9tZXRhZGF0YShlY3J5cHRmc19kZW50cnkpOwotCWlmIChyYykgeworCWlmIChyYykKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciB3cml0aW5nIGhlYWRlcnM7IHJjID0gWyVkXVxuIiwgcmMpOwotCQlnb3RvIG91dDsKLQl9CisJZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKTsKIG91dDoKIAlyZXR1cm4gcmM7CiB9CkBAIC0yMjYsMTEgKzIyNSw5IEBACiAJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGlyX2RlbnRyeTsKIAlzdHJ1Y3QgdmZzbW91bnQgKmxvd2VyX21udDsKIAlzdHJ1Y3QgaW5vZGUgKmxvd2VyX2lub2RlOwotCXN0cnVjdCBlY3J5cHRmc19tb3VudF9jcnlwdF9zdGF0ICptb3VudF9jcnlwdF9zdGF0OwogCXN0cnVjdCBlY3J5cHRmc19jcnlwdF9zdGF0ICpjcnlwdF9zdGF0OwogCWNoYXIgKnBhZ2VfdmlydCA9IE5VTEw7Ci0JdTY0IGZpbGVfc2l6ZTsKLQlpbnQgcmMgPSAwOworCWludCBwdXRfbG93ZXIgPSAwLCByYyA9IDA7CiAKIAlsb3dlcl9kaXJfZGVudHJ5ID0gbG93ZXJfZGVudHJ5LT5kX3BhcmVudDsKIAlsb3dlcl9tbnQgPSBtbnRnZXQoZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udCgKQEAgLTI3NywxNCArMjc0LDE1IEBACiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gZWNyeXB0ZnNfaW5pdF9wZXJzaXN0ZW50X2ZpbGUoZWNyeXB0ZnNfZGVudHJ5KTsKKwlyYyA9IGVjcnlwdGZzX2dldF9sb3dlcl9maWxlKGVjcnlwdGZzX2RlbnRyeSk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIGF0dGVtcHRpbmcgdG8gaW5pdGlhbGl6ZSAiCi0JCQkidGhlIHBlcnNpc3RlbnQgZmlsZSBmb3IgdGhlIGRlbnRyeSB3aXRoIG5hbWUgIgorCQkJInRoZSBsb3dlciBmaWxlIGZvciB0aGUgZGVudHJ5IHdpdGggbmFtZSAiCiAJCQkiWyVzXTsgcmMgPSBbJWRdXG4iLCBfX2Z1bmNfXywKIAkJCWVjcnlwdGZzX2RlbnRyeS0+ZF9uYW1lLm5hbWUsIHJjKTsKIAkJZ290byBvdXRfZnJlZV9rbWVtOwogCX0KKwlwdXRfbG93ZXIgPSAxOwogCWNyeXB0X3N0YXQgPSAmZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZSgKIAkJCQkJZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlKS0+Y3J5cHRfc3RhdDsKIAkvKiBUT0RPOiBsb2NrIGZvciBjcnlwdF9zdGF0IGNvbXBhcmlzb24gKi8KQEAgLTMwMiwxOCArMzAwLDcgQEAKIAkJfQogCQljcnlwdF9zdGF0LT5mbGFncyB8PSBFQ1JZUFRGU19NRVRBREFUQV9JTl9YQVRUUjsKIAl9Ci0JbW91bnRfY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19zdXBlcmJsb2NrX3RvX3ByaXZhdGUoCi0JCWVjcnlwdGZzX2RlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7Ci0JaWYgKG1vdW50X2NyeXB0X3N0YXQtPmZsYWdzICYgRUNSWVBURlNfRU5DUllQVEVEX1ZJRVdfRU5BQkxFRCkgewotCQlpZiAoY3J5cHRfc3RhdC0+ZmxhZ3MgJiBFQ1JZUFRGU19NRVRBREFUQV9JTl9YQVRUUikKLQkJCWZpbGVfc2l6ZSA9IChjcnlwdF9zdGF0LT5tZXRhZGF0YV9zaXplCi0JCQkJICAgICArIGlfc2l6ZV9yZWFkKGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSkpOwotCQllbHNlCi0JCQlmaWxlX3NpemUgPSBpX3NpemVfcmVhZChsb3dlcl9kZW50cnktPmRfaW5vZGUpOwotCX0gZWxzZSB7Ci0JCWZpbGVfc2l6ZSA9IGdldF91bmFsaWduZWRfYmU2NChwYWdlX3ZpcnQpOwotCX0KLQlpX3NpemVfd3JpdGUoZWNyeXB0ZnNfZGVudHJ5LT5kX2lub2RlLCAobG9mZl90KWZpbGVfc2l6ZSk7CisJZWNyeXB0ZnNfaV9zaXplX2luaXQocGFnZV92aXJ0LCBlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwogb3V0X2ZyZWVfa21lbToKIAlrbWVtX2NhY2hlX2ZyZWUoZWNyeXB0ZnNfaGVhZGVyX2NhY2hlXzIsIHBhZ2VfdmlydCk7CiAJZ290byBvdXQ7CkBAIC0zMjIsNiArMzA5LDggQEAKIAltbnRwdXQobG93ZXJfbW50KTsKIAlkX2Ryb3AoZWNyeXB0ZnNfZGVudHJ5KTsKIG91dDoKKwlpZiAocHV0X2xvd2VyKQorCQllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwogCXJldHVybiByYzsKIH0KIApAQCAtNTM4LDggKzUyNyw2IEBACiAJZGdldChsb3dlcl9kZW50cnkpOwogCXJjID0gdmZzX3JtZGlyKGxvd2VyX2Rpcl9kZW50cnktPmRfaW5vZGUsIGxvd2VyX2RlbnRyeSk7CiAJZHB1dChsb3dlcl9kZW50cnkpOwotCWlmICghcmMpCi0JCWRfZGVsZXRlKGxvd2VyX2RlbnRyeSk7CiAJZnNzdGFja19jb3B5X2F0dHJfdGltZXMoZGlyLCBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlKTsKIAlkaXItPmlfbmxpbmsgPSBsb3dlcl9kaXJfZGVudHJ5LT5kX2lub2RlLT5pX25saW5rOwogCXVubG9ja19kaXIobG93ZXJfZGlyX2RlbnRyeSk7CkBAIC02MTAsOCArNTk3LDggQEAKIAkJZnNzdGFja19jb3B5X2F0dHJfYWxsKG9sZF9kaXIsIGxvd2VyX29sZF9kaXJfZGVudHJ5LT5kX2lub2RlKTsKIG91dF9sb2NrOgogCXVubG9ja19yZW5hbWUobG93ZXJfb2xkX2Rpcl9kZW50cnksIGxvd2VyX25ld19kaXJfZGVudHJ5KTsKLQlkcHV0KGxvd2VyX25ld19kZW50cnktPmRfcGFyZW50KTsKLQlkcHV0KGxvd2VyX29sZF9kZW50cnktPmRfcGFyZW50KTsKKwlkcHV0KGxvd2VyX25ld19kaXJfZGVudHJ5KTsKKwlkcHV0KGxvd2VyX29sZF9kaXJfZGVudHJ5KTsKIAlkcHV0KGxvd2VyX25ld19kZW50cnkpOwogCWRwdXQobG93ZXJfb2xkX2RlbnRyeSk7CiAJcmV0dXJuIHJjOwpAQCAtNzU5LDggKzc0NiwxMSBAQAogCiAJaWYgKHVubGlrZWx5KChpYS0+aWFfc2l6ZSA9PSBpX3NpemUpKSkgewogCQlsb3dlcl9pYS0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKLQkJZ290byBvdXQ7CisJCXJldHVybiAwOwogCX0KKwlyYyA9IGVjcnlwdGZzX2dldF9sb3dlcl9maWxlKGRlbnRyeSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CiAJY3J5cHRfc3RhdCA9ICZlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGRlbnRyeS0+ZF9pbm9kZSktPmNyeXB0X3N0YXQ7CiAJLyogU3dpdGNoIG9uIGdyb3dpbmcgb3Igc2hyaW5raW5nIGZpbGUgKi8KIAlpZiAoaWEtPmlhX3NpemUgPiBpX3NpemUpIHsKQEAgLTgzOCw2ICs4MjgsNyBAQAogCQkJbG93ZXJfaWEtPmlhX3ZhbGlkICY9IH5BVFRSX1NJWkU7CiAJfQogb3V0OgorCWVjcnlwdGZzX3B1dF9sb3dlcl9maWxlKGlub2RlKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTkxMyw3ICs5MDQsMTMgQEAKIAogCQltb3VudF9jcnlwdF9zdGF0ID0gJmVjcnlwdGZzX3N1cGVyYmxvY2tfdG9fcHJpdmF0ZSgKIAkJCWRlbnRyeS0+ZF9zYiktPm1vdW50X2NyeXB0X3N0YXQ7CisJCXJjID0gZWNyeXB0ZnNfZ2V0X2xvd2VyX2ZpbGUoZGVudHJ5KTsKKwkJaWYgKHJjKSB7CisJCQltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCXJjID0gZWNyeXB0ZnNfcmVhZF9tZXRhZGF0YShkZW50cnkpOworCQllY3J5cHRmc19wdXRfbG93ZXJfZmlsZShpbm9kZSk7CiAJCWlmIChyYykgewogCQkJaWYgKCEobW91bnRfY3J5cHRfc3RhdC0+ZmxhZ3MKIAkJCSAgICAgICYgRUNSWVBURlNfUExBSU5URVhUX1BBU1NUSFJPVUdIX0VOQUJMRUQpKSB7CkBAIC05MjcsMTAgKzkyNCwxNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJcmMgPSAwOwotCQkJY3J5cHRfc3RhdC0+ZmxhZ3MgJj0gfihFQ1JZUFRGU19FTkNSWVBURUQpOworCQkJY3J5cHRfc3RhdC0+ZmxhZ3MgJj0gfihFQ1JZUFRGU19JX1NJWkVfSU5JVElBTElaRUQKKwkJCQkJICAgICAgIHwgRUNSWVBURlNfRU5DUllQVEVEKTsKIAkJfQogCX0KIAltdXRleF91bmxvY2soJmNyeXB0X3N0YXQtPmNzX211dGV4KTsKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgeworCQlyYyA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCQlmc3N0YWNrX2NvcHlfYXR0cl9hbGwoaW5vZGUsIGxvd2VyX2lub2RlKTsKKwl9CiAJbWVtY3B5KCZsb3dlcl9pYSwgaWEsIHNpemVvZihsb3dlcl9pYSkpOwogCWlmIChpYS0+aWFfdmFsaWQgJiBBVFRSX0ZJTEUpCiAJCWxvd2VyX2lhLmlhX2ZpbGUgPSBlY3J5cHRmc19maWxlX3RvX2xvd2VyKGlhLT5pYV9maWxlKTsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYyBiL2ZzL2VjcnlwdGZzL2t0aHJlYWQuYwppbmRleCAwODUxYWI2Li42OWY5OTRhIDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9rdGhyZWFkLmMKKysrIGIvZnMvZWNyeXB0ZnMva3RocmVhZC5jCkBAIC00NCw3ICs0NCw3IEBACiAgKiBAaWdub3JlZDogaWdub3JlZAogICoKICAqIFRoZSBlQ3J5cHRmcyBrZXJuZWwgdGhyZWFkIHRoYXQgaGFzIHRoZSByZXNwb25zaWJpbGl0eSBvZiBnZXR0aW5nCi0gKiB0aGUgbG93ZXIgcGVyc2lzdGVudCBmaWxlIHdpdGggUlcgcGVybWlzc2lvbnMuCisgKiB0aGUgbG93ZXIgZmlsZSB3aXRoIFJXIHBlcm1pc3Npb25zLgogICoKICAqIFJldHVybnMgemVybyBvbiBzdWNjZXNzOyBub24temVybyBvdGhlcndpc2UKICAqLwpAQCAtMTQxLDggKzE0MSw4IEBACiAJaW50IHJjID0gMDsKIAogCS8qIENvcnJlc3BvbmRpbmcgZHB1dCgpIGFuZCBtbnRwdXQoKSBhcmUgZG9uZSB3aGVuIHRoZQotCSAqIHBlcnNpc3RlbnQgZmlsZSBpcyBmcHV0KCkgd2hlbiB0aGUgZUNyeXB0ZnMgaW5vZGUgaXMKLQkgKiBkZXN0cm95ZWQuICovCisJICogbG93ZXIgZmlsZSBpcyBmcHV0KCkgd2hlbiBhbGwgZUNyeXB0ZnMgZmlsZXMgZm9yIHRoZSBpbm9kZSBhcmUKKwkgKiByZWxlYXNlZC4gKi8KIAlkZ2V0KGxvd2VyX2RlbnRyeSk7CiAJbW50Z2V0KGxvd2VyX21udCk7CiAJZmxhZ3MgfD0gSVNfUkRPTkxZKGxvd2VyX2RlbnRyeS0+ZF9pbm9kZSkgPyBPX1JET05MWSA6IE9fUkRXUjsKZGlmZiAtLWdpdCBhL2ZzL2VjcnlwdGZzL21haW4uYyBiL2ZzL2VjcnlwdGZzL21haW4uYwppbmRleCBmZGIyZWIwLi44OWI5MzM4IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9tYWluLmMKKysrIGIvZnMvZWNyeXB0ZnMvbWFpbi5jCkBAIC05Niw3ICs5Niw3IEBACiB9CiAKIC8qKgotICogZWNyeXB0ZnNfaW5pdF9wZXJzaXN0ZW50X2ZpbGUKKyAqIGVjcnlwdGZzX2luaXRfbG93ZXJfZmlsZQogICogQGVjcnlwdGZzX2RlbnRyeTogRnVsbHkgaW5pdGlhbGl6ZWQgZUNyeXB0ZnMgZGVudHJ5IG9iamVjdCwgd2l0aAogICogICAgICAgICAgICAgICAgICAgdGhlIGxvd2VyIGRlbnRyeSBhbmQgdGhlIGxvd2VyIG1vdW50IHNldAogICoKQEAgLTEwNCw0MiArMTA0LDcwIEBACiAgKiBpbm9kZS4gQWxsIEkvTyBvcGVyYXRpb25zIHRvIHRoZSBsb3dlciBpbm9kZSBvY2N1ciB0aHJvdWdoIHRoYXQKICAqIGZpbGUuIFdoZW4gdGhlIGZpcnN0IGVDcnlwdGZzIGRlbnRyeSB0aGF0IGludGVycG9zZXMgd2l0aCB0aGUgZmlyc3QKICAqIGxvd2VyIGRlbnRyeSBmb3IgdGhhdCBpbm9kZSBpcyBjcmVhdGVkLCB0aGlzIGZ1bmN0aW9uIGNyZWF0ZXMgdGhlCi0gKiBwZXJzaXN0ZW50IGZpbGUgc3RydWN0IGFuZCBhc3NvY2lhdGVzIGl0IHdpdGggdGhlIGVDcnlwdGZzCi0gKiBpbm9kZS4gV2hlbiB0aGUgZUNyeXB0ZnMgaW5vZGUgaXMgZGVzdHJveWVkLCB0aGUgZmlsZSBpcyBjbG9zZWQuCisgKiBsb3dlciBmaWxlIHN0cnVjdCBhbmQgYXNzb2NpYXRlcyBpdCB3aXRoIHRoZSBlQ3J5cHRmcworICogaW5vZGUuIFdoZW4gYWxsIGVDcnlwdGZzIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5vZGUgYXJlIHJlbGVhc2VkLCB0aGUKKyAqIGZpbGUgaXMgY2xvc2VkLgogICoKLSAqIFRoZSBwZXJzaXN0ZW50IGZpbGUgd2lsbCBiZSBvcGVuZWQgd2l0aCByZWFkL3dyaXRlIHBlcm1pc3Npb25zLCBpZgorICogVGhlIGxvd2VyIGZpbGUgd2lsbCBiZSBvcGVuZWQgd2l0aCByZWFkL3dyaXRlIHBlcm1pc3Npb25zLCBpZgogICogcG9zc2libGUuIE90aGVyd2lzZSwgaXQgaXMgb3BlbmVkIHJlYWQtb25seS4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBhIGxvd2VyIHBlcnNpc3RlbnQgZmlsZSBpcyBhbHJlYWR5CisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90aGluZyBpZiBhIGxvd2VyIGZpbGUgaXMgYWxyZWFkeQogICogYXNzb2NpYXRlZCB3aXRoIHRoZSBlQ3J5cHRmcyBpbm9kZS4KICAqCiAgKiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzczsgbm9uLXplcm8gb3RoZXJ3aXNlCiAgKi8KLWludCBlY3J5cHRmc19pbml0X3BlcnNpc3RlbnRfZmlsZShzdHJ1Y3QgZGVudHJ5ICplY3J5cHRmc19kZW50cnkpCitzdGF0aWMgaW50IGVjcnlwdGZzX2luaXRfbG93ZXJfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJICAgIHN0cnVjdCBmaWxlICoqbG93ZXJfZmlsZSkKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwotCXN0cnVjdCBlY3J5cHRmc19pbm9kZV9pbmZvICppbm9kZV9pbmZvID0KLQkJZWNyeXB0ZnNfaW5vZGVfdG9fcHJpdmF0ZShlY3J5cHRmc19kZW50cnktPmRfaW5vZGUpOwotCWludCByYyA9IDA7CisJc3RydWN0IGRlbnRyeSAqbG93ZXJfZGVudHJ5ID0gZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyKGRlbnRyeSk7CisJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQgPSBlY3J5cHRmc19kZW50cnlfdG9fbG93ZXJfbW50KGRlbnRyeSk7CisJaW50IHJjOwogCi0JaWYgKCFpbm9kZV9pbmZvLT5sb3dlcl9maWxlKSB7Ci0JCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeTsKLQkJc3RydWN0IHZmc21vdW50ICpsb3dlcl9tbnQgPQotCQkJZWNyeXB0ZnNfZGVudHJ5X3RvX2xvd2VyX21udChlY3J5cHRmc19kZW50cnkpOwotCi0JCWxvd2VyX2RlbnRyeSA9IGVjcnlwdGZzX2RlbnRyeV90b19sb3dlcihlY3J5cHRmc19kZW50cnkpOwotCQlyYyA9IGVjcnlwdGZzX3ByaXZpbGVnZWRfb3BlbigmaW5vZGVfaW5mby0+bG93ZXJfZmlsZSwKLQkJCQkJICAgICAgbG93ZXJfZGVudHJ5LCBsb3dlcl9tbnQsIGNyZWQpOwotCQlpZiAocmMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3Igb3BlbmluZyBsb3dlciBwZXJzaXN0ZW50IGZpbGUgIgotCQkJICAgICAgICJmb3IgbG93ZXJfZGVudHJ5IFsweCVwXSBhbmQgbG93ZXJfbW50IFsweCVwXTsgIgotCQkJICAgICAgICJyYyA9IFslZF1cbiIsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCByYyk7Ci0JCQlpbm9kZV9pbmZvLT5sb3dlcl9maWxlID0gTlVMTDsKLQkJfQorCXJjID0gZWNyeXB0ZnNfcHJpdmlsZWdlZF9vcGVuKGxvd2VyX2ZpbGUsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LAorCQkJCSAgICAgIGNyZWQpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIG9wZW5pbmcgbG93ZXIgZmlsZSAiCisJCSAgICAgICAiZm9yIGxvd2VyX2RlbnRyeSBbMHglcF0gYW5kIGxvd2VyX21udCBbMHglcF07ICIKKwkJICAgICAgICJyYyA9IFslZF1cbiIsIGxvd2VyX2RlbnRyeSwgbG93ZXJfbW50LCByYyk7CisJCSgqbG93ZXJfZmlsZSkgPSBOVUxMOwogCX0KIAlyZXR1cm4gcmM7CiB9CiAKK2ludCBlY3J5cHRmc19nZXRfbG93ZXJfZmlsZShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGVjcnlwdGZzX2lub2RlX2luZm8gKmlub2RlX2luZm8gPQorCQllY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGRlbnRyeS0+ZF9pbm9kZSk7CisJaW50IGNvdW50LCByYyA9IDA7CisKKwltdXRleF9sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKKwljb3VudCA9IGF0b21pY19pbmNfcmV0dXJuKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX2NvdW50KTsKKwlpZiAoV0FSTl9PTl9PTkNFKGNvdW50IDwgMSkpCisJCXJjID0gLUVJTlZBTDsKKwllbHNlIGlmIChjb3VudCA9PSAxKSB7CisJCXJjID0gZWNyeXB0ZnNfaW5pdF9sb3dlcl9maWxlKGRlbnRyeSwKKwkJCQkJICAgICAgJmlub2RlX2luZm8tPmxvd2VyX2ZpbGUpOworCQlpZiAocmMpCisJCQlhdG9taWNfc2V0KCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX2NvdW50LCAwKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZpbm9kZV9pbmZvLT5sb3dlcl9maWxlX211dGV4KTsKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgZWNyeXB0ZnNfcHV0X2xvd2VyX2ZpbGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgZWNyeXB0ZnNfaW5vZGVfaW5mbyAqaW5vZGVfaW5mbzsKKworCWlub2RlX2luZm8gPSBlY3J5cHRmc19pbm9kZV90b19wcml2YXRlKGlub2RlKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfbXV0ZXhfbG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9jb3VudCwKKwkJCQkgICAgICAmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCkpIHsKKwkJZnB1dChpbm9kZV9pbmZvLT5sb3dlcl9maWxlKTsKKwkJaW5vZGVfaW5mby0+bG93ZXJfZmlsZSA9IE5VTEw7CisJCW11dGV4X3VubG9jaygmaW5vZGVfaW5mby0+bG93ZXJfZmlsZV9tdXRleCk7CisJfQorfQorCiBzdGF0aWMgc3RydWN0IGlub2RlICplY3J5cHRmc19nZXRfaW5vZGUoc3RydWN0IGlub2RlICpsb3dlcl9pbm9kZSwKIAkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CmRpZmYgLS1naXQgYS9mcy9lY3J5cHRmcy9zdXBlci5jIGIvZnMvZWNyeXB0ZnMvc3VwZXIuYwppbmRleCBiYWNjODgyLi4yNDViNTE3IDEwMDY0NAotLS0gYS9mcy9lY3J5cHRmcy9zdXBlci5jCisrKyBiL2ZzL2VjcnlwdGZzL3N1cGVyLmMKQEAgLTU1LDYgKzU1LDggQEAKIAlpZiAodW5saWtlbHkoIWlub2RlX2luZm8pKQogCQlnb3RvIG91dDsKIAllY3J5cHRmc19pbml0X2NyeXB0X3N0YXQoJmlub2RlX2luZm8tPmNyeXB0X3N0YXQpOworCW11dGV4X2luaXQoJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfbXV0ZXgpOworCWF0b21pY19zZXQoJmlub2RlX2luZm8tPmxvd2VyX2ZpbGVfY291bnQsIDApOwogCWlub2RlX2luZm8tPmxvd2VyX2ZpbGUgPSBOVUxMOwogCWlub2RlID0gJmlub2RlX2luZm8tPnZmc19pbm9kZTsKIG91dDoKQEAgLTc3LDggKzc5LDcgQEAKICAqCiAgKiBUaGlzIGlzIHVzZWQgZHVyaW5nIHRoZSBmaW5hbCBkZXN0cnVjdGlvbiBvZiB0aGUgaW5vZGUuICBBbGwKICAqIGFsbG9jYXRpb24gb2YgbWVtb3J5IHJlbGF0ZWQgdG8gdGhlIGlub2RlLCBpbmNsdWRpbmcgYWxsb2NhdGVkCi0gKiBtZW1vcnkgaW4gdGhlIGNyeXB0X3N0YXQgc3RydWN0LCB3aWxsIGJlIHJlbGVhc2VkIGhlcmUuIFRoaXMKLSAqIGZ1bmN0aW9uIGFsc28gZnB1dCgpJ3MgdGhlIHBlcnNpc3RlbnQgZmlsZSBmb3IgdGhlIGxvd2VyIGlub2RlLgorICogbWVtb3J5IGluIHRoZSBjcnlwdF9zdGF0IHN0cnVjdCwgd2lsbCBiZSByZWxlYXNlZCBoZXJlLgogICogVGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5jZSB0aGF0IHRoaXMgZGVhbGxvY2F0aW9uIHdpbGwgYmUgbWlzc2VkLgogICovCiBzdGF0aWMgdm9pZCBlY3J5cHRmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC04NiwxNiArODcsNyBAQAogCXN0cnVjdCBlY3J5cHRmc19pbm9kZV9pbmZvICppbm9kZV9pbmZvOwogCiAJaW5vZGVfaW5mbyA9IGVjcnlwdGZzX2lub2RlX3RvX3ByaXZhdGUoaW5vZGUpOwotCWlmIChpbm9kZV9pbmZvLT5sb3dlcl9maWxlKSB7Ci0JCXN0cnVjdCBkZW50cnkgKmxvd2VyX2RlbnRyeSA9Ci0JCQlpbm9kZV9pbmZvLT5sb3dlcl9maWxlLT5mX2RlbnRyeTsKLQotCQlCVUdfT04oIWxvd2VyX2RlbnRyeSk7Ci0JCWlmIChsb3dlcl9kZW50cnktPmRfaW5vZGUpIHsKLQkJCWZwdXQoaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7Ci0JCQlpbm9kZV9pbmZvLT5sb3dlcl9maWxlID0gTlVMTDsKLQkJfQotCX0KKwlCVUdfT04oaW5vZGVfaW5mby0+bG93ZXJfZmlsZSk7CiAJZWNyeXB0ZnNfZGVzdHJveV9jcnlwdF9zdGF0KCZpbm9kZV9pbmZvLT5jcnlwdF9zdGF0KTsKIAljYWxsX3JjdSgmaW5vZGUtPmlfcmN1LCBlY3J5cHRmc19pX2NhbGxiYWNrKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2ZpbGUuYyBiL2ZzL2ZpbGUuYwppbmRleCAwYmUzNDQ3Li40YzY5OTJkIDEwMDY0NAotLS0gYS9mcy9maWxlLmMKKysrIGIvZnMvZmlsZS5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0zOSwxNCArNDAsMTcgQEAKICAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBmZHRhYmxlX2RlZmVyLCBmZHRhYmxlX2RlZmVyX2xpc3QpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKmFsbG9jX2ZkbWVtKHVuc2lnbmVkIGludCBzaXplKQorc3RhdGljIHZvaWQgKmFsbG9jX2ZkbWVtKHVuc2lnbmVkIGludCBzaXplKQogewotCXZvaWQgKmRhdGE7Ci0KLQlkYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMfF9fR0ZQX05PV0FSTik7Ci0JaWYgKGRhdGEgIT0gTlVMTCkKLQkJcmV0dXJuIGRhdGE7Ci0KKwkvKgorCSAqIFZlcnkgbGFyZ2UgYWxsb2NhdGlvbnMgY2FuIHN0cmVzcyBwYWdlIHJlY2xhaW0sIHNvIGZhbGwgYmFjayB0bworCSAqIHZtYWxsb2MoKSBpZiB0aGUgYWxsb2NhdGlvbiBzaXplIHdpbGwgYmUgY29uc2lkZXJlZCAibGFyZ2UiIGJ5IHRoZSBWTS4KKwkgKi8KKwlpZiAoc2l6ZSA8PSAoUEFHRV9TSVpFIDw8IFBBR0VfQUxMT0NfQ09TVExZX09SREVSKSkgeworCQl2b2lkICpkYXRhID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMfF9fR0ZQX05PV0FSTik7CisJCWlmIChkYXRhICE9IE5VTEwpCisJCQlyZXR1cm4gZGF0YTsKKwl9CiAJcmV0dXJuIHZtYWxsb2Moc2l6ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvZGlyLmMgYi9mcy9mdXNlL2Rpci5jCmluZGV4IGM2YmE0OWIuLmIzMmViMjkgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZGlyLmMKKysrIGIvZnMvZnVzZS9kaXIuYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAJCWlmICghaW5vZGUpCiAJCQlyZXR1cm4gMDsKIAotCQlpZiAobmQtPmZsYWdzICYgTE9PS1VQX1JDVSkKKwkJaWYgKG5kICYmIChuZC0+ZmxhZ3MgJiBMT09LVVBfUkNVKSkKIAkJCXJldHVybiAtRUNISUxEOwogCiAJCWZjID0gZ2V0X2Z1c2VfY29ubihpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2FvcHMuYyBiL2ZzL2dmczIvYW9wcy5jCmluZGV4IGM3MTk5NWIuLjBmNWM0ZjkgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvYW9wcy5jCisrKyBiL2ZzL2dmczIvYW9wcy5jCkBAIC04ODQsOCArODg0LDggQEAKIAl9CiAKIAlicmVsc2UoZGliaCk7Ci0JZ2ZzMl90cmFuc19lbmQoc2RwKTsKIGZhaWxlZDoKKwlnZnMyX3RyYW5zX2VuZChzZHApOwogCWlmIChhbCkgewogCQlnZnMyX2lucGxhY2VfcmVsZWFzZShpcCk7CiAJCWdmczJfcXVvdGFfdW5sb2NrKGlwKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZGlyLmMgYi9mcy9nZnMyL2Rpci5jCmluZGV4IDVjMzU2ZDAuLmY3ODljNTcgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZGlyLmMKKysrIGIvZnMvZ2ZzMi9kaXIuYwpAQCAtMTUwNiw3ICsxNTA2LDcgQEAKIAkJaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChkaXItPmlfc2IsIAogCQkJCWJlMTZfdG9fY3B1KGRlbnQtPmRlX3R5cGUpLAogCQkJCWJlNjRfdG9fY3B1KGRlbnQtPmRlX2ludW0ubm9fYWRkciksCi0JCQkJYmU2NF90b19jcHUoZGVudC0+ZGVfaW51bS5ub19mb3JtYWxfaW5vKSk7CisJCQkJYmU2NF90b19jcHUoZGVudC0+ZGVfaW51bS5ub19mb3JtYWxfaW5vKSwgMCk7CiAJCWJyZWxzZShiaCk7CiAJCXJldHVybiBpbm9kZTsKIAl9CmRpZmYgLS1naXQgYS9mcy9nZnMyL2ZpbGUuYyBiL2ZzL2dmczIvZmlsZS5jCmluZGV4IGIyNjgyZTA3Li5lNDgzMTA4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2ZpbGUuYworKysgYi9mcy9nZnMyL2ZpbGUuYwpAQCAtNjE3LDE4ICs2MTcsNTEgQEAKIAlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGVtcHR5X3dyaXRlX2VuZChzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwKLQkJCSAgIHVuc2lnbmVkIHRvKQorc3RhdGljIGludCBlbXB0eV93cml0ZV9lbmQoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGZyb20sCisJCQkgICB1bnNpZ25lZCB0bywgaW50IG1vZGUpCiB7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKHBhZ2UtPm1hcHBpbmctPmhvc3QpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKKwl1bnNpZ25lZCBvZmZzZXQsIGJsa3NpemUgPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CisJcGdvZmZfdCBlbmRfaW5kZXggPSBpX3NpemVfcmVhZChpbm9kZSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKIAogCXplcm9fdXNlcihwYWdlLCBmcm9tLCB0by1mcm9tKTsKIAltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CiAKLQlpZiAoIWdmczJfaXNfd3JpdGViYWNrKGlwKSkKLQkJZ2ZzMl9wYWdlX2FkZF9kYXRhYnVmcyhpcCwgcGFnZSwgZnJvbSwgdG8pOworCWlmIChwYWdlLT5pbmRleCA8IGVuZF9pbmRleCB8fCAhKG1vZGUgJiBGQUxMT0NfRkxfS0VFUF9TSVpFKSkgeworCQlpZiAoIWdmczJfaXNfd3JpdGViYWNrKGlwKSkKKwkJCWdmczJfcGFnZV9hZGRfZGF0YWJ1ZnMoaXAsIHBhZ2UsIGZyb20sIHRvKTsKIAotCWJsb2NrX2NvbW1pdF93cml0ZShwYWdlLCBmcm9tLCB0byk7CisJCWJsb2NrX2NvbW1pdF93cml0ZShwYWdlLCBmcm9tLCB0byk7CisJCXJldHVybiAwOworCX0KKworCW9mZnNldCA9IDA7CisJYmggPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisJd2hpbGUgKG9mZnNldCA8IHRvKSB7CisJCWlmIChvZmZzZXQgPj0gZnJvbSkgeworCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CisJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CisJCQljbGVhcl9idWZmZXJfbmV3KGJoKTsKKwkJCXdyaXRlX2RpcnR5X2J1ZmZlcihiaCwgV1JJVEUpOworCQl9CisJCW9mZnNldCArPSBibGtzaXplOworCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKKwl9CisKKwlvZmZzZXQgPSAwOworCWJoID0gcGFnZV9idWZmZXJzKHBhZ2UpOworCXdoaWxlIChvZmZzZXQgPCB0bykgeworCQlpZiAob2Zmc2V0ID49IGZyb20pIHsKKwkJCXdhaXRfb25fYnVmZmVyKGJoKTsKKwkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlvZmZzZXQgKz0gYmxrc2l6ZTsKKwkJYmggPSBiaC0+Yl90aGlzX3BhZ2U7CisJfQorCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG5lZWRzX2VtcHR5X3dyaXRlKHNlY3Rvcl90IGJsb2NrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQpAQCAtNjQzLDcgKzY3Niw4IEBACiAJcmV0dXJuICFidWZmZXJfbWFwcGVkKCZiaF9tYXApOwogfQogCi1zdGF0aWMgaW50IHdyaXRlX2VtcHR5X2Jsb2NrcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCitzdGF0aWMgaW50IHdyaXRlX2VtcHR5X2Jsb2NrcyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sCisJCQkgICAgICBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAl1bnNpZ25lZCBzdGFydCwgZW5kLCBuZXh0LCBibGtzaXplOwpAQCAtNjY4LDcgKzcwMiw5IEBACiAJCQkJCQkJICBnZnMyX2Jsb2NrX21hcCk7CiAJCQkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQkJCXJldHVybiByZXQ7Ci0JCQkJZW1wdHlfd3JpdGVfZW5kKHBhZ2UsIHN0YXJ0LCBlbmQpOworCQkJCXJldCA9IGVtcHR5X3dyaXRlX2VuZChwYWdlLCBzdGFydCwgZW5kLCBtb2RlKTsKKwkJCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCQkJcmV0dXJuIHJldDsKIAkJCQllbmQgPSAwOwogCQkJfQogCQkJc3RhcnQgPSBuZXh0OwpAQCAtNjgyLDcgKzcxOCw5IEBACiAJCXJldCA9IF9fYmxvY2tfd3JpdGVfYmVnaW4ocGFnZSwgc3RhcnQsIGVuZCAtIHN0YXJ0LCBnZnMyX2Jsb2NrX21hcCk7CiAJCWlmICh1bmxpa2VseShyZXQpKQogCQkJcmV0dXJuIHJldDsKLQkJZW1wdHlfd3JpdGVfZW5kKHBhZ2UsIHN0YXJ0LCBlbmQpOworCQlyZXQgPSBlbXB0eV93cml0ZV9lbmQocGFnZSwgc3RhcnQsIGVuZCwgbW9kZSk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTczMSw3ICs3NjksNyBAQAogCiAJCWlmIChjdXJyID09IGVuZCkKIAkJCXRvID0gZW5kX29mZnNldDsKLQkJZXJyb3IgPSB3cml0ZV9lbXB0eV9ibG9ja3MocGFnZSwgZnJvbSwgdG8pOworCQllcnJvciA9IHdyaXRlX2VtcHR5X2Jsb2NrcyhwYWdlLCBmcm9tLCB0bywgbW9kZSk7CiAJCWlmICghZXJyb3IgJiYgb2Zmc2V0ICsgdG8gPiBpbm9kZS0+aV9zaXplICYmCiAJCSAgICAhKG1vZGUgJiBGQUxMT0NfRkxfS0VFUF9TSVpFKSkgewogCQkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmZzZXQgKyB0byk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb2NrLmMgYi9mcy9nZnMyL2dsb2NrLmMKaW5kZXggZjA3NjQzZS4uN2E0ZmI2MyAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9jay5jCisrKyBiL2ZzL2dmczIvZ2xvY2suYwpAQCAtOTMsMTQgKzkzLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX2xvY2tfYnVja2V0KHVuc2lnbmVkIGludCBoYXNoKQogewotCXN0cnVjdCBobGlzdF9ibF9oZWFkICpibCA9ICZnbF9oYXNoX3RhYmxlW2hhc2hdOwotCWJpdF9zcGluX2xvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilibCk7CisJaGxpc3RfYmxfbG9jaygmZ2xfaGFzaF90YWJsZVtoYXNoXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzcGluX3VubG9ja19idWNrZXQodW5zaWduZWQgaW50IGhhc2gpCiB7Ci0Jc3RydWN0IGhsaXN0X2JsX2hlYWQgKmJsID0gJmdsX2hhc2hfdGFibGVbaGFzaF07Ci0JX19iaXRfc3Bpbl91bmxvY2soMCwgKHVuc2lnbmVkIGxvbmcgKilibCk7CisJaGxpc3RfYmxfdW5sb2NrKCZnbF9oYXNoX3RhYmxlW2hhc2hdKTsKIH0KIAogc3RhdGljIHZvaWQgZ2ZzMl9nbG9ja19kZWFsbG9jKHN0cnVjdCByY3VfaGVhZCAqcmN1KQpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9nbG9wcy5jIGIvZnMvZ2ZzMi9nbG9wcy5jCmluZGV4IDM3NTRlM2MuLjI1ZWViMmIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvZ2xvcHMuYworKysgYi9mcy9nZnMyL2dsb3BzLmMKQEAgLTM4NSw2ICszODUsMTAgQEAKIHN0YXRpYyB2b2lkIGlvcGVuX2dvX2NhbGxiYWNrKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSAoc3RydWN0IGdmczJfaW5vZGUgKilnbC0+Z2xfb2JqZWN0OworCXN0cnVjdCBnZnMyX3NiZCAqc2RwID0gZ2wtPmdsX3NiZDsKKworCWlmIChzZHAtPnNkX3Zmcy0+c19mbGFncyAmIE1TX1JET05MWSkKKwkJcmV0dXJuOwogCiAJaWYgKGdsLT5nbF9kZW1vdGVfc3RhdGUgPT0gTE1fU1RfVU5MT0NLRUQgJiYKIAkgICAgZ2wtPmdsX3N0YXRlID09IExNX1NUX1NIQVJFRCAmJiBpcCkgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbm9kZS5jIGIvZnMvZ2ZzMi9pbm9kZS5jCmluZGV4IDk3ZDU0YTIuLjkxMzRkY2IgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvaW5vZGUuYworKysgYi9mcy9nZnMyL2lub2RlLmMKQEAgLTQwLDM3ICs0MCw2MSBAQAogCXU2NCBpcl9sZW5ndGg7CiB9OwogCitzdHJ1Y3QgZ2ZzMl9za2lwX2RhdGEgeworCXU2NCBub19hZGRyOworCWludCBza2lwcGVkOworCWludCBub25fYmxvY2s7Cit9OworCiBzdGF0aWMgaW50IGlnZXRfdGVzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpvcGFxdWUpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKLQl1NjQgKm5vX2FkZHIgPSBvcGFxdWU7CisJc3RydWN0IGdmczJfc2tpcF9kYXRhICpkYXRhID0gb3BhcXVlOwogCi0JaWYgKGlwLT5pX25vX2FkZHIgPT0gKm5vX2FkZHIpCisJaWYgKGlwLT5pX25vX2FkZHIgPT0gZGF0YS0+bm9fYWRkcikgeworCQlpZiAoZGF0YS0+bm9uX2Jsb2NrICYmCisJCSAgICBpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9DTEVBUnxJX1dJTExfRlJFRSkpIHsKKwkJCWRhdGEtPnNraXBwZWQgPSAxOworCQkJcmV0dXJuIDA7CisJCX0KIAkJcmV0dXJuIDE7Ci0KKwl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgaWdldF9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqb3BhcXVlKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7Ci0JdTY0ICpub19hZGRyID0gb3BhcXVlOworCXN0cnVjdCBnZnMyX3NraXBfZGF0YSAqZGF0YSA9IG9wYXF1ZTsKIAotCWlub2RlLT5pX2lubyA9ICh1bnNpZ25lZCBsb25nKSpub19hZGRyOwotCWlwLT5pX25vX2FkZHIgPSAqbm9fYWRkcjsKKwlpZiAoZGF0YS0+c2tpcHBlZCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJaW5vZGUtPmlfaW5vID0gKHVuc2lnbmVkIGxvbmcpKGRhdGEtPm5vX2FkZHIpOworCWlwLT5pX25vX2FkZHIgPSBkYXRhLT5ub19hZGRyOwogCXJldHVybiAwOwogfQogCiBzdHJ1Y3QgaW5vZGUgKmdmczJfaWxvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgbm9fYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIGhhc2ggPSAodW5zaWduZWQgbG9uZylub19hZGRyOwotCXJldHVybiBpbG9va3VwNShzYiwgaGFzaCwgaWdldF90ZXN0LCAmbm9fYWRkcik7CisJc3RydWN0IGdmczJfc2tpcF9kYXRhIGRhdGE7CisKKwlkYXRhLm5vX2FkZHIgPSBub19hZGRyOworCWRhdGEuc2tpcHBlZCA9IDA7CisJZGF0YS5ub25fYmxvY2sgPSAwOworCXJldHVybiBpbG9va3VwNShzYiwgaGFzaCwgaWdldF90ZXN0LCAmZGF0YSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdmczJfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgbm9fYWRkcikKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKmdmczJfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgbm9fYWRkciwKKwkJCSAgICAgICBpbnQgbm9uX2Jsb2NrKQogeworCXN0cnVjdCBnZnMyX3NraXBfZGF0YSBkYXRhOwogCXVuc2lnbmVkIGxvbmcgaGFzaCA9ICh1bnNpZ25lZCBsb25nKW5vX2FkZHI7Ci0JcmV0dXJuIGlnZXQ1X2xvY2tlZChzYiwgaGFzaCwgaWdldF90ZXN0LCBpZ2V0X3NldCwgJm5vX2FkZHIpOworCisJZGF0YS5ub19hZGRyID0gbm9fYWRkcjsKKwlkYXRhLnNraXBwZWQgPSAwOworCWRhdGEubm9uX2Jsb2NrID0gbm9uX2Jsb2NrOworCXJldHVybiBpZ2V0NV9sb2NrZWQoc2IsIGhhc2gsIGlnZXRfdGVzdCwgaWdldF9zZXQsICZkYXRhKTsKIH0KIAogLyoqCkBAIC0xMTEsMTkgKzEzNSwyMCBAQAogICogQHNiOiBUaGUgc3VwZXIgYmxvY2sKICAqIEBub19hZGRyOiBUaGUgaW5vZGUgbnVtYmVyCiAgKiBAdHlwZTogVGhlIHR5cGUgb2YgdGhlIGlub2RlCisgKiBub25fYmxvY2s6IENhbiB3ZSBibG9jayBvbiBpbm9kZXMgdGhhdCBhcmUgYmVpbmcgZnJlZWQ/CiAgKgogICogUmV0dXJuczogQSBWRlMgaW5vZGUsIG9yIGFuIGVycm9yCiAgKi8KIAogc3RydWN0IGlub2RlICpnZnMyX2lub2RlX2xvb2t1cChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgdHlwZSwKLQkJCQl1NjQgbm9fYWRkciwgdTY0IG5vX2Zvcm1hbF9pbm8pCisJCQkJdTY0IG5vX2FkZHIsIHU2NCBub19mb3JtYWxfaW5vLCBpbnQgbm9uX2Jsb2NrKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwOwogCXN0cnVjdCBnZnMyX2dsb2NrICppb19nbCA9IE5VTEw7CiAJaW50IGVycm9yOwogCi0JaW5vZGUgPSBnZnMyX2lnZXQoc2IsIG5vX2FkZHIpOworCWlub2RlID0gZ2ZzMl9pZ2V0KHNiLCBub19hZGRyLCBub25fYmxvY2spOwogCWlwID0gR0ZTMl9JKGlub2RlKTsKIAogCWlmICghaW5vZGUpCkBAIC0xODUsMTEgKzIxMCwxMiBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBzZHAtPnNkX3ZmczsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOwogCWludCBlcnJvcjsKIAorCS8qIE11c3Qgbm90IHJlYWQgaW4gYmxvY2sgdW50aWwgYmxvY2sgdHlwZSBpcyB2ZXJpZmllZCAqLwogCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9udW0oc2RwLCBub19hZGRyLCAmZ2ZzMl9pbm9kZV9nbG9wcywKLQkJCQkgIExNX1NUX1NIQVJFRCwgTE1fRkxBR19BTlksICZpX2doKTsKKwkJCQkgIExNX1NUX0VYQ0xVU0lWRSwgR0xfU0tJUCwgJmlfZ2gpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogCkBAIC0xOTcsNyArMjIzLDcgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKIAotCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoc2IsIERUX1VOS05PV04sIG5vX2FkZHIsIDApOworCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoc2IsIERUX1VOS05PV04sIG5vX2FkZHIsIDAsIDEpOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIGZhaWw7CiAKQEAgLTg0Myw3ICs4NjksNyBAQAogCQlnb3RvIGZhaWxfZ3VubG9jazI7CiAKIAlpbm9kZSA9IGdmczJfaW5vZGVfbG9va3VwKGRpci0+aV9zYiwgSUYyRFQobW9kZSksIGludW0ubm9fYWRkciwKLQkJCQkgIGludW0ubm9fZm9ybWFsX2lubyk7CisJCQkJICBpbnVtLm5vX2Zvcm1hbF9pbm8sIDApOwogCWlmIChJU19FUlIoaW5vZGUpKQogCQlnb3RvIGZhaWxfZ3VubG9jazI7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuaCBiL2ZzL2dmczIvaW5vZGUuaAppbmRleCAzZTAwYTY2Li4wOTljYTMwIDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmgKKysrIGIvZnMvZ2ZzMi9pbm9kZS5oCkBAIC05Nyw3ICs5Nyw4IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmdmczJfaW5vZGVfbG9va3VwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIHR5cGUsIAotCQkJCSAgICAgICB1NjQgbm9fYWRkciwgdTY0IG5vX2Zvcm1hbF9pbm8pOworCQkJCSAgICAgICB1NjQgbm9fYWRkciwgdTY0IG5vX2Zvcm1hbF9pbm8sCisJCQkJICAgICAgIGludCBub25fYmxvY2spOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZ2ZzMl9sb29rdXBfYnlfaW51bShzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCwgdTY0IG5vX2FkZHIsCiAJCQkJCSB1NjQgKm5vX2Zvcm1hbF9pbm8sCiAJCQkJCSB1bnNpZ25lZCBpbnQgYmxrdHlwZSk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19mc3R5cGUuYyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCmluZGV4IDQyZWYyNDMuLmQzYzY5ZWIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCkBAIC00MzAsNyArNDMwLDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAotCWlub2RlID0gZ2ZzMl9pbm9kZV9sb29rdXAoc2IsIERUX0RJUiwgbm9fYWRkciwgMCk7CisJaW5vZGUgPSBnZnMyX2lub2RlX2xvb2t1cChzYiwgRFRfRElSLCBub19hZGRyLCAwLCAwKTsKIAlpZiAoSVNfRVJSKGlub2RlKSkgewogCQlmc19lcnIoc2RwLCAiY2FuJ3QgcmVhZCBpbiAlcyBpbm9kZTogJWxkXG4iLCBuYW1lLCBQVFJfRVJSKGlub2RlKSk7CiAJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvcmdycC5jIGIvZnMvZ2ZzMi9yZ3JwLmMKaW5kZXggY2Y5MzBjZC4uNmZjYWU4NCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9yZ3JwLmMKKysrIGIvZnMvZ2ZzMi9yZ3JwLmMKQEAgLTk0NSw3ICs5NDUsNyBAQAogCQkvKiByZ2Jsa19zZWFyY2ggY2FuIHJldHVybiBhIGJsb2NrIDwgZ29hbCwgc28gd2UgbmVlZCB0bwogCQkgICBrZWVwIGl0IG1hcmNoaW5nIGZvcndhcmQuICovCiAJCW5vX2FkZHIgPSBibG9jayArIHJnZC0+cmRfZGF0YTA7Ci0JCWdvYWwrKzsKKwkJZ29hbCA9IG1heChibG9jayArIDEsIGdvYWwgKyAxKTsKIAkJaWYgKCpsYXN0X3VubGlua2VkICE9IE5PX0JMT0NLICYmIG5vX2FkZHIgPD0gKmxhc3RfdW5saW5rZWQpCiAJCQljb250aW51ZTsKIAkJaWYgKG5vX2FkZHIgPT0gc2tpcCkKQEAgLTk3MSw3ICs5NzEsNyBAQAogCQkJZm91bmQrKzsKIAogCQkvKiBMaW1pdCByZWNsYWltIHRvIHNlbnNpYmxlIG51bWJlciBvZiB0YXNrcyAqLwotCQlpZiAoZm91bmQgPiAyKk5SX0NQVVMpCisJCWlmIChmb3VuZCA+IE5SX0NQVVMpCiAJCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggYTRlMjNkNi4uYjlmMjhlNiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtMTMxOCwxNSArMTMxOCwxNyBAQAogCiBzdGF0aWMgdm9pZCBnZnMyX2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgZ2g7CiAJaW50IGVycm9yOwogCi0JaWYgKGlub2RlLT5pX25saW5rKQorCWlmIChpbm9kZS0+aV9ubGluayB8fCAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKQogCQlnb3RvIG91dDsKIAotCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7CisJLyogTXVzdCBub3QgcmVhZCBpbm9kZSBibG9jayB1bnRpbCBibG9jayB0eXBlIGhhcyBiZWVuIHZlcmlmaWVkICovCisJZXJyb3IgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgR0xfU0tJUCwgJmdoKTsKIAlpZiAodW5saWtlbHkoZXJyb3IpKSB7CiAJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpcC0+aV9pb3Blbl9naCk7CiAJCWdvdG8gb3V0OwpAQCAtMTMzNiw2ICsxMzM4LDEyIEBACiAJaWYgKGVycm9yKQogCQlnb3RvIG91dF90cnVuY2F0ZTsKIAorCWlmICh0ZXN0X2JpdChHSUZfSU5WQUxJRCwgJmlwLT5pX2ZsYWdzKSkgeworCQllcnJvciA9IGdmczJfaW5vZGVfcmVmcmVzaChpcCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0X3RydW5jYXRlOworCX0KKwogCWlwLT5pX2lvcGVuX2doLmdoX2ZsYWdzIHw9IEdMX05PQ0FDSEU7CiAJZ2ZzMl9nbG9ja19kcV93YWl0KCZpcC0+aV9pb3Blbl9naCk7CiAJZ2ZzMl9ob2xkZXJfcmVpbml0KExNX1NUX0VYQ0xVU0lWRSwgTE1fRkxBR19UUllfMUNCIHwgR0xfTk9DQUNIRSwgJmlwLT5pX2lvcGVuX2doKTsKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvS2NvbmZpZyBiL2ZzL2hwZnMvS2NvbmZpZwppbmRleCAwYzM5ZGMzLi41NmJkMTVjIDEwMDY0NAotLS0gYS9mcy9ocGZzL0tjb25maWcKKysrIGIvZnMvaHBmcy9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogY29uZmlnIEhQRlNfRlMKIAl0cmlzdGF0ZSAiT1MvMiBIUEZTIGZpbGUgc3lzdGVtIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBCTE9DSwotCWRlcGVuZHMgb24gQlJPS0VOIHx8ICFQUkVFTVBUCiAJaGVscAogCSAgT1MvMiBpcyBJQk0ncyBvcGVyYXRpbmcgc3lzdGVtIGZvciBQQydzLCB0aGUgc2FtZSBhcyBXYXJwLCBhbmQgSFBGUwogCSAgaXMgdGhlIGZpbGUgc3lzdGVtIHVzZWQgZm9yIG9yZ2FuaXppbmcgZmlsZXMgb24gT1MvMiBoYXJkIGRpc2sKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvYWxsb2MuYyBiL2ZzL2hwZnMvYWxsb2MuYwppbmRleCA1NTAzZTJjLi43YTVlYjJjIDEwMDY0NAotLS0gYS9mcy9ocGZzL2FsbG9jLmMKKysrIGIvZnMvaHBmcy9hbGxvYy5jCkBAIC04LDggKzgsNiBAQAogCiAjaW5jbHVkZSAiaHBmc19mbi5oIgogCi1zdGF0aWMgaW50IGhwZnNfYWxsb2NfaWZfcG9zc2libGVfbm9sb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjKTsKLQogLyoKICAqIENoZWNrIGlmIGEgc2VjdG9yIGlzIGFsbG9jYXRlZCBpbiBiaXRtYXAKICAqIFRoaXMgaXMgcmVhbGx5IHNsb3cuIFR1cm5lZCBvbiBvbmx5IGlmIGNoaz09MgpAQCAtMTgsOSArMTYsOSBAQAogc3RhdGljIGludCBjaGtfaWZfYWxsb2NhdGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjLCBjaGFyICptc2cpCiB7CiAJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoOwotCXVuc2lnbmVkICpibXA7CisJdTMyICpibXA7CiAJaWYgKCEoYm1wID0gaHBmc19tYXBfYml0bWFwKHMsIHNlYyA+PiAxNCwgJnFiaCwgImNoayIpKSkgZ290byBmYWlsOwotCWlmICgoYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdID4+IChzZWMgJiAweDFmKSkgJiAxKSB7CisJaWYgKChjcHVfdG9fbGUzMihibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0pID4+IChzZWMgJiAweDFmKSkgJiAxKSB7CiAJCWhwZnNfZXJyb3IocywgInNlY3RvciAnJXMnIC0gJTA4eCBub3QgYWxsb2NhdGVkIGluIGJpdG1hcCIsIG1zZywgc2VjKTsKIAkJZ290byBmYWlsMTsKIAl9CkBAIC0yOCw3ICsyNiw3IEBACiAJaWYgKHNlYyA+PSBocGZzX3NiKHMpLT5zYl9kaXJiYW5kX3N0YXJ0ICYmIHNlYyA8IGhwZnNfc2IocyktPnNiX2RpcmJhbmRfc3RhcnQgKyBocGZzX3NiKHMpLT5zYl9kaXJiYW5kX3NpemUpIHsKIAkJdW5zaWduZWQgc3NlYyA9IChzZWMgLSBocGZzX3NiKHMpLT5zYl9kaXJiYW5kX3N0YXJ0KSAvIDQ7CiAJCWlmICghKGJtcCA9IGhwZnNfbWFwX2Rub2RlX2JpdG1hcChzLCAmcWJoKSkpIGdvdG8gZmFpbDsKLQkJaWYgKChibXBbc3NlYyA+PiA1XSA+PiAoc3NlYyAmIDB4MWYpKSAmIDEpIHsKKwkJaWYgKChsZTMyX3RvX2NwdShibXBbc3NlYyA+PiA1XSkgPj4gKHNzZWMgJiAweDFmKSkgJiAxKSB7CiAJCQlocGZzX2Vycm9yKHMsICJzZWN0b3IgJyVzJyAtICUwOHggbm90IGFsbG9jYXRlZCBpbiBkaXJlY3RvcnkgYml0bWFwIiwgbXNnLCBzZWMpOwogCQkJZ290byBmYWlsMTsKIAkJfQpAQCAtNzUsNyArNzMsNiBAQAogCQlocGZzX2Vycm9yKHMsICJCYWQgYWxsb2NhdGlvbiBzaXplOiAlZCIsIG4pOwogCQlyZXR1cm4gMDsKIAl9Ci0JbG9ja19zdXBlcihzKTsKIAlpZiAoYnMgIT0gfjB4M2ZmZikgewogCQlpZiAoIShibXAgPSBocGZzX21hcF9iaXRtYXAocywgbmVhciA+PiAxNCwgJnFiaCwgImFpYiIpKSkgZ290byB1bHM7CiAJfSBlbHNlIHsKQEAgLTg1LDEwICs4Miw2IEBACiAJCXJldCA9IGJzICsgbnI7CiAJCWdvdG8gcnQ7CiAJfQotCS8qaWYgKCF0c3RiaXRzKGJtcCwgbnIgKyBuLCBuICsgZm9yd2FyZCkpIHsKLQkJcmV0ID0gYnMgKyBuciArIG47Ci0JCWdvdG8gcnQ7Ci0JfSovCiAJcSA9IG5yICsgbjsgYiA9IDA7CiAJd2hpbGUgKChhID0gdHN0Yml0cyhibXAsIHEsIG4gKyBmb3J3YXJkKSkgIT0gMCkgewogCQlxICs9IGE7CkBAIC0xMDUsMTQgKzk4LDE0IEBACiAJCWdvdG8gcnQ7CiAJfQogCW5yID4+PSA1OwotCS8qZm9yIChpID0gbnIgKyAxOyBpICE9IG5yOyBpKyssIGkgJj0gMHgxZmYpIHsqLworCS8qZm9yIChpID0gbnIgKyAxOyBpICE9IG5yOyBpKyssIGkgJj0gMHgxZmYpICovCiAJaSA9IG5yOwogCWRvIHsKLQkJaWYgKCFibXBbaV0pIGdvdG8gY29udDsKLQkJaWYgKG4gKyBmb3J3YXJkID49IDB4M2YgJiYgYm1wW2ldICE9IC0xKSBnb3RvIGNvbnQ7CisJCWlmICghbGUzMl90b19jcHUoYm1wW2ldKSkgZ290byBjb250OworCQlpZiAobiArIGZvcndhcmQgPj0gMHgzZiAmJiBsZTMyX3RvX2NwdShibXBbaV0pICE9IDB4ZmZmZmZmZmYpIGdvdG8gY29udDsKIAkJcSA9IGk8PDU7CiAJCWlmIChpID4gMCkgewotCQkJdW5zaWduZWQgayA9IGJtcFtpLTFdOworCQkJdW5zaWduZWQgayA9IGxlMzJfdG9fY3B1KGJtcFtpLTFdKTsKIAkJCXdoaWxlIChrICYgMHg4MDAwMDAwMCkgewogCQkJCXEtLTsgayA8PD0gMTsKIAkJCX0KQEAgLTEzMiwxOCArMTI1LDE3IEBACiAJfSB3aGlsZSAoaSAhPSBucik7CiAJcnQ6CiAJaWYgKHJldCkgewotCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrICYmICgocmV0ID4+IDE0KSAhPSAoYnMgPj4gMTQpIHx8IChibXBbKHJldCAmIDB4M2ZmZikgPj4gNV0gfCB+KCgoMSA8PCBuKSAtIDEpIDw8IChyZXQgJiAweDFmKSkpICE9IDB4ZmZmZmZmZmYpKSB7CisJCWlmIChocGZzX3NiKHMpLT5zYl9jaGsgJiYgKChyZXQgPj4gMTQpICE9IChicyA+PiAxNCkgfHwgKGxlMzJfdG9fY3B1KGJtcFsocmV0ICYgMHgzZmZmKSA+PiA1XSkgfCB+KCgoMSA8PCBuKSAtIDEpIDw8IChyZXQgJiAweDFmKSkpICE9IDB4ZmZmZmZmZmYpKSB7CiAJCQlocGZzX2Vycm9yKHMsICJBbGxvY2F0aW9uIGRvZXNuJ3Qgd29yayEgV2FudGVkICVkLCBhbGxvY2F0ZWQgYXQgJTA4eCIsIG4sIHJldCk7CiAJCQlyZXQgPSAwOwogCQkJZ290byBiOwogCQl9Ci0JCWJtcFsocmV0ICYgMHgzZmZmKSA+PiA1XSAmPSB+KCgoMSA8PCBuKSAtIDEpIDw8IChyZXQgJiAweDFmKSk7CisJCWJtcFsocmV0ICYgMHgzZmZmKSA+PiA1XSAmPSBjcHVfdG9fbGUzMih+KCgoMSA8PCBuKSAtIDEpIDw8IChyZXQgJiAweDFmKSkpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJfQogCWI6CiAJaHBmc19icmVsc2U0KCZxYmgpOwogCXVsczoKLQl1bmxvY2tfc3VwZXIocyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTU1LDcgKzE0Nyw3IEBACiAgKgkJCQlzZWN0b3JzCiAgKi8KIAotc2Vjbm8gaHBmc19hbGxvY19zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBuZWFyLCB1bnNpZ25lZCBuLCBpbnQgZm9yd2FyZCwgaW50IGxvY2spCitzZWNubyBocGZzX2FsbG9jX3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIG5lYXIsIHVuc2lnbmVkIG4sIGludCBmb3J3YXJkKQogewogCXNlY25vIHNlYzsKIAlpbnQgaTsKQEAgLTE2Nyw3ICsxNTksNiBAQAogCQlmb3J3YXJkID0gLWZvcndhcmQ7CiAJCWZfcCA9IDE7CiAJfQotCWlmIChsb2NrKSBocGZzX2xvY2tfY3JlYXRpb24ocyk7CiAJbl9ibXBzID0gKHNiaS0+c2JfZnNfc2l6ZSArIDB4NDAwMCAtIDEpID4+IDE0OwogCWlmIChuZWFyICYmIG5lYXIgPCBzYmktPnNiX2ZzX3NpemUpIHsKIAkJaWYgKChzZWMgPSBhbGxvY19pbl9ibXAocywgbmVhciwgbiwgZl9wID8gZm9yd2FyZCA6IGZvcndhcmQvNCkpKSBnb3RvIHJldDsKQEAgLTIxNCwxOCArMjA1LDE3IEBACiAJcmV0OgogCWlmIChzZWMgJiYgZl9wKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBmb3J3YXJkOyBpKyspIHsKLQkJCWlmICghaHBmc19hbGxvY19pZl9wb3NzaWJsZV9ub2xvY2socywgc2VjICsgaSArIDEpKSB7CisJCQlpZiAoIWhwZnNfYWxsb2NfaWZfcG9zc2libGUocywgc2VjICsgaSArIDEpKSB7CiAJCQkJaHBmc19lcnJvcihzLCAiUHJlYWxsb2MgZG9lc24ndCB3b3JrISBXYW50ZWQgJWQsIGFsbG9jYXRlZCBhdCAlMDh4LCBjYW4ndCBhbGxvY2F0ZSAlZCIsIGZvcndhcmQsIHNlYywgaSk7CiAJCQkJc2VjID0gMDsKIAkJCQlicmVhazsKIAkJCX0KIAkJfQogCX0KLQlpZiAobG9jaykgaHBmc191bmxvY2tfY3JlYXRpb24ocyk7CiAJcmV0dXJuIHNlYzsKIH0KIAotc3RhdGljIHNlY25vIGFsbG9jX2luX2RpcmJhbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBuZWFyLCBpbnQgbG9jaykKK3N0YXRpYyBzZWNubyBhbGxvY19pbl9kaXJiYW5kKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gbmVhcikKIHsKIAl1bnNpZ25lZCBuciA9IG5lYXI7CiAJc2Vjbm8gc2VjOwpAQCAtMjM2LDQ5ICsyMjYsMzUgQEAKIAkJbnIgPSBzYmktPnNiX2RpcmJhbmRfc3RhcnQgKyBzYmktPnNiX2RpcmJhbmRfc2l6ZSAtIDQ7CiAJbnIgLT0gc2JpLT5zYl9kaXJiYW5kX3N0YXJ0OwogCW5yID4+PSAyOwotCWlmIChsb2NrKSBocGZzX2xvY2tfY3JlYXRpb24ocyk7CiAJc2VjID0gYWxsb2NfaW5fYm1wKHMsICh+MHgzZmZmKSB8IG5yLCAxLCAwKTsKLQlpZiAobG9jaykgaHBmc191bmxvY2tfY3JlYXRpb24ocyk7CiAJaWYgKCFzZWMpIHJldHVybiAwOwogCXJldHVybiAoKHNlYyAmIDB4M2ZmZikgPDwgMikgKyBzYmktPnNiX2RpcmJhbmRfc3RhcnQ7CiB9CiAKIC8qIEFsbG9jIHNlY3RvciBpZiBpdCdzIGZyZWUgKi8KIAotc3RhdGljIGludCBocGZzX2FsbG9jX2lmX3Bvc3NpYmxlX25vbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIHNlYykKK2ludCBocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjKQogewogCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKLQl1bnNpZ25lZCAqYm1wOwotCWxvY2tfc3VwZXIocyk7CisJdTMyICpibXA7CiAJaWYgKCEoYm1wID0gaHBmc19tYXBfYml0bWFwKHMsIHNlYyA+PiAxNCwgJnFiaCwgImFpcCIpKSkgZ290byBlbmQ7Ci0JaWYgKGJtcFsoc2VjICYgMHgzZmZmKSA+PiA1XSAmICgxIDw8IChzZWMgJiAweDFmKSkpIHsKLQkJYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdICY9IH4oMSA8PCAoc2VjICYgMHgxZikpOworCWlmIChsZTMyX3RvX2NwdShibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0pICYgKDEgPDwgKHNlYyAmIDB4MWYpKSkgeworCQlibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0gJj0gY3B1X3RvX2xlMzIofigxIDw8IChzZWMgJiAweDFmKSkpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKLQkJdW5sb2NrX3N1cGVyKHMpOwogCQlyZXR1cm4gMTsKIAl9CiAJaHBmc19icmVsc2U0KCZxYmgpOwogCWVuZDoKLQl1bmxvY2tfc3VwZXIocyk7CiAJcmV0dXJuIDA7CiB9CiAKLWludCBocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gc2VjKQotewotCWludCByOwotCWhwZnNfbG9ja19jcmVhdGlvbihzKTsKLQlyID0gaHBmc19hbGxvY19pZl9wb3NzaWJsZV9ub2xvY2socywgc2VjKTsKLQlocGZzX3VubG9ja19jcmVhdGlvbihzKTsKLQlyZXR1cm4gcjsKLX0KLQogLyogRnJlZSBzZWN0b3JzIGluIGJpdG1hcHMgKi8KIAogdm9pZCBocGZzX2ZyZWVfc2VjdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIHNlYywgdW5zaWduZWQgbikKIHsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7Ci0JdW5zaWduZWQgKmJtcDsKKwl1MzIgKmJtcDsKIAlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOwogCS8qcHJpbnRrKCIyIC0gIik7Ki8KIAlpZiAoIW4pIHJldHVybjsKQEAgLTI4NiwyNiArMjYyLDIyIEBACiAJCWhwZnNfZXJyb3IocywgIlRyeWluZyB0byBmcmVlIHJlc2VydmVkIHNlY3RvciAlMDh4Iiwgc2VjKTsKIAkJcmV0dXJuOwogCX0KLQlsb2NrX3N1cGVyKHMpOwogCXNiaS0+c2JfbWF4X2Z3ZF9hbGxvYyArPSBuID4gMHhmZmZmID8gMHhmZmZmIDogbjsKIAlpZiAoc2JpLT5zYl9tYXhfZndkX2FsbG9jID4gMHhmZmZmZmYpIHNiaS0+c2JfbWF4X2Z3ZF9hbGxvYyA9IDB4ZmZmZmZmOwogCW5ld19tYXA6CiAJaWYgKCEoYm1wID0gaHBmc19tYXBfYml0bWFwKHMsIHNlYyA+PiAxNCwgJnFiaCwgImZyZWUiKSkpIHsKLQkJdW5sb2NrX3N1cGVyKHMpOwogCQlyZXR1cm47CiAJfQkKIAluZXdfdHN0OgotCWlmICgoYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdID4+IChzZWMgJiAweDFmKSAmIDEpKSB7CisJaWYgKChsZTMyX3RvX2NwdShibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0pID4+IChzZWMgJiAweDFmKSAmIDEpKSB7CiAJCWhwZnNfZXJyb3IocywgInNlY3RvciAlMDh4IG5vdCBhbGxvY2F0ZWQiLCBzZWMpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7Ci0JCXVubG9ja19zdXBlcihzKTsKIAkJcmV0dXJuOwogCX0KLQlibXBbKHNlYyAmIDB4M2ZmZikgPj4gNV0gfD0gMSA8PCAoc2VjICYgMHgxZik7CisJYm1wWyhzZWMgJiAweDNmZmYpID4+IDVdIHw9IGNwdV90b19sZTMyKDEgPDwgKHNlYyAmIDB4MWYpKTsKIAlpZiAoIS0tbikgewogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKLQkJdW5sb2NrX3N1cGVyKHMpOwogCQlyZXR1cm47CiAJfQkKIAlpZiAoISgrK3NlYyAmIDB4M2ZmZikpIHsKQEAgLTMyNywxMyArMjk5LDEzIEBACiAJaW50IG5fYm1wcyA9IChocGZzX3NiKHMpLT5zYl9mc19zaXplICsgMHg0MDAwIC0gMSkgPj4gMTQ7CiAJaW50IGIgPSBocGZzX3NiKHMpLT5zYl9jX2JpdG1hcCAmIDB4MGZmZmZmZmY7CiAJaW50IGksIGo7Ci0JdW5zaWduZWQgKmJtcDsKKwl1MzIgKmJtcDsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7CiAJaWYgKChibXAgPSBocGZzX21hcF9kbm9kZV9iaXRtYXAocywgJnFiaCkpKSB7CiAJCWZvciAoaiA9IDA7IGogPCA1MTI7IGorKykgewogCQkJdW5zaWduZWQgazsKLQkJCWlmICghYm1wW2pdKSBjb250aW51ZTsKLQkJCWZvciAoayA9IGJtcFtqXTsgazsgayA+Pj0gMSkgaWYgKGsgJiAxKSBpZiAoIS0tbikgeworCQkJaWYgKCFsZTMyX3RvX2NwdShibXBbal0pKSBjb250aW51ZTsKKwkJCWZvciAoayA9IGxlMzJfdG9fY3B1KGJtcFtqXSk7IGs7IGsgPj49IDEpIGlmIChrICYgMSkgaWYgKCEtLW4pIHsKIAkJCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC0zNTIsMTAgKzMyNCwxMCBAQAogCWNoa19ibXA6CiAJaWYgKGJtcCkgewogCQlmb3IgKGogPSAwOyBqIDwgNTEyOyBqKyspIHsKLQkJCXVuc2lnbmVkIGs7Ci0JCQlpZiAoIWJtcFtqXSkgY29udGludWU7CisJCQl1MzIgazsKKwkJCWlmICghbGUzMl90b19jcHUoYm1wW2pdKSkgY29udGludWU7CiAJCQlmb3IgKGsgPSAweGY7IGs7IGsgPDw9IDQpCi0JCQkJaWYgKChibXBbal0gJiBrKSA9PSBrKSB7CisJCQkJaWYgKChsZTMyX3RvX2NwdShibXBbal0pICYgaykgPT0gaykgewogCQkJCQlpZiAoIS0tbikgewogCQkJCQkJaHBmc19icmVsc2U0KCZxYmgpOwogCQkJCQkJcmV0dXJuIDA7CkBAIC0zNzksNDQgKzM1MSw0MCBAQAogCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBkbm8sIDQpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKLQkJdW5zaWduZWQgKmJtcDsKKwkJdTMyICpibXA7CiAJCXVuc2lnbmVkIHNzZWMgPSAoZG5vIC0gaHBmc19zYihzKS0+c2JfZGlyYmFuZF9zdGFydCkgLyA0OwotCQlsb2NrX3N1cGVyKHMpOwogCQlpZiAoIShibXAgPSBocGZzX21hcF9kbm9kZV9iaXRtYXAocywgJnFiaCkpKSB7Ci0JCQl1bmxvY2tfc3VwZXIocyk7CiAJCQlyZXR1cm47CiAJCX0KLQkJYm1wW3NzZWMgPj4gNV0gfD0gMSA8PCAoc3NlYyAmIDB4MWYpOworCQlibXBbc3NlYyA+PiA1XSB8PSBjcHVfdG9fbGUzMigxIDw8IChzc2VjICYgMHgxZikpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKLQkJdW5sb2NrX3N1cGVyKHMpOwogCX0KIH0KIAogc3RydWN0IGRub2RlICpocGZzX2FsbG9jX2Rub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gbmVhciwKLQkJCSBkbm9kZV9zZWNubyAqZG5vLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqcWJoLAotCQkJIGludCBsb2NrKQorCQkJIGRub2RlX3NlY25vICpkbm8sIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICpxYmgpCiB7CiAJc3RydWN0IGRub2RlICpkOwogCWlmIChocGZzX2NvdW50X29uZV9iaXRtYXAocywgaHBmc19zYihzKS0+c2JfZG1hcCkgPiBGUkVFX0ROT0RFU19BREQpIHsKLQkJaWYgKCEoKmRubyA9IGFsbG9jX2luX2RpcmJhbmQocywgbmVhciwgbG9jaykpKQotCQkJaWYgKCEoKmRubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDQsIDAsIGxvY2spKSkgcmV0dXJuIE5VTEw7CisJCWlmICghKCpkbm8gPSBhbGxvY19pbl9kaXJiYW5kKHMsIG5lYXIpKSkKKwkJCWlmICghKCpkbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCA0LCAwKSkpIHJldHVybiBOVUxMOwogCX0gZWxzZSB7Ci0JCWlmICghKCpkbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCA0LCAwLCBsb2NrKSkpCi0JCQlpZiAoISgqZG5vID0gYWxsb2NfaW5fZGlyYmFuZChzLCBuZWFyLCBsb2NrKSkpIHJldHVybiBOVUxMOworCQlpZiAoISgqZG5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgNCwgMCkpKQorCQkJaWYgKCEoKmRubyA9IGFsbG9jX2luX2RpcmJhbmQocywgbmVhcikpKSByZXR1cm4gTlVMTDsKIAl9CiAJaWYgKCEoZCA9IGhwZnNfZ2V0XzRzZWN0b3JzKHMsICpkbm8sIHFiaCkpKSB7CiAJCWhwZnNfZnJlZV9kbm9kZShzLCAqZG5vKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW1lbXNldChkLCAwLCAyMDQ4KTsKLQlkLT5tYWdpYyA9IEROT0RFX01BR0lDOwotCWQtPmZpcnN0X2ZyZWUgPSA1MjsKKwlkLT5tYWdpYyA9IGNwdV90b19sZTMyKEROT0RFX01BR0lDKTsKKwlkLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIoNTIpOwogCWQtPmRpcmVudFswXSA9IDMyOwogCWQtPmRpcmVudFsyXSA9IDg7CiAJZC0+ZGlyZW50WzMwXSA9IDE7CiAJZC0+ZGlyZW50WzMxXSA9IDI1NTsKLQlkLT5zZWxmID0gKmRubzsKKwlkLT5zZWxmID0gY3B1X3RvX2xlMzIoKmRubyk7CiAJcmV0dXJuIGQ7CiB9CiAKQEAgLTQyNCwxNiArMzkyLDE2IEBACiAJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKmJoKQogewogCXN0cnVjdCBmbm9kZSAqZjsKLQlpZiAoISgqZm5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgMSwgRk5PREVfQUxMT0NfRldELCAxKSkpIHJldHVybiBOVUxMOworCWlmICghKCpmbm8gPSBocGZzX2FsbG9jX3NlY3RvcihzLCBuZWFyLCAxLCBGTk9ERV9BTExPQ19GV0QpKSkgcmV0dXJuIE5VTEw7CiAJaWYgKCEoZiA9IGhwZnNfZ2V0X3NlY3RvcihzLCAqZm5vLCBiaCkpKSB7CiAJCWhwZnNfZnJlZV9zZWN0b3JzKHMsICpmbm8sIDEpOwogCQlyZXR1cm4gTlVMTDsKIAl9CQogCW1lbXNldChmLCAwLCA1MTIpOwotCWYtPm1hZ2ljID0gRk5PREVfTUFHSUM7Ci0JZi0+ZWFfb2ZmcyA9IDB4YzQ7CisJZi0+bWFnaWMgPSBjcHVfdG9fbGUzMihGTk9ERV9NQUdJQyk7CisJZi0+ZWFfb2ZmcyA9IGNwdV90b19sZTE2KDB4YzQpOwogCWYtPmJ0cmVlLm5fZnJlZV9ub2RlcyA9IDg7Ci0JZi0+YnRyZWUuZmlyc3RfZnJlZSA9IDg7CisJZi0+YnRyZWUuZmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KDgpOwogCXJldHVybiBmOwogfQogCkBAIC00NDEsMTYgKzQwOSwxNiBAQAogCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCkKIHsKIAlzdHJ1Y3QgYW5vZGUgKmE7Ci0JaWYgKCEoKmFubyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIG5lYXIsIDEsIEFOT0RFX0FMTE9DX0ZXRCwgMSkpKSByZXR1cm4gTlVMTDsKKwlpZiAoISgqYW5vID0gaHBmc19hbGxvY19zZWN0b3IocywgbmVhciwgMSwgQU5PREVfQUxMT0NfRldEKSkpIHJldHVybiBOVUxMOwogCWlmICghKGEgPSBocGZzX2dldF9zZWN0b3IocywgKmFubywgYmgpKSkgewogCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCAqYW5vLCAxKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW1lbXNldChhLCAwLCA1MTIpOwotCWEtPm1hZ2ljID0gQU5PREVfTUFHSUM7Ci0JYS0+c2VsZiA9ICphbm87CisJYS0+bWFnaWMgPSBjcHVfdG9fbGUzMihBTk9ERV9NQUdJQyk7CisJYS0+c2VsZiA9IGNwdV90b19sZTMyKCphbm8pOwogCWEtPmJ0cmVlLm5fZnJlZV9ub2RlcyA9IDQwOwogCWEtPmJ0cmVlLm5fdXNlZF9ub2RlcyA9IDA7Ci0JYS0+YnRyZWUuZmlyc3RfZnJlZSA9IDg7CisJYS0+YnRyZWUuZmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KDgpOwogCXJldHVybiBhOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9hbm9kZS5jIGIvZnMvaHBmcy9hbm9kZS5jCmluZGV4IDZhMmYwNGIuLjA4YjUwM2UgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvYW5vZGUuYworKysgYi9mcy9ocGZzL2Fub2RlLmMKQEAgLTIyLDggKzIyLDggQEAKIAlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSBpZiAoaHBmc19zdG9wX2N5Y2xlcyhzLCBhLCAmYzEsICZjMiwgImhwZnNfYnBsdXNfbG9va3VwIikpIHJldHVybiAtMTsKIAlpZiAoYnRyZWUtPmludGVybmFsKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBidHJlZS0+bl91c2VkX25vZGVzOyBpKyspCi0JCQlpZiAoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZmlsZV9zZWNubyA+IHNlYykgewotCQkJCWEgPSBidHJlZS0+dS5pbnRlcm5hbFtpXS5kb3duOworCQkJaWYgKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmludGVybmFsW2ldLmZpbGVfc2Vjbm8pID4gc2VjKSB7CisJCQkJYSA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmludGVybmFsW2ldLmRvd24pOwogCQkJCWJyZWxzZShiaCk7CiAJCQkJaWYgKCEoYW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBhLCAmYmgpKSkgcmV0dXJuIC0xOwogCQkJCWJ0cmVlID0gJmFub2RlLT5idHJlZTsKQEAgLTM0LDE4ICszNCwxOCBAQAogCQlyZXR1cm4gLTE7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBidHJlZS0+bl91c2VkX25vZGVzOyBpKyspCi0JCWlmIChidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vIDw9IHNlYyAmJgotCQkgICAgYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCA+IHNlYykgewotCQkJYSA9IGJ0cmVlLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm8gKyBzZWMgLSBidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vOworCQlpZiAobGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykgPD0gc2VjICYmCisJCSAgICBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCkgPiBzZWMpIHsKKwkJCWEgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vKSArIHNlYyAtIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pOwogCQkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgaWYgKGhwZnNfY2hrX3NlY3RvcnMocywgYSwgMSwgImRhdGEiKSkgewogCQkJCWJyZWxzZShiaCk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQkJaWYgKGlub2RlKSB7CiAJCQkJc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqaHBmc19pbm9kZSA9IGhwZnNfaShpbm9kZSk7Ci0JCQkJaHBmc19pbm9kZS0+aV9maWxlX3NlYyA9IGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm87Ci0JCQkJaHBmc19pbm9kZS0+aV9kaXNrX3NlYyA9IGJ0cmVlLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm87Ci0JCQkJaHBmc19pbm9kZS0+aV9uX3NlY3MgPSBidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGg7CisJCQkJaHBmc19pbm9kZS0+aV9maWxlX3NlYyA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pOworCQkJCWhwZnNfaW5vZGUtPmlfZGlza19zZWMgPSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vKTsKKwkJCQlocGZzX2lub2RlLT5pX25fc2VjcyA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCk7CiAJCQl9CiAJCQlicmVsc2UoYmgpOwogCQkJcmV0dXJuIGE7CkBAIC04Myw4ICs4Myw4IEBACiAJCXJldHVybiAtMTsKIAl9CiAJaWYgKGJ0cmVlLT5pbnRlcm5hbCkgewotCQlhID0gYnRyZWUtPnUuaW50ZXJuYWxbbl0uZG93bjsKLQkJYnRyZWUtPnUuaW50ZXJuYWxbbl0uZmlsZV9zZWNubyA9IC0xOworCQlhID0gbGUzMl90b19jcHUoYnRyZWUtPnUuaW50ZXJuYWxbbl0uZG93bik7CisJCWJ0cmVlLT51LmludGVybmFsW25dLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigtMSk7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJYnJlbHNlKGJoKTsKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykKQEAgLTk0LDE1ICs5NCwxNSBAQAogCQlnb3RvIGdvX2Rvd247CiAJfQogCWlmIChuID49IDApIHsKLQkJaWYgKGJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8gKyBidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGggIT0gZnNlY25vKSB7CisJCWlmIChsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCkgIT0gZnNlY25vKSB7CiAJCQlocGZzX2Vycm9yKHMsICJhbGxvY2F0ZWQgc2l6ZSAlMDh4LCB0cnlpbmcgdG8gYWRkIHNlY3RvciAlMDh4LCAlY25vZGUgJTA4eCIsCi0JCQkJYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCwgZnNlY25vLAorCQkJCWxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoKSwgZnNlY25vLAogCQkJCWZub2Q/J2YnOidhJywgbm9kZSk7CiAJCQlicmVsc2UoYmgpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCWlmIChocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHMsIHNlID0gYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZGlza19zZWNubyArIGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCkpIHsKLQkJCWJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCsrOworCQlpZiAoaHBmc19hbGxvY19pZl9wb3NzaWJsZShzLCBzZSA9IGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmRpc2tfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoKSkpIHsKKwkJCWJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW25dLmxlbmd0aCkgKyAxKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlyZXR1cm4gc2U7CkBAIC0xMTUsMjAgKzExNSwyMCBAQAogCQl9CiAJCXNlID0gIWZub2QgPyBub2RlIDogKG5vZGUgKyAxNjM4NCkgJiB+MTYzODM7CiAJfQkKLQlpZiAoIShzZSA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIHNlLCAxLCBmc2Vjbm8qQUxMT0NfTT5BTExPQ19GV0RfTUFYID8gQUxMT0NfRldEX01BWCA6IGZzZWNubypBTExPQ19NPEFMTE9DX0ZXRF9NSU4gPyBBTExPQ19GV0RfTUlOIDogZnNlY25vKkFMTE9DX00sIDEpKSkgeworCWlmICghKHNlID0gaHBmc19hbGxvY19zZWN0b3Iocywgc2UsIDEsIGZzZWNubypBTExPQ19NPkFMTE9DX0ZXRF9NQVggPyBBTExPQ19GV0RfTUFYIDogZnNlY25vKkFMTE9DX008QUxMT0NfRldEX01JTiA/IEFMTE9DX0ZXRF9NSU4gOiBmc2Vjbm8qQUxMT0NfTSkpKSB7CiAJCWJyZWxzZShiaCk7CiAJCXJldHVybiAtMTsKIAl9Ci0JZnMgPSBuIDwgMCA/IDAgOiBidHJlZS0+dS5leHRlcm5hbFtuXS5maWxlX3NlY25vICsgYnRyZWUtPnUuZXh0ZXJuYWxbbl0ubGVuZ3RoOworCWZzID0gbiA8IDAgPyAwIDogbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubykgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGgpOwogCWlmICghYnRyZWUtPm5fZnJlZV9ub2RlcykgewotCQl1cCA9IGEgIT0gbm9kZSA/IGFub2RlLT51cCA6IC0xOworCQl1cCA9IGEgIT0gbm9kZSA/IGxlMzJfdG9fY3B1KGFub2RlLT51cCkgOiAtMTsKIAkJaWYgKCEoYW5vZGUgPSBocGZzX2FsbG9jX2Fub2RlKHMsIGEsICZuYSwgJmJoMSkpKSB7CiAJCQlicmVsc2UoYmgpOwogCQkJaHBmc19mcmVlX3NlY3RvcnMocywgc2UsIDEpOwogCQkJcmV0dXJuIC0xOwogCQl9CiAJCWlmIChhID09IG5vZGUgJiYgZm5vZCkgewotCQkJYW5vZGUtPnVwID0gbm9kZTsKKwkJCWFub2RlLT51cCA9IGNwdV90b19sZTMyKG5vZGUpOwogCQkJYW5vZGUtPmJ0cmVlLmZub2RlX3BhcmVudCA9IDE7CiAJCQlhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzID0gYnRyZWUtPm5fdXNlZF9ub2RlczsKIAkJCWFub2RlLT5idHJlZS5maXJzdF9mcmVlID0gYnRyZWUtPmZpcnN0X2ZyZWU7CkBAIC0xMzcsOSArMTM3LDkgQEAKIAkJCWJ0cmVlLT5pbnRlcm5hbCA9IDE7CiAJCQlidHJlZS0+bl9mcmVlX25vZGVzID0gMTE7CiAJCQlidHJlZS0+bl91c2VkX25vZGVzID0gMTsKLQkJCWJ0cmVlLT5maXJzdF9mcmVlID0gKGNoYXIgKikmKGJ0cmVlLT51LmludGVybmFsWzFdKSAtIChjaGFyICopYnRyZWU7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFswXS5maWxlX3NlY25vID0gLTE7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFswXS5kb3duID0gbmE7CisJCQlidHJlZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KChjaGFyICopJihidHJlZS0+dS5pbnRlcm5hbFsxXSkgLSAoY2hhciAqKWJ0cmVlKTsKKwkJCWJ0cmVlLT51LmludGVybmFsWzBdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigtMSk7CisJCQlidHJlZS0+dS5pbnRlcm5hbFswXS5kb3duID0gY3B1X3RvX2xlMzIobmEpOwogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQl9IGVsc2UgaWYgKCEocmFub2RlID0gaHBmc19hbGxvY19hbm9kZShzLCAvKmEqLzAsICZyYSwgJmJoMikpKSB7CiAJCQlicmVsc2UoYmgpOwpAQCAtMTUzLDE1ICsxNTMsMTUgQEAKIAkJYnRyZWUgPSAmYW5vZGUtPmJ0cmVlOwogCX0KIAlidHJlZS0+bl9mcmVlX25vZGVzLS07IG4gPSBidHJlZS0+bl91c2VkX25vZGVzKys7Ci0JYnRyZWUtPmZpcnN0X2ZyZWUgKz0gMTI7Ci0JYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZGlza19zZWNubyA9IHNlOwotCWJ0cmVlLT51LmV4dGVybmFsW25dLmZpbGVfc2Vjbm8gPSBmczsKLQlidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGggPSAxOworCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoYnRyZWUtPmZpcnN0X2ZyZWUpICsgMTIpOworCWJ0cmVlLT51LmV4dGVybmFsW25dLmRpc2tfc2Vjbm8gPSBjcHVfdG9fbGUzMihzZSk7CisJYnRyZWUtPnUuZXh0ZXJuYWxbbl0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKGZzKTsKKwlidHJlZS0+dS5leHRlcm5hbFtuXS5sZW5ndGggPSBjcHVfdG9fbGUzMigxKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKIAlpZiAoKGEgPT0gbm9kZSAmJiBmbm9kKSB8fCBuYSA9PSAtMSkgcmV0dXJuIHNlOwogCWMyID0gMDsKLQl3aGlsZSAodXAgIT0gLTEpIHsKKwl3aGlsZSAodXAgIT0gKGFub2RlX3NlY25vKS0xKSB7CiAJCXN0cnVjdCBhbm9kZSAqbmV3X2Fub2RlOwogCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKQogCQkJaWYgKGhwZnNfc3RvcF9jeWNsZXMocywgdXAsICZjMSwgJmMyLCAiaHBmc19hZGRfc2VjdG9yX3RvX2J0cmVlICMyIikpIHJldHVybiAtMTsKQEAgLTE3NCw0NyArMTc0LDQ3IEBACiAJCX0KIAkJaWYgKGJ0cmVlLT5uX2ZyZWVfbm9kZXMpIHsKIAkJCWJ0cmVlLT5uX2ZyZWVfbm9kZXMtLTsgbiA9IGJ0cmVlLT5uX3VzZWRfbm9kZXMrKzsKLQkJCWJ0cmVlLT5maXJzdF9mcmVlICs9IDg7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFtuXS5maWxlX3NlY25vID0gLTE7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFtuXS5kb3duID0gbmE7Ci0JCQlidHJlZS0+dS5pbnRlcm5hbFtuLTFdLmZpbGVfc2Vjbm8gPSBmczsKKwkJCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoYnRyZWUtPmZpcnN0X2ZyZWUpICsgOCk7CisJCQlidHJlZS0+dS5pbnRlcm5hbFtuXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoLTEpOworCQkJYnRyZWUtPnUuaW50ZXJuYWxbbl0uZG93biA9IGNwdV90b19sZTMyKG5hKTsKKwkJCWJ0cmVlLT51LmludGVybmFsW24tMV0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKGZzKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlicmVsc2UoYmgyKTsKIAkJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIHJhLCAxKTsKIAkJCWlmICgoYW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBuYSwgJmJoKSkpIHsKLQkJCQlhbm9kZS0+dXAgPSB1cDsKKwkJCQlhbm9kZS0+dXAgPSBjcHVfdG9fbGUzMih1cCk7CiAJCQkJYW5vZGUtPmJ0cmVlLmZub2RlX3BhcmVudCA9IHVwID09IG5vZGUgJiYgZm5vZDsKIAkJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCQkJYnJlbHNlKGJoKTsKIAkJCX0KIAkJCXJldHVybiBzZTsKIAkJfQotCQl1cCA9IHVwICE9IG5vZGUgPyBhbm9kZS0+dXAgOiAtMTsKLQkJYnRyZWUtPnUuaW50ZXJuYWxbYnRyZWUtPm5fdXNlZF9ub2RlcyAtIDFdLmZpbGVfc2Vjbm8gPSAvKmZzKi8tMTsKKwkJdXAgPSB1cCAhPSBub2RlID8gbGUzMl90b19jcHUoYW5vZGUtPnVwKSA6IC0xOworCQlidHJlZS0+dS5pbnRlcm5hbFtidHJlZS0+bl91c2VkX25vZGVzIC0gMV0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKC8qZnMqLy0xKTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlicmVsc2UoYmgpOwogCQlhID0gbmE7CiAJCWlmICgobmV3X2Fub2RlID0gaHBmc19hbGxvY19hbm9kZShzLCBhLCAmbmEsICZiaCkpKSB7CiAJCQlhbm9kZSA9IG5ld19hbm9kZTsKLQkJCS8qYW5vZGUtPnVwID0gdXAgIT0gLTEgPyB1cCA6IHJhOyovCisJCQkvKmFub2RlLT51cCA9IGNwdV90b19sZTMyKHVwICE9IC0xID8gdXAgOiByYSk7Ki8KIAkJCWFub2RlLT5idHJlZS5pbnRlcm5hbCA9IDE7CiAJCQlhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzID0gMTsKIAkJCWFub2RlLT5idHJlZS5uX2ZyZWVfbm9kZXMgPSA1OTsKLQkJCWFub2RlLT5idHJlZS5maXJzdF9mcmVlID0gMTY7Ci0JCQlhbm9kZS0+YnRyZWUudS5pbnRlcm5hbFswXS5kb3duID0gYTsKLQkJCWFub2RlLT5idHJlZS51LmludGVybmFsWzBdLmZpbGVfc2Vjbm8gPSAtMTsKKwkJCWFub2RlLT5idHJlZS5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoMTYpOworCQkJYW5vZGUtPmJ0cmVlLnUuaW50ZXJuYWxbMF0uZG93biA9IGNwdV90b19sZTMyKGEpOworCQkJYW5vZGUtPmJ0cmVlLnUuaW50ZXJuYWxbMF0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKC0xKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlpZiAoKGFub2RlID0gaHBmc19tYXBfYW5vZGUocywgYSwgJmJoKSkpIHsKLQkJCQlhbm9kZS0+dXAgPSBuYTsKKwkJCQlhbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihuYSk7CiAJCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQkJCWJyZWxzZShiaCk7CiAJCQl9CiAJCX0gZWxzZSBuYSA9IGE7CiAJfQogCWlmICgoYW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBuYSwgJmJoKSkpIHsKLQkJYW5vZGUtPnVwID0gbm9kZTsKKwkJYW5vZGUtPnVwID0gY3B1X3RvX2xlMzIobm9kZSk7CiAJCWlmIChmbm9kKSBhbm9kZS0+YnRyZWUuZm5vZGVfcGFyZW50ID0gMTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQlicmVsc2UoYmgpOwpAQCAtMjMyLDE0ICsyMzIsMTQgQEAKIAkJfQogCQlidHJlZSA9ICZmbm9kZS0+YnRyZWU7CiAJfQotCXJhbm9kZS0+dXAgPSBub2RlOwotCW1lbWNweSgmcmFub2RlLT5idHJlZSwgYnRyZWUsIGJ0cmVlLT5maXJzdF9mcmVlKTsKKwlyYW5vZGUtPnVwID0gY3B1X3RvX2xlMzIobm9kZSk7CisJbWVtY3B5KCZyYW5vZGUtPmJ0cmVlLCBidHJlZSwgbGUxNl90b19jcHUoYnRyZWUtPmZpcnN0X2ZyZWUpKTsKIAlpZiAoZm5vZCkgcmFub2RlLT5idHJlZS5mbm9kZV9wYXJlbnQgPSAxOwogCXJhbm9kZS0+YnRyZWUubl9mcmVlX25vZGVzID0gKHJhbm9kZS0+YnRyZWUuaW50ZXJuYWwgPyA2MCA6IDQwKSAtIHJhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzOwogCWlmIChyYW5vZGUtPmJ0cmVlLmludGVybmFsKSBmb3IgKG4gPSAwOyBuIDwgcmFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXM7IG4rKykgewogCQlzdHJ1Y3QgYW5vZGUgKnVub2RlOwotCQlpZiAoKHVub2RlID0gaHBmc19tYXBfYW5vZGUocywgcmFub2RlLT51LmludGVybmFsW25dLmRvd24sICZiaDEpKSkgewotCQkJdW5vZGUtPnVwID0gcmE7CisJCWlmICgodW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBsZTMyX3RvX2NwdShyYW5vZGUtPnUuaW50ZXJuYWxbbl0uZG93biksICZiaDEpKSkgeworCQkJdW5vZGUtPnVwID0gY3B1X3RvX2xlMzIocmEpOwogCQkJdW5vZGUtPmJ0cmVlLmZub2RlX3BhcmVudCA9IDA7CiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaDEpOwogCQkJYnJlbHNlKGJoMSk7CkBAIC0yNDgsMTEgKzI0OCwxMSBAQAogCWJ0cmVlLT5pbnRlcm5hbCA9IDE7CiAJYnRyZWUtPm5fZnJlZV9ub2RlcyA9IGZub2QgPyAxMCA6IDU4OwogCWJ0cmVlLT5uX3VzZWRfbm9kZXMgPSAyOwotCWJ0cmVlLT5maXJzdF9mcmVlID0gKGNoYXIgKikmYnRyZWUtPnUuaW50ZXJuYWxbMl0gLSAoY2hhciAqKWJ0cmVlOwotCWJ0cmVlLT51LmludGVybmFsWzBdLmZpbGVfc2Vjbm8gPSBmczsKLQlidHJlZS0+dS5pbnRlcm5hbFswXS5kb3duID0gcmE7Ci0JYnRyZWUtPnUuaW50ZXJuYWxbMV0uZmlsZV9zZWNubyA9IC0xOwotCWJ0cmVlLT51LmludGVybmFsWzFdLmRvd24gPSBuYTsKKwlidHJlZS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTE2KChjaGFyICopJmJ0cmVlLT51LmludGVybmFsWzJdIC0gKGNoYXIgKilidHJlZSk7CisJYnRyZWUtPnUuaW50ZXJuYWxbMF0uZmlsZV9zZWNubyA9IGNwdV90b19sZTMyKGZzKTsKKwlidHJlZS0+dS5pbnRlcm5hbFswXS5kb3duID0gY3B1X3RvX2xlMzIocmEpOworCWJ0cmVlLT51LmludGVybmFsWzFdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigtMSk7CisJYnRyZWUtPnUuaW50ZXJuYWxbMV0uZG93biA9IGNwdV90b19sZTMyKG5hKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaDIpOwpAQCAtMjc5LDcgKzI3OSw3IEBACiAJZ29fZG93bjoKIAlkMiA9IDA7CiAJd2hpbGUgKGJ0cmVlMS0+aW50ZXJuYWwpIHsKLQkJYW5vID0gYnRyZWUxLT51LmludGVybmFsW3Bvc10uZG93bjsKKwkJYW5vID0gbGUzMl90b19jcHUoYnRyZWUxLT51LmludGVybmFsW3Bvc10uZG93bik7CiAJCWlmIChsZXZlbCkgYnJlbHNlKGJoKTsKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykKIAkJCWlmIChocGZzX3N0b3BfY3ljbGVzKHMsIGFubywgJmQxLCAmZDIsICJocGZzX3JlbW92ZV9idHJlZSAjMSIpKQpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCXBvcyA9IDA7CiAJfQogCWZvciAoaSA9IDA7IGkgPCBidHJlZTEtPm5fdXNlZF9ub2RlczsgaSsrKQotCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBidHJlZTEtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubywgYnRyZWUxLT51LmV4dGVybmFsW2ldLmxlbmd0aCk7CisJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KGJ0cmVlMS0+dS5leHRlcm5hbFtpXS5kaXNrX3NlY25vKSwgbGUzMl90b19jcHUoYnRyZWUxLT51LmV4dGVybmFsW2ldLmxlbmd0aCkpOwogCWdvX3VwOgogCWlmICghbGV2ZWwpIHJldHVybjsKIAlicmVsc2UoYmgpOwpAQCAtMjk4LDEzICsyOTgsMTMgQEAKIAkJaWYgKGhwZnNfc3RvcF9jeWNsZXMocywgYW5vLCAmYzEsICZjMiwgImhwZnNfcmVtb3ZlX2J0cmVlICMyIikpIHJldHVybjsKIAlocGZzX2ZyZWVfc2VjdG9ycyhzLCBhbm8sIDEpOwogCW9hbm8gPSBhbm87Ci0JYW5vID0gYW5vZGUtPnVwOworCWFubyA9IGxlMzJfdG9fY3B1KGFub2RlLT51cCk7CiAJaWYgKC0tbGV2ZWwpIHsKIAkJaWYgKCEoYW5vZGUgPSBocGZzX21hcF9hbm9kZShzLCBhbm8sICZiaCkpKSByZXR1cm47CiAJCWJ0cmVlMSA9ICZhbm9kZS0+YnRyZWU7CiAJfSBlbHNlIGJ0cmVlMSA9IGJ0cmVlOwogCWZvciAoaSA9IDA7IGkgPCBidHJlZTEtPm5fdXNlZF9ub2RlczsgaSsrKSB7Ci0JCWlmIChidHJlZTEtPnUuaW50ZXJuYWxbaV0uZG93biA9PSBvYW5vKSB7CisJCWlmIChsZTMyX3RvX2NwdShidHJlZTEtPnUuaW50ZXJuYWxbaV0uZG93bikgPT0gb2FubykgewogCQkJaWYgKChwb3MgPSBpICsgMSkgPCBidHJlZTEtPm5fdXNlZF9ub2RlcykKIAkJCQlnb3RvIGdvX2Rvd247CiAJCQllbHNlCkBAIC00MTEsNyArNDExLDcgQEAKIAkJaWYgKGZubykgewogCQkJYnRyZWUtPm5fZnJlZV9ub2RlcyA9IDg7CiAJCQlidHJlZS0+bl91c2VkX25vZGVzID0gMDsKLQkJCWJ0cmVlLT5maXJzdF9mcmVlID0gODsKKwkJCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoOCk7CiAJCQlidHJlZS0+aW50ZXJuYWwgPSAwOwogCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwogCQl9IGVsc2UgaHBmc19mcmVlX3NlY3RvcnMocywgZiwgMSk7CkBAIC00MjEsMjIgKzQyMSwyMiBAQAogCXdoaWxlIChidHJlZS0+aW50ZXJuYWwpIHsKIAkJbm9kZXMgPSBidHJlZS0+bl91c2VkX25vZGVzICsgYnRyZWUtPm5fZnJlZV9ub2RlczsKIAkJZm9yIChpID0gMDsgaSA8IGJ0cmVlLT5uX3VzZWRfbm9kZXM7IGkrKykKLQkJCWlmIChidHJlZS0+dS5pbnRlcm5hbFtpXS5maWxlX3NlY25vID49IHNlY3MpIGdvdG8gZjsKKwkJCWlmIChsZTMyX3RvX2NwdShidHJlZS0+dS5pbnRlcm5hbFtpXS5maWxlX3NlY25vKSA+PSBzZWNzKSBnb3RvIGY7CiAJCWJyZWxzZShiaCk7CiAJCWhwZnNfZXJyb3IocywgImludGVybmFsIGJ0cmVlICUwOHggZG9lc24ndCBlbmQgd2l0aCAtMSIsIG5vZGUpOwogCQlyZXR1cm47CiAJCWY6CiAJCWZvciAoaiA9IGkgKyAxOyBqIDwgYnRyZWUtPm5fdXNlZF9ub2RlczsgaisrKQotCQkJaHBmc19lYV9yZW1vdmUocywgYnRyZWUtPnUuaW50ZXJuYWxbal0uZG93biwgMSwgMCk7CisJCQlocGZzX2VhX3JlbW92ZShzLCBsZTMyX3RvX2NwdShidHJlZS0+dS5pbnRlcm5hbFtqXS5kb3duKSwgMSwgMCk7CiAJCWJ0cmVlLT5uX3VzZWRfbm9kZXMgPSBpICsgMTsKIAkJYnRyZWUtPm5fZnJlZV9ub2RlcyA9IG5vZGVzIC0gYnRyZWUtPm5fdXNlZF9ub2RlczsKLQkJYnRyZWUtPmZpcnN0X2ZyZWUgPSA4ICsgOCAqIGJ0cmVlLT5uX3VzZWRfbm9kZXM7CisJCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoOCArIDggKiBidHJlZS0+bl91c2VkX25vZGVzKTsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOwotCQlpZiAoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZmlsZV9zZWNubyA9PSBzZWNzKSB7CisJCWlmIChidHJlZS0+dS5pbnRlcm5hbFtpXS5maWxlX3NlY25vID09IGNwdV90b19sZTMyKHNlY3MpKSB7CiAJCQlicmVsc2UoYmgpOwogCQkJcmV0dXJuOwogCQl9Ci0JCW5vZGUgPSBidHJlZS0+dS5pbnRlcm5hbFtpXS5kb3duOworCQlub2RlID0gbGUzMl90b19jcHUoYnRyZWUtPnUuaW50ZXJuYWxbaV0uZG93bik7CiAJCWJyZWxzZShiaCk7CiAJCWlmIChocGZzX3NiKHMpLT5zYl9jaGspCiAJCQlpZiAoaHBmc19zdG9wX2N5Y2xlcyhzLCBub2RlLCAmYzEsICZjMiwgImhwZnNfdHJ1bmNhdGVfYnRyZWUiKSkKQEAgLTQ0NiwyNSArNDQ2LDI1IEBACiAJfQkKIAlub2RlcyA9IGJ0cmVlLT5uX3VzZWRfbm9kZXMgKyBidHJlZS0+bl9mcmVlX25vZGVzOwogCWZvciAoaSA9IDA7IGkgPCBidHJlZS0+bl91c2VkX25vZGVzOyBpKyspCi0JCWlmIChidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vICsgYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoID49IHNlY3MpIGdvdG8gZmY7CisJCWlmIChsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSArIGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCkgPj0gc2VjcykgZ290byBmZjsKIAlicmVsc2UoYmgpOwogCXJldHVybjsKIAlmZjoKLQlpZiAoc2VjcyA8PSBidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSB7CisJaWYgKHNlY3MgPD0gbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubykpIHsKIAkJaHBmc19lcnJvcihzLCAidGhlcmUgaXMgYW4gYWxsb2NhdGlvbiBlcnJvciBpbiBmaWxlICUwOHgsIHNlY3RvciAlMDh4IiwgZiwgc2Vjcyk7CiAJCWlmIChpKSBpLS07CiAJfQotCWVsc2UgaWYgKGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8gKyBidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGggPiBzZWNzKSB7Ci0JCWhwZnNfZnJlZV9zZWN0b3JzKHMsIGJ0cmVlLT51LmV4dGVybmFsW2ldLmRpc2tfc2Vjbm8gKyBzZWNzIC0KLQkJCWJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8sIGJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aAotCQkJLSBzZWNzICsgYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZmlsZV9zZWNubyk7IC8qIEkgaG9wZSBnY2Mgb3B0aW1pemVzIHRoaXMgOi0pICovCi0JCWJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCA9IHNlY3MgLSBidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vOworCWVsc2UgaWYgKGxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pICsgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0ubGVuZ3RoKSA+IHNlY3MpIHsKKwkJaHBmc19mcmVlX3NlY3RvcnMocywgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbaV0uZGlza19zZWNubykgKyBzZWNzIC0KKwkJCWxlMzJfdG9fY3B1KGJ0cmVlLT51LmV4dGVybmFsW2ldLmZpbGVfc2Vjbm8pLCBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5sZW5ndGgpCisJCQktIHNlY3MgKyBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSk7IC8qIEkgaG9wZSBnY2Mgb3B0aW1pemVzIHRoaXMgOi0pICovCisJCWJ0cmVlLT51LmV4dGVybmFsW2ldLmxlbmd0aCA9IGNwdV90b19sZTMyKHNlY3MgLSBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtpXS5maWxlX3NlY25vKSk7CiAJfQogCWZvciAoaiA9IGkgKyAxOyBqIDwgYnRyZWUtPm5fdXNlZF9ub2RlczsgaisrKQotCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBidHJlZS0+dS5leHRlcm5hbFtqXS5kaXNrX3NlY25vLCBidHJlZS0+dS5leHRlcm5hbFtqXS5sZW5ndGgpOworCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShidHJlZS0+dS5leHRlcm5hbFtqXS5kaXNrX3NlY25vKSwgbGUzMl90b19jcHUoYnRyZWUtPnUuZXh0ZXJuYWxbal0ubGVuZ3RoKSk7CiAJYnRyZWUtPm5fdXNlZF9ub2RlcyA9IGkgKyAxOwogCWJ0cmVlLT5uX2ZyZWVfbm9kZXMgPSBub2RlcyAtIGJ0cmVlLT5uX3VzZWRfbm9kZXM7Ci0JYnRyZWUtPmZpcnN0X2ZyZWUgPSA4ICsgMTIgKiBidHJlZS0+bl91c2VkX25vZGVzOworCWJ0cmVlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMTYoOCArIDEyICogYnRyZWUtPm5fdXNlZF9ub2Rlcyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7CiB9CkBAIC00ODAsMTIgKzQ4MCwxMiBAQAogCXN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhX2VuZDsKIAlpZiAoIShmbm9kZSA9IGhwZnNfbWFwX2Zub2RlKHMsIGZubywgJmJoKSkpIHJldHVybjsKIAlpZiAoIWZub2RlLT5kaXJmbGFnKSBocGZzX3JlbW92ZV9idHJlZShzLCAmZm5vZGUtPmJ0cmVlKTsKLQllbHNlIGhwZnNfcmVtb3ZlX2R0cmVlKHMsIGZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8pOworCWVsc2UgaHBmc19yZW1vdmVfZHRyZWUocywgbGUzMl90b19jcHUoZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubykpOwogCWVhX2VuZCA9IGZub2RlX2VuZF9lYShmbm9kZSk7CiAJZm9yIChlYSA9IGZub2RlX2VhKGZub2RlKTsgZWEgPCBlYV9lbmQ7IGVhID0gbmV4dF9lYShlYSkpCiAJCWlmIChlYS0+aW5kaXJlY3QpCiAJCQlocGZzX2VhX3JlbW92ZShzLCBlYV9zZWMoZWEpLCBlYS0+YW5vZGUsIGVhX2xlbihlYSkpOwotCWhwZnNfZWFfZXh0X3JlbW92ZShzLCBmbm9kZS0+ZWFfc2Vjbm8sIGZub2RlLT5lYV9hbm9kZSwgZm5vZGUtPmVhX3NpemVfbCk7CisJaHBmc19lYV9leHRfcmVtb3ZlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksIGZub2RlLT5lYV9hbm9kZSwgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkpOwogCWJyZWxzZShiaCk7CiAJaHBmc19mcmVlX3NlY3RvcnMocywgZm5vLCAxKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2hwZnMvYnVmZmVyLmMgYi9mcy9ocGZzL2J1ZmZlci5jCmluZGV4IDc5M2NiOWQuLjllY2RlMjcgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvYnVmZmVyLmMKKysrIGIvZnMvaHBmcy9idWZmZXIuYwpAQCAtOSwyMiArOSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgImhwZnNfZm4uaCIKIAotdm9pZCBocGZzX2xvY2tfY3JlYXRpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzKQotewotI2lmZGVmIERFQlVHX0xPQ0tTCi0JcHJpbnRrKCJsb2NrIGNyZWF0aW9uXG4iKTsKLSNlbmRpZgotCW11dGV4X2xvY2soJmhwZnNfc2IocyktPmhwZnNfY3JlYXRpb25fZGUpOwotfQotCi12b2lkIGhwZnNfdW5sb2NrX2NyZWF0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqcykKLXsKLSNpZmRlZiBERUJVR19MT0NLUwotCXByaW50aygidW5sb2NrIGNyZWF0aW9uXG4iKTsKLSNlbmRpZgotCW11dGV4X3VubG9jaygmaHBmc19zYihzKS0+aHBmc19jcmVhdGlvbl9kZSk7Ci19Ci0KIC8qIE1hcCBhIHNlY3RvciBpbnRvIGEgYnVmZmVyIGFuZCByZXR1cm4gcG9pbnRlcnMgdG8gaXQgYW5kIHRvIHRoZSBidWZmZXIuICovCiAKIHZvaWQgKmhwZnNfbWFwX3NlY3RvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHVuc2lnbmVkIHNlY25vLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHAsCkBAIC0zMiw2ICsxNiw4IEBACiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAorCWhwZnNfbG9ja19hc3NlcnQocyk7CisKIAljb25kX3Jlc2NoZWQoKTsKIAogCSpiaHAgPSBiaCA9IHNiX2JyZWFkKHMsIHNlY25vKTsKQEAgLTUwLDYgKzM2LDggQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCS8qcmV0dXJuIGhwZnNfbWFwX3NlY3RvcihzLCBzZWNubywgYmhwLCAwKTsqLwogCisJaHBmc19sb2NrX2Fzc2VydChzKTsKKwogCWNvbmRfcmVzY2hlZCgpOwogCiAJaWYgKCgqYmhwID0gYmggPSBzYl9nZXRibGsocywgc2Vjbm8pKSAhPSBOVUxMKSB7CkBAIC03MCw2ICs1OCw4IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAljaGFyICpkYXRhOwogCisJaHBmc19sb2NrX2Fzc2VydChzKTsKKwogCWNvbmRfcmVzY2hlZCgpOwogCiAJaWYgKHNlY25vICYgMykgewpAQCAtMTI1LDYgKzExNSw4IEBACiB7CiAJY29uZF9yZXNjaGVkKCk7CiAKKwlocGZzX2xvY2tfYXNzZXJ0KHMpOworCiAJaWYgKHNlY25vICYgMykgewogCQlwcmludGsoIkhQRlM6IGhwZnNfZ2V0XzRzZWN0b3JzOiB1bmFsaWduZWQgcmVhZFxuIik7CiAJCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9kaXIuYyBiL2ZzL2hwZnMvZGlyLmMKaW5kZXggYjNkN2MwZC4uZjQ2YWUwMiAxMDA2NDQKLS0tIGEvZnMvaHBmcy9kaXIuYworKysgYi9mcy9ocGZzL2Rpci5jCkBAIC04OCw5ICs4OCw5IEBACiAJCQlocGZzX2Vycm9yKGlub2RlLT5pX3NiLCAibm90IGEgZGlyZWN0b3J5LCBmbm9kZSAlMDhseCIsCiAJCQkJCSh1bnNpZ25lZCBsb25nKWlub2RlLT5pX2lubyk7CiAJCX0KLQkJaWYgKGhwZnNfaW5vZGUtPmlfZG5vICE9IGZuby0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKSB7CisJCWlmIChocGZzX2lub2RlLT5pX2RubyAhPSBsZTMyX3RvX2NwdShmbm8tPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubykpIHsKIAkJCWUgPSAxOwotCQkJaHBmc19lcnJvcihpbm9kZS0+aV9zYiwgImNvcnJ1cHRlZCBpbm9kZTogaV9kbm8gPT0gJTA4eCwgZm5vZGUgLT4gZG5vZGUgPT0gJTA4eCIsIGhwZnNfaW5vZGUtPmlfZG5vLCBmbm8tPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyk7CisJCQlocGZzX2Vycm9yKGlub2RlLT5pX3NiLCAiY29ycnVwdGVkIGlub2RlOiBpX2RubyA9PSAlMDh4LCBmbm9kZSAtPiBkbm9kZSA9PSAlMDh4IiwgaHBmc19pbm9kZS0+aV9kbm8sIGxlMzJfdG9fY3B1KGZuby0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKSk7CiAJCX0KIAkJYnJlbHNlKGJoKTsKIAkJaWYgKGUpIHsKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQkJZ290byBhZ2FpbjsKIAkJfQogCQl0ZW1wbmFtZSA9IGhwZnNfdHJhbnNsYXRlX25hbWUoaW5vZGUtPmlfc2IsIGRlLT5uYW1lLCBkZS0+bmFtZWxlbiwgbGMsIGRlLT5ub3RfOHgzKTsKLQkJaWYgKGZpbGxkaXIoZGlyZW50LCB0ZW1wbmFtZSwgZGUtPm5hbWVsZW4sIG9sZF9wb3MsIGRlLT5mbm9kZSwgRFRfVU5LTk9XTikgPCAwKSB7CisJCWlmIChmaWxsZGlyKGRpcmVudCwgdGVtcG5hbWUsIGRlLT5uYW1lbGVuLCBvbGRfcG9zLCBsZTMyX3RvX2NwdShkZS0+Zm5vZGUpLCBEVF9VTktOT1dOKSA8IDApIHsKIAkJCWZpbHAtPmZfcG9zID0gb2xkX3BvczsKIAkJCWlmICh0ZW1wbmFtZSAhPSBkZS0+bmFtZSkga2ZyZWUodGVtcG5hbWUpOwogCQkJaHBmc19icmVsc2U0KCZxYmgpOwpAQCAtMjIxLDcgKzIyMSw3IEBACiAJICogR2V0IGlub2RlIG51bWJlciwgd2hhdCB3ZSdyZSBhZnRlci4KIAkgKi8KIAotCWlubyA9IGRlLT5mbm9kZTsKKwlpbm8gPSBsZTMyX3RvX2NwdShkZS0+Zm5vZGUpOwogCiAJLyoKIAkgKiBHbyBmaW5kIG9yIG1ha2UgYW4gaW5vZGUuCkBAIC0yMzYsNyArMjM2LDcgQEAKIAkJaHBmc19pbml0X2lub2RlKHJlc3VsdCk7CiAJCWlmIChkZS0+ZGlyZWN0b3J5KQogCQkJaHBmc19yZWFkX2lub2RlKHJlc3VsdCk7Ci0JCWVsc2UgaWYgKGRlLT5lYV9zaXplICYmIGhwZnNfc2IoZGlyLT5pX3NiKS0+c2JfZWFzKQorCQllbHNlIGlmIChsZTMyX3RvX2NwdShkZS0+ZWFfc2l6ZSkgJiYgaHBmc19zYihkaXItPmlfc2IpLT5zYl9lYXMpCiAJCQlocGZzX3JlYWRfaW5vZGUocmVzdWx0KTsKIAkJZWxzZSB7CiAJCQlyZXN1bHQtPmlfbW9kZSB8PSBTX0lGUkVHOwpAQCAtMjUwLDggKzI1MCw2IEBACiAJaHBmc19yZXN1bHQgPSBocGZzX2kocmVzdWx0KTsKIAlpZiAoIWRlLT5kaXJlY3RvcnkpIGhwZnNfcmVzdWx0LT5pX3BhcmVudF9kaXIgPSBkaXItPmlfaW5vOwogCi0JaHBmc19kZWNpZGVfY29udihyZXN1bHQsIG5hbWUsIGxlbik7Ci0KIAlpZiAoZGUtPmhhc19hY2wgfHwgZGUtPmhhc194dGRfcGVybSkgaWYgKCEoZGlyLT5pX3NiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlocGZzX2Vycm9yKHJlc3VsdC0+aV9zYiwgIkFDTHMgb3IgWFBFUk0gZm91bmQuIFRoaXMgaXMgcHJvYmFibHkgSFBGUzM4Ni4gVGhpcyBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IGl0IG5vdy4gU2VuZCBtZSBzb21lIGluZm8gb24gdGhlc2Ugc3RydWN0dXJlcyIpOwogCQlnb3RvIGJhaWwxOwpAQCAtMjYzLDE5ICsyNjEsMTkgQEAKIAkgKi8KIAogCWlmICghcmVzdWx0LT5pX2N0aW1lLnR2X3NlYykgewotCQlpZiAoIShyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgZGUtPmNyZWF0aW9uX2RhdGUpKSkKKwkJaWYgKCEocmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlLT5jcmVhdGlvbl9kYXRlKSkpKQogCQkJcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IDE7CiAJCXJlc3VsdC0+aV9jdGltZS50dl9uc2VjID0gMDsKLQkJcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlLT53cml0ZV9kYXRlKTsKKwkJcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlLT53cml0ZV9kYXRlKSk7CiAJCXJlc3VsdC0+aV9tdGltZS50dl9uc2VjID0gMDsKLQkJcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlLT5yZWFkX2RhdGUpOworCQlyZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGUtPnJlYWRfZGF0ZSkpOwogCQlyZXN1bHQtPmlfYXRpbWUudHZfbnNlYyA9IDA7Ci0JCWhwZnNfcmVzdWx0LT5pX2VhX3NpemUgPSBkZS0+ZWFfc2l6ZTsKKwkJaHBmc19yZXN1bHQtPmlfZWFfc2l6ZSA9IGxlMzJfdG9fY3B1KGRlLT5lYV9zaXplKTsKIAkJaWYgKCFocGZzX3Jlc3VsdC0+aV9lYV9tb2RlICYmIGRlLT5yZWFkX29ubHkpCiAJCQlyZXN1bHQtPmlfbW9kZSAmPSB+MDIyMjsKIAkJaWYgKCFkZS0+ZGlyZWN0b3J5KSB7CiAJCQlpZiAocmVzdWx0LT5pX3NpemUgPT0gLTEpIHsKLQkJCQlyZXN1bHQtPmlfc2l6ZSA9IGRlLT5maWxlX3NpemU7CisJCQkJcmVzdWx0LT5pX3NpemUgPSBsZTMyX3RvX2NwdShkZS0+ZmlsZV9zaXplKTsKIAkJCQlyZXN1bHQtPmlfZGF0YS5hX29wcyA9ICZocGZzX2FvcHM7CiAJCQkJaHBmc19pKHJlc3VsdCktPm1tdV9wcml2YXRlID0gcmVzdWx0LT5pX3NpemU7CiAJCQkvKgpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9kbm9kZS5jIGIvZnMvaHBmcy9kbm9kZS5jCmluZGV4IDliMmZmYWQuLjFlMGUyYWMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZG5vZGUuYworKysgYi9mcy9ocGZzL2Rub2RlLmMKQEAgLTE0LDExICsxNCwxMSBAQAogCXN0cnVjdCBocGZzX2RpcmVudCAqZGVfZW5kID0gZG5vZGVfZW5kX2RlKGQpOwogCWludCBpID0gMTsKIAlmb3IgKGRlID0gZG5vZGVfZmlyc3RfZGUoZCk7IGRlIDwgZGVfZW5kOyBkZSA9IGRlX25leHRfZGUoZGUpKSB7Ci0JCWlmIChkZSA9PSBmZGUpIHJldHVybiAoKGxvZmZfdCkgZC0+c2VsZiA8PCA0KSB8IChsb2ZmX3QpaTsKKwkJaWYgKGRlID09IGZkZSkgcmV0dXJuICgobG9mZl90KSBsZTMyX3RvX2NwdShkLT5zZWxmKSA8PCA0KSB8IChsb2ZmX3QpaTsKIAkJaSsrOwogCX0KIAlwcmludGsoIkhQRlM6IGdldF9wb3M6IG5vdF9mb3VuZFxuIik7Ci0JcmV0dXJuICgobG9mZl90KWQtPnNlbGYgPDwgNCkgfCAobG9mZl90KTE7CisJcmV0dXJuICgobG9mZl90KWxlMzJfdG9fY3B1KGQtPnNlbGYpIDw8IDQpIHwgKGxvZmZfdCkxOwogfQogCiB2b2lkIGhwZnNfYWRkX3BvcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgKnBvcykKQEAgLTEzMCwyOSArMTMwLDMwIEBACiB7CiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZTsKIAlpZiAoIShkZSA9IGRub2RlX2xhc3RfZGUoZCkpKSB7Ci0JCWhwZnNfZXJyb3IocywgInNldF9sYXN0X3BvaW50ZXI6IGVtcHR5IGRub2RlICUwOHgiLCBkLT5zZWxmKTsKKwkJaHBmc19lcnJvcihzLCAic2V0X2xhc3RfcG9pbnRlcjogZW1wdHkgZG5vZGUgJTA4eCIsIGxlMzJfdG9fY3B1KGQtPnNlbGYpKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSB7CiAJCWlmIChkZS0+ZG93bikgewogCQkJaHBmc19lcnJvcihzLCAic2V0X2xhc3RfcG9pbnRlcjogZG5vZGUgJTA4eCBoYXMgYWxyZWFkeSBsYXN0IHBvaW50ZXIgJTA4eCIsCi0JCQkJZC0+c2VsZiwgZGVfZG93bl9wb2ludGVyKGRlKSk7CisJCQkJbGUzMl90b19jcHUoZC0+c2VsZiksIGRlX2Rvd25fcG9pbnRlcihkZSkpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChkZS0+bGVuZ3RoICE9IDMyKSB7Ci0JCQlocGZzX2Vycm9yKHMsICJzZXRfbGFzdF9wb2ludGVyOiBiYWQgbGFzdCBkaXJlbnQgaW4gZG5vZGUgJTA4eCIsIGQtPnNlbGYpOworCQlpZiAobGUxNl90b19jcHUoZGUtPmxlbmd0aCkgIT0gMzIpIHsKKwkJCWhwZnNfZXJyb3IocywgInNldF9sYXN0X3BvaW50ZXI6IGJhZCBsYXN0IGRpcmVudCBpbiBkbm9kZSAlMDh4IiwgbGUzMl90b19jcHUoZC0+c2VsZikpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCWlmIChwdHIpIHsKLQkJaWYgKChkLT5maXJzdF9mcmVlICs9IDQpID4gMjA0OCkgewotCQkJaHBmc19lcnJvcihzLCJzZXRfbGFzdF9wb2ludGVyOiB0b28gbG9uZyBkbm9kZSAlMDh4IiwgZC0+c2VsZik7Ci0JCQlkLT5maXJzdF9mcmVlIC09IDQ7CisJCWQtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkLT5maXJzdF9mcmVlKSArIDQpOworCQlpZiAobGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgPiAyMDQ4KSB7CisJCQlocGZzX2Vycm9yKHMsICJzZXRfbGFzdF9wb2ludGVyOiB0b28gbG9uZyBkbm9kZSAlMDh4IiwgbGUzMl90b19jcHUoZC0+c2VsZikpOworCQkJZC0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpIC0gNCk7CiAJCQlyZXR1cm47CiAJCX0KLQkJZGUtPmxlbmd0aCA9IDM2OworCQlkZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoMzYpOwogCQlkZS0+ZG93biA9IDE7Ci0JCSooZG5vZGVfc2Vjbm8gKikoKGNoYXIgKilkZSArIDMyKSA9IHB0cjsKKwkJKihkbm9kZV9zZWNubyAqKSgoY2hhciAqKWRlICsgMzIpID0gY3B1X3RvX2xlMzIocHRyKTsKIAl9CiB9CiAKQEAgLTE2OCw3ICsxNjksNyBAQAogCWZvciAoZGUgPSBkbm9kZV9maXJzdF9kZShkKTsgZGUgPCBkZV9lbmQ7IGRlID0gZGVfbmV4dF9kZShkZSkpIHsKIAkJaW50IGMgPSBocGZzX2NvbXBhcmVfbmFtZXMocywgbmFtZSwgbmFtZWxlbiwgZGUtPm5hbWUsIGRlLT5uYW1lbGVuLCBkZS0+bGFzdCk7CiAJCWlmICghYykgewotCQkJaHBmc19lcnJvcihzLCAibmFtZSAoJWMsJWQpIGFscmVhZHkgZXhpc3RzIGluIGRub2RlICUwOHgiLCAqbmFtZSwgbmFtZWxlbiwgZC0+c2VsZik7CisJCQlocGZzX2Vycm9yKHMsICJuYW1lICglYywlZCkgYWxyZWFkeSBleGlzdHMgaW4gZG5vZGUgJTA4eCIsICpuYW1lLCBuYW1lbGVuLCBsZTMyX3RvX2NwdShkLT5zZWxmKSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCQlpZiAoYyA8IDApIGJyZWFrOwpAQCAtMTc2LDE1ICsxNzcsMTQgQEAKIAltZW1tb3ZlKChjaGFyICopZGUgKyBkX3NpemUsIGRlLCAoY2hhciAqKWRlX2VuZCAtIChjaGFyICopZGUpOwogCW1lbXNldChkZSwgMCwgZF9zaXplKTsKIAlpZiAoZG93bl9wdHIpIHsKLQkJKihpbnQgKikoKGNoYXIgKilkZSArIGRfc2l6ZSAtIDQpID0gZG93bl9wdHI7CisJCSooZG5vZGVfc2Vjbm8gKikoKGNoYXIgKilkZSArIGRfc2l6ZSAtIDQpID0gY3B1X3RvX2xlMzIoZG93bl9wdHIpOwogCQlkZS0+ZG93biA9IDE7CiAJfQotCWRlLT5sZW5ndGggPSBkX3NpemU7Ci0JaWYgKGRvd25fcHRyKSBkZS0+ZG93biA9IDE7CisJZGUtPmxlbmd0aCA9IGNwdV90b19sZTE2KGRfc2l6ZSk7CiAJZGUtPm5vdF84eDMgPSBocGZzX2lzX25hbWVfbG9uZyhuYW1lLCBuYW1lbGVuKTsKIAlkZS0+bmFtZWxlbiA9IG5hbWVsZW47CiAJbWVtY3B5KGRlLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLQlkLT5maXJzdF9mcmVlICs9IGRfc2l6ZTsKKwlkLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgKyBkX3NpemUpOwogCXJldHVybiBkZTsKIH0KIApAQCAtMTk0LDI1ICsxOTQsMjUgQEAKIAkJCSAgIHN0cnVjdCBocGZzX2RpcmVudCAqZGUpCiB7CiAJaWYgKGRlLT5sYXN0KSB7Ci0JCWhwZnNfZXJyb3IocywgImF0dGVtcHQgdG8gZGVsZXRlIGxhc3QgZGlyZW50IGluIGRub2RlICUwOHgiLCBkLT5zZWxmKTsKKwkJaHBmc19lcnJvcihzLCAiYXR0ZW1wdCB0byBkZWxldGUgbGFzdCBkaXJlbnQgaW4gZG5vZGUgJTA4eCIsIGxlMzJfdG9fY3B1KGQtPnNlbGYpKTsKIAkJcmV0dXJuOwogCX0KLQlkLT5maXJzdF9mcmVlIC09IGRlLT5sZW5ndGg7Ci0JbWVtbW92ZShkZSwgZGVfbmV4dF9kZShkZSksIGQtPmZpcnN0X2ZyZWUgKyAoY2hhciAqKWQgLSAoY2hhciAqKWRlKTsKKwlkLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkgLSBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSk7CisJbWVtbW92ZShkZSwgZGVfbmV4dF9kZShkZSksIGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpICsgKGNoYXIgKilkIC0gKGNoYXIgKilkZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGZpeF91cF9wdHJzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGRub2RlICpkKQogewogCXN0cnVjdCBocGZzX2RpcmVudCAqZGU7CiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZV9lbmQgPSBkbm9kZV9lbmRfZGUoZCk7Ci0JZG5vZGVfc2Vjbm8gZG5vID0gZC0+c2VsZjsKKwlkbm9kZV9zZWNubyBkbm8gPSBsZTMyX3RvX2NwdShkLT5zZWxmKTsKIAlmb3IgKGRlID0gZG5vZGVfZmlyc3RfZGUoZCk7IGRlIDwgZGVfZW5kOyBkZSA9IGRlX25leHRfZGUoZGUpKQogCQlpZiAoZGUtPmRvd24pIHsKIAkJCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKIAkJCXN0cnVjdCBkbm9kZSAqZGQ7CiAJCQlpZiAoKGRkID0gaHBmc19tYXBfZG5vZGUocywgZGVfZG93bl9wb2ludGVyKGRlKSwgJnFiaCkpKSB7Ci0JCQkJaWYgKGRkLT51cCAhPSBkbm8gfHwgZGQtPnJvb3RfZG5vZGUpIHsKLQkJCQkJZGQtPnVwID0gZG5vOworCQkJCWlmIChsZTMyX3RvX2NwdShkZC0+dXApICE9IGRubyB8fCBkZC0+cm9vdF9kbm9kZSkgeworCQkJCQlkZC0+dXAgPSBjcHVfdG9fbGUzMihkbm8pOwogCQkJCQlkZC0+cm9vdF9kbm9kZSA9IDA7CiAJCQkJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJCQl9CkBAIC0yNjIsNyArMjYyLDcgQEAKIAkJCWtmcmVlKG5uYW1lKTsKIAkJCXJldHVybiAxOwogCQl9Ci0JaWYgKGQtPmZpcnN0X2ZyZWUgKyBkZV9zaXplKG5hbWVsZW4sIGRvd25fcHRyKSA8PSAyMDQ4KSB7CisJaWYgKGxlMzJfdG9fY3B1KGQtPmZpcnN0X2ZyZWUpICsgZGVfc2l6ZShuYW1lbGVuLCBkb3duX3B0cikgPD0gMjA0OCkgewogCQlsb2ZmX3QgdDsKIAkJY29weV9kZShkZT1ocGZzX2FkZF9kZShpLT5pX3NiLCBkLCBuYW1lLCBuYW1lbGVuLCBkb3duX3B0ciksIG5ld19kZSk7CiAJCXQgPSBnZXRfcG9zKGQsIGRlKTsKQEAgLTI4NiwxMSArMjg2LDExIEBACiAJCWtmcmVlKG5uYW1lKTsKIAkJcmV0dXJuIDE7CiAJfQkKLQltZW1jcHkobmQsIGQsIGQtPmZpcnN0X2ZyZWUpOworCW1lbWNweShuZCwgZCwgbGUzMl90b19jcHUoZC0+Zmlyc3RfZnJlZSkpOwogCWNvcHlfZGUoZGUgPSBocGZzX2FkZF9kZShpLT5pX3NiLCBuZCwgbmFtZSwgbmFtZWxlbiwgZG93bl9wdHIpLCBuZXdfZGUpOwogCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19pbnMsIGdldF9wb3MobmQsIGRlKSwgMSk7CiAJaCA9ICgoY2hhciAqKWRub2RlX2xhc3RfZGUobmQpIC0gKGNoYXIgKiluZCkgLyAyICsgMTA7Ci0JaWYgKCEoYWQgPSBocGZzX2FsbG9jX2Rub2RlKGktPmlfc2IsIGQtPnVwLCAmYWRubywgJnFiaDEsIDApKSkgeworCWlmICghKGFkID0gaHBmc19hbGxvY19kbm9kZShpLT5pX3NiLCBsZTMyX3RvX2NwdShkLT51cCksICZhZG5vLCAmcWJoMSkpKSB7CiAJCWhwZnNfZXJyb3IoaS0+aV9zYiwgInVuYWJsZSB0byBhbGxvYyBkbm9kZSAtIGRub2RlIHRyZWUgd2lsbCBiZSBjb3JydXB0ZWQiKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlrZnJlZShuZCk7CkBAIC0zMTMsMjAgKzMxMywyMSBAQAogCWRvd25fcHRyID0gYWRubzsKIAlzZXRfbGFzdF9wb2ludGVyKGktPmlfc2IsIGFkLCBkZS0+ZG93biA/IGRlX2Rvd25fcG9pbnRlcihkZSkgOiAwKTsKIAlkZSA9IGRlX25leHRfZGUoZGUpOwotCW1lbW1vdmUoKGNoYXIgKiluZCArIDIwLCBkZSwgbmQtPmZpcnN0X2ZyZWUgKyAoY2hhciAqKW5kIC0gKGNoYXIgKilkZSk7Ci0JbmQtPmZpcnN0X2ZyZWUgLT0gKGNoYXIgKilkZSAtIChjaGFyICopbmQgLSAyMDsKLQltZW1jcHkoZCwgbmQsIG5kLT5maXJzdF9mcmVlKTsKKwltZW1tb3ZlKChjaGFyICopbmQgKyAyMCwgZGUsIGxlMzJfdG9fY3B1KG5kLT5maXJzdF9mcmVlKSArIChjaGFyICopbmQgLSAoY2hhciAqKWRlKTsKKwluZC0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KG5kLT5maXJzdF9mcmVlKSAtICgoY2hhciAqKWRlIC0gKGNoYXIgKiluZCAtIDIwKSk7CisJbWVtY3B5KGQsIG5kLCBsZTMyX3RvX2NwdShuZC0+Zmlyc3RfZnJlZSkpOwogCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19kZWwsIChsb2ZmX3QpZG5vIDw8IDQsIHBvcyk7CiAJZml4X3VwX3B0cnMoaS0+aV9zYiwgYWQpOwogCWlmICghZC0+cm9vdF9kbm9kZSkgewotCQlkbm8gPSBhZC0+dXAgPSBkLT51cDsKKwkJYWQtPnVwID0gZC0+dXA7CisJCWRubyA9IGxlMzJfdG9fY3B1KGFkLT51cCk7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQlocGZzX2JyZWxzZTQoJnFiaDEpOwogCQlnb3RvIGdvX3VwOwogCX0KLQlpZiAoIShyZCA9IGhwZnNfYWxsb2NfZG5vZGUoaS0+aV9zYiwgZC0+dXAsICZyZG5vLCAmcWJoMiwgMCkpKSB7CisJaWYgKCEocmQgPSBocGZzX2FsbG9jX2Rub2RlKGktPmlfc2IsIGxlMzJfdG9fY3B1KGQtPnVwKSwgJnJkbm8sICZxYmgyKSkpIHsKIAkJaHBmc19lcnJvcihpLT5pX3NiLCAidW5hYmxlIHRvIGFsbG9jIGRub2RlIC0gZG5vZGUgdHJlZSB3aWxsIGJlIGNvcnJ1cHRlZCIpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CkBAIC0zMzgsNyArMzM5LDcgQEAKIAlpLT5pX2Jsb2NrcyArPSA0OwogCXJkLT5yb290X2Rub2RlID0gMTsKIAlyZC0+dXAgPSBkLT51cDsKLQlpZiAoIShmbm9kZSA9IGhwZnNfbWFwX2Zub2RlKGktPmlfc2IsIGQtPnVwLCAmYmgpKSkgeworCWlmICghKGZub2RlID0gaHBmc19tYXBfZm5vZGUoaS0+aV9zYiwgbGUzMl90b19jcHUoZC0+dXApLCAmYmgpKSkgewogCQlocGZzX2ZyZWVfZG5vZGUoaS0+aV9zYiwgcmRubyk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgxKTsKQEAgLTM0NywxMCArMzQ4LDExIEBACiAJCWtmcmVlKG5uYW1lKTsKIAkJcmV0dXJuIDE7CiAJfQotCWZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSByZG5vOworCWZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm8gPSBjcHVfdG9fbGUzMihyZG5vKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKLQlkLT51cCA9IGFkLT51cCA9IGhwZnNfaShpKS0+aV9kbm8gPSByZG5vOworCWhwZnNfaShpKS0+aV9kbm8gPSByZG5vOworCWQtPnVwID0gYWQtPnVwID0gY3B1X3RvX2xlMzIocmRubyk7CiAJZC0+cm9vdF9kbm9kZSA9IGFkLT5yb290X2Rub2RlID0gMDsKIAlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJaHBmc19icmVsc2U0KCZxYmgpOwpAQCAtMzczLDcgKzM3NSw3IEBACiAKIGludCBocGZzX2FkZF9kaXJlbnQoc3RydWN0IGlub2RlICppLAogCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgbmFtZWxlbiwKLQkJICAgIHN0cnVjdCBocGZzX2RpcmVudCAqbmV3X2RlLCBpbnQgY2RlcHRoKQorCQkgICAgc3RydWN0IGhwZnNfZGlyZW50ICpuZXdfZGUpCiB7CiAJc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqaHBmc19pbm9kZSA9IGhwZnNfaShpKTsKIAlzdHJ1Y3QgZG5vZGUgKmQ7CkBAIC00MDMsNyArNDA1LDYgQEAKIAkJfQogCX0KIAlocGZzX2JyZWxzZTQoJnFiaCk7Ci0JaWYgKCFjZGVwdGgpIGhwZnNfbG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAlpZiAoaHBmc19jaGVja19mcmVlX2Rub2RlcyhpLT5pX3NiLCBGUkVFX0ROT0RFU19BREQpKSB7CiAJCWMgPSAxOwogCQlnb3RvIHJldDsKQEAgLTQxMSw3ICs0MTIsNiBAQAogCWktPmlfdmVyc2lvbisrOwogCWMgPSBocGZzX2FkZF90b19kbm9kZShpLCBkbm8sIG5hbWUsIG5hbWVsZW4sIG5ld19kZSwgMCk7CiAJcmV0OgotCWlmICghY2RlcHRoKSBocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAlyZXR1cm4gYzsKIH0KIApAQCAtNDM3LDkgKzQzNyw5IEBACiAJCQkJcmV0dXJuIDA7CiAJCWlmICghKGRub2RlID0gaHBmc19tYXBfZG5vZGUoaS0+aV9zYiwgZG5vLCAmcWJoKSkpIHJldHVybiAwOwogCQlpZiAoaHBmc19zYihpLT5pX3NiKS0+c2JfY2hrKSB7Ci0JCQlpZiAoZG5vZGUtPnVwICE9IGNoa191cCkgeworCQkJaWYgKGxlMzJfdG9fY3B1KGRub2RlLT51cCkgIT0gY2hrX3VwKSB7CiAJCQkJaHBmc19lcnJvcihpLT5pX3NiLCAibW92ZV90b190b3A6IHVwIHBvaW50ZXIgZnJvbSAlMDh4IHNob3VsZCBiZSAlMDh4LCBpcyAlMDh4IiwKLQkJCQkJZG5vLCBjaGtfdXAsIGRub2RlLT51cCk7CisJCQkJCWRubywgY2hrX3VwLCBsZTMyX3RvX2NwdShkbm9kZS0+dXApKTsKIAkJCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC00NTUsNyArNDU1LDcgQEAKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCX0KIAl3aGlsZSAoIShkZSA9IGRub2RlX3ByZV9sYXN0X2RlKGRub2RlKSkpIHsKLQkJZG5vZGVfc2Vjbm8gdXAgPSBkbm9kZS0+dXA7CisJCWRub2RlX3NlY25vIHVwID0gbGUzMl90b19jcHUoZG5vZGUtPnVwKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlocGZzX2ZyZWVfZG5vZGUoaS0+aV9zYiwgZG5vKTsKIAkJaS0+aV9zaXplIC09IDIwNDg7CkBAIC00NzQsOCArNDc0LDggQEAKIAkJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWRub2RlLT5maXJzdF9mcmVlIC09IDQ7Ci0JCWRlLT5sZW5ndGggLT0gNDsKKwkJZG5vZGUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgLSA0KTsKKwkJZGUtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpIC0gNCk7CiAJCWRlLT5kb3duID0gMDsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlkbm8gPSB1cDsKQEAgLTQ4MywxMiArNDgzLDEyIEBACiAJdCA9IGdldF9wb3MoZG5vZGUsIGRlKTsKIAlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3Nfc3Vic3QsIHQsIDQpOwogCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgdCArIDEsIDUpOwotCWlmICghKG5kZSA9IGttYWxsb2MoZGUtPmxlbmd0aCwgR0ZQX05PRlMpKSkgeworCWlmICghKG5kZSA9IGttYWxsb2MobGUxNl90b19jcHUoZGUtPmxlbmd0aCksIEdGUF9OT0ZTKSkpIHsKIAkJaHBmc19lcnJvcihpLT5pX3NiLCAib3V0IG9mIG1lbW9yeSBmb3IgZGlyZW50IC0gZGlyZWN0b3J5IHdpbGwgYmUgY29ycnVwdGVkIik7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJcmV0dXJuIDA7CiAJfQotCW1lbWNweShuZGUsIGRlLCBkZS0+bGVuZ3RoKTsKKwltZW1jcHkobmRlLCBkZSwgbGUxNl90b19jcHUoZGUtPmxlbmd0aCkpOwogCWRkbm8gPSBkZS0+ZG93biA/IGRlX2Rvd25fcG9pbnRlcihkZSkgOiAwOwogCWhwZnNfZGVsZXRlX2RlKGktPmlfc2IsIGRub2RlLCBkZSk7CiAJc2V0X2xhc3RfcG9pbnRlcihpLT5pX3NiLCBkbm9kZSwgZGRubyk7CkBAIC01MTcsMTEgKzUxNywxMSBAQAogCXRyeV9pdF9hZ2FpbjoKIAlpZiAoaHBmc19zdG9wX2N5Y2xlcyhpLT5pX3NiLCBkbm8sICZjMSwgJmMyLCAiZGVsZXRlX2VtcHR5X2Rub2RlIikpIHJldHVybjsKIAlpZiAoIShkbm9kZSA9IGhwZnNfbWFwX2Rub2RlKGktPmlfc2IsIGRubywgJnFiaCkpKSByZXR1cm47Ci0JaWYgKGRub2RlLT5maXJzdF9mcmVlID4gNTYpIGdvdG8gZW5kOwotCWlmIChkbm9kZS0+Zmlyc3RfZnJlZSA9PSA1MiB8fCBkbm9kZS0+Zmlyc3RfZnJlZSA9PSA1NikgeworCWlmIChsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgPiA1NikgZ290byBlbmQ7CisJaWYgKGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSA9PSA1MiB8fCBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgPT0gNTYpIHsKIAkJc3RydWN0IGhwZnNfZGlyZW50ICpkZV9lbmQ7CiAJCWludCByb290ID0gZG5vZGUtPnJvb3RfZG5vZGU7Ci0JCXVwID0gZG5vZGUtPnVwOworCQl1cCA9IGxlMzJfdG9fY3B1KGRub2RlLT51cCk7CiAJCWRlID0gZG5vZGVfZmlyc3RfZGUoZG5vZGUpOwogCQlkb3duID0gZGUtPmRvd24gPyBkZV9kb3duX3BvaW50ZXIoZGUpIDogMDsKIAkJaWYgKGhwZnNfc2IoaS0+aV9zYiktPnNiX2NoaykgaWYgKHJvb3QgJiYgIWRvd24pIHsKQEAgLTU0NSwxMyArNTQ1LDEzIEBACiAJCQkJcmV0dXJuOwogCQkJICAgIH0KIAkJCWlmICgoZDEgPSBocGZzX21hcF9kbm9kZShpLT5pX3NiLCBkb3duLCAmcWJoMSkpKSB7Ci0JCQkJZDEtPnVwID0gdXA7CisJCQkJZDEtPnVwID0gY3B1X3RvX2xlMzIodXApOwogCQkJCWQxLT5yb290X2Rub2RlID0gMTsKIAkJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQkJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CiAJCQl9CiAJCQlpZiAoKGZub2RlID0gaHBmc19tYXBfZm5vZGUoaS0+aV9zYiwgdXAsICZiaCkpKSB7Ci0JCQkJZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGRvd247CisJCQkJZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGNwdV90b19sZTMyKGRvd24pOwogCQkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCQlicmVsc2UoYmgpOwogCQkJfQpAQCAtNTcwLDIyICs1NzAsMjIgQEAKIAkJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX3N1YnN0LCAoKGxvZmZfdClkbm8gPDwgNCkgfCAxLCAoKGxvZmZfdCl1cCA8PCA0KSB8IHApOwogCQlpZiAoIWRvd24pIHsKIAkJCWRlLT5kb3duID0gMDsKLQkJCWRlLT5sZW5ndGggLT0gNDsKLQkJCWRub2RlLT5maXJzdF9mcmVlIC09IDQ7CisJCQlkZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZGUtPmxlbmd0aCkgLSA0KTsKKwkJCWRub2RlLT5maXJzdF9mcmVlID0gY3B1X3RvX2xlMzIobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpIC0gNCk7CiAJCQltZW1tb3ZlKGRlX25leHRfZGUoZGUpLCAoY2hhciAqKWRlX25leHRfZGUoZGUpICsgNCwKLQkJCQkoY2hhciAqKWRub2RlICsgZG5vZGUtPmZpcnN0X2ZyZWUgLSAoY2hhciAqKWRlX25leHRfZGUoZGUpKTsKKwkJCQkoY2hhciAqKWRub2RlICsgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpIC0gKGNoYXIgKilkZV9uZXh0X2RlKGRlKSk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgZG5vZGUgKmQxOwogCQkJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoMTsKLQkJCSooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlICsgZGUtPmxlbmd0aCAtIDQpID0gZG93bjsKKwkJCSooZG5vZGVfc2Vjbm8gKikgKCh2b2lkICopIGRlICsgbGUxNl90b19jcHUoZGUtPmxlbmd0aCkgLSA0KSA9IGRvd247CiAJCQlpZiAoKGQxID0gaHBmc19tYXBfZG5vZGUoaS0+aV9zYiwgZG93biwgJnFiaDEpKSkgewotCQkJCWQxLT51cCA9IHVwOworCQkJCWQxLT51cCA9IGNwdV90b19sZTMyKHVwKTsKIAkJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQkJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewotCQlocGZzX2Vycm9yKGktPmlfc2IsICJkZWxldGVfZW1wdHlfZG5vZGU6IGRub2RlICUwOHgsIGZpcnN0X2ZyZWUgPT0gJTAzeCIsIGRubywgZG5vZGUtPmZpcnN0X2ZyZWUpOworCQlocGZzX2Vycm9yKGktPmlfc2IsICJkZWxldGVfZW1wdHlfZG5vZGU6IGRub2RlICUwOHgsIGZpcnN0X2ZyZWUgPT0gJTAzeCIsIGRubywgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpKTsKIAkJZ290byBlbmQ7CiAJfQogCkBAIC01OTYsMTggKzU5NiwxOCBAQAogCQlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmgxOwogCQlpZiAoIWRlX25leHQtPmRvd24pIGdvdG8gZW5kbTsKIAkJbmRvd24gPSBkZV9kb3duX3BvaW50ZXIoZGVfbmV4dCk7Ci0JCWlmICghKGRlX2NwID0ga21hbGxvYyhkZS0+bGVuZ3RoLCBHRlBfTk9GUykpKSB7CisJCWlmICghKGRlX2NwID0ga21hbGxvYyhsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSwgR0ZQX05PRlMpKSkgewogCQkJcHJpbnRrKCJIUEZTOiBvdXQgb2YgbWVtb3J5IGZvciBkdHJlZSBiYWxhbmNpbmdcbiIpOwogCQkJZ290byBlbmRtOwogCQl9Ci0JCW1lbWNweShkZV9jcCwgZGUsIGRlLT5sZW5ndGgpOworCQltZW1jcHkoZGVfY3AsIGRlLCBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSk7CiAJCWhwZnNfZGVsZXRlX2RlKGktPmlfc2IsIGRub2RlLCBkZSk7CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoKTsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlmb3JfYWxsX3Bvc3MoaSwgaHBmc19wb3Nfc3Vic3QsICgobG9mZl90KXVwIDw8IDQpIHwgcCwgNCk7CiAJCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19kZWwsICgobG9mZl90KXVwIDw8IDQpIHwgcCwgMSk7CiAJCWlmIChkZV9jcC0+ZG93bikgaWYgKChkMSA9IGhwZnNfbWFwX2Rub2RlKGktPmlfc2IsIGRlX2Rvd25fcG9pbnRlcihkZV9jcCksICZxYmgxKSkpIHsKLQkJCWQxLT51cCA9IG5kb3duOworCQkJZDEtPnVwID0gY3B1X3RvX2xlMzIobmRvd24pOwogCQkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgxKTsKIAkJCWhwZnNfYnJlbHNlNCgmcWJoMSk7CiAJCX0KQEAgLTYzNSw3ICs2MzUsNyBAQAogCQkJc3RydWN0IGhwZnNfZGlyZW50ICpkZWwgPSBkbm9kZV9sYXN0X2RlKGQxKTsKIAkJCWRscCA9IGRlbC0+ZG93biA/IGRlX2Rvd25fcG9pbnRlcihkZWwpIDogMDsKIAkJCWlmICghZGxwICYmIGRvd24pIHsKLQkJCQlpZiAoZDEtPmZpcnN0X2ZyZWUgPiAyMDQ0KSB7CisJCQkJaWYgKGxlMzJfdG9fY3B1KGQxLT5maXJzdF9mcmVlKSA+IDIwNDQpIHsKIAkJCQkJaWYgKGhwZnNfc2IoaS0+aV9zYiktPnNiX2NoayA+PSAyKSB7CiAJCQkJCQlwcmludGsoIkhQRlM6IHdhcm5pbmc6IHVuYmFsYW5jZWQgZG5vZGUgdHJlZSwgc2VlIGhwZnMudHh0IDQgbW9yZSBpbmZvXG4iKTsKIAkJCQkJCXByaW50aygiSFBGUzogd2FybmluZzogdGVybWluYXRpbmcgYmFsYW5jaW5nIG9wZXJhdGlvblxuIik7CkBAIC02NDcsMzggKzY0NywzOCBAQAogCQkJCQlwcmludGsoIkhQRlM6IHdhcm5pbmc6IHVuYmFsYW5jZWQgZG5vZGUgdHJlZSwgc2VlIGhwZnMudHh0IDQgbW9yZSBpbmZvXG4iKTsKIAkJCQkJcHJpbnRrKCJIUEZTOiB3YXJuaW5nOiBnb2luJ29uXG4iKTsKIAkJCQl9Ci0JCQkJZGVsLT5sZW5ndGggKz0gNDsKKwkJCQlkZWwtPmxlbmd0aCA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGRlbC0+bGVuZ3RoKSArIDQpOwogCQkJCWRlbC0+ZG93biA9IDE7Ci0JCQkJZDEtPmZpcnN0X2ZyZWUgKz0gNDsKKwkJCQlkMS0+Zmlyc3RfZnJlZSA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGQxLT5maXJzdF9mcmVlKSArIDQpOwogCQkJfQogCQkJaWYgKGRscCAmJiAhZG93bikgewotCQkJCWRlbC0+bGVuZ3RoIC09IDQ7CisJCQkJZGVsLT5sZW5ndGggPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShkZWwtPmxlbmd0aCkgLSA0KTsKIAkJCQlkZWwtPmRvd24gPSAwOwotCQkJCWQxLT5maXJzdF9mcmVlIC09IDQ7CisJCQkJZDEtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkMS0+Zmlyc3RfZnJlZSkgLSA0KTsKIAkJCX0gZWxzZSBpZiAoZG93bikKLQkJCQkqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZWwgKyBkZWwtPmxlbmd0aCAtIDQpID0gZG93bjsKKwkJCQkqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZWwgKyBsZTE2X3RvX2NwdShkZWwtPmxlbmd0aCkgLSA0KSA9IGNwdV90b19sZTMyKGRvd24pOwogCQl9IGVsc2UgZ290byBlbmRtOwotCQlpZiAoIShkZV9jcCA9IGttYWxsb2MoZGVfcHJldi0+bGVuZ3RoLCBHRlBfTk9GUykpKSB7CisJCWlmICghKGRlX2NwID0ga21hbGxvYyhsZTE2X3RvX2NwdShkZV9wcmV2LT5sZW5ndGgpLCBHRlBfTk9GUykpKSB7CiAJCQlwcmludGsoIkhQRlM6IG91dCBvZiBtZW1vcnkgZm9yIGR0cmVlIGJhbGFuY2luZ1xuIik7CiAJCQlocGZzX2JyZWxzZTQoJnFiaDEpOwogCQkJZ290byBlbmRtOwogCQl9CiAJCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMSk7CiAJCWhwZnNfYnJlbHNlNCgmcWJoMSk7Ci0JCW1lbWNweShkZV9jcCwgZGVfcHJldiwgZGVfcHJldi0+bGVuZ3RoKTsKKwkJbWVtY3B5KGRlX2NwLCBkZV9wcmV2LCBsZTE2X3RvX2NwdShkZV9wcmV2LT5sZW5ndGgpKTsKIAkJaHBmc19kZWxldGVfZGUoaS0+aV9zYiwgZG5vZGUsIGRlX3ByZXYpOwogCQlpZiAoIWRlX3ByZXYtPmRvd24pIHsKLQkJCWRlX3ByZXYtPmxlbmd0aCArPSA0OworCQkJZGVfcHJldi0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGUxNl90b19jcHUoZGVfcHJldi0+bGVuZ3RoKSArIDQpOwogCQkJZGVfcHJldi0+ZG93biA9IDE7Ci0JCQlkbm9kZS0+Zmlyc3RfZnJlZSArPSA0OworCQkJZG5vZGUtPmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUzMihsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkgKyA0KTsKIAkJfQotCQkqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZV9wcmV2ICsgZGVfcHJldi0+bGVuZ3RoIC0gNCkgPSBuZG93bjsKKwkJKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGVfcHJldiArIGxlMTZfdG9fY3B1KGRlX3ByZXYtPmxlbmd0aCkgLSA0KSA9IGNwdV90b19sZTMyKG5kb3duKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgKChsb2ZmX3QpdXAgPDwgNCkgfCAocCAtIDEpLCA0KTsKIAkJZm9yX2FsbF9wb3NzKGksIGhwZnNfcG9zX3N1YnN0LCAoKGxvZmZfdCl1cCA8PCA0KSB8IHAsICgobG9mZl90KXVwIDw8IDQpIHwgKHAgLSAxKSk7CiAJCWlmIChkb3duKSBpZiAoKGQxID0gaHBmc19tYXBfZG5vZGUoaS0+aV9zYiwgZGVfZG93bl9wb2ludGVyKGRlKSwgJnFiaDEpKSkgewotCQkJZDEtPnVwID0gbmRvd247CisJCQlkMS0+dXAgPSBjcHVfdG9fbGUzMihuZG93bik7CiAJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwogCQkJaHBmc19icmVsc2U0KCZxYmgxKTsKIAkJfQpAQCAtNzAxLDcgKzcwMSw2IEBACiB7CiAJc3RydWN0IGRub2RlICpkbm9kZSA9IHFiaC0+ZGF0YTsKIAlkbm9kZV9zZWNubyBkb3duID0gMDsKLQlpbnQgbG9jayA9IDA7CiAJbG9mZl90IHQ7CiAJaWYgKGRlLT5maXJzdCB8fCBkZS0+bGFzdCkgewogCQlocGZzX2Vycm9yKGktPmlfc2IsICJocGZzX3JlbW92ZV9kaXJlbnQ6IGF0dGVtcHQgdG8gZGVsZXRlIGZpcnN0IG9yIGxhc3QgZGlyZW50IGluIGRub2RlICUwOHgiLCBkbm8pOwpAQCAtNzEwLDExICs3MDksOCBAQAogCX0KIAlpZiAoZGUtPmRvd24pIGRvd24gPSBkZV9kb3duX3BvaW50ZXIoZGUpOwogCWlmIChkZXB0aCAmJiAoZGUtPmRvd24gfHwgKGRlID09IGRub2RlX2ZpcnN0X2RlKGRub2RlKSAmJiBkZV9uZXh0X2RlKGRlKS0+bGFzdCkpKSB7Ci0JCWxvY2sgPSAxOwotCQlocGZzX2xvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJCWlmIChocGZzX2NoZWNrX2ZyZWVfZG5vZGVzKGktPmlfc2IsIEZSRUVfRE5PREVTX0RFTCkpIHsKIAkJCWhwZnNfYnJlbHNlNChxYmgpOwotCQkJaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJCQlyZXR1cm4gMjsKIAkJfQogCX0KQEAgLTcyNywxMSArNzIzLDkgQEAKIAkJZG5vZGVfc2Vjbm8gYSA9IG1vdmVfdG9fdG9wKGksIGRvd24sIGRubyk7CiAJCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgNSwgdCk7CiAJCWlmIChhKSBkZWxldGVfZW1wdHlfZG5vZGUoaSwgYSk7Ci0JCWlmIChsb2NrKSBocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAkJcmV0dXJuICFhOwogCX0KIAlkZWxldGVfZW1wdHlfZG5vZGUoaSwgZG5vKTsKLQlpZiAobG9jaykgaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1MSw4ICs3NDUsOCBAQAogCXB0ciA9IDA7CiAJZ29fdXA6CiAJaWYgKCEoZG5vZGUgPSBocGZzX21hcF9kbm9kZShzLCBkbm8sICZxYmgpKSkgcmV0dXJuOwotCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIGlmIChvZG5vICYmIG9kbm8gIT0gLTEgJiYgZG5vZGUtPnVwICE9IG9kbm8pCi0JCWhwZnNfZXJyb3IocywgImhwZnNfY291bnRfZG5vZGVzOiBiYWQgdXAgcG9pbnRlcjsgZG5vZGUgJTA4eCwgZG93biAlMDh4IHBvaW50cyB0byAlMDh4Iiwgb2RubywgZG5vLCBkbm9kZS0+dXApOworCWlmIChocGZzX3NiKHMpLT5zYl9jaGspIGlmIChvZG5vICYmIG9kbm8gIT0gLTEgJiYgbGUzMl90b19jcHUoZG5vZGUtPnVwKSAhPSBvZG5vKQorCQlocGZzX2Vycm9yKHMsICJocGZzX2NvdW50X2Rub2RlczogYmFkIHVwIHBvaW50ZXI7IGRub2RlICUwOHgsIGRvd24gJTA4eCBwb2ludHMgdG8gJTA4eCIsIG9kbm8sIGRubywgbGUzMl90b19jcHUoZG5vZGUtPnVwKSk7CiAJZGUgPSBkbm9kZV9maXJzdF9kZShkbm9kZSk7CiAJaWYgKHB0cikgd2hpbGUoMSkgewogCQlpZiAoZGUtPmRvd24pIGlmIChkZV9kb3duX3BvaW50ZXIoZGUpID09IHB0cikgZ290byBwcm9jZXNzX2RlOwpAQCAtNzc2LDcgKzc3MCw3IEBACiAJaWYgKCFkZS0+Zmlyc3QgJiYgIWRlLT5sYXN0ICYmIG5faXRlbXMpICgqbl9pdGVtcykrKzsKIAlpZiAoKGRlID0gZGVfbmV4dF9kZShkZSkpIDwgZG5vZGVfZW5kX2RlKGRub2RlKSkgZ290byBuZXh0X2RlOwogCXB0ciA9IGRubzsKLQlkbm8gPSBkbm9kZS0+dXA7CisJZG5vID0gbGUzMl90b19jcHUoZG5vZGUtPnVwKTsKIAlpZiAoZG5vZGUtPnJvb3RfZG5vZGUpIHsKIAkJaHBmc19icmVsc2U0KCZxYmgpOwogCQlyZXR1cm47CkBAIC04MjQsOCArODE4LDggQEAKIAkJCXJldHVybiBkOwogCWlmICghKGRlID0gbWFwX250aF9kaXJlbnQocywgZCwgMSwgJnFiaCwgTlVMTCkpKSByZXR1cm4gZG5vOwogCWlmIChocGZzX3NiKHMpLT5zYl9jaGspCi0JCWlmICh1cCAmJiAoKHN0cnVjdCBkbm9kZSAqKXFiaC5kYXRhKS0+dXAgIT0gdXApCi0JCQlocGZzX2Vycm9yKHMsICJocGZzX2RlX2FzX2Rvd25fYXNfcG9zc2libGU6IGJhZCB1cCBwb2ludGVyOyBkbm9kZSAlMDh4LCBkb3duICUwOHggcG9pbnRzIHRvICUwOHgiLCB1cCwgZCwgKChzdHJ1Y3QgZG5vZGUgKilxYmguZGF0YSktPnVwKTsKKwkJaWYgKHVwICYmIGxlMzJfdG9fY3B1KCgoc3RydWN0IGRub2RlICopcWJoLmRhdGEpLT51cCkgIT0gdXApCisJCQlocGZzX2Vycm9yKHMsICJocGZzX2RlX2FzX2Rvd25fYXNfcG9zc2libGU6IGJhZCB1cCBwb2ludGVyOyBkbm9kZSAlMDh4LCBkb3duICUwOHggcG9pbnRzIHRvICUwOHgiLCB1cCwgZCwgbGUzMl90b19jcHUoKChzdHJ1Y3QgZG5vZGUgKilxYmguZGF0YSktPnVwKSk7CiAJaWYgKCFkZS0+ZG93bikgewogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCXJldHVybiBkOwpAQCAtODc0LDcgKzg2OCw3IEBACiAJLyogR29pbmcgdXAgKi8KIAlpZiAoZG5vZGUtPnJvb3RfZG5vZGUpIGdvdG8gYmFpbDsKIAotCWlmICghKHVwX2Rub2RlID0gaHBmc19tYXBfZG5vZGUoaW5vZGUtPmlfc2IsIGRub2RlLT51cCwgJnFiaDApKSkKKwlpZiAoISh1cF9kbm9kZSA9IGhwZnNfbWFwX2Rub2RlKGlub2RlLT5pX3NiLCBsZTMyX3RvX2NwdShkbm9kZS0+dXApLCAmcWJoMCkpKQogCQlnb3RvIGJhaWw7CiAKIAllbmRfdXBfZGUgPSBkbm9kZV9lbmRfZGUodXBfZG5vZGUpOwpAQCAtODgyLDE2ICs4NzYsMTYgQEAKIAlmb3IgKHVwX2RlID0gZG5vZGVfZmlyc3RfZGUodXBfZG5vZGUpOyB1cF9kZSA8IGVuZF91cF9kZTsKIAkgICAgIHVwX2RlID0gZGVfbmV4dF9kZSh1cF9kZSkpIHsKIAkJaWYgKCEoKytjICYgMDc3KSkgaHBmc19lcnJvcihpbm9kZS0+aV9zYiwKLQkJCSJtYXBfcG9zX2RpcmVudDogcG9zIGNyb3NzZWQgZG5vZGUgYm91bmRhcnk7IGRub2RlID0gJTA4eCIsIGRub2RlLT51cCk7CisJCQkibWFwX3Bvc19kaXJlbnQ6IHBvcyBjcm9zc2VkIGRub2RlIGJvdW5kYXJ5OyBkbm9kZSA9ICUwOHgiLCBsZTMyX3RvX2NwdShkbm9kZS0+dXApKTsKIAkJaWYgKHVwX2RlLT5kb3duICYmIGRlX2Rvd25fcG9pbnRlcih1cF9kZSkgPT0gZG5vKSB7Ci0JCQkqcG9zcCA9ICgobG9mZl90KSBkbm9kZS0+dXAgPDwgNCkgKyBjOworCQkJKnBvc3AgPSAoKGxvZmZfdCkgbGUzMl90b19jcHUoZG5vZGUtPnVwKSA8PCA0KSArIGM7CiAJCQlocGZzX2JyZWxzZTQoJnFiaDApOwogCQkJcmV0dXJuIGRlOwogCQl9CiAJfQogCQogCWhwZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJtYXBfcG9zX2RpcmVudDogcG9pbnRlciB0byBkbm9kZSAlMDh4IG5vdCBmb3VuZCBpbiBwYXJlbnQgZG5vZGUgJTA4eCIsCi0JCWRubywgZG5vZGUtPnVwKTsKKwkJZG5vLCBsZTMyX3RvX2NwdShkbm9kZS0+dXApKTsKIAlocGZzX2JyZWxzZTQoJnFiaDApOwogCQogCWJhaWw6CkBAIC0xMDE3LDE3ICsxMDExLDE3IEBACiAJCS8qbmFtZTJbMTVdID0gMHhmZjsqLwogCQluYW1lMWxlbiA9IDE1OyBuYW1lMmxlbiA9IDI1NjsKIAl9Ci0JaWYgKCEodXBmID0gaHBmc19tYXBfZm5vZGUocywgZi0+dXAsICZiaCkpKSB7CisJaWYgKCEodXBmID0gaHBmc19tYXBfZm5vZGUocywgbGUzMl90b19jcHUoZi0+dXApLCAmYmgpKSkgewogCQlrZnJlZShuYW1lMik7CiAJCXJldHVybiBOVUxMOwogCX0JCiAJaWYgKCF1cGYtPmRpcmZsYWcpIHsKIAkJYnJlbHNlKGJoKTsKLQkJaHBmc19lcnJvcihzLCAiZm5vZGUgJTA4eCBoYXMgbm9uLWRpcmVjdG9yeSBwYXJlbnQgJTA4eCIsIGZubywgZi0+dXApOworCQlocGZzX2Vycm9yKHMsICJmbm9kZSAlMDh4IGhhcyBub24tZGlyZWN0b3J5IHBhcmVudCAlMDh4IiwgZm5vLCBsZTMyX3RvX2NwdShmLT51cCkpOwogCQlrZnJlZShuYW1lMik7CiAJCXJldHVybiBOVUxMOwogCX0KLQlkbm8gPSB1cGYtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubzsKKwlkbm8gPSBsZTMyX3RvX2NwdSh1cGYtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyk7CiAJYnJlbHNlKGJoKTsKIAlnb19kb3duOgogCWRvd25kID0gMDsKQEAgLTEwNDksNyArMTA0Myw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAluZXh0X2RlOgotCWlmIChkZS0+Zm5vZGUgPT0gZm5vKSB7CisJaWYgKGxlMzJfdG9fY3B1KGRlLT5mbm9kZSkgPT0gZm5vKSB7CiAJCWtmcmVlKG5hbWUyKTsKIAkJcmV0dXJuIGRlOwogCX0KQEAgLTEwNjUsNyArMTA1OSw3IEBACiAJCWdvdG8gZ29fZG93bjsKIAl9CiAJZjoKLQlpZiAoZGUtPmZub2RlID09IGZubykgeworCWlmIChsZTMyX3RvX2NwdShkZS0+Zm5vZGUpID09IGZubykgewogCQlrZnJlZShuYW1lMik7CiAJCXJldHVybiBkZTsKIAl9CkBAIC0xMDc0LDcgKzEwNjgsNyBAQAogCWlmICgoZGUgPSBkZV9uZXh0X2RlKGRlKSkgPCBkZV9lbmQpIGdvdG8gbmV4dF9kZTsKIAlpZiAoZC0+cm9vdF9kbm9kZSkgZ290byBub3RfZm91bmQ7CiAJZG93bmQgPSBkbm87Ci0JZG5vID0gZC0+dXA7CisJZG5vID0gbGUzMl90b19jcHUoZC0+dXApOwogCWhwZnNfYnJlbHNlNChxYmgpOwogCWlmIChocGZzX3NiKHMpLT5zYl9jaGspCiAJCWlmIChocGZzX3N0b3BfY3ljbGVzKHMsIGRvd25kLCAmZDEsICZkMiwgIm1hcF9mbm9kZV9kaXJlbnQgIzIiKSkgewpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9lYS5jIGIvZnMvaHBmcy9lYS5jCmluZGV4IDQ1ZTUzZDkuLmQ4Yjg0ZDEgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZWEuYworKysgYi9mcy9ocGZzL2VhLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAkJfQogCQlpZiAoaHBmc19lYV9yZWFkKHMsIGEsIGFubywgcG9zLCA0LCBleCkpIHJldHVybjsKIAkJaWYgKGVhLT5pbmRpcmVjdCkgewotCQkJaWYgKGVhLT52YWx1ZWxlbiAhPSA4KSB7CisJCQlpZiAoZWFfdmFsdWVsZW4oZWEpICE9IDgpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJlYS0+aW5kaXJlY3Qgc2V0IHdoaWxlIGVhLT52YWx1ZWxlbiE9OCwgJXMgJTA4eCwgcG9zICUwOHgiLAogCQkJCQlhbm8gPyAiYW5vZGUiIDogInNlY3RvcnMiLCBhLCBwb3MpOwogCQkJCXJldHVybjsKQEAgLTMzLDcgKzMzLDcgQEAKIAkJCQlyZXR1cm47CiAJCQlocGZzX2VhX3JlbW92ZShzLCBlYV9zZWMoZWEpLCBlYS0+YW5vZGUsIGVhX2xlbihlYSkpOwogCQl9Ci0JCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhLT52YWx1ZWxlbiArIDU7CisJCXBvcyArPSBlYS0+bmFtZWxlbiArIGVhX3ZhbHVlbGVuKGVhKSArIDU7CiAJfQogCWlmICghYW5vKSBocGZzX2ZyZWVfc2VjdG9ycyhzLCBhLCAobGVuKzUxMSkgPj4gOSk7CiAJZWxzZSB7CkBAIC03NiwyNCArNzYsMjQgQEAKIAl1bnNpZ25lZCBwb3M7CiAJaW50IGFubywgbGVuOwogCXNlY25vIGE7CisJY2hhciBleFs0ICsgMjU1ICsgMSArIDhdOwogCXN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhOwogCXN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhX2VuZCA9IGZub2RlX2VuZF9lYShmbm9kZSk7CiAJZm9yIChlYSA9IGZub2RlX2VhKGZub2RlKTsgZWEgPCBlYV9lbmQ7IGVhID0gbmV4dF9lYShlYSkpCiAJCWlmICghc3RyY21wKGVhLT5uYW1lLCBrZXkpKSB7CiAJCQlpZiAoZWEtPmluZGlyZWN0KQogCQkJCWdvdG8gaW5kaXJlY3Q7Ci0JCQlpZiAoZWEtPnZhbHVlbGVuID49IHNpemUpCisJCQlpZiAoZWFfdmFsdWVsZW4oZWEpID49IHNpemUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQltZW1jcHkoYnVmLCBlYV9kYXRhKGVhKSwgZWEtPnZhbHVlbGVuKTsKLQkJCWJ1ZltlYS0+dmFsdWVsZW5dID0gMDsKKwkJCW1lbWNweShidWYsIGVhX2RhdGEoZWEpLCBlYV92YWx1ZWxlbihlYSkpOworCQkJYnVmW2VhX3ZhbHVlbGVuKGVhKV0gPSAwOwogCQkJcmV0dXJuIDA7CiAJCX0KLQlhID0gZm5vZGUtPmVhX3NlY25vOwotCWxlbiA9IGZub2RlLT5lYV9zaXplX2w7CisJYSA9IGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyk7CisJbGVuID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCk7CiAJYW5vID0gZm5vZGUtPmVhX2Fub2RlOwogCXBvcyA9IDA7CiAJd2hpbGUgKHBvcyA8IGxlbikgewotCQljaGFyIGV4WzQgKyAyNTUgKyAxICsgOF07CiAJCWVhID0gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKilleDsKIAkJaWYgKHBvcyArIDQgPiBsZW4pIHsKIAkJCWhwZnNfZXJyb3IocywgIkVBcyBkb24ndCBlbmQgY29ycmVjdGx5LCAlcyAlMDh4LCBsZW4gJTA4eCIsCkBAIC0xMDYsMTQgKzEwNiwxNCBAQAogCQlpZiAoIXN0cmNtcChlYS0+bmFtZSwga2V5KSkgewogCQkJaWYgKGVhLT5pbmRpcmVjdCkKIAkJCQlnb3RvIGluZGlyZWN0OwotCQkJaWYgKGVhLT52YWx1ZWxlbiA+PSBzaXplKQorCQkJaWYgKGVhX3ZhbHVlbGVuKGVhKSA+PSBzaXplKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGhwZnNfZWFfcmVhZChzLCBhLCBhbm8sIHBvcyArIDQgKyBlYS0+bmFtZWxlbiArIDEsIGVhLT52YWx1ZWxlbiwgYnVmKSkKKwkJCWlmIChocGZzX2VhX3JlYWQocywgYSwgYW5vLCBwb3MgKyA0ICsgZWEtPm5hbWVsZW4gKyAxLCBlYV92YWx1ZWxlbihlYSksIGJ1ZikpCiAJCQkJcmV0dXJuIC1FSU87Ci0JCQlidWZbZWEtPnZhbHVlbGVuXSA9IDA7CisJCQlidWZbZWFfdmFsdWVsZW4oZWEpXSA9IDA7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYS0+dmFsdWVsZW4gKyA1OworCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYV92YWx1ZWxlbihlYSkgKyA1OwogCX0KIAlyZXR1cm4gLUVOT0VOVDsKIGluZGlyZWN0OgpAQCAtMTM4LDE2ICsxMzgsMTYgQEAKIAkJaWYgKCFzdHJjbXAoZWEtPm5hbWUsIGtleSkpIHsKIAkJCWlmIChlYS0+aW5kaXJlY3QpCiAJCQkJcmV0dXJuIGdldF9pbmRpcmVjdF9lYShzLCBlYS0+YW5vZGUsIGVhX3NlYyhlYSksICpzaXplID0gZWFfbGVuKGVhKSk7Ci0JCQlpZiAoIShyZXQgPSBrbWFsbG9jKCgqc2l6ZSA9IGVhLT52YWx1ZWxlbikgKyAxLCBHRlBfTk9GUykpKSB7CisJCQlpZiAoIShyZXQgPSBrbWFsbG9jKCgqc2l6ZSA9IGVhX3ZhbHVlbGVuKGVhKSkgKyAxLCBHRlBfTk9GUykpKSB7CiAJCQkJcHJpbnRrKCJIUEZTOiBvdXQgb2YgbWVtb3J5IGZvciBFQVxuIik7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9Ci0JCQltZW1jcHkocmV0LCBlYV9kYXRhKGVhKSwgZWEtPnZhbHVlbGVuKTsKLQkJCXJldFtlYS0+dmFsdWVsZW5dID0gMDsKKwkJCW1lbWNweShyZXQsIGVhX2RhdGEoZWEpLCBlYV92YWx1ZWxlbihlYSkpOworCQkJcmV0W2VhX3ZhbHVlbGVuKGVhKV0gPSAwOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCWEgPSBmbm9kZS0+ZWFfc2Vjbm87Ci0JbGVuID0gZm5vZGUtPmVhX3NpemVfbDsKKwlhID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKTsKKwlsZW4gPSBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKTsKIAlhbm8gPSBmbm9kZS0+ZWFfYW5vZGU7CiAJcG9zID0gMDsKIAl3aGlsZSAocG9zIDwgbGVuKSB7CkBAIC0xNjQsMTggKzE2NCwxOCBAQAogCQlpZiAoIXN0cmNtcChlYS0+bmFtZSwga2V5KSkgewogCQkJaWYgKGVhLT5pbmRpcmVjdCkKIAkJCQlyZXR1cm4gZ2V0X2luZGlyZWN0X2VhKHMsIGVhLT5hbm9kZSwgZWFfc2VjKGVhKSwgKnNpemUgPSBlYV9sZW4oZWEpKTsKLQkJCWlmICghKHJldCA9IGttYWxsb2MoKCpzaXplID0gZWEtPnZhbHVlbGVuKSArIDEsIEdGUF9OT0ZTKSkpIHsKKwkJCWlmICghKHJldCA9IGttYWxsb2MoKCpzaXplID0gZWFfdmFsdWVsZW4oZWEpKSArIDEsIEdGUF9OT0ZTKSkpIHsKIAkJCQlwcmludGsoIkhQRlM6IG91dCBvZiBtZW1vcnkgZm9yIEVBXG4iKTsKIAkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KLQkJCWlmIChocGZzX2VhX3JlYWQocywgYSwgYW5vLCBwb3MgKyA0ICsgZWEtPm5hbWVsZW4gKyAxLCBlYS0+dmFsdWVsZW4sIHJldCkpIHsKKwkJCWlmIChocGZzX2VhX3JlYWQocywgYSwgYW5vLCBwb3MgKyA0ICsgZWEtPm5hbWVsZW4gKyAxLCBlYV92YWx1ZWxlbihlYSksIHJldCkpIHsKIAkJCQlrZnJlZShyZXQpOwogCQkJCXJldHVybiBOVUxMOwogCQkJfQotCQkJcmV0W2VhLT52YWx1ZWxlbl0gPSAwOworCQkJcmV0W2VhX3ZhbHVlbGVuKGVhKV0gPSAwOwogCQkJcmV0dXJuIHJldDsKIAkJfQotCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYS0+dmFsdWVsZW4gKyA1OworCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYV92YWx1ZWxlbihlYSkgKyA1OwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTIwMiwxMyArMjAyLDEzIEBACiAJCQlpZiAoZWEtPmluZGlyZWN0KSB7CiAJCQkJaWYgKGVhX2xlbihlYSkgPT0gc2l6ZSkKIAkJCQkJc2V0X2luZGlyZWN0X2VhKHMsIGVhLT5hbm9kZSwgZWFfc2VjKGVhKSwgZGF0YSwgc2l6ZSk7Ci0JCQl9IGVsc2UgaWYgKGVhLT52YWx1ZWxlbiA9PSBzaXplKSB7CisJCQl9IGVsc2UgaWYgKGVhX3ZhbHVlbGVuKGVhKSA9PSBzaXplKSB7CiAJCQkJbWVtY3B5KGVhX2RhdGEoZWEpLCBkYXRhLCBzaXplKTsKIAkJCX0KIAkJCXJldHVybjsKIAkJfQotCWEgPSBmbm9kZS0+ZWFfc2Vjbm87Ci0JbGVuID0gZm5vZGUtPmVhX3NpemVfbDsKKwlhID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKTsKKwlsZW4gPSBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKTsKIAlhbm8gPSBmbm9kZS0+ZWFfYW5vZGU7CiAJcG9zID0gMDsKIAl3aGlsZSAocG9zIDwgbGVuKSB7CkBAIC0yMjgsNjggKzIyOCw3MCBAQAogCQkJCQlzZXRfaW5kaXJlY3RfZWEocywgZWEtPmFub2RlLCBlYV9zZWMoZWEpLCBkYXRhLCBzaXplKTsKIAkJCX0KIAkJCWVsc2UgewotCQkJCWlmIChlYS0+dmFsdWVsZW4gPT0gc2l6ZSkKKwkJCQlpZiAoZWFfdmFsdWVsZW4oZWEpID09IHNpemUpCiAJCQkJCWhwZnNfZWFfd3JpdGUocywgYSwgYW5vLCBwb3MgKyA0ICsgZWEtPm5hbWVsZW4gKyAxLCBzaXplLCBkYXRhKTsKIAkJCX0KIAkJCXJldHVybjsKIAkJfQotCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYS0+dmFsdWVsZW4gKyA1OworCQlwb3MgKz0gZWEtPm5hbWVsZW4gKyBlYV92YWx1ZWxlbihlYSkgKyA1OwogCX0KLQlpZiAoIWZub2RlLT5lYV9vZmZzKSB7Ci0JCS8qaWYgKGZub2RlLT5lYV9zaXplX3MpIHsKKwlpZiAoIWxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSkgeworCQkvKmlmIChsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSkgewogCQkJaHBmc19lcnJvcihzLCAiZm5vZGUgJTA4eDogZWFfc2l6ZV9zID09ICUwM3gsIGVhX29mZnMgPT0gMCIsCi0JCQkJaW5vZGUtPmlfaW5vLCBmbm9kZS0+ZWFfc2l6ZV9zKTsKKwkJCQlpbm9kZS0+aV9pbm8sIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKIAkJCXJldHVybjsKIAkJfSovCi0JCWZub2RlLT5lYV9vZmZzID0gMHhjNDsKKwkJZm5vZGUtPmVhX29mZnMgPSBjcHVfdG9fbGUxNigweGM0KTsKIAl9Ci0JaWYgKGZub2RlLT5lYV9vZmZzIDwgMHhjNCB8fCBmbm9kZS0+ZWFfb2ZmcyArIGZub2RlLT5hY2xfc2l6ZV9zICsgZm5vZGUtPmVhX3NpemVfcyA+IDB4MjAwKSB7CisJaWYgKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSA8IDB4YzQgfHwgbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpICsgbGUxNl90b19jcHUoZm5vZGUtPmFjbF9zaXplX3MpICsgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykgPiAweDIwMCkgewogCQlocGZzX2Vycm9yKHMsICJmbm9kZSAlMDhseDogZWFfb2ZmcyA9PSAlMDN4LCBlYV9zaXplX3MgPT0gJTAzeCIsCiAJCQkodW5zaWduZWQgbG9uZylpbm9kZS0+aV9pbm8sCi0JCQlmbm9kZS0+ZWFfb2ZmcywgZm5vZGUtPmVhX3NpemVfcyk7CisJCQlsZTMyX3RvX2NwdShmbm9kZS0+ZWFfb2ZmcyksIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoKGZub2RlLT5lYV9zaXplX3MgfHwgIWZub2RlLT5lYV9zaXplX2wpICYmCi0JICAgICBmbm9kZS0+ZWFfb2ZmcyArIGZub2RlLT5hY2xfc2l6ZV9zICsgZm5vZGUtPmVhX3NpemVfcyArIHN0cmxlbihrZXkpICsgc2l6ZSArIDUgPD0gMHgyMDApIHsKKwlpZiAoKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpIHx8ICFsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSkgJiYKKwkgICAgIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSArIGxlMTZfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9zKSArIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpICsgc3RybGVuKGtleSkgKyBzaXplICsgNSA8PSAweDIwMCkgewogCQllYSA9IGZub2RlX2VuZF9lYShmbm9kZSk7CiAJCSooY2hhciAqKWVhID0gMDsKIAkJZWEtPm5hbWVsZW4gPSBzdHJsZW4oa2V5KTsKLQkJZWEtPnZhbHVlbGVuID0gc2l6ZTsKKwkJZWEtPnZhbHVlbGVuX2xvID0gc2l6ZTsKKwkJZWEtPnZhbHVlbGVuX2hpID0gc2l6ZSA+PiA4OwogCQlzdHJjcHkoZWEtPm5hbWUsIGtleSk7CiAJCW1lbWNweShlYV9kYXRhKGVhKSwgZGF0YSwgc2l6ZSk7Ci0JCWZub2RlLT5lYV9zaXplX3MgKz0gc3RybGVuKGtleSkgKyBzaXplICsgNTsKKwkJZm5vZGUtPmVhX3NpemVfcyA9IGNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpICsgc3RybGVuKGtleSkgKyBzaXplICsgNSk7CiAJCWdvdG8gcmV0OwogCX0KIAkvKiBNb3N0IHRoZSBjb2RlIGhlcmUgaXMgOTkuOTk5MzQyMiUgdW51c2VkLiBJIGhvcGUgdGhlcmUgYXJlIG5vIGJ1Z3MuCiAJICAgQnV0IHdoYXQgLi4gSFBGUy5JRlMgaGFzIGFsc28gYnVncyBpbiBlYSBtYW5hZ2VtZW50LiAqLwotCWlmIChmbm9kZS0+ZWFfc2l6ZV9zICYmICFmbm9kZS0+ZWFfc2l6ZV9sKSB7CisJaWYgKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpICYmICFsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSkgewogCQlzZWNubyBuOwogCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCQljaGFyICpkYXRhOwotCQlpZiAoIShuID0gaHBmc19hbGxvY19zZWN0b3IocywgZm5vLCAxLCAwLCAxKSkpIHJldHVybjsKKwkJaWYgKCEobiA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIGZubywgMSwgMCkpKSByZXR1cm47CiAJCWlmICghKGRhdGEgPSBocGZzX2dldF9zZWN0b3IocywgbiwgJmJoKSkpIHsKIAkJCWhwZnNfZnJlZV9zZWN0b3JzKHMsIG4sIDEpOwogCQkJcmV0dXJuOwogCQl9Ci0JCW1lbWNweShkYXRhLCBmbm9kZV9lYShmbm9kZSksIGZub2RlLT5lYV9zaXplX3MpOwotCQlmbm9kZS0+ZWFfc2l6ZV9sID0gZm5vZGUtPmVhX3NpemVfczsKLQkJZm5vZGUtPmVhX3NpemVfcyA9IDA7Ci0JCWZub2RlLT5lYV9zZWNubyA9IG47Ci0JCWZub2RlLT5lYV9hbm9kZSA9IDA7CisJCW1lbWNweShkYXRhLCBmbm9kZV9lYShmbm9kZSksIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKKwkJZm5vZGUtPmVhX3NpemVfbCA9IGNwdV90b19sZTMyKGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKKwkJZm5vZGUtPmVhX3NpemVfcyA9IGNwdV90b19sZTE2KDApOworCQlmbm9kZS0+ZWFfc2Vjbm8gPSBjcHVfdG9fbGUzMihuKTsKKwkJZm5vZGUtPmVhX2Fub2RlID0gY3B1X3RvX2xlMzIoMCk7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJYnJlbHNlKGJoKTsKIAl9Ci0JcG9zID0gZm5vZGUtPmVhX3NpemVfbCArIDUgKyBzdHJsZW4oa2V5KSArIHNpemU7Ci0JbGVuID0gKGZub2RlLT5lYV9zaXplX2wgKyA1MTEpID4+IDk7CisJcG9zID0gbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkgKyA1ICsgc3RybGVuKGtleSkgKyBzaXplOworCWxlbiA9IChsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDUxMSkgPj4gOTsKIAlpZiAocG9zID49IDMwMDAwKSBnb3RvIGJhaWw7CiAJd2hpbGUgKCgocG9zICsgNTExKSA+PiA5KSA+IGxlbikgewogCQlpZiAoIWxlbikgewotCQkJaWYgKCEoZm5vZGUtPmVhX3NlY25vID0gaHBmc19hbGxvY19zZWN0b3IocywgZm5vLCAxLCAwLCAxKSkpCi0JCQkJZ290byBiYWlsOworCQkJc2Vjbm8gcSA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIGZubywgMSwgMCk7CisJCQlpZiAoIXEpIGdvdG8gYmFpbDsKKwkJCWZub2RlLT5lYV9zZWNubyA9IGNwdV90b19sZTMyKHEpOwogCQkJZm5vZGUtPmVhX2Fub2RlID0gMDsKIAkJCWxlbisrOwogCQl9IGVsc2UgaWYgKCFmbm9kZS0+ZWFfYW5vZGUpIHsKLQkJCWlmIChocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHMsIGZub2RlLT5lYV9zZWNubyArIGxlbikpIHsKKwkJCWlmIChocGZzX2FsbG9jX2lmX3Bvc3NpYmxlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubykgKyBsZW4pKSB7CiAJCQkJbGVuKys7CiAJCQl9IGVsc2UgewogCQkJCS8qIEFhcmdoLi4uIGRvbid0IGtub3cgaG93IHRvIGNyZWF0ZSBlYSBhbm9kZXMgOi0oICovCkBAIC0yOTgsMjYgKzMwMCwyNiBAQAogCQkJCWFub2RlX3NlY25vIGFfczsKIAkJCQlpZiAoIShhbm9kZSA9IGhwZnNfYWxsb2NfYW5vZGUocywgZm5vLCAmYV9zLCAmYmgpKSkKIAkJCQkJZ290byBiYWlsOwotCQkJCWFub2RlLT51cCA9IGZubzsKKwkJCQlhbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihmbm8pOwogCQkJCWFub2RlLT5idHJlZS5mbm9kZV9wYXJlbnQgPSAxOwogCQkJCWFub2RlLT5idHJlZS5uX2ZyZWVfbm9kZXMtLTsKIAkJCQlhbm9kZS0+YnRyZWUubl91c2VkX25vZGVzKys7Ci0JCQkJYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgKz0gMTI7Ci0JCQkJYW5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGZub2RlLT5lYV9zZWNubzsKLQkJCQlhbm9kZS0+dS5leHRlcm5hbFswXS5maWxlX3NlY25vID0gMDsKLQkJCQlhbm9kZS0+dS5leHRlcm5hbFswXS5sZW5ndGggPSBsZW47CisJCQkJYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNihsZTE2X3RvX2NwdShhbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSkgKyAxMik7CisJCQkJYW5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGNwdV90b19sZTMyKGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubykpOworCQkJCWFub2RlLT51LmV4dGVybmFsWzBdLmZpbGVfc2Vjbm8gPSBjcHVfdG9fbGUzMigwKTsKKwkJCQlhbm9kZS0+dS5leHRlcm5hbFswXS5sZW5ndGggPSBjcHVfdG9fbGUzMihsZW4pOwogCQkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJCQlicmVsc2UoYmgpOwogCQkJCWZub2RlLT5lYV9hbm9kZSA9IDE7Ci0JCQkJZm5vZGUtPmVhX3NlY25vID0gYV9zOyovCisJCQkJZm5vZGUtPmVhX3NlY25vID0gY3B1X3RvX2xlMzIoYV9zKTsqLwogCQkJCXNlY25vIG5ld19zZWM7CiAJCQkJaW50IGk7Ci0JCQkJaWYgKCEobmV3X3NlYyA9IGhwZnNfYWxsb2Nfc2VjdG9yKHMsIGZubywgMSwgMSAtICgocG9zICsgNTExKSA+PiA5KSwgMSkpKQorCQkJCWlmICghKG5ld19zZWMgPSBocGZzX2FsbG9jX3NlY3RvcihzLCBmbm8sIDEsIDEgLSAoKHBvcyArIDUxMSkgPj4gOSkpKSkKIAkJCQkJZ290byBiYWlsOwogCQkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoMSwgKmJoMjsKIAkJCQkJdm9pZCAqYjEsICpiMjsKLQkJCQkJaWYgKCEoYjEgPSBocGZzX21hcF9zZWN0b3IocywgZm5vZGUtPmVhX3NlY25vICsgaSwgJmJoMSwgbGVuIC0gaSAtIDEpKSkgeworCQkJCQlpZiAoIShiMSA9IGhwZnNfbWFwX3NlY3RvcihzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pICsgaSwgJmJoMSwgbGVuIC0gaSAtIDEpKSkgewogCQkJCQkJaHBmc19mcmVlX3NlY3RvcnMocywgbmV3X3NlYywgKHBvcyArIDUxMSkgPj4gOSk7CiAJCQkJCQlnb3RvIGJhaWw7CiAJCQkJCX0KQEAgLTMzMSwxMyArMzMzLDEzIEBACiAJCQkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoMik7CiAJCQkJCWJyZWxzZShiaDIpOwogCQkJCX0KLQkJCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBmbm9kZS0+ZWFfc2Vjbm8sIGxlbik7Ci0JCQkJZm5vZGUtPmVhX3NlY25vID0gbmV3X3NlYzsKKwkJCQlocGZzX2ZyZWVfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pLCBsZW4pOworCQkJCWZub2RlLT5lYV9zZWNubyA9IGNwdV90b19sZTMyKG5ld19zZWMpOwogCQkJCWxlbiA9IChwb3MgKyA1MTEpID4+IDk7CiAJCQl9CiAJCX0KIAkJaWYgKGZub2RlLT5lYV9hbm9kZSkgewotCQkJaWYgKGhwZnNfYWRkX3NlY3Rvcl90b19idHJlZShzLCBmbm9kZS0+ZWFfc2Vjbm8sCisJCQlpZiAoaHBmc19hZGRfc2VjdG9yX3RvX2J0cmVlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksCiAJCQkJCQkgICAgIDAsIGxlbikgIT0gLTEpIHsKIAkJCQlsZW4rKzsKIAkJCX0gZWxzZSB7CkBAIC0zNDksMTcgKzM1MSwxNyBAQAogCWhbMV0gPSBzdHJsZW4oa2V5KTsKIAloWzJdID0gc2l6ZSAmIDB4ZmY7CiAJaFszXSA9IHNpemUgPj4gODsKLQlpZiAoaHBmc19lYV93cml0ZShzLCBmbm9kZS0+ZWFfc2Vjbm8sIGZub2RlLT5lYV9hbm9kZSwgZm5vZGUtPmVhX3NpemVfbCwgNCwgaCkpIGdvdG8gYmFpbDsKLQlpZiAoaHBmc19lYV93cml0ZShzLCBmbm9kZS0+ZWFfc2Vjbm8sIGZub2RlLT5lYV9hbm9kZSwgZm5vZGUtPmVhX3NpemVfbCArIDQsIGhbMV0gKyAxLCBrZXkpKSBnb3RvIGJhaWw7Ci0JaWYgKGhwZnNfZWFfd3JpdGUocywgZm5vZGUtPmVhX3NlY25vLCBmbm9kZS0+ZWFfYW5vZGUsIGZub2RlLT5lYV9zaXplX2wgKyA1ICsgaFsxXSwgc2l6ZSwgZGF0YSkpIGdvdG8gYmFpbDsKLQlmbm9kZS0+ZWFfc2l6ZV9sID0gcG9zOworCWlmIChocGZzX2VhX3dyaXRlKHMsIGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubyksIGZub2RlLT5lYV9hbm9kZSwgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCksIDQsIGgpKSBnb3RvIGJhaWw7CisJaWYgKGhwZnNfZWFfd3JpdGUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwgZm5vZGUtPmVhX2Fub2RlLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDQsIGhbMV0gKyAxLCBrZXkpKSBnb3RvIGJhaWw7CisJaWYgKGhwZnNfZWFfd3JpdGUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwgZm5vZGUtPmVhX2Fub2RlLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDUgKyBoWzFdLCBzaXplLCBkYXRhKSkgZ290byBiYWlsOworCWZub2RlLT5lYV9zaXplX2wgPSBjcHVfdG9fbGUzMihwb3MpOwogCXJldDoKIAlocGZzX2koaW5vZGUpLT5pX2VhX3NpemUgKz0gNSArIHN0cmxlbihrZXkpICsgc2l6ZTsKIAlyZXR1cm47CiAJYmFpbDoKLQlpZiAoZm5vZGUtPmVhX3NlY25vKQotCQlpZiAoZm5vZGUtPmVhX2Fub2RlKSBocGZzX3RydW5jYXRlX2J0cmVlKHMsIGZub2RlLT5lYV9zZWNubywgMSwgKGZub2RlLT5lYV9zaXplX2wgKyA1MTEpID4+IDkpOwotCQllbHNlIGhwZnNfZnJlZV9zZWN0b3JzKHMsIGZub2RlLT5lYV9zZWNubyArICgoZm5vZGUtPmVhX3NpemVfbCArIDUxMSkgPj4gOSksIGxlbiAtICgoZm5vZGUtPmVhX3NpemVfbCArIDUxMSkgPj4gOSkpOwotCWVsc2UgZm5vZGUtPmVhX3NlY25vID0gZm5vZGUtPmVhX3NpemVfbCA9IDA7CisJaWYgKGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zZWNubykpCisJCWlmIChmbm9kZS0+ZWFfYW5vZGUpIGhwZnNfdHJ1bmNhdGVfYnRyZWUocywgbGUzMl90b19jcHUoZm5vZGUtPmVhX3NlY25vKSwgMSwgKGxlMzJfdG9fY3B1KGZub2RlLT5lYV9zaXplX2wpICsgNTExKSA+PiA5KTsKKwkJZWxzZSBocGZzX2ZyZWVfc2VjdG9ycyhzLCBsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2Vjbm8pICsgKChsZTMyX3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9sKSArIDUxMSkgPj4gOSksIGxlbiAtICgobGUzMl90b19jcHUoZm5vZGUtPmVhX3NpemVfbCkgKyA1MTEpID4+IDkpKTsKKwllbHNlIGZub2RlLT5lYV9zZWNubyA9IGZub2RlLT5lYV9zaXplX2wgPSBjcHVfdG9fbGUzMigwKTsKIH0KIAkKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZmlsZS5jIGIvZnMvaHBmcy9maWxlLmMKaW5kZXggOWI5ZWI2OS4uODljNTAwZSAxMDA2NDQKLS0tIGEvZnMvaHBmcy9maWxlLmMKKysrIGIvZnMvaHBmcy9maWxlLmMKQEAgLTIwLDggKzIwLDggQEAKIAogaW50IGhwZnNfZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGRhdGFzeW5jKQogewotCS8qcmV0dXJuIGZpbGVfZnN5bmMoZmlsZSwgZGF0YXN5bmMpOyovCi0JcmV0dXJuIDA7IC8qIERvbid0IGZzeW5jIDotKSAqLworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CisJcmV0dXJuIHN5bmNfYmxvY2tkZXYoaW5vZGUtPmlfc2ItPnNfYmRldik7CiB9CiAKIC8qCkBAIC00OCwzOCArNDgsNDYgQEAKIHN0YXRpYyB2b2lkIGhwZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppKQogewogCWlmIChJU19JTU1VVEFCTEUoaSkpIHJldHVybiAvKi1FUEVSTSovOwotCWhwZnNfbG9jayhpLT5pX3NiKTsKKwlocGZzX2xvY2tfYXNzZXJ0KGktPmlfc2IpOworCiAJaHBmc19pKGkpLT5pX25fc2VjcyA9IDA7CiAJaS0+aV9ibG9ja3MgPSAxICsgKChpLT5pX3NpemUgKyA1MTEpID4+IDkpOwogCWhwZnNfaShpKS0+bW11X3ByaXZhdGUgPSBpLT5pX3NpemU7CiAJaHBmc190cnVuY2F0ZV9idHJlZShpLT5pX3NiLCBpLT5pX2lubywgMSwgKChpLT5pX3NpemUgKyA1MTEpID4+IDkpKTsKIAlocGZzX3dyaXRlX2lub2RlKGkpOwogCWhwZnNfaShpKS0+aV9uX3NlY3MgPSAwOwotCWhwZnNfdW5sb2NrKGktPmlfc2IpOwogfQogCiBzdGF0aWMgaW50IGhwZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7CisJaW50IHI7CiAJc2Vjbm8gczsKKwlocGZzX2xvY2soaW5vZGUtPmlfc2IpOwogCXMgPSBocGZzX2JtYXAoaW5vZGUsIGlibG9jayk7CiAJaWYgKHMpIHsKIAkJbWFwX2JoKGJoX3Jlc3VsdCwgaW5vZGUtPmlfc2IsIHMpOwotCQlyZXR1cm4gMDsKKwkJZ290byByZXRfMDsKIAl9Ci0JaWYgKCFjcmVhdGUpIHJldHVybiAwOworCWlmICghY3JlYXRlKSBnb3RvIHJldF8wOwogCWlmIChpYmxvY2s8PDkgIT0gaHBmc19pKGlub2RlKS0+bW11X3ByaXZhdGUpIHsKIAkJQlVHKCk7Ci0JCXJldHVybiAtRUlPOworCQlyID0gLUVJTzsKKwkJZ290byByZXRfcjsKIAl9CiAJaWYgKChzID0gaHBmc19hZGRfc2VjdG9yX3RvX2J0cmVlKGlub2RlLT5pX3NiLCBpbm9kZS0+aV9pbm8sIDEsIGlub2RlLT5pX2Jsb2NrcyAtIDEpKSA9PSAtMSkgewogCQlocGZzX3RydW5jYXRlX2J0cmVlKGlub2RlLT5pX3NiLCBpbm9kZS0+aV9pbm8sIDEsIGlub2RlLT5pX2Jsb2NrcyAtIDEpOwotCQlyZXR1cm4gLUVOT1NQQzsKKwkJciA9IC1FTk9TUEM7CisJCWdvdG8gcmV0X3I7CiAJfQogCWlub2RlLT5pX2Jsb2NrcysrOwogCWhwZnNfaShpbm9kZSktPm1tdV9wcml2YXRlICs9IDUxMjsKIAlzZXRfYnVmZmVyX25ldyhiaF9yZXN1bHQpOwogCW1hcF9iaChiaF9yZXN1bHQsIGlub2RlLT5pX3NiLCBzKTsKLQlyZXR1cm4gMDsKKwlyZXRfMDoKKwlyID0gMDsKKwlyZXRfcjoKKwlocGZzX3VubG9jayhpbm9kZS0+aV9zYik7CisJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQgaHBmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQpAQCAtMTMwLDggKzEzOCwxMSBAQAogCXNzaXplX3QgcmV0dmFsOwogCiAJcmV0dmFsID0gZG9fc3luY193cml0ZShmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKLQlpZiAocmV0dmFsID4gMCkKKwlpZiAocmV0dmFsID4gMCkgeworCQlocGZzX2xvY2soZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9zYik7CiAJCWhwZnNfaShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+aV9kaXJ0eSA9IDE7CisJCWhwZnNfdW5sb2NrKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfc2IpOworCX0KIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9mcy9ocGZzL2hwZnMuaCBiL2ZzL2hwZnMvaHBmcy5oCmluZGV4IDBlODRjNzMuLjhiMDY1MGEgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvaHBmcy5oCisrKyBiL2ZzL2hwZnMvaHBmcy5oCkBAIC0xOSw5ICsxOSwxMyBAQAogICAgRm9yIGRlZmluaXRpdmUgaW5mb3JtYXRpb24gb24gSFBGUywgYXNrIHNvbWVib2R5IGVsc2UgLS0gdGhpcyBpcyBndWVzc3dvcmsuCiAgICBUaGVyZSBhcmUgY2VydGFpbiB0byBiZSBtYW55IG1pc3Rha2VzLiAqLwogCisjaWYgIWRlZmluZWQoX19MSVRUTEVfRU5ESUFOKSAmJiAhZGVmaW5lZChfX0JJR19FTkRJQU4pCisjZXJyb3IgdW5rbm93biBlbmRpYW4KKyNlbmRpZgorCiAvKiBOb3RhdGlvbiAqLwogCi10eXBlZGVmIHVuc2lnbmVkIHNlY25vOwkJCS8qIHNlY3RvciBudW1iZXIsIHBhcnRpdGlvbiByZWxhdGl2ZSAqLwordHlwZWRlZiB1MzIgc2Vjbm87CQkJLyogc2VjdG9yIG51bWJlciwgcGFydGl0aW9uIHJlbGF0aXZlICovCiAKIHR5cGVkZWYgc2Vjbm8gZG5vZGVfc2Vjbm87CQkvKiBzZWN0b3IgbnVtYmVyIG9mIGEgZG5vZGUgKi8KIHR5cGVkZWYgc2Vjbm8gZm5vZGVfc2Vjbm87CQkvKiBzZWN0b3IgbnVtYmVyIG9mIGFuIGZub2RlICovCkBAIC0zOCwyOCArNDIsMjggQEAKIAogc3RydWN0IGhwZnNfYm9vdF9ibG9jawogewotICB1bnNpZ25lZCBjaGFyIGptcFszXTsKLSAgdW5zaWduZWQgY2hhciBvZW1faWRbOF07Ci0gIHVuc2lnbmVkIGNoYXIgYnl0ZXNfcGVyX3NlY3RvclsyXTsJLyogNTEyICovCi0gIHVuc2lnbmVkIGNoYXIgc2VjdG9yc19wZXJfY2x1c3RlcjsKLSAgdW5zaWduZWQgY2hhciBuX3Jlc2VydmVkX3NlY3RvcnNbMl07Ci0gIHVuc2lnbmVkIGNoYXIgbl9mYXRzOwotICB1bnNpZ25lZCBjaGFyIG5fcm9vdGRpcl9lbnRyaWVzWzJdOwotICB1bnNpZ25lZCBjaGFyIG5fc2VjdG9yc19zWzJdOwotICB1bnNpZ25lZCBjaGFyIG1lZGlhX2J5dGU7Ci0gIHVuc2lnbmVkIHNob3J0IHNlY3RvcnNfcGVyX2ZhdDsKLSAgdW5zaWduZWQgc2hvcnQgc2VjdG9yc19wZXJfdHJhY2s7Ci0gIHVuc2lnbmVkIHNob3J0IGhlYWRzX3Blcl9jeWw7Ci0gIHVuc2lnbmVkIGludCBuX2hpZGRlbl9zZWN0b3JzOwotICB1bnNpZ25lZCBpbnQgbl9zZWN0b3JzX2w7CQkvKiBzaXplIG9mIHBhcnRpdGlvbiAqLwotICB1bnNpZ25lZCBjaGFyIGRyaXZlX251bWJlcjsKLSAgdW5zaWduZWQgY2hhciBtYno7Ci0gIHVuc2lnbmVkIGNoYXIgc2lnXzI4aDsJCS8qIDI4aCAqLwotICB1bnNpZ25lZCBjaGFyIHZvbF9zZXJub1s0XTsKLSAgdW5zaWduZWQgY2hhciB2b2xfbGFiZWxbMTFdOwotICB1bnNpZ25lZCBjaGFyIHNpZ19ocGZzWzhdOwkJLyogIkhQRlMgICAgIiAqLwotICB1bnNpZ25lZCBjaGFyIHBhZFs0NDhdOwotICB1bnNpZ25lZCBzaG9ydCBtYWdpYzsJCQkvKiBhYTU1ICovCisgIHU4IGptcFszXTsKKyAgdTggb2VtX2lkWzhdOworICB1OCBieXRlc19wZXJfc2VjdG9yWzJdOwkvKiA1MTIgKi8KKyAgdTggc2VjdG9yc19wZXJfY2x1c3RlcjsKKyAgdTggbl9yZXNlcnZlZF9zZWN0b3JzWzJdOworICB1OCBuX2ZhdHM7CisgIHU4IG5fcm9vdGRpcl9lbnRyaWVzWzJdOworICB1OCBuX3NlY3RvcnNfc1syXTsKKyAgdTggbWVkaWFfYnl0ZTsKKyAgdTE2IHNlY3RvcnNfcGVyX2ZhdDsKKyAgdTE2IHNlY3RvcnNfcGVyX3RyYWNrOworICB1MTYgaGVhZHNfcGVyX2N5bDsKKyAgdTMyIG5faGlkZGVuX3NlY3RvcnM7CisgIHUzMiBuX3NlY3RvcnNfbDsJCS8qIHNpemUgb2YgcGFydGl0aW9uICovCisgIHU4IGRyaXZlX251bWJlcjsKKyAgdTggbWJ6OworICB1OCBzaWdfMjhoOwkJCS8qIDI4aCAqLworICB1OCB2b2xfc2Vybm9bNF07CisgIHU4IHZvbF9sYWJlbFsxMV07CisgIHU4IHNpZ19ocGZzWzhdOwkJLyogIkhQRlMgICAgIiAqLworICB1OCBwYWRbNDQ4XTsKKyAgdTE2IG1hZ2ljOwkJCS8qIGFhNTUgKi8KIH07CiAKIApAQCAtNzEsMzEgKzc1LDI5IEBACiAKIHN0cnVjdCBocGZzX3N1cGVyX2Jsb2NrCiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIGY5OTUgZTg0OSAqLwotICB1bnNpZ25lZCBtYWdpYzE7CQkJLyogZmE1MyBlOWM1LCBtb3JlIG1hZ2ljPyAqLwotICAvKnVuc2lnbmVkIGh1aDIwMjsqLwkJCS8qID8/IDIwMiA9IE4uIG9mIEIuIGluIDEuMDAzOTA2MjUgUy4qLwotICBjaGFyIHZlcnNpb247CQkJCS8qIHZlcnNpb24gb2YgYSBmaWxlc3lzdGVtICB1c3VhbGx5IDIgKi8KLSAgY2hhciBmdW5jdmVyc2lvbjsJCQkvKiBmdW5jdGlvbmFsIHZlcnNpb24gLSBvbGRlc3QgdmVyc2lvbgorICB1MzIgbWFnaWM7CQkJCS8qIGY5OTUgZTg0OSAqLworICB1MzIgbWFnaWMxOwkJCQkvKiBmYTUzIGU5YzUsIG1vcmUgbWFnaWM/ICovCisgIHU4IHZlcnNpb247CQkJCS8qIHZlcnNpb24gb2YgYSBmaWxlc3lzdGVtICB1c3VhbGx5IDIgKi8KKyAgdTggZnVuY3ZlcnNpb247CQkJLyogZnVuY3Rpb25hbCB2ZXJzaW9uIC0gb2xkZXN0IHZlcnNpb24KICAgCQkJCQkgICBvZiBmaWxlc3lzdGVtIHRoYXQgY2FuIHVuZGVyc3RhbmQKIAkJCQkJICAgdGhpcyBkaXNrICovCi0gIHVuc2lnbmVkIHNob3J0IGludCB6ZXJvOwkJLyogMCAqLworICB1MTYgemVybzsJCQkJLyogMCAqLwogICBmbm9kZV9zZWNubyByb290OwkJCS8qIGZub2RlIG9mIHJvb3QgZGlyZWN0b3J5ICovCiAgIHNlY25vIG5fc2VjdG9yczsJCQkvKiBzaXplIG9mIGZpbGVzeXN0ZW0gKi8KLSAgdW5zaWduZWQgbl9iYWRibG9ja3M7CQkJLyogbnVtYmVyIG9mIGJhZCBibG9ja3MgKi8KKyAgdTMyIG5fYmFkYmxvY2tzOwkJCS8qIG51bWJlciBvZiBiYWQgYmxvY2tzICovCiAgIHNlY25vIGJpdG1hcHM7CQkJLyogcG9pbnRlcnMgdG8gZnJlZSBzcGFjZSBiaXQgbWFwcyAqLwotICB1bnNpZ25lZCB6ZXJvMTsJCQkvKiAwICovCisgIHUzMiB6ZXJvMTsJCQkJLyogMCAqLwogICBzZWNubyBiYWRibG9ja3M7CQkJLyogYmFkIGJsb2NrIGxpc3QgKi8KLSAgdW5zaWduZWQgemVybzM7CQkJLyogMCAqLworICB1MzIgemVybzM7CQkJCS8qIDAgKi8KICAgdGltZTMyX3QgbGFzdF9jaGtkc2s7CQkJLyogZGF0ZSBsYXN0IGNoZWNrZWQsIDAgaWYgbmV2ZXIgKi8KLSAgLyp1bnNpZ25lZCB6ZXJvNDsqLwkJCS8qIDAgKi8KLSAgdGltZTMyX3QgbGFzdF9vcHRpbWl6ZTsJCQkvKiBkYXRlIGxhc3Qgb3B0aW1pemVkLCAwIGlmIG5ldmVyICovCisgIHRpbWUzMl90IGxhc3Rfb3B0aW1pemU7CQkvKiBkYXRlIGxhc3Qgb3B0aW1pemVkLCAwIGlmIG5ldmVyICovCiAgIHNlY25vIG5fZGlyX2JhbmQ7CQkJLyogbnVtYmVyIG9mIHNlY3RvcnMgaW4gZGlyIGJhbmQgKi8KICAgc2Vjbm8gZGlyX2JhbmRfc3RhcnQ7CQkJLyogZmlyc3Qgc2VjdG9yIGluIGRpciBiYW5kICovCiAgIHNlY25vIGRpcl9iYW5kX2VuZDsJCQkvKiBsYXN0IHNlY3RvciBpbiBkaXIgYmFuZCAqLwogICBzZWNubyBkaXJfYmFuZF9iaXRtYXA7CQkvKiBmcmVlIHNwYWNlIG1hcCwgMSBkbm9kZSBwZXIgYml0ICovCi0gIGNoYXIgdm9sdW1lX25hbWVbMzJdOwkJCS8qIG5vdCB1c2VkICovCisgIHU4IHZvbHVtZV9uYW1lWzMyXTsJCQkvKiBub3QgdXNlZCAqLwogICBzZWNubyB1c2VyX2lkX3RhYmxlOwkJCS8qIDggcHJlYWxsb2NhdGVkIHNlY3RvcnMgLSB1c2VyIGlkICovCi0gIHVuc2lnbmVkIHplcm82WzEwM107CQkJLyogMCAqLworICB1MzIgemVybzZbMTAzXTsJCQkvKiAwICovCiB9OwogCiAKQEAgLTEwNyw0NCArMTA5LDY1IEBACiAKIHN0cnVjdCBocGZzX3NwYXJlX2Jsb2NrCiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIGY5OTEgMTg0OSAqLwotICB1bnNpZ25lZCBtYWdpYzE7CQkJLyogZmE1MiAyOWM1LCBtb3JlIG1hZ2ljPyAqLworICB1MzIgbWFnaWM7CQkJCS8qIGY5OTEgMTg0OSAqLworICB1MzIgbWFnaWMxOwkJCQkvKiBmYTUyIDI5YzUsIG1vcmUgbWFnaWM/ICovCiAKLSAgdW5zaWduZWQgZGlydHk6IDE7CQkJLyogMCBjbGVhbiwgMSAiaW1wcm9wZXJseSBzdG9wcGVkIiAqLwotICAvKnVuc2lnbmVkIGZsYWcxMjM0OiA0OyovCQkvKiB1bmtub3duIGZsYWdzICovCi0gIHVuc2lnbmVkIHNwYXJlZGlyX3VzZWQ6IDE7CQkvKiBzcGFyZSBkaXJibGtzIHVzZWQgKi8KLSAgdW5zaWduZWQgaG90Zml4ZXNfdXNlZDogMTsJCS8qIGhvdGZpeGVzIHVzZWQgKi8KLSAgdW5zaWduZWQgYmFkX3NlY3RvcjogMTsJCS8qIGJhZCBzZWN0b3IsIGNvcnJ1cHRlZCBkaXNrICg/Pz8pICovCi0gIHVuc2lnbmVkIGJhZF9iaXRtYXA6IDE7CQkvKiBiYWQgYml0bWFwICovCi0gIHVuc2lnbmVkIGZhc3Q6IDE7CQkJLyogcGFydGl0aW9uIHdhcyBmYXN0IGZvcm1hdHRlZCAqLwotICB1bnNpZ25lZCBvbGRfd3JvdGU6IDE7CQkvKiBvbGQgdmVyc2lvbiB3cm90ZSB0byBwYXJ0aW9uICovCi0gIHVuc2lnbmVkIG9sZF93cm90ZV8xOiAxOwkJLyogb2xkIHZlcnNpb24gd3JvdGUgdG8gcGFydGlvbiAoPykgKi8KLSAgdW5zaWduZWQgaW5zdGFsbF9kYXNkX2xpbWl0czogMTsJLyogSFBGUzM4NiBmbGFncyAqLwotICB1bnNpZ25lZCByZXN5bmNoX2Rhc2RfbGltaXRzOiAxOwotICB1bnNpZ25lZCBkYXNkX2xpbWl0c19vcGVyYXRpb25hbDogMTsKLSAgdW5zaWduZWQgbXVsdGltZWRpYV9hY3RpdmU6IDE7Ci0gIHVuc2lnbmVkIGRjZV9hY2xzX2FjdGl2ZTogMTsKLSAgdW5zaWduZWQgZGFzZF9saW1pdHNfZGlydHk6IDE7Ci0gIHVuc2lnbmVkIGZsYWc2NzogMjsKLSAgdW5zaWduZWQgY2hhciBtbV9jb250bGd1bHR5OwotICB1bnNpZ25lZCBjaGFyIHVudXNlZDsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggZGlydHk6IDE7CQkJCS8qIDAgY2xlYW4sIDEgImltcHJvcGVybHkgc3RvcHBlZCIgKi8KKyAgdTggc3BhcmVkaXJfdXNlZDogMTsJCQkvKiBzcGFyZSBkaXJibGtzIHVzZWQgKi8KKyAgdTggaG90Zml4ZXNfdXNlZDogMTsJCQkvKiBob3RmaXhlcyB1c2VkICovCisgIHU4IGJhZF9zZWN0b3I6IDE7CQkJLyogYmFkIHNlY3RvciwgY29ycnVwdGVkIGRpc2sgKD8/PykgKi8KKyAgdTggYmFkX2JpdG1hcDogMTsJCQkvKiBiYWQgYml0bWFwICovCisgIHU4IGZhc3Q6IDE7CQkJCS8qIHBhcnRpdGlvbiB3YXMgZmFzdCBmb3JtYXR0ZWQgKi8KKyAgdTggb2xkX3dyb3RlOiAxOwkJCS8qIG9sZCB2ZXJzaW9uIHdyb3RlIHRvIHBhcnRpb24gKi8KKyAgdTggb2xkX3dyb3RlXzE6IDE7CQkJLyogb2xkIHZlcnNpb24gd3JvdGUgdG8gcGFydGlvbiAoPykgKi8KKyNlbHNlCisgIHU4IG9sZF93cm90ZV8xOiAxOwkJCS8qIG9sZCB2ZXJzaW9uIHdyb3RlIHRvIHBhcnRpb24gKD8pICovCisgIHU4IG9sZF93cm90ZTogMTsJCQkvKiBvbGQgdmVyc2lvbiB3cm90ZSB0byBwYXJ0aW9uICovCisgIHU4IGZhc3Q6IDE7CQkJCS8qIHBhcnRpdGlvbiB3YXMgZmFzdCBmb3JtYXR0ZWQgKi8KKyAgdTggYmFkX2JpdG1hcDogMTsJCQkvKiBiYWQgYml0bWFwICovCisgIHU4IGJhZF9zZWN0b3I6IDE7CQkJLyogYmFkIHNlY3RvciwgY29ycnVwdGVkIGRpc2sgKD8/PykgKi8KKyAgdTggaG90Zml4ZXNfdXNlZDogMTsJCQkvKiBob3RmaXhlcyB1c2VkICovCisgIHU4IHNwYXJlZGlyX3VzZWQ6IDE7CQkJLyogc3BhcmUgZGlyYmxrcyB1c2VkICovCisgIHU4IGRpcnR5OiAxOwkJCQkvKiAwIGNsZWFuLCAxICJpbXByb3Blcmx5IHN0b3BwZWQiICovCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCBpbnN0YWxsX2Rhc2RfbGltaXRzOiAxOwkJLyogSFBGUzM4NiBmbGFncyAqLworICB1OCByZXN5bmNoX2Rhc2RfbGltaXRzOiAxOworICB1OCBkYXNkX2xpbWl0c19vcGVyYXRpb25hbDogMTsKKyAgdTggbXVsdGltZWRpYV9hY3RpdmU6IDE7CisgIHU4IGRjZV9hY2xzX2FjdGl2ZTogMTsKKyAgdTggZGFzZF9saW1pdHNfZGlydHk6IDE7CisgIHU4IGZsYWc2NzogMjsKKyNlbHNlCisgIHU4IGZsYWc2NzogMjsKKyAgdTggZGFzZF9saW1pdHNfZGlydHk6IDE7CisgIHU4IGRjZV9hY2xzX2FjdGl2ZTogMTsKKyAgdTggbXVsdGltZWRpYV9hY3RpdmU6IDE7CisgIHU4IGRhc2RfbGltaXRzX29wZXJhdGlvbmFsOiAxOworICB1OCByZXN5bmNoX2Rhc2RfbGltaXRzOiAxOworICB1OCBpbnN0YWxsX2Rhc2RfbGltaXRzOiAxOwkJLyogSFBGUzM4NiBmbGFncyAqLworI2VuZGlmCisKKyAgdTggbW1fY29udGxndWx0eTsKKyAgdTggdW51c2VkOwogCiAgIHNlY25vIGhvdGZpeF9tYXA7CQkJLyogaW5mbyBhYm91dCByZW1hcHBlZCBiYWQgc2VjdG9ycyAqLwotICB1bnNpZ25lZCBuX3NwYXJlc191c2VkOwkJLyogbnVtYmVyIG9mIGhvdGZpeGVzICovCi0gIHVuc2lnbmVkIG5fc3BhcmVzOwkJCS8qIG51bWJlciBvZiBzcGFyZXMgaW4gaG90Zml4IG1hcCAqLwotICB1bnNpZ25lZCBuX2Rub2RlX3NwYXJlc19mcmVlOwkJLyogc3BhcmUgZG5vZGVzIHVudXNlZCAqLwotICB1bnNpZ25lZCBuX2Rub2RlX3NwYXJlczsJCS8qIGxlbmd0aCBvZiBzcGFyZV9kbm9kZXNbXSBsaXN0LAorICB1MzIgbl9zcGFyZXNfdXNlZDsJCQkvKiBudW1iZXIgb2YgaG90Zml4ZXMgKi8KKyAgdTMyIG5fc3BhcmVzOwkJCQkvKiBudW1iZXIgb2Ygc3BhcmVzIGluIGhvdGZpeCBtYXAgKi8KKyAgdTMyIG5fZG5vZGVfc3BhcmVzX2ZyZWU7CQkvKiBzcGFyZSBkbm9kZXMgdW51c2VkICovCisgIHUzMiBuX2Rub2RlX3NwYXJlczsJCQkvKiBsZW5ndGggb2Ygc3BhcmVfZG5vZGVzW10gbGlzdCwKIAkJCQkJICAgZm9sbG93cyBpbiB0aGlzIGJsb2NrKi8KICAgc2Vjbm8gY29kZV9wYWdlX2RpcjsJCQkvKiBjb2RlIHBhZ2UgZGlyZWN0b3J5IGJsb2NrICovCi0gIHVuc2lnbmVkIG5fY29kZV9wYWdlczsJCS8qIG51bWJlciBvZiBjb2RlIHBhZ2VzICovCi0gIC8qdW5zaWduZWQgbGFyZ2VfbnVtYmVyc1syXTsqLwkvKiA/PyAqLwotICB1bnNpZ25lZCBzdXBlcl9jcmM7CQkJLyogb24gSFBGUzM4NiBhbmQgTEFOIFNlcnZlciB0aGlzIGlzCisgIHUzMiBuX2NvZGVfcGFnZXM7CQkJLyogbnVtYmVyIG9mIGNvZGUgcGFnZXMgKi8KKyAgdTMyIHN1cGVyX2NyYzsJCQkvKiBvbiBIUEZTMzg2IGFuZCBMQU4gU2VydmVyIHRoaXMgaXMKICAgCQkJCQkgICBjaGVja3N1bSBvZiBzdXBlcmJsb2NrLCBvbiBub3JtYWwKIAkJCQkJICAgT1MvMiB1bnVzZWQgKi8KLSAgdW5zaWduZWQgc3BhcmVfY3JjOwkJCS8qIG9uIEhQRlMzODYgY2hlY2tzdW0gb2Ygc3BhcmVibG9jayAqLwotICB1bnNpZ25lZCB6ZXJvMVsxNV07CQkJLyogdW51c2VkICovCisgIHUzMiBzcGFyZV9jcmM7CQkJLyogb24gSFBGUzM4NiBjaGVja3N1bSBvZiBzcGFyZWJsb2NrICovCisgIHUzMiB6ZXJvMVsxNV07CQkJLyogdW51c2VkICovCiAgIGRub2RlX3NlY25vIHNwYXJlX2Rub2Rlc1sxMDBdOwkvKiBlbWVyZ2VuY3kgZnJlZSBkbm9kZSBsaXN0ICovCi0gIHVuc2lnbmVkIHplcm8yWzFdOwkJCS8qIHJvb20gZm9yIG1vcmU/ICovCisgIHUzMiB6ZXJvMlsxXTsJCQkJLyogcm9vbSBmb3IgbW9yZT8gKi8KIH07CiAKIC8qIFRoZSBiYWQgYmxvY2sgbGlzdCBpcyA0IHNlY3RvcnMgbG9uZy4gIFRoZSBmaXJzdCB3b3JkIG11c3QgYmUgemVybywKQEAgLTE3OSwxOCArMjAyLDE4IEBACiAKIHN0cnVjdCBjb2RlX3BhZ2VfZGlyZWN0b3J5CiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIDQ5NDUgMjFmNyAqLwotICB1bnNpZ25lZCBuX2NvZGVfcGFnZXM7CQkvKiBudW1iZXIgb2YgcG9pbnRlcnMgZm9sbG93aW5nICovCi0gIHVuc2lnbmVkIHplcm8xWzJdOworICB1MzIgbWFnaWM7CQkJCS8qIDQ5NDUgMjFmNyAqLworICB1MzIgbl9jb2RlX3BhZ2VzOwkJCS8qIG51bWJlciBvZiBwb2ludGVycyBmb2xsb3dpbmcgKi8KKyAgdTMyIHplcm8xWzJdOwogICBzdHJ1Y3QgewotICAgIHVuc2lnbmVkIHNob3J0IGl4OwkJCS8qIGluZGV4ICovCi0gICAgdW5zaWduZWQgc2hvcnQgY29kZV9wYWdlX251bWJlcjsJLyogY29kZSBwYWdlIG51bWJlciAqLwotICAgIHVuc2lnbmVkIGJvdW5kczsJCQkvKiBtYXRjaGVzIGNvcnJlc3BvbmRpbmcgd29yZAorICAgIHUxNiBpeDsJCQkJLyogaW5kZXggKi8KKyAgICB1MTYgY29kZV9wYWdlX251bWJlcjsJCS8qIGNvZGUgcGFnZSBudW1iZXIgKi8KKyAgICB1MzIgYm91bmRzOwkJCQkvKiBtYXRjaGVzIGNvcnJlc3BvbmRpbmcgd29yZAogCQkJCQkgICBpbiBkYXRhIGJsb2NrICovCiAgICAgc2Vjbm8gY29kZV9wYWdlX2RhdGE7CQkvKiBzZWN0b3IgbnVtYmVyIG9mIGEgY29kZV9wYWdlX2RhdGEKIAkJCQkJICAgY29udGFpbmluZyBjLnAuIGFycmF5ICovCi0gICAgdW5zaWduZWQgc2hvcnQgaW5kZXg7CQkvKiBpbmRleCBpbiBjLnAuIGFycmF5IGluIHRoYXQgc2VjdG9yKi8KLSAgICB1bnNpZ25lZCBzaG9ydCB1bmtub3duOwkJLyogc29tZSB1bmtub3duIHZhbHVlOyB1c3VhbGx5IDA7CisgICAgdTE2IGluZGV4OwkJCQkvKiBpbmRleCBpbiBjLnAuIGFycmF5IGluIHRoYXQgc2VjdG9yKi8KKyAgICB1MTYgdW5rbm93bjsJCQkvKiBzb21lIHVua25vd24gdmFsdWU7IHVzdWFsbHkgMDsKICAgICAJCQkJCSAgIDIgaW4gSmFwYW5lc2UgdmVyc2lvbiAqLwogICB9IGFycmF5WzMxXTsJCQkJLyogdW5rbm93biBsZW5ndGggKi8KIH07CkBAIC0yMDEsMjEgKzIyNCwyMSBAQAogCiBzdHJ1Y3QgY29kZV9wYWdlX2RhdGEKIHsKLSAgdW5zaWduZWQgbWFnaWM7CQkJLyogODk0NSAyMWY3ICovCi0gIHVuc2lnbmVkIG5fdXNlZDsJCQkvKiAjIGVsZW1lbnRzIHVzZWQgaW4gY19wX2RhdGFbXSAqLwotICB1bnNpZ25lZCBib3VuZHNbM107CQkJLyogbG9va3MgYSBiaXQgbGlrZQorICB1MzIgbWFnaWM7CQkJCS8qIDg5NDUgMjFmNyAqLworICB1MzIgbl91c2VkOwkJCQkvKiAjIGVsZW1lbnRzIHVzZWQgaW4gY19wX2RhdGFbXSAqLworICB1MzIgYm91bmRzWzNdOwkJCS8qIGxvb2tzIGEgYml0IGxpa2UKIAkJCQkJICAgICAoYmVnMSxlbmQxKSwgKGJlZzIsZW5kMikKIAkJCQkJICAgb25lIGJ5dGUgZWFjaCAqLwotICB1bnNpZ25lZCBzaG9ydCBvZmZzWzNdOwkJLyogb2Zmc2V0cyBmcm9tIHN0YXJ0IG9mIHNlY3RvcgorICB1MTYgb2Zmc1szXTsJCQkJLyogb2Zmc2V0cyBmcm9tIHN0YXJ0IG9mIHNlY3RvcgogCQkJCQkgICB0byBzdGFydCBvZiBjX3BfZGF0YVtpeF0gKi8KICAgc3RydWN0IHsKLSAgICB1bnNpZ25lZCBzaG9ydCBpeDsJCQkvKiBpbmRleCAqLwotICAgIHVuc2lnbmVkIHNob3J0IGNvZGVfcGFnZV9udW1iZXI7CS8qIGNvZGUgcGFnZSBudW1iZXIgKi8KLSAgICB1bnNpZ25lZCBzaG9ydCB1bmtub3duOwkJLyogdGhlIHNhbWUgYXMgaW4gY3AgZGlyZWN0b3J5ICovCi0gICAgdW5zaWduZWQgY2hhciBtYXBbMTI4XTsJCS8qIHVwY2FzZSB0YWJsZSBmb3IgY2hhcnMgODAuLmZmICovCi0gICAgdW5zaWduZWQgc2hvcnQgemVybzI7CisgICAgdTE2IGl4OwkJCQkvKiBpbmRleCAqLworICAgIHUxNiBjb2RlX3BhZ2VfbnVtYmVyOwkJLyogY29kZSBwYWdlIG51bWJlciAqLworICAgIHUxNiB1bmtub3duOwkJCS8qIHRoZSBzYW1lIGFzIGluIGNwIGRpcmVjdG9yeSAqLworICAgIHU4IG1hcFsxMjhdOwkJCS8qIHVwY2FzZSB0YWJsZSBmb3IgY2hhcnMgODAuLmZmICovCisgICAgdTE2IHplcm8yOwogICB9IGNvZGVfcGFnZVszXTsKLSAgdW5zaWduZWQgY2hhciBpbmNvZ25pdGFbNzhdOworICB1OCBpbmNvZ25pdGFbNzhdOwogfTsKIAogCkBAIC0yNTUsNTAgKzI3OCw4NCBAQAogI2RlZmluZSBETk9ERV9NQUdJQyAgIDB4NzdlNDBhYWUKIAogc3RydWN0IGRub2RlIHsKLSAgdW5zaWduZWQgbWFnaWM7CQkJLyogNzdlNCAwYWFlICovCi0gIHVuc2lnbmVkIGZpcnN0X2ZyZWU7CQkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZG5vZGUgdG8KKyAgdTMyIG1hZ2ljOwkJCQkvKiA3N2U0IDBhYWUgKi8KKyAgdTMyIGZpcnN0X2ZyZWU7CQkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZG5vZGUgdG8KIAkJCQkJICAgZmlyc3QgZnJlZSBkaXIgZW50cnkgKi8KLSAgdW5zaWduZWQgcm9vdF9kbm9kZToxOwkJLyogSXMgaXQgcm9vdCBkbm9kZT8gKi8KLSAgdW5zaWduZWQgaW5jcmVtZW50X21lOjMxOwkJLyogc29tZSBraW5kIG9mIGFjdGl2aXR5IGNvdW50ZXI/Ci0JCQkJCSAgIE5laXRoZXIgSFBGUy5JRlMgbm9yIENIS0RTSyBjYXJlcworI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCByb290X2Rub2RlOiAxOwkJCS8qIElzIGl0IHJvb3QgZG5vZGU/ICovCisgIHU4IGluY3JlbWVudF9tZTogNzsJCQkvKiBzb21lIGtpbmQgb2YgYWN0aXZpdHkgY291bnRlcj8gKi8KKwkJCQkJLyogTmVpdGhlciBIUEZTLklGUyBub3IgQ0hLRFNLIGNhcmVzCiAJCQkJCSAgIGlmIHlvdSBjaGFuZ2UgdGhpcyB3b3JkICovCisjZWxzZQorICB1OCBpbmNyZW1lbnRfbWU6IDc7CQkJLyogc29tZSBraW5kIG9mIGFjdGl2aXR5IGNvdW50ZXI/ICovCisJCQkJCS8qIE5laXRoZXIgSFBGUy5JRlMgbm9yIENIS0RTSyBjYXJlcworCQkJCQkgICBpZiB5b3UgY2hhbmdlIHRoaXMgd29yZCAqLworICB1OCByb290X2Rub2RlOiAxOwkJCS8qIElzIGl0IHJvb3QgZG5vZGU/ICovCisjZW5kaWYKKyAgdTggaW5jcmVtZW50X21lMlszXTsKICAgc2Vjbm8gdXA7CQkJCS8qIChyb290IGRub2RlKSBkaXJlY3RvcnkncyBmbm9kZQogCQkJCQkgICAobm9ucm9vdCkgcGFyZW50IGRub2RlICovCiAgIGRub2RlX3NlY25vIHNlbGY7CQkJLyogcG9pbnRlciB0byB0aGlzIGRub2RlICovCi0gIHVuc2lnbmVkIGNoYXIgZGlyZW50WzIwMjhdOwkJLyogb25lIG9yIG1vcmUgZGlyZW50cyAqLworICB1OCBkaXJlbnRbMjAyOF07CQkJLyogb25lIG9yIG1vcmUgZGlyZW50cyAqLwogfTsKIAogc3RydWN0IGhwZnNfZGlyZW50IHsKLSAgdW5zaWduZWQgc2hvcnQgbGVuZ3RoOwkJLyogb2Zmc2V0IHRvIG5leHQgZGlyZW50ICovCi0gIHVuc2lnbmVkIGZpcnN0OiAxOwkJCS8qIHNldCBvbiBwaG9ueSBeQV5BICgiLiIpIGVudHJ5ICovCi0gIHVuc2lnbmVkIGhhc19hY2w6IDE7Ci0gIHVuc2lnbmVkIGRvd246IDE7CQkJLyogZG93biBwb2ludGVyIHByZXNlbnQgKGFmdGVyIG5hbWUpICovCi0gIHVuc2lnbmVkIGxhc3Q6IDE7CQkJLyogc2V0IG9uIHBob255IFwzNzcgZW50cnkgKi8KLSAgdW5zaWduZWQgaGFzX2VhOiAxOwkJCS8qIGVudHJ5IGhhcyBFQSAqLwotICB1bnNpZ25lZCBoYXNfeHRkX3Blcm06IDE7CQkvKiBoYXMgZXh0ZW5kZWQgcGVybSBsaXN0ICg/Pz8pICovCi0gIHVuc2lnbmVkIGhhc19leHBsaWNpdF9hY2w6IDE7Ci0gIHVuc2lnbmVkIGhhc19uZWVkZWE6IDE7CQkvKiA/PyBzb21lIEVBIGhhcyBORUVERUEgc2V0CisgIHUxNiBsZW5ndGg7CQkJCS8qIG9mZnNldCB0byBuZXh0IGRpcmVudCAqLworCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGZpcnN0OiAxOwkJCQkvKiBzZXQgb24gcGhvbnkgXkFeQSAoIi4iKSBlbnRyeSAqLworICB1OCBoYXNfYWNsOiAxOworICB1OCBkb3duOiAxOwkJCQkvKiBkb3duIHBvaW50ZXIgcHJlc2VudCAoYWZ0ZXIgbmFtZSkgKi8KKyAgdTggbGFzdDogMTsJCQkJLyogc2V0IG9uIHBob255IFwzNzcgZW50cnkgKi8KKyAgdTggaGFzX2VhOiAxOwkJCQkvKiBlbnRyeSBoYXMgRUEgKi8KKyAgdTggaGFzX3h0ZF9wZXJtOiAxOwkJCS8qIGhhcyBleHRlbmRlZCBwZXJtIGxpc3QgKD8/PykgKi8KKyAgdTggaGFzX2V4cGxpY2l0X2FjbDogMTsKKyAgdTggaGFzX25lZWRlYTogMTsJCQkvKiA/PyBzb21lIEVBIGhhcyBORUVERUEgc2V0CiAJCQkJCSAgIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGlzIGlzCiAJCQkJCSAgIGludGVyZXN0aW5nIGluIGEgZGlyIGVudHJ5ICovCi0gIHVuc2lnbmVkIHJlYWRfb25seTogMTsJCS8qIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgaGlkZGVuOiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgc3lzdGVtOiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgZmxhZzExOiAxOwkJCS8qIHdvdWxkIGJlIHZvbHVtZSBsYWJlbCBkb3MgYXR0cmliICovCi0gIHVuc2lnbmVkIGRpcmVjdG9yeTogMTsJCS8qIGRvcyBhdHRyaWIgKi8KLSAgdW5zaWduZWQgYXJjaGl2ZTogMTsJCQkvKiBkb3MgYXR0cmliICovCi0gIHVuc2lnbmVkIG5vdF84eDM6IDE7CQkJLyogbmFtZSBpcyBub3QgOC4zICovCi0gIHVuc2lnbmVkIGZsYWcxNTogMTsKKyNlbHNlCisgIHU4IGhhc19uZWVkZWE6IDE7CQkJLyogPz8gc29tZSBFQSBoYXMgTkVFREVBIHNldAorCQkJCQkgICBJIGhhdmUgbm8gaWRlYSB3aHkgdGhpcyBpcworCQkJCQkgICBpbnRlcmVzdGluZyBpbiBhIGRpciBlbnRyeSAqLworICB1OCBoYXNfZXhwbGljaXRfYWNsOiAxOworICB1OCBoYXNfeHRkX3Blcm06IDE7CQkJLyogaGFzIGV4dGVuZGVkIHBlcm0gbGlzdCAoPz8/KSAqLworICB1OCBoYXNfZWE6IDE7CQkJCS8qIGVudHJ5IGhhcyBFQSAqLworICB1OCBsYXN0OiAxOwkJCQkvKiBzZXQgb24gcGhvbnkgXDM3NyBlbnRyeSAqLworICB1OCBkb3duOiAxOwkJCQkvKiBkb3duIHBvaW50ZXIgcHJlc2VudCAoYWZ0ZXIgbmFtZSkgKi8KKyAgdTggaGFzX2FjbDogMTsKKyAgdTggZmlyc3Q6IDE7CQkJCS8qIHNldCBvbiBwaG9ueSBeQV5BICgiLiIpIGVudHJ5ICovCisjZW5kaWYKKworI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCByZWFkX29ubHk6IDE7CQkJLyogZG9zIGF0dHJpYiAqLworICB1OCBoaWRkZW46IDE7CQkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggc3lzdGVtOiAxOwkJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGZsYWcxMTogMTsJCQkJLyogd291bGQgYmUgdm9sdW1lIGxhYmVsIGRvcyBhdHRyaWIgKi8KKyAgdTggZGlyZWN0b3J5OiAxOwkJCS8qIGRvcyBhdHRyaWIgKi8KKyAgdTggYXJjaGl2ZTogMTsJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IG5vdF84eDM6IDE7CQkJLyogbmFtZSBpcyBub3QgOC4zICovCisgIHU4IGZsYWcxNTogMTsKKyNlbHNlCisgIHU4IGZsYWcxNTogMTsKKyAgdTggbm90Xzh4MzogMTsJCQkvKiBuYW1lIGlzIG5vdCA4LjMgKi8KKyAgdTggYXJjaGl2ZTogMTsJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGRpcmVjdG9yeTogMTsJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGZsYWcxMTogMTsJCQkJLyogd291bGQgYmUgdm9sdW1lIGxhYmVsIGRvcyBhdHRyaWIgKi8KKyAgdTggc3lzdGVtOiAxOwkJCQkvKiBkb3MgYXR0cmliICovCisgIHU4IGhpZGRlbjogMTsJCQkJLyogZG9zIGF0dHJpYiAqLworICB1OCByZWFkX29ubHk6IDE7CQkJLyogZG9zIGF0dHJpYiAqLworI2VuZGlmCisKICAgZm5vZGVfc2Vjbm8gZm5vZGU7CQkJLyogZm5vZGUgZ2l2aW5nIGFsbG9jYXRpb24gaW5mbyAqLwogICB0aW1lMzJfdCB3cml0ZV9kYXRlOwkJCS8qIG10aW1lICovCi0gIHVuc2lnbmVkIGZpbGVfc2l6ZTsJCQkvKiBmaWxlIGxlbmd0aCwgYnl0ZXMgKi8KKyAgdTMyIGZpbGVfc2l6ZTsJCQkvKiBmaWxlIGxlbmd0aCwgYnl0ZXMgKi8KICAgdGltZTMyX3QgcmVhZF9kYXRlOwkJCS8qIGF0aW1lICovCiAgIHRpbWUzMl90IGNyZWF0aW9uX2RhdGU7CQkJLyogY3RpbWUgKi8KLSAgdW5zaWduZWQgZWFfc2l6ZTsJCQkvKiB0b3RhbCBFQSBsZW5ndGgsIGJ5dGVzICovCi0gIHVuc2lnbmVkIGNoYXIgbm9fb2ZfYWNscyA6IDM7CQkvKiBudW1iZXIgb2YgQUNMJ3MgKi8KLSAgdW5zaWduZWQgY2hhciByZXNlcnZlciA6IDU7Ci0gIHVuc2lnbmVkIGNoYXIgaXg7CQkJLyogY29kZSBwYWdlIGluZGV4IChvZiBmaWxlbmFtZSksIHNlZQorICB1MzIgZWFfc2l6ZTsJCQkJLyogdG90YWwgRUEgbGVuZ3RoLCBieXRlcyAqLworICB1OCBub19vZl9hY2xzOwkJCS8qIG51bWJlciBvZiBBQ0wncyAobG93IDMgYml0cykgKi8KKyAgdTggaXg7CQkJCS8qIGNvZGUgcGFnZSBpbmRleCAob2YgZmlsZW5hbWUpLCBzZWUKIAkJCQkJICAgc3RydWN0IGNvZGVfcGFnZV9kYXRhICovCi0gIHVuc2lnbmVkIGNoYXIgbmFtZWxlbiwgbmFtZVsxXTsJLyogZmlsZSBuYW1lICovCisgIHU4IG5hbWVsZW4sIG5hbWVbMV07CQkJLyogZmlsZSBuYW1lICovCiAgIC8qIGRub2RlX3NlY25vIGRvd247CSAgYnRyZWUgZG93biBwb2ludGVyLCBpZiBwcmVzZW50LAogICAgICAJCQkgIGZvbGxvd3MgbmFtZSBvbiBuZXh0IHdvcmQgYm91bmRhcnksIG9yIG1heWJlIGl0CiAJCQkgIHByZWNlZGVzIG5leHQgZGlyZW50LCB3aGljaCBpcyBvbiBhIHdvcmQgYm91bmRhcnkuICovCkBAIC0zMTgsMzggKzM3NSw1MCBAQAogCiBzdHJ1Y3QgYnBsdXNfbGVhZl9ub2RlCiB7Ci0gIHVuc2lnbmVkIGZpbGVfc2Vjbm87CQkJLyogZmlyc3QgZmlsZSBzZWN0b3IgaW4gZXh0ZW50ICovCi0gIHVuc2lnbmVkIGxlbmd0aDsJCQkvKiBsZW5ndGgsIHNlY3RvcnMgKi8KKyAgdTMyIGZpbGVfc2Vjbm87CQkJLyogZmlyc3QgZmlsZSBzZWN0b3IgaW4gZXh0ZW50ICovCisgIHUzMiBsZW5ndGg7CQkJCS8qIGxlbmd0aCwgc2VjdG9ycyAqLwogICBzZWNubyBkaXNrX3NlY25vOwkJCS8qIGZpcnN0IGNvcnJlc3BvbmRpbmcgZGlzayBzZWN0b3IgKi8KIH07CiAKIHN0cnVjdCBicGx1c19pbnRlcm5hbF9ub2RlCiB7Ci0gIHVuc2lnbmVkIGZpbGVfc2Vjbm87CQkJLyogc3VidHJlZSBtYXBzIHNlY3RvcnMgPCB0aGlzICAqLworICB1MzIgZmlsZV9zZWNubzsJCQkvKiBzdWJ0cmVlIG1hcHMgc2VjdG9ycyA8IHRoaXMgICovCiAgIGFub2RlX3NlY25vIGRvd247CQkJLyogcG9pbnRlciB0byBzdWJ0cmVlICovCiB9OwogCiBzdHJ1Y3QgYnBsdXNfaGVhZGVyCiB7Ci0gIHVuc2lnbmVkIGhiZmY6IDE7CS8qIGhpZ2ggYml0IG9mIGZpcnN0IGZyZWUgZW50cnkgb2Zmc2V0ICovCi0gIHVuc2lnbmVkIGZsYWcxOiAxOwotICB1bnNpZ25lZCBmbGFnMjogMTsKLSAgdW5zaWduZWQgZmxhZzM6IDE7Ci0gIHVuc2lnbmVkIGZsYWc0OiAxOwotICB1bnNpZ25lZCBmbm9kZV9wYXJlbnQ6IDE7CQkvKiA/IHdlJ3JlIHBvaW50ZWQgdG8gYnkgYW4gZm5vZGUsCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGhiZmY6IDE7CQkJLyogaGlnaCBiaXQgb2YgZmlyc3QgZnJlZSBlbnRyeSBvZmZzZXQgKi8KKyAgdTggZmxhZzEyMzQ6IDQ7CisgIHU4IGZub2RlX3BhcmVudDogMTsJCQkvKiA/IHdlJ3JlIHBvaW50ZWQgdG8gYnkgYW4gZm5vZGUsCiAJCQkJCSAgIHRoZSBkYXRhIGJ0cmVlIG9yIHNvbWUgZWEgb3IgdGhlCiAJCQkJCSAgIG1haW4gZWEgYm9vdGFnZSBwb2ludGVyIGVhX3NlY25vICovCiAJCQkJCS8qIGFsc28gY2FuIGdldCBzZXQgaW4gZm5vZGVzLCB3aGljaAogCQkJCQkgICBtYXkgYmUgYSBjaGtkc2sgZ2xpdGNoIG9yIG1heSBtZWFuCiAJCQkJCSAgIHRoaXMgYml0IGlzIGlycmVsZXZhbnQgaW4gZm5vZGVzLAogCQkJCQkgICBvciB0aGlzIGludGVycHJldGF0aW9uIGlzIGFsbCB3ZXQgKi8KLSAgdW5zaWduZWQgYmluYXJ5X3NlYXJjaDogMTsJCS8qIHN1Z2dlc3QgYmluYXJ5IHNlYXJjaCAodW51c2VkKSAqLwotICB1bnNpZ25lZCBpbnRlcm5hbDogMTsJCQkvKiAxIC0+IChpbnRlcm5hbCkgdHJlZSBvZiBhbm9kZXMKKyAgdTggYmluYXJ5X3NlYXJjaDogMTsJCQkvKiBzdWdnZXN0IGJpbmFyeSBzZWFyY2ggKHVudXNlZCkgKi8KKyAgdTggaW50ZXJuYWw6IDE7CQkJLyogMSAtPiAoaW50ZXJuYWwpIHRyZWUgb2YgYW5vZGVzCiAJCQkJCSAgIDAgLT4gKGxlYWYpIGxpc3Qgb2YgZXh0ZW50cyAqLwotICB1bnNpZ25lZCBjaGFyIGZpbGxbM107Ci0gIHVuc2lnbmVkIGNoYXIgbl9mcmVlX25vZGVzOwkJLyogZnJlZSBub2RlcyBpbiBmb2xsb3dpbmcgYXJyYXkgKi8KLSAgdW5zaWduZWQgY2hhciBuX3VzZWRfbm9kZXM7CQkvKiB1c2VkIG5vZGVzIGluIGZvbGxvd2luZyBhcnJheSAqLwotICB1bnNpZ25lZCBzaG9ydCBmaXJzdF9mcmVlOwkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgaGVhZGVyIHRvCisjZWxzZQorICB1OCBpbnRlcm5hbDogMTsJCQkvKiAxIC0+IChpbnRlcm5hbCkgdHJlZSBvZiBhbm9kZXMKKwkJCQkJICAgMCAtPiAobGVhZikgbGlzdCBvZiBleHRlbnRzICovCisgIHU4IGJpbmFyeV9zZWFyY2g6IDE7CQkJLyogc3VnZ2VzdCBiaW5hcnkgc2VhcmNoICh1bnVzZWQpICovCisgIHU4IGZub2RlX3BhcmVudDogMTsJCQkvKiA/IHdlJ3JlIHBvaW50ZWQgdG8gYnkgYW4gZm5vZGUsCisJCQkJCSAgIHRoZSBkYXRhIGJ0cmVlIG9yIHNvbWUgZWEgb3IgdGhlCisJCQkJCSAgIG1haW4gZWEgYm9vdGFnZSBwb2ludGVyIGVhX3NlY25vICovCisJCQkJCS8qIGFsc28gY2FuIGdldCBzZXQgaW4gZm5vZGVzLCB3aGljaAorCQkJCQkgICBtYXkgYmUgYSBjaGtkc2sgZ2xpdGNoIG9yIG1heSBtZWFuCisJCQkJCSAgIHRoaXMgYml0IGlzIGlycmVsZXZhbnQgaW4gZm5vZGVzLAorCQkJCQkgICBvciB0aGlzIGludGVycHJldGF0aW9uIGlzIGFsbCB3ZXQgKi8KKyAgdTggZmxhZzEyMzQ6IDQ7CisgIHU4IGhiZmY6IDE7CQkJLyogaGlnaCBiaXQgb2YgZmlyc3QgZnJlZSBlbnRyeSBvZmZzZXQgKi8KKyNlbmRpZgorICB1OCBmaWxsWzNdOworICB1OCBuX2ZyZWVfbm9kZXM7CQkJLyogZnJlZSBub2RlcyBpbiBmb2xsb3dpbmcgYXJyYXkgKi8KKyAgdTggbl91c2VkX25vZGVzOwkJCS8qIHVzZWQgbm9kZXMgaW4gZm9sbG93aW5nIGFycmF5ICovCisgIHUxNiBmaXJzdF9mcmVlOwkJCS8qIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGhlYWRlciB0bwogCQkJCQkgICBmaXJzdCBmcmVlIG5vZGUgaW4gYXJyYXkgKi8KICAgdW5pb24gewogICAgIHN0cnVjdCBicGx1c19pbnRlcm5hbF9ub2RlIGludGVybmFsWzBdOyAvKiAoaW50ZXJuYWwpIDItd29yZCBlbnRyaWVzIGdpdmluZwpAQCAtMzY5LDM3ICs0MzgsMzggQEAKIAogc3RydWN0IGZub2RlCiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIGY3ZTQgMGFhZSAqLwotICB1bnNpZ25lZCB6ZXJvMVsyXTsJCQkvKiByZWFkIGhpc3RvcnkgKi8KLSAgdW5zaWduZWQgY2hhciBsZW4sIG5hbWVbMTVdOwkJLyogdHJ1ZSBsZW5ndGgsIHRydW5jYXRlZCBuYW1lICovCisgIHUzMiBtYWdpYzsJCQkJLyogZjdlNCAwYWFlICovCisgIHUzMiB6ZXJvMVsyXTsJCQkJLyogcmVhZCBoaXN0b3J5ICovCisgIHU4IGxlbiwgbmFtZVsxNV07CQkJLyogdHJ1ZSBsZW5ndGgsIHRydW5jYXRlZCBuYW1lICovCiAgIGZub2RlX3NlY25vIHVwOwkJCS8qIHBvaW50ZXIgdG8gZmlsZSdzIGRpcmVjdG9yeSBmbm9kZSAqLwotICAvKnVuc2lnbmVkIHplcm8yWzNdOyovCiAgIHNlY25vIGFjbF9zaXplX2w7CiAgIHNlY25vIGFjbF9zZWNubzsKLSAgdW5zaWduZWQgc2hvcnQgYWNsX3NpemVfczsKLSAgY2hhciBhY2xfYW5vZGU7Ci0gIGNoYXIgemVybzI7CQkJCS8qIGhpc3RvcnkgYml0IGNvdW50ICovCi0gIHVuc2lnbmVkIGVhX3NpemVfbDsJCQkvKiBsZW5ndGggb2YgZGlzay1yZXNpZGVudCBlYSdzICovCisgIHUxNiBhY2xfc2l6ZV9zOworICB1OCBhY2xfYW5vZGU7CisgIHU4IHplcm8yOwkJCQkvKiBoaXN0b3J5IGJpdCBjb3VudCAqLworICB1MzIgZWFfc2l6ZV9sOwkJCS8qIGxlbmd0aCBvZiBkaXNrLXJlc2lkZW50IGVhJ3MgKi8KICAgc2Vjbm8gZWFfc2Vjbm87CQkJLyogZmlyc3Qgc2VjdG9yIG9mIGRpc2stcmVzaWRlbnQgZWEncyovCi0gIHVuc2lnbmVkIHNob3J0IGVhX3NpemVfczsJCS8qIGxlbmd0aCBvZiBmbm9kZS1yZXNpZGVudCBlYSdzICovCisgIHUxNiBlYV9zaXplX3M7CQkJLyogbGVuZ3RoIG9mIGZub2RlLXJlc2lkZW50IGVhJ3MgKi8KIAotICB1bnNpZ25lZCBmbGFnMDogMTsKLSAgdW5zaWduZWQgZWFfYW5vZGU6IDE7CQkJLyogMSAtPiBlYV9zZWNubyBpcyBhbiBhbm9kZSAqLwotICB1bnNpZ25lZCBmbGFnMjogMTsKLSAgdW5zaWduZWQgZmxhZzM6IDE7Ci0gIHVuc2lnbmVkIGZsYWc0OiAxOwotICB1bnNpZ25lZCBmbGFnNTogMTsKLSAgdW5zaWduZWQgZmxhZzY6IDE7Ci0gIHVuc2lnbmVkIGZsYWc3OiAxOwotICB1bnNpZ25lZCBkaXJmbGFnOiAxOwkJCS8qIDEgLT4gZGlyZWN0b3J5LiAgZmlyc3QgJiBvbmx5IGV4dGVudAorI2lmZGVmIF9fTElUVExFX0VORElBTgorICB1OCBmbGFnMDogMTsKKyAgdTggZWFfYW5vZGU6IDE7CQkJLyogMSAtPiBlYV9zZWNubyBpcyBhbiBhbm9kZSAqLworICB1OCBmbGFnMjM0NTY3OiA2OworI2Vsc2UKKyAgdTggZmxhZzIzNDU2NzogNjsKKyAgdTggZWFfYW5vZGU6IDE7CQkJLyogMSAtPiBlYV9zZWNubyBpcyBhbiBhbm9kZSAqLworICB1OCBmbGFnMDogMTsKKyNlbmRpZgorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisgIHU4IGRpcmZsYWc6IDE7CQkJLyogMSAtPiBkaXJlY3RvcnkuICBmaXJzdCAmIG9ubHkgZXh0ZW50CiAJCQkJCSAgIHBvaW50cyB0byBkbm9kZS4gKi8KLSAgdW5zaWduZWQgZmxhZzk6IDE7Ci0gIHVuc2lnbmVkIGZsYWcxMDogMTsKLSAgdW5zaWduZWQgZmxhZzExOiAxOwotICB1bnNpZ25lZCBmbGFnMTI6IDE7Ci0gIHVuc2lnbmVkIGZsYWcxMzogMTsKLSAgdW5zaWduZWQgZmxhZzE0OiAxOwotICB1bnNpZ25lZCBmbGFnMTU6IDE7CisgIHU4IGZsYWc5MDEyMzQ1OiA3OworI2Vsc2UKKyAgdTggZmxhZzkwMTIzNDU6IDc7CisgIHU4IGRpcmZsYWc6IDE7CQkJLyogMSAtPiBkaXJlY3RvcnkuICBmaXJzdCAmIG9ubHkgZXh0ZW50CisJCQkJCSAgIHBvaW50cyB0byBkbm9kZS4gKi8KKyNlbmRpZgogCiAgIHN0cnVjdCBicGx1c19oZWFkZXIgYnRyZWU7CQkvKiBiKyB0cmVlLCA4IGV4dGVudHMgb3IgMTIgc3VidHJlZXMgKi8KICAgdW5pb24gewpAQCAtNDA3LDE3ICs0NzcsMTYgQEAKICAgICBzdHJ1Y3QgYnBsdXNfaW50ZXJuYWxfbm9kZSBpbnRlcm5hbFsxMl07CiAgIH0gdTsKIAotICB1bnNpZ25lZCBmaWxlX3NpemU7CQkJLyogZmlsZSBsZW5ndGgsIGJ5dGVzICovCi0gIHVuc2lnbmVkIG5fbmVlZGVhOwkJCS8qIG51bWJlciBvZiBFQSdzIHdpdGggTkVFREVBIHNldCAqLwotICBjaGFyIHVzZXJfaWRbMTZdOwkJCS8qIHVudXNlZCAqLwotICB1bnNpZ25lZCBzaG9ydCBlYV9vZmZzOwkJLyogb2Zmc2V0IGZyb20gc3RhcnQgb2YgZm5vZGUKKyAgdTMyIGZpbGVfc2l6ZTsJCQkvKiBmaWxlIGxlbmd0aCwgYnl0ZXMgKi8KKyAgdTMyIG5fbmVlZGVhOwkJCQkvKiBudW1iZXIgb2YgRUEncyB3aXRoIE5FRURFQSBzZXQgKi8KKyAgdTggdXNlcl9pZFsxNl07CQkJLyogdW51c2VkICovCisgIHUxNiBlYV9vZmZzOwkJCQkvKiBvZmZzZXQgZnJvbSBzdGFydCBvZiBmbm9kZQogCQkJCQkgICB0byBmaXJzdCBmbm9kZS1yZXNpZGVudCBlYSAqLwotICBjaGFyIGRhc2RfbGltaXRfdHJlc2hob2xkOwotICBjaGFyIGRhc2RfbGltaXRfZGVsdGE7Ci0gIHVuc2lnbmVkIGRhc2RfbGltaXQ7Ci0gIHVuc2lnbmVkIGRhc2RfdXNhZ2U7Ci0gIC8qdW5zaWduZWQgemVybzVbMl07Ki8KLSAgdW5zaWduZWQgY2hhciBlYVszMTZdOwkJLyogemVybyBvciBtb3JlIEVBJ3MsIHBhY2tlZCB0b2dldGhlcgorICB1OCBkYXNkX2xpbWl0X3RyZXNoaG9sZDsKKyAgdTggZGFzZF9saW1pdF9kZWx0YTsKKyAgdTMyIGRhc2RfbGltaXQ7CisgIHUzMiBkYXNkX3VzYWdlOworICB1OCBlYVszMTZdOwkJCQkvKiB6ZXJvIG9yIG1vcmUgRUEncywgcGFja2VkIHRvZ2V0aGVyCiAJCQkJCSAgIHdpdGggbm8gYWxpZ25tZW50IHBhZGRpbmcuCiAJCQkJCSAgIChEbyBub3QgdXNlIHRoaXMgbmFtZSwgZ2V0IGhlcmUKIAkJCQkJICAgdmlhIGZub2RlICsgZWFfb2Zmcy4gSSB0aGluay4pICovCkBAIC00MzAsNyArNDk5LDcgQEAKIAogc3RydWN0IGFub2RlCiB7Ci0gIHVuc2lnbmVkIG1hZ2ljOwkJCS8qIDM3ZTQgMGFhZSAqLworICB1MzIgbWFnaWM7CQkJCS8qIDM3ZTQgMGFhZSAqLwogICBhbm9kZV9zZWNubyBzZWxmOwkJCS8qIHBvaW50ZXIgdG8gdGhpcyBhbm9kZSAqLwogICBzZWNubyB1cDsJCQkJLyogcGFyZW50IGFub2RlIG9yIGZub2RlICovCiAKQEAgLTQ0MCw3ICs1MDksNyBAQAogICAgIHN0cnVjdCBicGx1c19pbnRlcm5hbF9ub2RlIGludGVybmFsWzYwXTsKICAgfSB1OwogCi0gIHVuc2lnbmVkIGZpbGxbM107CQkJLyogdW51c2VkICovCisgIHUzMiBmaWxsWzNdOwkJCQkvKiB1bnVzZWQgKi8KIH07CiAKIApAQCAtNDYxLDI1ICs1MzAsMzEgQEAKIAogc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZQogewotICB1bnNpZ25lZCBpbmRpcmVjdDogMTsJCQkvKiAxIC0+IHZhbHVlIGdpdmVzIHNlY3RvciBudW1iZXIKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KKyAgdTggaW5kaXJlY3Q6IDE7CQkJLyogMSAtPiB2YWx1ZSBnaXZlcyBzZWN0b3IgbnVtYmVyCiAJCQkJCSAgIHdoZXJlIHJlYWwgdmFsdWUgc3RhcnRzICovCi0gIHVuc2lnbmVkIGFub2RlOiAxOwkJCS8qIDEgLT4gc2VjdG9yIGlzIGFuIGFub2RlCisgIHU4IGFub2RlOiAxOwkJCQkvKiAxIC0+IHNlY3RvciBpcyBhbiBhbm9kZQogCQkJCQkgICB0aGF0IHBvaW50cyB0byBmcmFnbWVudGVkIHZhbHVlICovCi0gIHVuc2lnbmVkIGZsYWcyOiAxOwotICB1bnNpZ25lZCBmbGFnMzogMTsKLSAgdW5zaWduZWQgZmxhZzQ6IDE7Ci0gIHVuc2lnbmVkIGZsYWc1OiAxOwotICB1bnNpZ25lZCBmbGFnNjogMTsKLSAgdW5zaWduZWQgbmVlZGVhOiAxOwkJCS8qIHJlcXVpcmVkIGVhICovCi0gIHVuc2lnbmVkIGNoYXIgbmFtZWxlbjsJCS8qIGxlbmd0aCBvZiBuYW1lLCBieXRlcyAqLwotICB1bnNpZ25lZCBzaG9ydCB2YWx1ZWxlbjsJCS8qIGxlbmd0aCBvZiB2YWx1ZSwgYnl0ZXMgKi8KLSAgdW5zaWduZWQgY2hhciBuYW1lWzBdOworICB1OCBmbGFnMjM0NTY6IDU7CisgIHU4IG5lZWRlYTogMTsJCQkJLyogcmVxdWlyZWQgZWEgKi8KKyNlbHNlCisgIHU4IG5lZWRlYTogMTsJCQkJLyogcmVxdWlyZWQgZWEgKi8KKyAgdTggZmxhZzIzNDU2OiA1OworICB1OCBhbm9kZTogMTsJCQkJLyogMSAtPiBzZWN0b3IgaXMgYW4gYW5vZGUKKwkJCQkJICAgdGhhdCBwb2ludHMgdG8gZnJhZ21lbnRlZCB2YWx1ZSAqLworICB1OCBpbmRpcmVjdDogMTsJCQkvKiAxIC0+IHZhbHVlIGdpdmVzIHNlY3RvciBudW1iZXIKKwkJCQkJICAgd2hlcmUgcmVhbCB2YWx1ZSBzdGFydHMgKi8KKyNlbmRpZgorICB1OCBuYW1lbGVuOwkJCQkvKiBsZW5ndGggb2YgbmFtZSwgYnl0ZXMgKi8KKyAgdTggdmFsdWVsZW5fbG87CQkJLyogbGVuZ3RoIG9mIHZhbHVlLCBieXRlcyAqLworICB1OCB2YWx1ZWxlbl9oaTsJCQkvKiBsZW5ndGggb2YgdmFsdWUsIGJ5dGVzICovCisgIHU4IG5hbWVbMF07CiAgIC8qCi0gICAgdW5zaWduZWQgY2hhciBuYW1lW25hbWVsZW5dOwlhc2NpaSBhdHRyaWIgbmFtZQotICAgIHVuc2lnbmVkIGNoYXIgbnVsOwkJCXRlcm1pbmF0aW5nICdcMCcsIG5vdCBjb3VudGVkCi0gICAgdW5zaWduZWQgY2hhciB2YWx1ZVt2YWx1ZWxlbl07CXZhbHVlLCBhcmJpdHJhcnkKKyAgICB1OCBuYW1lW25hbWVsZW5dOwkJCWFzY2lpIGF0dHJpYiBuYW1lCisgICAgdTggbnVsOwkJCQl0ZXJtaW5hdGluZyAnXDAnLCBub3QgY291bnRlZAorICAgIHU4IHZhbHVlW3ZhbHVlbGVuXTsJCQl2YWx1ZSwgYXJiaXRyYXJ5CiAgICAgICBpZiB0aGlzLmluZGlyZWN0LCB2YWx1ZWxlbiBpcyA4IGFuZCB0aGUgdmFsdWUgaXMKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoOwkJcmVhbCBsZW5ndGggb2YgdmFsdWUsIGJ5dGVzCisgICAgICAgIHUzMiBsZW5ndGg7CQkJcmVhbCBsZW5ndGggb2YgdmFsdWUsIGJ5dGVzCiAgICAgICAgIHNlY25vIHNlY25vOwkJCXNlY3RvciBhZGRyZXNzIHdoZXJlIGl0IHN0YXJ0cwogICAgICAgaWYgdGhpcy5hbm9kZSwgdGhlIGFib3ZlIHNlY3RvciBudW1iZXIgaXMgdGhlIHJvb3Qgb2YgYW4gYW5vZGUgdHJlZQogICAgICAgICB3aGljaCBwb2ludHMgdG8gdGhlIHZhbHVlLgpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9ocGZzX2ZuLmggYi9mcy9ocGZzL2hwZnNfZm4uaAppbmRleCBjMTVhZGJjLi5kZDU1MmY4IDEwMDY0NAotLS0gYS9mcy9ocGZzL2hwZnNfZm4uaAorKysgYi9mcy9ocGZzL2hwZnNfZm4uaApAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlICJocGZzLmgiCiAKQEAgLTUxLDE4ICs1MiwxNiBAQAogCXVuc2lnbmVkIGlfZGlza19zZWM7CS8qIChmaWxlcykgbWluaW1hbGlzdCBjYWNoZSBvZiBhbGxvYyBpbmZvICovCiAJdW5zaWduZWQgaV9uX3NlY3M7CS8qIChmaWxlcykgbWluaW1hbGlzdCBjYWNoZSBvZiBhbGxvYyBpbmZvICovCiAJdW5zaWduZWQgaV9lYV9zaXplOwkvKiBzaXplIG9mIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKi8KLQl1bnNpZ25lZCBpX2NvbnYgOiAyOwkvKiAoZmlsZXMpIGNybGYtPm5ld2xpbmUgaGFja2VyeSAqLwogCXVuc2lnbmVkIGlfZWFfbW9kZSA6IDE7CS8qIGZpbGUncyBwZXJtaXNzaW9uIGlzIHN0b3JlZCBpbiBlYSAqLwogCXVuc2lnbmVkIGlfZWFfdWlkIDogMTsJLyogZmlsZSdzIHVpZCBpcyBzdG9yZWQgaW4gZWEgKi8KIAl1bnNpZ25lZCBpX2VhX2dpZCA6IDE7CS8qIGZpbGUncyBnaWQgaXMgc3RvcmVkIGluIGVhICovCiAJdW5zaWduZWQgaV9kaXJ0eSA6IDE7Ci0Jc3RydWN0IG11dGV4IGlfbXV0ZXg7Ci0Jc3RydWN0IG11dGV4IGlfcGFyZW50X211dGV4OwogCWxvZmZfdCAqKmlfcmRkaXJfb2ZmOwogCXN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7CiB9OwogCiBzdHJ1Y3QgaHBmc19zYl9pbmZvIHsKKwlzdHJ1Y3QgbXV0ZXggaHBmc19tdXRleDsJLyogZ2xvYmFsIGhwZnMgbG9jayAqLwogCWlub190IHNiX3Jvb3Q7CQkJLyogaW5vZGUgbnVtYmVyIG9mIHJvb3QgZGlyICovCiAJdW5zaWduZWQgc2JfZnNfc2l6ZTsJCS8qIGZpbGUgc3lzdGVtIHNpemUsIHNlY3RvcnMgKi8KIAl1bnNpZ25lZCBzYl9iaXRtYXBzOwkJLyogc2VjdG9yIG51bWJlciBvZiBiaXRtYXAgbGlzdCAqLwpAQCAtNzQsNyArNzMsNiBAQAogCXVpZF90IHNiX3VpZDsJCQkvKiB1aWQgZnJvbSBtb3VudCBvcHRpb25zICovCiAJZ2lkX3Qgc2JfZ2lkOwkJCS8qIGdpZCBmcm9tIG1vdW50IG9wdGlvbnMgKi8KIAl1bW9kZV90IHNiX21vZGU7CQkvKiBtb2RlIGZyb20gbW91bnQgb3B0aW9ucyAqLwotCXVuc2lnbmVkIHNiX2NvbnYgOiAyOwkJLyogY3JsZi0+bmV3bGluZSBoYWNrZXJ5ICovCiAJdW5zaWduZWQgc2JfZWFzIDogMjsJCS8qIGVhczogMC1pZ25vcmUsIDEtcm8sIDItcncgKi8KIAl1bnNpZ25lZCBzYl9lcnIgOiAyOwkJLyogb24gZXJyczogMC1jb250LCAxLXJvLCAyLXBhbmljICovCiAJdW5zaWduZWQgc2JfY2hrIDogMjsJCS8qIGNoZWNrczogMC1ubywgMS1ub3JtYWwsIDItc3RyaWN0ICovCkBAIC04NywyMCArODUsOSBAQAogCXVuc2lnbmVkICpzYl9ibXBfZGlyOwkJLyogbWFpbiBiaXRtYXAgZGlyZWN0b3J5ICovCiAJdW5zaWduZWQgc2JfY19iaXRtYXA7CQkvKiBjdXJyZW50IGJpdG1hcCAqLwogCXVuc2lnbmVkIHNiX21heF9md2RfYWxsb2M7CS8qIG1heCBmb3J3YWQgYWxsb2NhdGlvbiAqLwotCXN0cnVjdCBtdXRleCBocGZzX2NyZWF0aW9uX2RlOwkvKiB3aGVuIGNyZWF0aW5nIGRpcmVudHMsIG5vYm9keSBlbHNlCi0JCQkJCSAgIGNhbiBhbGxvYyBibG9ja3MgKi8KLQkvKnVuc2lnbmVkIHNiX21vdW50aW5nIDogMTsqLwogCWludCBzYl90aW1lc2hpZnQ7CiB9OwogCi0vKgotICogY29udj0gb3B0aW9ucwotICovCi0KLSNkZWZpbmUgQ09OVl9CSU5BUlkgMAkJCS8qIG5vIGNvbnZlcnNpb24gKi8KLSNkZWZpbmUgQ09OVl9URVhUIDEJCQkvKiBjcmxmLT5uZXdsaW5lICovCi0jZGVmaW5lIENPTlZfQVVUTyAyCQkJLyogZGVjaWRlIGJhc2VkIG9uIGZpbGUgY29udGVudHMgKi8KLQogLyogRm91ciA1MTItYnl0ZSBidWZmZXJzIGFuZCB0aGUgMmsgYmxvY2sgb2J0YWluZWQgYnkgY29uY2F0ZW5hdGluZyB0aGVtICovCiAKIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHsKQEAgLTExMyw3ICsxMDAsNyBAQAogc3RhdGljIGlubGluZSBkbm9kZV9zZWNubyBkZV9kb3duX3BvaW50ZXIgKHN0cnVjdCBocGZzX2RpcmVudCAqZGUpCiB7CiAgIENIS0NPTkQoZGUtPmRvd24sKCJIUEZTOiBkZV9kb3duX3BvaW50ZXI6ICFkZS0+ZG93blxuIikpOwotICByZXR1cm4gKihkbm9kZV9zZWNubyAqKSAoKHZvaWQgKikgZGUgKyBkZS0+bGVuZ3RoIC0gNCk7CisgIHJldHVybiBsZTMyX3RvX2NwdSgqKGRub2RlX3NlY25vICopICgodm9pZCAqKSBkZSArIGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpIC0gNCkpOwogfQogCiAvKiBUaGUgZmlyc3QgZGlyIGVudHJ5IGluIGEgZG5vZGUgKi8KQEAgLTEyNyw0MSArMTE0LDQ2IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhwZnNfZGlyZW50ICpkbm9kZV9lbmRfZGUgKHN0cnVjdCBkbm9kZSAqZG5vZGUpCiB7Ci0gIENIS0NPTkQoZG5vZGUtPmZpcnN0X2ZyZWU+PTB4MTQgJiYgZG5vZGUtPmZpcnN0X2ZyZWU8PTB4YTAwLCgiSFBGUzogZG5vZGVfZW5kX2RlOiBkbm9kZS0+Zmlyc3RfZnJlZSA9ICVkXG4iLChpbnQpZG5vZGUtPmZpcnN0X2ZyZWUpKTsKLSAgcmV0dXJuICh2b2lkICopIGRub2RlICsgZG5vZGUtPmZpcnN0X2ZyZWU7CisgIENIS0NPTkQobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpPj0weDE0ICYmIGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKTw9MHhhMDAsKCJIUEZTOiBkbm9kZV9lbmRfZGU6IGRub2RlLT5maXJzdF9mcmVlID0gJXhcbiIsKHVuc2lnbmVkKWxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSkpOworICByZXR1cm4gKHZvaWQgKikgZG5vZGUgKyBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSk7CiB9CiAKIC8qIFRoZSBkaXIgZW50cnkgYWZ0ZXIgZGlyIGVudHJ5IGRlICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhwZnNfZGlyZW50ICpkZV9uZXh0X2RlIChzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlKQogewotICBDSEtDT05EKGRlLT5sZW5ndGg+PTB4MjAgJiYgZGUtPmxlbmd0aDwweDgwMCwoIkhQRlM6IGRlX25leHRfZGU6IGRlLT5sZW5ndGggPSAlZFxuIiwoaW50KWRlLT5sZW5ndGgpKTsKLSAgcmV0dXJuICh2b2lkICopIGRlICsgZGUtPmxlbmd0aDsKKyAgQ0hLQ09ORChsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKT49MHgyMCAmJiBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKTwweDgwMCwoIkhQRlM6IGRlX25leHRfZGU6IGRlLT5sZW5ndGggPSAleFxuIiwodW5zaWduZWQpbGUxNl90b19jcHUoZGUtPmxlbmd0aCkpKTsKKyAgcmV0dXJuICh2b2lkICopIGRlICsgbGUxNl90b19jcHUoZGUtPmxlbmd0aCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZm5vZGVfZWEoc3RydWN0IGZub2RlICpmbm9kZSkKIHsKLQlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKilmbm9kZSArIGZub2RlLT5lYV9vZmZzICsgZm5vZGUtPmFjbF9zaXplX3MpOworCXJldHVybiAoc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqKSgoY2hhciAqKWZub2RlICsgbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpICsgbGUxNl90b19jcHUoZm5vZGUtPmFjbF9zaXplX3MpKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICpmbm9kZV9lbmRfZWEoc3RydWN0IGZub2RlICpmbm9kZSkKIHsKLQlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKilmbm9kZSArIGZub2RlLT5lYV9vZmZzICsgZm5vZGUtPmFjbF9zaXplX3MgKyBmbm9kZS0+ZWFfc2l6ZV9zKTsKKwlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKilmbm9kZSArIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSArIGxlMTZfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9zKSArIGxlMTZfdG9fY3B1KGZub2RlLT5lYV9zaXplX3MpKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGVhX3ZhbHVlbGVuKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKmVhKQoreworCXJldHVybiBlYS0+dmFsdWVsZW5fbG8gKyAyNTYgKiBlYS0+dmFsdWVsZW5faGk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqbmV4dF9lYShzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYSkKIHsKLQlyZXR1cm4gKHN0cnVjdCBleHRlbmRlZF9hdHRyaWJ1dGUgKikoKGNoYXIgKillYSArIDUgKyBlYS0+bmFtZWxlbiArIGVhLT52YWx1ZWxlbik7CisJcmV0dXJuIChzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICopKChjaGFyICopZWEgKyA1ICsgZWEtPm5hbWVsZW4gKyBlYV92YWx1ZWxlbihlYSkpOwogfQogCiBzdGF0aWMgaW5saW5lIHNlY25vIGVhX3NlYyhzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYSkKIHsKLQlyZXR1cm4gKihzZWNubyAqKSgoY2hhciAqKWVhICsgOSArIGVhLT5uYW1lbGVuKTsKKwlyZXR1cm4gbGUzMl90b19jcHUoZ2V0X3VuYWxpZ25lZCgoc2Vjbm8gKikoKGNoYXIgKillYSArIDkgKyBlYS0+bmFtZWxlbikpKTsKIH0KIAogc3RhdGljIGlubGluZSBzZWNubyBlYV9sZW4oc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWEpCiB7Ci0JcmV0dXJuICooc2Vjbm8gKikoKGNoYXIgKillYSArIDUgKyBlYS0+bmFtZWxlbik7CisJcmV0dXJuIGxlMzJfdG9fY3B1KGdldF91bmFsaWduZWQoKHNlY25vICopKChjaGFyICopZWEgKyA1ICsgZWEtPm5hbWVsZW4pKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqZWFfZGF0YShzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYSkKQEAgLTE4NiwxMyArMTc4LDEzIEBACiAJZHN0LT5ub3RfOHgzID0gbjsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCB0c3RiaXRzKHVuc2lnbmVkICpibXAsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIG4pCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHRzdGJpdHModTMyICpibXAsIHVuc2lnbmVkIGIsIHVuc2lnbmVkIG4pCiB7CiAJaW50IGk7CiAJaWYgKChiID49IDB4NDAwMCkgfHwgKGIgKyBuIC0gMSA+PSAweDQwMDApKSByZXR1cm4gbjsKLQlpZiAoISgoYm1wWyhiICYgMHgzZmZmKSA+PiA1XSA+PiAoYiAmIDB4MWYpKSAmIDEpKSByZXR1cm4gMTsKKwlpZiAoISgobGUzMl90b19jcHUoYm1wWyhiICYgMHgzZmZmKSA+PiA1XSkgPj4gKGIgJiAweDFmKSkgJiAxKSkgcmV0dXJuIDE7CiAJZm9yIChpID0gMTsgaSA8IG47IGkrKykKLQkJaWYgKC8qYitpIDwgMHg0MDAwICYmKi8gISgoYm1wWygoYitpKSAmIDB4M2ZmZikgPj4gNV0gPj4gKChiK2kpICYgMHgxZikpICYgMSkpCisJCWlmICghKChsZTMyX3RvX2NwdShibXBbKChiK2kpICYgMHgzZmZmKSA+PiA1XSkgPj4gKChiK2kpICYgMHgxZikpICYgMSkpCiAJCQlyZXR1cm4gaSArIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMDAsMTIgKzE5MiwxMiBAQAogLyogYWxsb2MuYyAqLwogCiBpbnQgaHBmc19jaGtfc2VjdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGludCwgY2hhciAqKTsKLXNlY25vIGhwZnNfYWxsb2Nfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgdW5zaWduZWQsIGludCwgaW50KTsKK3NlY25vIGhwZnNfYWxsb2Nfc2VjdG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgdW5zaWduZWQsIGludCk7CiBpbnQgaHBmc19hbGxvY19pZl9wb3NzaWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8pOwogdm9pZCBocGZzX2ZyZWVfc2VjdG9ycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIHVuc2lnbmVkKTsKIGludCBocGZzX2NoZWNrX2ZyZWVfZG5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwogdm9pZCBocGZzX2ZyZWVfZG5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vKTsKLXN0cnVjdCBkbm9kZSAqaHBmc19hbGxvY19kbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGRub2RlX3NlY25vICosIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICosIGludCk7CitzdHJ1Y3QgZG5vZGUgKmhwZnNfYWxsb2NfZG5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBkbm9kZV9zZWNubyAqLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqKTsKIHN0cnVjdCBmbm9kZSAqaHBmc19hbGxvY19mbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGZub2RlX3NlY25vICosIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CiBzdHJ1Y3QgYW5vZGUgKmhwZnNfYWxsb2NfYW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBhbm9kZV9zZWNubyAqLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOwogCkBAIC0yMjIsOCArMjE0LDYgQEAKIAogLyogYnVmZmVyLmMgKi8KIAotdm9pZCBocGZzX2xvY2tfY3JlYXRpb24oc3RydWN0IHN1cGVyX2Jsb2NrICopOwotdm9pZCBocGZzX3VubG9ja19jcmVhdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CiB2b2lkICpocGZzX21hcF9zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiosIGludCk7CiB2b2lkICpocGZzX2dldF9zZWN0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiopOwogdm9pZCAqaHBmc19tYXBfNHNlY3RvcnMoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqLCBpbnQpOwpAQCAtMjQ3LDcgKzIzNyw3IEBACiBzdHJ1Y3QgaHBmc19kaXJlbnQgKmhwZnNfYWRkX2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZG5vZGUgKiwKIAkJCQljb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLCBzZWNubyk7CiBpbnQgaHBmc19hZGRfZGlyZW50KHN0cnVjdCBpbm9kZSAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLAotCQkgICAgc3RydWN0IGhwZnNfZGlyZW50ICosIGludCk7CisJCSAgICBzdHJ1Y3QgaHBmc19kaXJlbnQgKik7CiBpbnQgaHBmc19yZW1vdmVfZGlyZW50KHN0cnVjdCBpbm9kZSAqLCBkbm9kZV9zZWNubywgc3RydWN0IGhwZnNfZGlyZW50ICosIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICosIGludCk7CiB2b2lkIGhwZnNfY291bnRfZG5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBkbm9kZV9zZWNubywgaW50ICosIGludCAqLCBpbnQgKik7CiBkbm9kZV9zZWNubyBocGZzX2RlX2FzX2Rvd25fYXNfcG9zc2libGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGRub2RlX3NlY25vIGRubyk7CkBAIC0zMDMsNyArMjkzLDYgQEAKIAkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIGludCk7CiBpbnQgaHBmc19pc19uYW1lX2xvbmcoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCk7CiB2b2lkIGhwZnNfYWRqdXN0X2xlbmd0aChjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkICopOwotdm9pZCBocGZzX2RlY2lkZV9jb252KHN0cnVjdCBpbm9kZSAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkKTsKIAogLyogbmFtZWkuYyAqLwogCkBAIC0zNDYsMjEgKzMzNSwyNiBAQAogLyoKICAqIExvY2tpbmc6CiAgKgotICogaHBmc19sb2NrKCkgaXMgYSBsZWZ0b3ZlciBmcm9tIHRoZSBiaWcga2VybmVsIGxvY2suCi0gKiBSaWdodCBub3csIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZW1wdHkgYW5kIG9ubHkgbGVmdAotICogZm9yIGRvY3VtZW50YXRpb24gcHVycG9zZXMuIFRoZSBmaWxlIHN5c3RlbSBubyBsb25nZXIKLSAqIHdvcmtzIG9uIFNNUCBzeXN0ZW1zLCBzbyB0aGUgbG9jayBpcyBub3QgbmVlZGVkCi0gKiBhbnkgbW9yZS4KKyAqIGhwZnNfbG9jaygpIGxvY2tzIHRoZSB3aG9sZSBmaWxlc3lzdGVtLiBJdCBtdXN0IGJlIHRha2VuCisgKiBvbiBhbnkgbWV0aG9kIGNhbGxlZCBieSB0aGUgVkZTLgogICoKLSAqIElmIHNvbWVvbmUgaXMgaW50ZXJlc3RlZCBpbiBtYWtpbmcgaXQgd29yayBhZ2FpbiwgdGhpcwotICogd291bGQgYmUgdGhlIHBsYWNlIHRvIHN0YXJ0IGJ5IGFkZGluZyBhIHBlci1zdXBlcmJsb2NrCi0gKiBtdXRleCBhbmQgZml4aW5nIGFsbCB0aGUgYnVncyBhbmQgcGVyZm9ybWFuY2UgaXNzdWVzCi0gKiBjYXVzZWQgYnkgdGhhdC4KKyAqIFdlIGRvbid0IGRvIGFueSBwZXItZmlsZSBsb2NraW5nIGFueW1vcmUsIGl0IGlzIGhhcmQgdG8KKyAqIHJldmlldyBhbmQgSFBGUyBpcyBub3QgcGVyZm9ybWFuY2Utc2Vuc2l0aXZlIGFueXdheS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkIGhwZnNfbG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiB7CisJc3RydWN0IGhwZnNfc2JfaW5mbyAqc2JpID0gaHBmc19zYihzKTsKKwltdXRleF9sb2NrKCZzYmktPmhwZnNfbXV0ZXgpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaHBmc191bmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogeworCXN0cnVjdCBocGZzX3NiX2luZm8gKnNiaSA9IGhwZnNfc2Iocyk7CisJbXV0ZXhfdW5sb2NrKCZzYmktPmhwZnNfbXV0ZXgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHBmc19sb2NrX2Fzc2VydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCit7CisJc3RydWN0IGhwZnNfc2JfaW5mbyAqc2JpID0gaHBmc19zYihzKTsKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnNiaS0+aHBmc19tdXRleCkpOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9pbm9kZS5jIGIvZnMvaHBmcy9pbm9kZS5jCmluZGV4IDg3ZjFmNzguLjMzOGNkODMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvaW5vZGUuYworKysgYi9mcy9ocGZzL2lub2RlLmMKQEAgLTE3LDcgKzE3LDYgQEAKIAlpLT5pX3VpZCA9IGhwZnNfc2Ioc2IpLT5zYl91aWQ7CiAJaS0+aV9naWQgPSBocGZzX3NiKHNiKS0+c2JfZ2lkOwogCWktPmlfbW9kZSA9IGhwZnNfc2Ioc2IpLT5zYl9tb2RlOwotCWhwZnNfaW5vZGUtPmlfY29udiA9IGhwZnNfc2Ioc2IpLT5zYl9jb252OwogCWktPmlfc2l6ZSA9IC0xOwogCWktPmlfYmxvY2tzID0gLTE7CiAJCkBAIC0xMTYsOCArMTE1LDggQEAKIAkJaS0+aV9tb2RlIHw9IFNfSUZESVI7CiAJCWktPmlfb3AgPSAmaHBmc19kaXJfaW9wczsKIAkJaS0+aV9mb3AgPSAmaHBmc19kaXJfb3BzOwotCQlocGZzX2lub2RlLT5pX3BhcmVudF9kaXIgPSBmbm9kZS0+dXA7Ci0JCWhwZnNfaW5vZGUtPmlfZG5vID0gZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubzsKKwkJaHBmc19pbm9kZS0+aV9wYXJlbnRfZGlyID0gbGUzMl90b19jcHUoZm5vZGUtPnVwKTsKKwkJaHBmc19pbm9kZS0+aV9kbm8gPSBsZTMyX3RvX2NwdShmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vKTsKIAkJaWYgKGhwZnNfc2Ioc2IpLT5zYl9jaGsgPj0gMikgewogCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDA7CiAJCQlpZiAoaHBmc19tYXBfZm5vZGUoc2IsIGhwZnNfaW5vZGUtPmlfcGFyZW50X2RpciwgJmJoMCkpIGJyZWxzZShiaDApOwpAQCAtMTMzLDcgKzEzMiw3IEBACiAJCWktPmlfb3AgPSAmaHBmc19maWxlX2lvcHM7CiAJCWktPmlfZm9wID0gJmhwZnNfZmlsZV9vcHM7CiAJCWktPmlfbmxpbmsgPSAxOwotCQlpLT5pX3NpemUgPSBmbm9kZS0+ZmlsZV9zaXplOworCQlpLT5pX3NpemUgPSBsZTMyX3RvX2NwdShmbm9kZS0+ZmlsZV9zaXplKTsKIAkJaS0+aV9ibG9ja3MgPSAoKGktPmlfc2l6ZSArIDUxMSkgPj4gOSkgKyAxOwogCQlpLT5pX2RhdGEuYV9vcHMgPSAmaHBmc19hb3BzOwogCQlocGZzX2koaSktPm1tdV9wcml2YXRlID0gaS0+aV9zaXplOwpAQCAtMTQ0LDcgKzE0Myw3IEBACiBzdGF0aWMgdm9pZCBocGZzX3dyaXRlX2lub2RlX2VhKHN0cnVjdCBpbm9kZSAqaSwgc3RydWN0IGZub2RlICpmbm9kZSkKIHsKIAlzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvICpocGZzX2lub2RlID0gaHBmc19pKGkpOwotCS8qaWYgKGZub2RlLT5hY2xfc2l6ZV9sIHx8IGZub2RlLT5hY2xfc2l6ZV9zKSB7CisJLyppZiAobGUzMl90b19jcHUoZm5vZGUtPmFjbF9zaXplX2wpIHx8IGxlMTZfdG9fY3B1KGZub2RlLT5hY2xfc2l6ZV9zKSkgewogCQkgICBTb21lIHVua25vd24gc3RydWN0dXJlcyBsaWtlIEFDTCBtYXkgYmUgaW4gZm5vZGUsCiAJCSAgIHdlJ2QgYmV0dGVyIG5vdCBvdmVyd3JpdGUgdGhlbQogCQlocGZzX2Vycm9yKGktPmlfc2IsICJmbm9kZSAlMDh4IGhhcyBzb21lIHVua25vd24gSFBGUzM4NiBzdHVjdHVyZXMiLCBpLT5pX2lubyk7CkBAIC0xODcsOSArMTg2LDcgQEAKIAkJa2ZyZWUoaHBmc19pbm9kZS0+aV9yZGRpcl9vZmYpOwogCQlocGZzX2lub2RlLT5pX3JkZGlyX29mZiA9IE5VTEw7CiAJfQotCW11dGV4X2xvY2soJmhwZnNfaW5vZGUtPmlfcGFyZW50X211dGV4KTsKIAlpZiAoIWktPmlfbmxpbmspIHsKLQkJbXV0ZXhfdW5sb2NrKCZocGZzX2lub2RlLT5pX3BhcmVudF9tdXRleCk7CiAJCXJldHVybjsKIAl9CiAJcGFyZW50ID0gaWdldF9sb2NrZWQoaS0+aV9zYiwgaHBmc19pbm9kZS0+aV9wYXJlbnRfZGlyKTsKQEAgLTIwMCwxNCArMTk3LDkgQEAKIAkJCWhwZnNfcmVhZF9pbm9kZShwYXJlbnQpOwogCQkJdW5sb2NrX25ld19pbm9kZShwYXJlbnQpOwogCQl9Ci0JCW11dGV4X2xvY2soJmhwZnNfaW5vZGUtPmlfbXV0ZXgpOwogCQlocGZzX3dyaXRlX2lub2RlX25vbG9jayhpKTsKLQkJbXV0ZXhfdW5sb2NrKCZocGZzX2lub2RlLT5pX211dGV4KTsKIAkJaXB1dChwYXJlbnQpOwotCX0gZWxzZSB7Ci0JCW1hcmtfaW5vZGVfZGlydHkoaSk7CiAJfQotCW11dGV4X3VubG9jaygmaHBmc19pbm9kZS0+aV9wYXJlbnRfbXV0ZXgpOwogfQogCiB2b2lkIGhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaSkKQEAgLTIyNiwzMCArMjE4LDMwIEBACiAJCX0KIAl9IGVsc2UgZGUgPSBOVUxMOwogCWlmIChTX0lTUkVHKGktPmlfbW9kZSkpIHsKLQkJZm5vZGUtPmZpbGVfc2l6ZSA9IGktPmlfc2l6ZTsKLQkJaWYgKGRlKSBkZS0+ZmlsZV9zaXplID0gaS0+aV9zaXplOworCQlmbm9kZS0+ZmlsZV9zaXplID0gY3B1X3RvX2xlMzIoaS0+aV9zaXplKTsKKwkJaWYgKGRlKSBkZS0+ZmlsZV9zaXplID0gY3B1X3RvX2xlMzIoaS0+aV9zaXplKTsKIAl9IGVsc2UgaWYgKFNfSVNESVIoaS0+aV9tb2RlKSkgewotCQlmbm9kZS0+ZmlsZV9zaXplID0gMDsKLQkJaWYgKGRlKSBkZS0+ZmlsZV9zaXplID0gMDsKKwkJZm5vZGUtPmZpbGVfc2l6ZSA9IGNwdV90b19sZTMyKDApOworCQlpZiAoZGUpIGRlLT5maWxlX3NpemUgPSBjcHVfdG9fbGUzMigwKTsKIAl9CiAJaHBmc193cml0ZV9pbm9kZV9lYShpLCBmbm9kZSk7CiAJaWYgKGRlKSB7Ci0JCWRlLT53cml0ZV9kYXRlID0gZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfbXRpbWUudHZfc2VjKTsKLQkJZGUtPnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2F0aW1lLnR2X3NlYyk7Ci0JCWRlLT5jcmVhdGlvbl9kYXRlID0gZ210X3RvX2xvY2FsKGktPmlfc2IsIGktPmlfY3RpbWUudHZfc2VjKTsKKwkJZGUtPndyaXRlX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9tdGltZS50dl9zZWMpKTsKKwkJZGUtPnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2F0aW1lLnR2X3NlYykpOworCQlkZS0+Y3JlYXRpb25fZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2N0aW1lLnR2X3NlYykpOwogCQlkZS0+cmVhZF9vbmx5ID0gIShpLT5pX21vZGUgJiAwMjIyKTsKLQkJZGUtPmVhX3NpemUgPSBocGZzX2lub2RlLT5pX2VhX3NpemU7CisJCWRlLT5lYV9zaXplID0gY3B1X3RvX2xlMzIoaHBmc19pbm9kZS0+aV9lYV9zaXplKTsKIAkJaHBmc19tYXJrXzRidWZmZXJzX2RpcnR5KCZxYmgpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJfQogCWlmIChTX0lTRElSKGktPmlfbW9kZSkpIHsKIAkJaWYgKChkZSA9IG1hcF9kaXJlbnQoaSwgaHBmc19pbm9kZS0+aV9kbm8sICJcMDAxXDAwMSIsIDIsIE5VTEwsICZxYmgpKSkgewotCQkJZGUtPndyaXRlX2RhdGUgPSBnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9tdGltZS50dl9zZWMpOwotCQkJZGUtPnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2F0aW1lLnR2X3NlYyk7Ci0JCQlkZS0+Y3JlYXRpb25fZGF0ZSA9IGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2N0aW1lLnR2X3NlYyk7CisJCQlkZS0+d3JpdGVfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX210aW1lLnR2X3NlYykpOworCQkJZGUtPnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChpLT5pX3NiLCBpLT5pX2F0aW1lLnR2X3NlYykpOworCQkJZGUtPmNyZWF0aW9uX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoaS0+aV9zYiwgaS0+aV9jdGltZS50dl9zZWMpKTsKIAkJCWRlLT5yZWFkX29ubHkgPSAhKGktPmlfbW9kZSAmIDAyMjIpOwotCQkJZGUtPmVhX3NpemUgPSAvKmhwZnNfaW5vZGUtPmlfZWFfc2l6ZSovMDsKLQkJCWRlLT5maWxlX3NpemUgPSAwOworCQkJZGUtPmVhX3NpemUgPSBjcHVfdG9fbGUzMigvKmhwZnNfaW5vZGUtPmlfZWFfc2l6ZSovMCk7CisJCQlkZS0+ZmlsZV9zaXplID0gY3B1X3RvX2xlMzIoMCk7CiAJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaCk7CiAJCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJCX0gZWxzZQpAQCAtMjY5LDYgKzI2MSwxMCBAQAogCWhwZnNfbG9jayhpbm9kZS0+aV9zYik7CiAJaWYgKGlub2RlLT5pX2lubyA9PSBocGZzX3NiKGlub2RlLT5pX3NiKS0+c2Jfcm9vdCkKIAkJZ290byBvdXRfdW5sb2NrOworCWlmICgoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCkgJiYgYXR0ci0+aWFfdWlkID49IDB4MTAwMDApCisJCWdvdG8gb3V0X3VubG9jazsKKwlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQpICYmIGF0dHItPmlhX2dpZCA+PSAweDEwMDAwKQorCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkgJiYgYXR0ci0+aWFfc2l6ZSA+IGlub2RlLT5pX3NpemUpCiAJCWdvdG8gb3V0X3VubG9jazsKIApAQCAtMjg0LDcgKzI4MCw2IEBACiAJfQogCiAJc2V0YXR0cl9jb3B5KGlub2RlLCBhdHRyKTsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAogCWhwZnNfd3JpdGVfaW5vZGUoaW5vZGUpOwogCmRpZmYgLS1naXQgYS9mcy9ocGZzL21hcC5jIGIvZnMvaHBmcy9tYXAuYwppbmRleCA4NDBkMDMzLi5hNzkwODIxIDEwMDY0NAotLS0gYS9mcy9ocGZzL21hcC5jCisrKyBiL2ZzL2hwZnMvbWFwLmMKQEAgLTIxLDcgKzIxLDcgQEAKIAkJaHBmc19lcnJvcihzLCAiaHBmc19tYXBfYml0bWFwIGNhbGxlZCB3aXRoIGJhZCBwYXJhbWV0ZXI6ICUwOHggYXQgJXMiLCBibXBfYmxvY2ssIGlkKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXNlYyA9IGhwZnNfc2IocyktPnNiX2JtcF9kaXJbYm1wX2Jsb2NrXTsKKwlzZWMgPSBsZTMyX3RvX2NwdShocGZzX3NiKHMpLT5zYl9ibXBfZGlyW2JtcF9ibG9ja10pOwogCWlmICghc2VjIHx8IHNlYyA+IGhwZnNfc2IocyktPnNiX2ZzX3NpemUtNCkgewogCQlocGZzX2Vycm9yKHMsICJpbnZhbGlkIGJpdG1hcCBibG9jayBwb2ludGVyICUwOHggLT4gJTA4eCBhdCAlcyIsIGJtcF9ibG9jaywgc2VjLCBpZCk7CiAJCXJldHVybiBOVUxMOwpAQCAtNDYsMTggKzQ2LDE4IEBACiAJc3RydWN0IGNvZGVfcGFnZV9kYXRhICpjcGQ7CiAJc3RydWN0IGNvZGVfcGFnZV9kaXJlY3RvcnkgKmNwID0gaHBmc19tYXBfc2VjdG9yKHMsIGNwcywgJmJoLCAwKTsKIAlpZiAoIWNwKSByZXR1cm4gTlVMTDsKLQlpZiAoY3AtPm1hZ2ljICE9IENQX0RJUl9NQUdJQykgewotCQlwcmludGsoIkhQRlM6IENvZGUgcGFnZSBkaXJlY3RvcnkgbWFnaWMgZG9lc24ndCBtYXRjaCAobWFnaWMgPSAlMDh4KVxuIiwgY3AtPm1hZ2ljKTsKKwlpZiAobGUzMl90b19jcHUoY3AtPm1hZ2ljKSAhPSBDUF9ESVJfTUFHSUMpIHsKKwkJcHJpbnRrKCJIUEZTOiBDb2RlIHBhZ2UgZGlyZWN0b3J5IG1hZ2ljIGRvZXNuJ3QgbWF0Y2ggKG1hZ2ljID0gJTA4eClcbiIsIGxlMzJfdG9fY3B1KGNwLT5tYWdpYykpOwogCQlicmVsc2UoYmgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JaWYgKCFjcC0+bl9jb2RlX3BhZ2VzKSB7CisJaWYgKCFsZTMyX3RvX2NwdShjcC0+bl9jb2RlX3BhZ2VzKSkgewogCQlwcmludGsoIkhQRlM6IG5fY29kZV9wYWdlcyA9PSAwXG4iKTsKIAkJYnJlbHNlKGJoKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWNwZHMgPSBjcC0+YXJyYXlbMF0uY29kZV9wYWdlX2RhdGE7Ci0JY3BpID0gY3AtPmFycmF5WzBdLmluZGV4OworCWNwZHMgPSBsZTMyX3RvX2NwdShjcC0+YXJyYXlbMF0uY29kZV9wYWdlX2RhdGEpOworCWNwaSA9IGxlMTZfdG9fY3B1KGNwLT5hcnJheVswXS5pbmRleCk7CiAJYnJlbHNlKGJoKTsKIAogCWlmIChjcGkgPj0gMykgewpAQCAtNjYsMTIgKzY2LDEyIEBACiAJfQogCQogCWlmICghKGNwZCA9IGhwZnNfbWFwX3NlY3RvcihzLCBjcGRzLCAmYmgsIDApKSkgcmV0dXJuIE5VTEw7Ci0JaWYgKCh1bnNpZ25lZCljcGQtPm9mZnNbY3BpXSA+IDB4MTc4KSB7CisJaWYgKGxlMTZfdG9fY3B1KGNwZC0+b2Zmc1tjcGldKSA+IDB4MTc4KSB7CiAJCXByaW50aygiSFBGUzogQ29kZSBwYWdlIGluZGV4IG91dCBvZiBzZWN0b3JcbiIpOwogCQlicmVsc2UoYmgpOwogCQlyZXR1cm4gTlVMTDsKIAl9Ci0JcHRyID0gKHVuc2lnbmVkIGNoYXIgKiljcGQgKyBjcGQtPm9mZnNbY3BpXSArIDY7CisJcHRyID0gKHVuc2lnbmVkIGNoYXIgKiljcGQgKyBsZTE2X3RvX2NwdShjcGQtPm9mZnNbY3BpXSkgKyA2OwogCWlmICghKGNwX3RhYmxlID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpKSkgewogCQlwcmludGsoIkhQRlM6IG91dCBvZiBtZW1vcnkgZm9yIGNvZGUgcGFnZSB0YWJsZVxuIik7CiAJCWJyZWxzZShiaCk7CkBAIC0xMjUsNyArMTI1LDcgQEAKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgewogCQkJc3RydWN0IGV4dGVuZGVkX2F0dHJpYnV0ZSAqZWE7CiAJCQlzdHJ1Y3QgZXh0ZW5kZWRfYXR0cmlidXRlICplYV9lbmQ7Ci0JCQlpZiAoZm5vZGUtPm1hZ2ljICE9IEZOT0RFX01BR0lDKSB7CisJCQlpZiAobGUzMl90b19jcHUoZm5vZGUtPm1hZ2ljKSAhPSBGTk9ERV9NQUdJQykgewogCQkJCWhwZnNfZXJyb3IocywgImJhZCBtYWdpYyBvbiBmbm9kZSAlMDhseCIsCiAJCQkJCSh1bnNpZ25lZCBsb25nKWlubyk7CiAJCQkJZ290byBiYWlsOwpAQCAtMTM4LDcgKzEzOCw3IEBACiAJCQkJCSAgICAodW5zaWduZWQgbG9uZylpbm8pOwogCQkJCQlnb3RvIGJhaWw7CiAJCQkJfQotCQkJCWlmIChmbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSAhPQorCQkJCWlmIChsZTE2X3RvX2NwdShmbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSkgIT0KIAkJCQkgICAgOCArIGZub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMgKiAoZm5vZGUtPmJ0cmVlLmludGVybmFsID8gOCA6IDEyKSkgewogCQkJCQlocGZzX2Vycm9yKHMsCiAJCQkJCSAgICAiYmFkIGZpcnN0X2ZyZWUgcG9pbnRlciBpbiBmbm9kZSAlMDhseCIsCkBAIC0xNDYsMTIgKzE0NiwxMiBAQAogCQkJCQlnb3RvIGJhaWw7CiAJCQkJfQogCQkJfQotCQkJaWYgKGZub2RlLT5lYV9zaXplX3MgJiYgKChzaWduZWQgaW50KWZub2RlLT5lYV9vZmZzIDwgMHhjNCB8fAotCQkJICAgKHNpZ25lZCBpbnQpZm5vZGUtPmVhX29mZnMgKyBmbm9kZS0+YWNsX3NpemVfcyArIGZub2RlLT5lYV9zaXplX3MgPiAweDIwMCkpIHsKKwkJCWlmIChsZTE2X3RvX2NwdShmbm9kZS0+ZWFfc2l6ZV9zKSAmJiAobGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpIDwgMHhjNCB8fAorCQkJICAgbGUxNl90b19jcHUoZm5vZGUtPmVhX29mZnMpICsgbGUxNl90b19jcHUoZm5vZGUtPmFjbF9zaXplX3MpICsgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykgPiAweDIwMCkpIHsKIAkJCQlocGZzX2Vycm9yKHMsCiAJCQkJCSJiYWQgRUEgaW5mbyBpbiBmbm9kZSAlMDhseDogZWFfb2ZmcyA9PSAlMDR4IGVhX3NpemVfcyA9PSAlMDR4IiwKIAkJCQkJKHVuc2lnbmVkIGxvbmcpaW5vLAotCQkJCQlmbm9kZS0+ZWFfb2ZmcywgZm5vZGUtPmVhX3NpemVfcyk7CisJCQkJCWxlMTZfdG9fY3B1KGZub2RlLT5lYV9vZmZzKSwgbGUxNl90b19jcHUoZm5vZGUtPmVhX3NpemVfcykpOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KIAkJCWVhID0gZm5vZGVfZWEoZm5vZGUpOwpAQCAtMTc4LDE2ICsxNzgsMjAgQEAKIAlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSBpZiAoaHBmc19jaGtfc2VjdG9ycyhzLCBhbm8sIDEsICJhbm9kZSIpKSByZXR1cm4gTlVMTDsKIAlpZiAoKGFub2RlID0gaHBmc19tYXBfc2VjdG9yKHMsIGFubywgYmhwLCBBTk9ERV9SRF9BSEVBRCkpKQogCQlpZiAoaHBmc19zYihzKS0+c2JfY2hrKSB7Ci0JCQlpZiAoYW5vZGUtPm1hZ2ljICE9IEFOT0RFX01BR0lDIHx8IGFub2RlLT5zZWxmICE9IGFubykgeworCQkJaWYgKGxlMzJfdG9fY3B1KGFub2RlLT5tYWdpYykgIT0gQU5PREVfTUFHSUMpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJiYWQgbWFnaWMgb24gYW5vZGUgJTA4eCIsIGFubyk7CiAJCQkJZ290byBiYWlsOwogCQkJfQorCQkJaWYgKGxlMzJfdG9fY3B1KGFub2RlLT5zZWxmKSAhPSBhbm8pIHsKKwkJCQlocGZzX2Vycm9yKHMsICJzZWxmIHBvaW50ZXIgaW52YWxpZCBvbiBhbm9kZSAlMDh4IiwgYW5vKTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CiAJCQlpZiAoKHVuc2lnbmVkKWFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMgKyAodW5zaWduZWQpYW5vZGUtPmJ0cmVlLm5fZnJlZV9ub2RlcyAhPQogCQkJICAgIChhbm9kZS0+YnRyZWUuaW50ZXJuYWwgPyA2MCA6IDQwKSkgewogCQkJCWhwZnNfZXJyb3IocywgImJhZCBudW1iZXIgb2Ygbm9kZXMgaW4gYW5vZGUgJTA4eCIsIGFubyk7CiAJCQkJZ290byBiYWlsOwogCQkJfQotCQkJaWYgKGFub2RlLT5idHJlZS5maXJzdF9mcmVlICE9CisJCQlpZiAobGUxNl90b19jcHUoYW5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUpICE9CiAJCQkgICAgOCArIGFub2RlLT5idHJlZS5uX3VzZWRfbm9kZXMgKiAoYW5vZGUtPmJ0cmVlLmludGVybmFsID8gOCA6IDEyKSkgewogCQkJCWhwZnNfZXJyb3IocywgImJhZCBmaXJzdF9mcmVlIHBvaW50ZXIgaW4gYW5vZGUgJTA4eCIsIGFubyk7CiAJCQkJZ290byBiYWlsOwpAQCAtMjE5LDI2ICsyMjMsMjYgQEAKIAkJCXVuc2lnbmVkIHAsIHBwID0gMDsKIAkJCXVuc2lnbmVkIGNoYXIgKmQgPSAodW5zaWduZWQgY2hhciAqKWRub2RlOwogCQkJaW50IGIgPSAwOwotCQkJaWYgKGRub2RlLT5tYWdpYyAhPSBETk9ERV9NQUdJQykgeworCQkJaWYgKGxlMzJfdG9fY3B1KGRub2RlLT5tYWdpYykgIT0gRE5PREVfTUFHSUMpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJiYWQgbWFnaWMgb24gZG5vZGUgJTA4eCIsIHNlY25vKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9Ci0JCQlpZiAoZG5vZGUtPnNlbGYgIT0gc2Vjbm8pCi0JCQkJaHBmc19lcnJvcihzLCAiYmFkIHNlbGYgcG9pbnRlciBvbiBkbm9kZSAlMDh4IHNlbGYgPSAlMDh4Iiwgc2Vjbm8sIGRub2RlLT5zZWxmKTsKKwkJCWlmIChsZTMyX3RvX2NwdShkbm9kZS0+c2VsZikgIT0gc2Vjbm8pCisJCQkJaHBmc19lcnJvcihzLCAiYmFkIHNlbGYgcG9pbnRlciBvbiBkbm9kZSAlMDh4IHNlbGYgPSAlMDh4Iiwgc2Vjbm8sIGxlMzJfdG9fY3B1KGRub2RlLT5zZWxmKSk7CiAJCQkvKiBDaGVjayBkaXJlbnRzIC0gYmFkIGRpcmVudHMgd291bGQgY2F1c2UgaW5maW5pdGUKIAkJCSAgIGxvb3BzIG9yIHNob290aW5nIHRvIG1lbW9yeSAqLwotCQkJaWYgKGRub2RlLT5maXJzdF9mcmVlID4gMjA0OC8qIHx8IGRub2RlLT5maXJzdF9mcmVlIDwgODQqLykgewotCQkJCWhwZnNfZXJyb3IocywgImRub2RlICUwOHggaGFzIGZpcnN0X2ZyZWUgPT0gJTA4eCIsIHNlY25vLCBkbm9kZS0+Zmlyc3RfZnJlZSk7CisJCQlpZiAobGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpID4gMjA0OCkgeworCQkJCWhwZnNfZXJyb3IocywgImRub2RlICUwOHggaGFzIGZpcnN0X2ZyZWUgPT0gJTA4eCIsIHNlY25vLCBsZTMyX3RvX2NwdShkbm9kZS0+Zmlyc3RfZnJlZSkpOwogCQkJCWdvdG8gYmFpbDsKIAkJCX0KLQkJCWZvciAocCA9IDIwOyBwIDwgZG5vZGUtPmZpcnN0X2ZyZWU7IHAgKz0gZFtwXSArIChkW3ArMV0gPDwgOCkpIHsKKwkJCWZvciAocCA9IDIwOyBwIDwgbGUzMl90b19jcHUoZG5vZGUtPmZpcnN0X2ZyZWUpOyBwICs9IGRbcF0gKyAoZFtwKzFdIDw8IDgpKSB7CiAJCQkJc3RydWN0IGhwZnNfZGlyZW50ICpkZSA9IChzdHJ1Y3QgaHBmc19kaXJlbnQgKikoKGNoYXIgKilkbm9kZSArIHApOwotCQkJCWlmIChkZS0+bGVuZ3RoID4gMjkyIHx8IChkZS0+bGVuZ3RoIDwgMzIpIHx8IChkZS0+bGVuZ3RoICYgMykgfHwgcCArIGRlLT5sZW5ndGggPiAyMDQ4KSB7CisJCQkJaWYgKGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpID4gMjkyIHx8IChsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSA8IDMyKSB8fCAobGUxNl90b19jcHUoZGUtPmxlbmd0aCkgJiAzKSB8fCBwICsgbGUxNl90b19jcHUoZGUtPmxlbmd0aCkgPiAyMDQ4KSB7CiAJCQkJCWhwZnNfZXJyb3IocywgImJhZCBkaXJlbnQgc2l6ZSBpbiBkbm9kZSAlMDh4LCBkaXJlbnQgJTAzeCwgbGFzdCAlMDN4Iiwgc2Vjbm8sIHAsIHBwKTsKIAkJCQkJZ290byBiYWlsOwogCQkJCX0KLQkJCQlpZiAoKCgzMSArIGRlLT5uYW1lbGVuICsgZGUtPmRvd24qNCArIDMpICYgfjMpICE9IGRlLT5sZW5ndGgpIHsKLQkJCQkJaWYgKCgoMzEgKyBkZS0+bmFtZWxlbiArIGRlLT5kb3duKjQgKyAzKSAmIH4zKSA8IGRlLT5sZW5ndGggJiYgcy0+c19mbGFncyAmIE1TX1JET05MWSkgZ290byBvazsKKwkJCQlpZiAoKCgzMSArIGRlLT5uYW1lbGVuICsgZGUtPmRvd24qNCArIDMpICYgfjMpICE9IGxlMTZfdG9fY3B1KGRlLT5sZW5ndGgpKSB7CisJCQkJCWlmICgoKDMxICsgZGUtPm5hbWVsZW4gKyBkZS0+ZG93bio0ICsgMykgJiB+MykgPCBsZTE2X3RvX2NwdShkZS0+bGVuZ3RoKSAmJiBzLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSBnb3RvIG9rOwogCQkJCQlocGZzX2Vycm9yKHMsICJuYW1lbGVuIGRvZXMgbm90IG1hdGNoIGRpcmVudCBzaXplIGluIGRub2RlICUwOHgsIGRpcmVudCAlMDN4LCBsYXN0ICUwM3giLCBzZWNubywgcCwgcHApOwogCQkJCQlnb3RvIGJhaWw7CiAJCQkJfQpAQCAtMjUxLDcgKzI1NSw3IEBACiAJCQkJcHAgPSBwOwogCQkJCQogCQkJfQotCQkJaWYgKHAgIT0gZG5vZGUtPmZpcnN0X2ZyZWUpIHsKKwkJCWlmIChwICE9IGxlMzJfdG9fY3B1KGRub2RlLT5maXJzdF9mcmVlKSkgewogCQkJCWhwZnNfZXJyb3IocywgInNpemUgb24gbGFzdCBkaXJlbnQgZG9lcyBub3QgbWF0Y2ggZmlyc3RfZnJlZTsgZG5vZGUgJTA4eCIsIHNlY25vKTsKIAkJCQlnb3RvIGJhaWw7CiAJCQl9CkBAIC0yNzcsNyArMjgxLDcgQEAKIAlpZiAoIWZub2RlKQogCQlyZXR1cm4gMDsKIAotCWRubyA9IGZub2RlLT51LmV4dGVybmFsWzBdLmRpc2tfc2Vjbm87CisJZG5vID0gbGUzMl90b19jcHUoZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyk7CiAJYnJlbHNlKGJoKTsKIAlyZXR1cm4gZG5vOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1lLmMgYi9mcy9ocGZzL25hbWUuYwppbmRleCBmMjQ3MzZkLi45YWNkZjMzIDEwMDY0NAotLS0gYS9mcy9ocGZzL25hbWUuYworKysgYi9mcy9ocGZzL25hbWUuYwpAQCAtOCwzOSArOCw2IEBACiAKICNpbmNsdWRlICJocGZzX2ZuLmgiCiAKLXN0YXRpYyBjb25zdCBjaGFyICp0ZXh0X3Bvc3RmaXhbXT17Ci0iLkFTTSIsICIuQkFTIiwgIi5CQVQiLCAiLkMiLCAiLkNDIiwgIi5DRkciLCAiLkNNRCIsICIuQ09OIiwgIi5DUFAiLCAiLkRFRiIsCi0iLkRPQyIsICIuRFBSIiwgIi5FUlgiLCAiLkgiLCAiLkhQUCIsICIuSFRNIiwgIi5IVE1MIiwgIi5KQVZBIiwgIi5MT0ciLCAiLlBBUyIsCi0iLlJDIiwgIi5URVgiLCAiLlRYVCIsICIuWSIsICIifTsKLQotc3RhdGljIGNvbnN0IGNoYXIgKnRleHRfcHJlZml4W109ewotIkFVVE9FWEVDLiIsICJDSEFOR0VTIiwgIkNPUFlJTkciLCAiQ09ORklHLiIsICJDUkVESVRTIiwgIkZBUSIsICJGSUxFX0lELkRJWiIsCi0iTUFLRUZJTEUiLCAiUkVBRC5NRSIsICJSRUFETUUiLCAiVEVSTUNBUCIsICIifTsKLQotdm9pZCBocGZzX2RlY2lkZV9jb252KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxlbikKLXsKLQlzdHJ1Y3QgaHBmc19pbm9kZV9pbmZvICpocGZzX2lub2RlID0gaHBmc19pKGlub2RlKTsKLQlpbnQgaTsKLQlpZiAoaHBmc19pbm9kZS0+aV9jb252ICE9IENPTlZfQVVUTykgcmV0dXJuOwotCWZvciAoaSA9IDA7ICp0ZXh0X3Bvc3RmaXhbaV07IGkrKykgewotCQlpbnQgbCA9IHN0cmxlbih0ZXh0X3Bvc3RmaXhbaV0pOwotCQlpZiAobCA8PSBsZW4pCi0JCQlpZiAoIWhwZnNfY29tcGFyZV9uYW1lcyhpbm9kZS0+aV9zYiwgdGV4dF9wb3N0Zml4W2ldLCBsLCBuYW1lICsgbGVuIC0gbCwgbCwgMCkpCi0JCQkJZ290byB0ZXh0OwotCX0KLQlmb3IgKGkgPSAwOyAqdGV4dF9wcmVmaXhbaV07IGkrKykgewotCQlpbnQgbCA9IHN0cmxlbih0ZXh0X3ByZWZpeFtpXSk7Ci0JCWlmIChsIDw9IGxlbikKLQkJCWlmICghaHBmc19jb21wYXJlX25hbWVzKGlub2RlLT5pX3NiLCB0ZXh0X3ByZWZpeFtpXSwgbCwgbmFtZSwgbCwgMCkpCi0JCQkJZ290byB0ZXh0OwotCX0KLQlocGZzX2lub2RlLT5pX2NvbnYgPSBDT05WX0JJTkFSWTsKLQlyZXR1cm47Ci0JdGV4dDoKLQlocGZzX2lub2RlLT5pX2NvbnYgPSBDT05WX1RFWFQ7Ci0JcmV0dXJuOwotfQotCiBzdGF0aWMgaW5saW5lIGludCBub3RfYWxsb3dlZF9jaGFyKHVuc2lnbmVkIGNoYXIgYykKIHsKIAlyZXR1cm4gYzwnICcgfHwgYz09JyInIHx8IGM9PScqJyB8fCBjPT0nLycgfHwgYz09JzonIHx8IGM9PSc8JyB8fApkaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1laS5jIGIvZnMvaHBmcy9uYW1laS5jCmluZGV4IGQ1ZjhjOGEuLjFmMDU4MzkgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvbmFtZWkuYworKysgYi9mcy9ocGZzL25hbWVpLmMKQEAgLTI5LDcgKzI5LDcgQEAKIAlmbm9kZSA9IGhwZnNfYWxsb2NfZm5vZGUoZGlyLT5pX3NiLCBocGZzX2koZGlyKS0+aV9kbm8sICZmbm8sICZiaCk7CiAJaWYgKCFmbm9kZSkKIAkJZ290byBiYWlsOwotCWRub2RlID0gaHBmc19hbGxvY19kbm9kZShkaXItPmlfc2IsIGZubywgJmRubywgJnFiaDAsIDEpOworCWRub2RlID0gaHBmc19hbGxvY19kbm9kZShkaXItPmlfc2IsIGZubywgJmRubywgJnFiaDApOwogCWlmICghZG5vZGUpCiAJCWdvdG8gYmFpbDE7CiAJbWVtc2V0KCZkZWUsIDAsIHNpemVvZiBkZWUpOwpAQCAtMzcsOCArMzcsOCBAQAogCWlmICghKG1vZGUgJiAwMjIyKSkgZGVlLnJlYWRfb25seSA9IDE7CiAJLypkZWUuYXJjaGl2ZSA9IDA7Ki8KIAlkZWUuaGlkZGVuID0gbmFtZVswXSA9PSAnLic7Ci0JZGVlLmZub2RlID0gZm5vOwotCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSk7CisJZGVlLmZub2RlID0gY3B1X3RvX2xlMzIoZm5vKTsKKwlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGNwdV90b19sZTMyKGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpKTsKIAlyZXN1bHQgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKTsKIAlpZiAoIXJlc3VsdCkKIAkJZ290byBiYWlsMjsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlyZXN1bHQtPmlfaW5vID0gZm5vOwogCWhwZnNfaShyZXN1bHQpLT5pX3BhcmVudF9kaXIgPSBkaXItPmlfaW5vOwogCWhwZnNfaShyZXN1bHQpLT5pX2RubyA9IGRubzsKLQlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZWUuY3JlYXRpb25fZGF0ZSk7CisJcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGVlLmNyZWF0aW9uX2RhdGUpKTsKIAlyZXN1bHQtPmlfY3RpbWUudHZfbnNlYyA9IDA7IAogCXJlc3VsdC0+aV9tdGltZS50dl9uc2VjID0gMDsgCiAJcmVzdWx0LT5pX2F0aW1lLnR2X25zZWMgPSAwOyAKQEAgLTYwLDggKzYwLDcgQEAKIAlpZiAoZGVlLnJlYWRfb25seSkKIAkJcmVzdWx0LT5pX21vZGUgJj0gfjAyMjI7CiAKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSwgMCk7CisJciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSk7CiAJaWYgKHIgPT0gMSkKIAkJZ290byBiYWlsMzsKIAlpZiAociA9PSAtMSkgewpAQCAtNzAsMjEgKzY5LDIxIEBACiAJfQogCWZub2RlLT5sZW4gPSBsZW47CiAJbWVtY3B5KGZub2RlLT5uYW1lLCBuYW1lLCBsZW4gPiAxNSA/IDE1IDogbGVuKTsKLQlmbm9kZS0+dXAgPSBkaXItPmlfaW5vOworCWZub2RlLT51cCA9IGNwdV90b19sZTMyKGRpci0+aV9pbm8pOwogCWZub2RlLT5kaXJmbGFnID0gMTsKIAlmbm9kZS0+YnRyZWUubl9mcmVlX25vZGVzID0gNzsKIAlmbm9kZS0+YnRyZWUubl91c2VkX25vZGVzID0gMTsKLQlmbm9kZS0+YnRyZWUuZmlyc3RfZnJlZSA9IDB4MTQ7Ci0JZm5vZGUtPnUuZXh0ZXJuYWxbMF0uZGlza19zZWNubyA9IGRubzsKLQlmbm9kZS0+dS5leHRlcm5hbFswXS5maWxlX3NlY25vID0gLTE7CisJZm5vZGUtPmJ0cmVlLmZpcnN0X2ZyZWUgPSBjcHVfdG9fbGUxNigweDE0KTsKKwlmbm9kZS0+dS5leHRlcm5hbFswXS5kaXNrX3NlY25vID0gY3B1X3RvX2xlMzIoZG5vKTsKKwlmbm9kZS0+dS5leHRlcm5hbFswXS5maWxlX3NlY25vID0gY3B1X3RvX2xlMzIoLTEpOwogCWRub2RlLT5yb290X2Rub2RlID0gMTsKLQlkbm9kZS0+dXAgPSBmbm87CisJZG5vZGUtPnVwID0gY3B1X3RvX2xlMzIoZm5vKTsKIAlkZSA9IGhwZnNfYWRkX2RlKGRpci0+aV9zYiwgZG5vZGUsICJcMDAxXDAwMSIsIDIsIDApOwotCWRlLT5jcmVhdGlvbl9kYXRlID0gZGUtPndyaXRlX2RhdGUgPSBkZS0+cmVhZF9kYXRlID0gZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSk7CisJZGUtPmNyZWF0aW9uX2RhdGUgPSBkZS0+d3JpdGVfZGF0ZSA9IGRlLT5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKSk7CiAJaWYgKCEobW9kZSAmIDAyMjIpKSBkZS0+cmVhZF9vbmx5ID0gMTsKIAlkZS0+Zmlyc3QgPSBkZS0+ZGlyZWN0b3J5ID0gMTsKIAkvKmRlLT5oaWRkZW4gPSBkZS0+c3lzdGVtID0gMDsqLwotCWRlLT5mbm9kZSA9IGZubzsKKwlkZS0+Zm5vZGUgPSBjcHVfdG9fbGUzMihmbm8pOwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlicmVsc2UoYmgpOwogCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMCk7CkBAIC0xMDEsMTEgKzEwMCw5IEBACiAJCWhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHJlc3VsdCk7CiAJfQogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCByZXN1bHQpOwotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWhwZnNfdW5sb2NrKGRpci0+aV9zYik7CiAJcmV0dXJuIDA7CiBiYWlsMzoKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAlpcHV0KHJlc3VsdCk7CiBiYWlsMjoKIAlocGZzX2JyZWxzZTQoJnFiaDApOwpAQCAtMTQwLDggKzEzNyw4IEBACiAJaWYgKCEobW9kZSAmIDAyMjIpKSBkZWUucmVhZF9vbmx5ID0gMTsKIAlkZWUuYXJjaGl2ZSA9IDE7CiAJZGVlLmhpZGRlbiA9IG5hbWVbMF0gPT0gJy4nOwotCWRlZS5mbm9kZSA9IGZubzsKLQlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpOworCWRlZS5mbm9kZSA9IGNwdV90b19sZTMyKGZubyk7CisJZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKSk7CiAKIAlyZXN1bHQgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKTsKIAlpZiAoIXJlc3VsdCkKQEAgLTE1NCw5ICsxNTEsOCBAQAogCXJlc3VsdC0+aV9vcCA9ICZocGZzX2ZpbGVfaW9wczsKIAlyZXN1bHQtPmlfZm9wID0gJmhwZnNfZmlsZV9vcHM7CiAJcmVzdWx0LT5pX25saW5rID0gMTsKLQlocGZzX2RlY2lkZV9jb252KHJlc3VsdCwgbmFtZSwgbGVuKTsKIAlocGZzX2kocmVzdWx0KS0+aV9wYXJlbnRfZGlyID0gZGlyLT5pX2lubzsKLQlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZWUuY3JlYXRpb25fZGF0ZSk7CisJcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgbGUzMl90b19jcHUoZGVlLmNyZWF0aW9uX2RhdGUpKTsKIAlyZXN1bHQtPmlfY3RpbWUudHZfbnNlYyA9IDA7CiAJcmVzdWx0LT5pX210aW1lLnR2X25zZWMgPSAwOwogCXJlc3VsdC0+aV9hdGltZS50dl9uc2VjID0gMDsKQEAgLTE2OCw4ICsxNjQsNyBAQAogCXJlc3VsdC0+aV9kYXRhLmFfb3BzID0gJmhwZnNfYW9wczsKIAlocGZzX2kocmVzdWx0KS0+bW11X3ByaXZhdGUgPSAwOwogCi0JbXV0ZXhfbG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwotCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUsIDApOworCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUpOwogCWlmIChyID09IDEpCiAJCWdvdG8gYmFpbDI7CiAJaWYgKHIgPT0gLTEpIHsKQEAgLTE3OCw3ICsxNzMsNyBAQAogCX0KIAlmbm9kZS0+bGVuID0gbGVuOwogCW1lbWNweShmbm9kZS0+bmFtZSwgbmFtZSwgbGVuID4gMTUgPyAxNSA6IGxlbik7Ci0JZm5vZGUtPnVwID0gZGlyLT5pX2lubzsKKwlmbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihkaXItPmlfaW5vKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKIApAQCAtMTkzLDEyICsxODgsMTAgQEAKIAkJaHBmc193cml0ZV9pbm9kZV9ub2xvY2socmVzdWx0KTsKIAl9CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJlc3VsdCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaHBmc191bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gMDsKIAogYmFpbDI6Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaXB1dChyZXN1bHQpOwogYmFpbDE6CiAJYnJlbHNlKGJoKTsKQEAgLTIzMiw4ICsyMjUsOCBAQAogCWlmICghKG1vZGUgJiAwMjIyKSkgZGVlLnJlYWRfb25seSA9IDE7CiAJZGVlLmFyY2hpdmUgPSAxOwogCWRlZS5oaWRkZW4gPSBuYW1lWzBdID09ICcuJzsKLQlkZWUuZm5vZGUgPSBmbm87Ci0JZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKTsKKwlkZWUuZm5vZGUgPSBjcHVfdG9fbGUzMihmbm8pOworCWRlZS5jcmVhdGlvbl9kYXRlID0gZGVlLndyaXRlX2RhdGUgPSBkZWUucmVhZF9kYXRlID0gY3B1X3RvX2xlMzIoZ210X3RvX2xvY2FsKGRpci0+aV9zYiwgZ2V0X3NlY29uZHMoKSkpOwogCiAJcmVzdWx0ID0gbmV3X2lub2RlKGRpci0+aV9zYik7CiAJaWYgKCFyZXN1bHQpCkBAIC0yNDIsNyArMjM1LDcgQEAKIAlocGZzX2luaXRfaW5vZGUocmVzdWx0KTsKIAlyZXN1bHQtPmlfaW5vID0gZm5vOwogCWhwZnNfaShyZXN1bHQpLT5pX3BhcmVudF9kaXIgPSBkaXItPmlfaW5vOwotCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGRlZS5jcmVhdGlvbl9kYXRlKTsKKwlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBsZTMyX3RvX2NwdShkZWUuY3JlYXRpb25fZGF0ZSkpOwogCXJlc3VsdC0+aV9jdGltZS50dl9uc2VjID0gMDsKIAlyZXN1bHQtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAJcmVzdWx0LT5pX2F0aW1lLnR2X25zZWMgPSAwOwpAQCAtMjU0LDggKzI0Nyw3IEBACiAJcmVzdWx0LT5pX2Jsb2NrcyA9IDE7CiAJaW5pdF9zcGVjaWFsX2lub2RlKHJlc3VsdCwgbW9kZSwgcmRldik7CiAKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSwgMCk7CisJciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSk7CiAJaWYgKHIgPT0gMSkKIAkJZ290byBiYWlsMjsKIAlpZiAociA9PSAtMSkgewpAQCAtMjY0LDE5ICsyNTYsMTcgQEAKIAl9CiAJZm5vZGUtPmxlbiA9IGxlbjsKIAltZW1jcHkoZm5vZGUtPm5hbWUsIG5hbWUsIGxlbiA+IDE1ID8gMTUgOiBsZW4pOwotCWZub2RlLT51cCA9IGRpci0+aV9pbm87CisJZm5vZGUtPnVwID0gY3B1X3RvX2xlMzIoZGlyLT5pX2lubyk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCiAJaW5zZXJ0X2lub2RlX2hhc2gocmVzdWx0KTsKIAogCWhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHJlc3VsdCk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJlc3VsdCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJYnJlbHNlKGJoKTsKIAlocGZzX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiAwOwogYmFpbDI6Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaXB1dChyZXN1bHQpOwogYmFpbDE6CiAJYnJlbHNlKGJoKTsKQEAgLTMxMCw4ICszMDAsOCBAQAogCW1lbXNldCgmZGVlLCAwLCBzaXplb2YgZGVlKTsKIAlkZWUuYXJjaGl2ZSA9IDE7CiAJZGVlLmhpZGRlbiA9IG5hbWVbMF0gPT0gJy4nOwotCWRlZS5mbm9kZSA9IGZubzsKLQlkZWUuY3JlYXRpb25fZGF0ZSA9IGRlZS53cml0ZV9kYXRlID0gZGVlLnJlYWRfZGF0ZSA9IGdtdF90b19sb2NhbChkaXItPmlfc2IsIGdldF9zZWNvbmRzKCkpOworCWRlZS5mbm9kZSA9IGNwdV90b19sZTMyKGZubyk7CisJZGVlLmNyZWF0aW9uX2RhdGUgPSBkZWUud3JpdGVfZGF0ZSA9IGRlZS5yZWFkX2RhdGUgPSBjcHVfdG9fbGUzMihnbXRfdG9fbG9jYWwoZGlyLT5pX3NiLCBnZXRfc2Vjb25kcygpKSk7CiAKIAlyZXN1bHQgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKTsKIAlpZiAoIXJlc3VsdCkKQEAgLTMxOSw3ICszMDksNyBAQAogCXJlc3VsdC0+aV9pbm8gPSBmbm87CiAJaHBmc19pbml0X2lub2RlKHJlc3VsdCk7CiAJaHBmc19pKHJlc3VsdCktPmlfcGFyZW50X2RpciA9IGRpci0+aV9pbm87Ci0JcmVzdWx0LT5pX2N0aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9tdGltZS50dl9zZWMgPSByZXN1bHQtPmlfYXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KGRpci0+aV9zYiwgZGVlLmNyZWF0aW9uX2RhdGUpOworCXJlc3VsdC0+aV9jdGltZS50dl9zZWMgPSByZXN1bHQtPmlfbXRpbWUudHZfc2VjID0gcmVzdWx0LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChkaXItPmlfc2IsIGxlMzJfdG9fY3B1KGRlZS5jcmVhdGlvbl9kYXRlKSk7CiAJcmVzdWx0LT5pX2N0aW1lLnR2X25zZWMgPSAwOwogCXJlc3VsdC0+aV9tdGltZS50dl9uc2VjID0gMDsKIAlyZXN1bHQtPmlfYXRpbWUudHZfbnNlYyA9IDA7CkBAIC0zMzMsOCArMzIzLDcgQEAKIAlyZXN1bHQtPmlfb3AgPSAmcGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAJcmVzdWx0LT5pX2RhdGEuYV9vcHMgPSAmaHBmc19zeW1saW5rX2FvcHM7CiAKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSwgMCk7CisJciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIG5hbWUsIGxlbiwgJmRlZSk7CiAJaWYgKHIgPT0gMSkKIAkJZ290byBiYWlsMjsKIAlpZiAociA9PSAtMSkgewpAQCAtMzQzLDcgKzMzMiw3IEBACiAJfQogCWZub2RlLT5sZW4gPSBsZW47CiAJbWVtY3B5KGZub2RlLT5uYW1lLCBuYW1lLCBsZW4gPiAxNSA/IDE1IDogbGVuKTsKLQlmbm9kZS0+dXAgPSBkaXItPmlfaW5vOworCWZub2RlLT51cCA9IGNwdV90b19sZTMyKGRpci0+aV9pbm8pOwogCWhwZnNfc2V0X2VhKHJlc3VsdCwgZm5vZGUsICJTWU1MSU5LIiwgc3ltbGluaywgc3RybGVuKHN5bWxpbmspKTsKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJYnJlbHNlKGJoKTsKQEAgLTM1MiwxMSArMzQxLDkgQEAKIAogCWhwZnNfd3JpdGVfaW5vZGVfbm9sb2NrKHJlc3VsdCk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIHJlc3VsdCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJaHBmc191bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gMDsKIGJhaWwyOgotCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWlwdXQocmVzdWx0KTsKIGJhaWwxOgogCWJyZWxzZShiaCk7CkBAIC0zNzQsNyArMzYxLDYgQEAKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJZG5vZGVfc2Vjbm8gZG5vOwotCWZub2RlX3NlY25vIGZubzsKIAlpbnQgcjsKIAlpbnQgcmVwID0gMDsKIAlpbnQgZXJyOwpAQCAtMzgyLDggKzM2OCw2IEBACiAJaHBmc19sb2NrKGRpci0+aV9zYik7CiAJaHBmc19hZGp1c3RfbGVuZ3RoKG5hbWUsICZsZW4pOwogYWdhaW46Ci0JbXV0ZXhfbG9jaygmaHBmc19pKGlub2RlKS0+aV9wYXJlbnRfbXV0ZXgpOwotCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKIAllcnIgPSAtRU5PRU5UOwogCWRlID0gbWFwX2RpcmVudChkaXIsIGhwZnNfaShkaXIpLT5pX2RubywgbmFtZSwgbGVuLCAmZG5vLCAmcWJoKTsKIAlpZiAoIWRlKQpAQCAtMzk3LDcgKzM4MSw2IEBACiAJaWYgKGRlLT5kaXJlY3RvcnkpCiAJCWdvdG8gb3V0MTsKIAotCWZubyA9IGRlLT5mbm9kZTsKIAlyID0gaHBmc19yZW1vdmVfZGlyZW50KGRpciwgZG5vLCBkZSwgJnFiaCwgMSk7CiAJc3dpdGNoIChyKSB7CiAJY2FzZSAxOgpAQCAtNDEwLDggKzM5Myw2IEBACiAJCWlmIChyZXArKykKIAkJCWJyZWFrOwogCi0JCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwotCQltdXRleF91bmxvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKIAkJZGVudHJ5X3VuaGFzaChkZW50cnkpOwogCQlpZiAoIWRfdW5oYXNoZWQoZGVudHJ5KSkgewogCQkJZHB1dChkZW50cnkpOwpAQCAtNDQ1LDggKzQyNiw2IEBACiBvdXQxOgogCWhwZnNfYnJlbHNlNCgmcWJoKTsKIG91dDoKLQltdXRleF91bmxvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKIAlocGZzX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiBlcnI7CiB9CkBAIC00NTksMTUgKzQzOCwxMiBAQAogCXN0cnVjdCBocGZzX2RpcmVudCAqZGU7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlkbm9kZV9zZWNubyBkbm87Ci0JZm5vZGVfc2Vjbm8gZm5vOwogCWludCBuX2l0ZW1zID0gMDsKIAlpbnQgZXJyOwogCWludCByOwogCiAJaHBmc19hZGp1c3RfbGVuZ3RoKG5hbWUsICZsZW4pOwogCWhwZnNfbG9jayhkaXItPmlfc2IpOwotCW11dGV4X2xvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKLQltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJZXJyID0gLUVOT0VOVDsKIAlkZSA9IG1hcF9kaXJlbnQoZGlyLCBocGZzX2koZGlyKS0+aV9kbm8sIG5hbWUsIGxlbiwgJmRubywgJnFiaCk7CiAJaWYgKCFkZSkKQEAgLTQ4Niw3ICs0NjIsNiBAQAogCWlmIChuX2l0ZW1zKQogCQlnb3RvIG91dDE7CiAKLQlmbm8gPSBkZS0+Zm5vZGU7CiAJciA9IGhwZnNfcmVtb3ZlX2RpcmVudChkaXIsIGRubywgZGUsICZxYmgsIDEpOwogCXN3aXRjaCAocikgewogCWNhc2UgMToKQEAgLTUwNSw4ICs0ODAsNiBAQAogb3V0MToKIAlocGZzX2JyZWxzZTQoJnFiaCk7CiBvdXQ6Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JbXV0ZXhfdW5sb2NrKCZocGZzX2koaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7CiAJaHBmc191bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTY4LDEyICs1NDEsNiBAQAogCiAJaHBmc19sb2NrKGktPmlfc2IpOwogCS8qIG9yZGVyIGRvZXNuJ3QgbWF0dGVyLCBkdWUgdG8gVkZTIGV4Y2x1c2lvbiAqLwotCW11dGV4X2xvY2soJmhwZnNfaShpKS0+aV9wYXJlbnRfbXV0ZXgpOwotCWlmIChuZXdfaW5vZGUpCi0JCW11dGV4X2xvY2soJmhwZnNfaShuZXdfaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmaHBmc19pKG9sZF9kaXIpLT5pX211dGV4KTsKLQlpZiAobmV3X2RpciAhPSBvbGRfZGlyKQotCQltdXRleF9sb2NrKCZocGZzX2kobmV3X2RpciktPmlfbXV0ZXgpOwogCQogCS8qIEVybT8gTW92aW5nIG92ZXIgdGhlIGVtcHR5IG5vbi1idXN5IGRpcmVjdG9yeSBpcyBwZXJmZWN0bHkgbGVnYWwgKi8KIAlpZiAobmV3X2lub2RlICYmIFNfSVNESVIobmV3X2lub2RlLT5pX21vZGUpKSB7CkBAIC02MTAsOSArNTc3LDcgQEAKIAogCWlmIChuZXdfZGlyID09IG9sZF9kaXIpIGhwZnNfYnJlbHNlNCgmcWJoKTsKIAotCWhwZnNfbG9ja19jcmVhdGlvbihpLT5pX3NiKTsKLQlpZiAoKHIgPSBocGZzX2FkZF9kaXJlbnQobmV3X2RpciwgbmV3X25hbWUsIG5ld19sZW4sICZkZSwgMSkpKSB7Ci0JCWhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOworCWlmICgociA9IGhwZnNfYWRkX2RpcmVudChuZXdfZGlyLCBuZXdfbmFtZSwgbmV3X2xlbiwgJmRlKSkpIHsKIAkJaWYgKHIgPT0gLTEpIGhwZnNfZXJyb3IobmV3X2Rpci0+aV9zYiwgImhwZnNfcmVuYW1lOiBkaXJlbnQgYWxyZWFkeSBleGlzdHMhIik7CiAJCWVyciA9IHIgPT0gMSA/IC1FTk9TUEMgOiAtRUZTRVJST1I7CiAJCWlmIChuZXdfZGlyICE9IG9sZF9kaXIpIGhwZnNfYnJlbHNlNCgmcWJoKTsKQEAgLTYyMSwyMCArNTg2LDE3IEBACiAJCiAJaWYgKG5ld19kaXIgPT0gb2xkX2RpcikKIAkJaWYgKCEoZGVwID0gbWFwX2RpcmVudChvbGRfZGlyLCBocGZzX2kob2xkX2RpciktPmlfZG5vLCBvbGRfbmFtZSwgb2xkX2xlbiwgJmRubywgJnFiaCkpKSB7Ci0JCQlocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAkJCWhwZnNfZXJyb3IoaS0+aV9zYiwgImxvb2t1cCBzdWNjZWVkZWQgYnV0IG1hcCBkaXJlbnQgZmFpbGVkIGF0ICMyIik7CiAJCQllcnIgPSAtRU5PRU5UOwogCQkJZ290byBlbmQxOwogCQl9CiAKIAlpZiAoKHIgPSBocGZzX3JlbW92ZV9kaXJlbnQob2xkX2RpciwgZG5vLCBkZXAsICZxYmgsIDApKSkgewotCQlocGZzX3VubG9ja19jcmVhdGlvbihpLT5pX3NiKTsKIAkJaHBmc19lcnJvcihpLT5pX3NiLCAiaHBmc19yZW5hbWU6IGNvdWxkIG5vdCByZW1vdmUgZGlyZW50Iik7CiAJCWVyciA9IHIgPT0gMiA/IC1FTk9TUEMgOiAtRUZTRVJST1I7CiAJCWdvdG8gZW5kMTsKIAl9Ci0JaHBmc191bmxvY2tfY3JlYXRpb24oaS0+aV9zYik7Ci0JCisKIAllbmQ6CiAJaHBmc19pKGkpLT5pX3BhcmVudF9kaXIgPSBuZXdfZGlyLT5pX2lubzsKIAlpZiAoU19JU0RJUihpLT5pX21vZGUpKSB7CkBAIC02NDIsMjIgKzYwNCwxNCBAQAogCQlkcm9wX25saW5rKG9sZF9kaXIpOwogCX0KIAlpZiAoKGZub2RlID0gaHBmc19tYXBfZm5vZGUoaS0+aV9zYiwgaS0+aV9pbm8sICZiaCkpKSB7Ci0JCWZub2RlLT51cCA9IG5ld19kaXItPmlfaW5vOworCQlmbm9kZS0+dXAgPSBjcHVfdG9fbGUzMihuZXdfZGlyLT5pX2lubyk7CiAJCWZub2RlLT5sZW4gPSBuZXdfbGVuOwogCQltZW1jcHkoZm5vZGUtPm5hbWUsIG5ld19uYW1lLCBuZXdfbGVuPjE1PzE1Om5ld19sZW4pOwogCQlpZiAobmV3X2xlbiA8IDE1KSBtZW1zZXQoJmZub2RlLT5uYW1lW25ld19sZW5dLCAwLCAxNSAtIG5ld19sZW4pOwogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCWJyZWxzZShiaCk7CiAJfQotCWhwZnNfaShpKS0+aV9jb252ID0gaHBmc19zYihpLT5pX3NiKS0+c2JfY29udjsKLQlocGZzX2RlY2lkZV9jb252KGksIG5ld19uYW1lLCBuZXdfbGVuKTsKIGVuZDE6Ci0JaWYgKG9sZF9kaXIgIT0gbmV3X2RpcikKLQkJbXV0ZXhfdW5sb2NrKCZocGZzX2kobmV3X2RpciktPmlfbXV0ZXgpOwotCW11dGV4X3VubG9jaygmaHBmc19pKG9sZF9kaXIpLT5pX211dGV4KTsKLQltdXRleF91bmxvY2soJmhwZnNfaShpKS0+aV9wYXJlbnRfbXV0ZXgpOwotCWlmIChuZXdfaW5vZGUpCi0JCW11dGV4X3VubG9jaygmaHBmc19pKG5ld19pbm9kZSktPmlfcGFyZW50X211dGV4KTsKIAlocGZzX3VubG9jayhpLT5pX3NiKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9zdXBlci5jIGIvZnMvaHBmcy9zdXBlci5jCmluZGV4IGM4OWI0MDguLjk4NTgwYTMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvc3VwZXIuYworKysgYi9mcy9ocGZzL3N1cGVyLmMKQEAgLTE4LDE1ICsxOCwxNiBAQAogCiAvKiBNYXJrIHRoZSBmaWxlc3lzdGVtIGRpcnR5LCBzbyB0aGF0IGNoa2RzayBjaGVja3MgaXQgd2hlbiBvcy8yIGJvb3RlZCAqLwogCi1zdGF0aWMgdm9pZCBtYXJrX2RpcnR5KHN0cnVjdCBzdXBlcl9ibG9jayAqcykKK3N0YXRpYyB2b2lkIG1hcmtfZGlydHkoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBpbnQgcmVtb3VudCkKIHsKLQlpZiAoaHBmc19zYihzKS0+c2JfY2hrZHNrICYmICEocy0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKwlpZiAoaHBmc19zYihzKS0+c2JfY2hrZHNrICYmIChyZW1vdW50IHx8ICEocy0+c19mbGFncyAmIE1TX1JET05MWSkpKSB7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJCXN0cnVjdCBocGZzX3NwYXJlX2Jsb2NrICpzYjsKIAkJaWYgKChzYiA9IGhwZnNfbWFwX3NlY3RvcihzLCAxNywgJmJoLCAwKSkpIHsKIAkJCXNiLT5kaXJ0eSA9IDE7CiAJCQlzYi0+b2xkX3dyb3RlID0gMDsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwkJCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKIAkJCWJyZWxzZShiaCk7CiAJCX0KIAl9CkBAIC00MCwxMCArNDEsMTIgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBocGZzX3NwYXJlX2Jsb2NrICpzYjsKIAlpZiAocy0+c19mbGFncyAmIE1TX1JET05MWSkgcmV0dXJuOworCXN5bmNfYmxvY2tkZXYocy0+c19iZGV2KTsKIAlpZiAoKHNiID0gaHBmc19tYXBfc2VjdG9yKHMsIDE3LCAmYmgsIDApKSkgewogCQlzYi0+ZGlydHkgPSBocGZzX3NiKHMpLT5zYl9jaGtkc2sgPiAxIC0gaHBmc19zYihzKS0+c2Jfd2FzX2Vycm9yOwogCQlzYi0+b2xkX3dyb3RlID0gaHBmc19zYihzKS0+c2JfY2hrZHNrID49IDIgJiYgIWhwZnNfc2IocyktPnNiX3dhc19lcnJvcjsKIAkJbWFya19idWZmZXJfZGlydHkoYmgpOworCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7CiAJCWJyZWxzZShiaCk7CiAJfQogfQpAQCAtNjMsMTMgKzY2LDEzIEBACiAJaWYgKCFocGZzX3NiKHMpLT5zYl93YXNfZXJyb3IpIHsKIAkJaWYgKGhwZnNfc2IocyktPnNiX2VyciA9PSAyKSB7CiAJCQlwcmludGsoIjsgY3Jhc2hpbmcgdGhlIHN5c3RlbSBiZWNhdXNlIHlvdSB3YW50ZWQgaXRcbiIpOwotCQkJbWFya19kaXJ0eShzKTsKKwkJCW1hcmtfZGlydHkocywgMCk7CiAJCQlwYW5pYygiSFBGUyBwYW5pYyIpOwogCQl9IGVsc2UgaWYgKGhwZnNfc2IocyktPnNiX2VyciA9PSAxKSB7CiAJCQlpZiAocy0+c19mbGFncyAmIE1TX1JET05MWSkgcHJpbnRrKCI7IGFscmVhZHkgbW91bnRlZCByZWFkLW9ubHlcbiIpOwogCQkJZWxzZSB7CiAJCQkJcHJpbnRrKCI7IHJlbW91bnRpbmcgcmVhZC1vbmx5XG4iKTsKLQkJCQltYXJrX2RpcnR5KHMpOworCQkJCW1hcmtfZGlydHkocywgMCk7CiAJCQkJcy0+c19mbGFncyB8PSBNU19SRE9OTFk7CiAJCQl9CiAJCX0gZWxzZSBpZiAocy0+c19mbGFncyAmIE1TX1JET05MWSkgcHJpbnRrKCI7IGdvaW5nIG9uIC0gYnV0IGFueXRoaW5nIHdvbid0IGJlIGRlc3Ryb3llZCBiZWNhdXNlIGl0J3MgcmVhZC1vbmx5XG4iKTsKQEAgLTEwMiw5ICsxMDUsMTIgQEAKIHsKIAlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOwogCisJaHBmc19sb2NrKHMpOworCXVubWFya19kaXJ0eShzKTsKKwlocGZzX3VubG9jayhzKTsKKwogCWtmcmVlKHNiaS0+c2JfY3BfdGFibGUpOwogCWtmcmVlKHNiaS0+c2JfYm1wX2Rpcik7Ci0JdW5tYXJrX2RpcnR5KHMpOwogCXMtPnNfZnNfaW5mbyA9IE5VTEw7CiAJa2ZyZWUoc2JpKTsKIH0KQEAgLTEyOSw3ICsxMzUsNyBAQAogCW5fYmFuZHMgPSAoaHBmc19zYihzKS0+c2JfZnNfc2l6ZSArIDB4M2ZmZikgPj4gMTQ7CiAJY291bnQgPSAwOwogCWZvciAobiA9IDA7IG4gPCBuX2JhbmRzOyBuKyspCi0JCWNvdW50ICs9IGhwZnNfY291bnRfb25lX2JpdG1hcChzLCBocGZzX3NiKHMpLT5zYl9ibXBfZGlyW25dKTsKKwkJY291bnQgKz0gaHBmc19jb3VudF9vbmVfYml0bWFwKHMsIGxlMzJfdG9fY3B1KGhwZnNfc2IocyktPnNiX2JtcF9kaXJbbl0pKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKQEAgLTE4OCw4ICsxOTQsNiBAQAogewogCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmVpID0gKHN0cnVjdCBocGZzX2lub2RlX2luZm8gKikgZm9vOwogCi0JbXV0ZXhfaW5pdCgmZWktPmlfbXV0ZXgpOwotCW11dGV4X2luaXQoJmVpLT5pX3BhcmVudF9tdXRleCk7CiAJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIH0KIApAQCAtMjE4LDcgKzIyMiw2IEBACiAKIGVudW0gewogCU9wdF9oZWxwLCBPcHRfdWlkLCBPcHRfZ2lkLCBPcHRfdW1hc2ssIE9wdF9jYXNlX2xvd2VyLCBPcHRfY2FzZV9hc2lzLAotCU9wdF9jb252X2JpbmFyeSwgT3B0X2NvbnZfdGV4dCwgT3B0X2NvbnZfYXV0bywKIAlPcHRfY2hlY2tfbm9uZSwgT3B0X2NoZWNrX25vcm1hbCwgT3B0X2NoZWNrX3N0cmljdCwKIAlPcHRfZXJyX2NvbnQsIE9wdF9lcnJfcm8sIE9wdF9lcnJfcGFuaWMsCiAJT3B0X2Vhc19ubywgT3B0X2Vhc19ybywgT3B0X2Vhc19ydywKQEAgLTIzMyw5ICsyMzYsNiBAQAogCXtPcHRfdW1hc2ssICJ1bWFzaz0lbyJ9LAogCXtPcHRfY2FzZV9sb3dlciwgImNhc2U9bG93ZXIifSwKIAl7T3B0X2Nhc2VfYXNpcywgImNhc2U9YXNpcyJ9LAotCXtPcHRfY29udl9iaW5hcnksICJjb252PWJpbmFyeSJ9LAotCXtPcHRfY29udl90ZXh0LCAiY29udj10ZXh0In0sCi0Je09wdF9jb252X2F1dG8sICJjb252PWF1dG8ifSwKIAl7T3B0X2NoZWNrX25vbmUsICJjaGVjaz1ub25lIn0sCiAJe09wdF9jaGVja19ub3JtYWwsICJjaGVjaz1ub3JtYWwifSwKIAl7T3B0X2NoZWNrX3N0cmljdCwgImNoZWNrPXN0cmljdCJ9LApAQCAtMjUzLDcgKzI1Myw3IEBACiB9OwogCiBzdGF0aWMgaW50IHBhcnNlX29wdHMoY2hhciAqb3B0cywgdWlkX3QgKnVpZCwgZ2lkX3QgKmdpZCwgdW1vZGVfdCAqdW1hc2ssCi0JCSAgICAgIGludCAqbG93ZXJjYXNlLCBpbnQgKmNvbnYsIGludCAqZWFzLCBpbnQgKmNoaywgaW50ICplcnJzLAorCQkgICAgICBpbnQgKmxvd2VyY2FzZSwgaW50ICplYXMsIGludCAqY2hrLCBpbnQgKmVycnMsCiAJCSAgICAgIGludCAqY2hrZHNrLCBpbnQgKnRpbWVzaGlmdCkKIHsKIAljaGFyICpwOwpAQCAtMjk1LDE1ICsyOTUsNiBAQAogCQljYXNlIE9wdF9jYXNlX2FzaXM6CiAJCQkqbG93ZXJjYXNlID0gMDsKIAkJCWJyZWFrOwotCQljYXNlIE9wdF9jb252X2JpbmFyeToKLQkJCSpjb252ID0gQ09OVl9CSU5BUlk7Ci0JCQlicmVhazsKLQkJY2FzZSBPcHRfY29udl90ZXh0OgotCQkJKmNvbnYgPSBDT05WX1RFWFQ7Ci0JCQlicmVhazsKLQkJY2FzZSBPcHRfY29udl9hdXRvOgotCQkJKmNvbnYgPSBDT05WX0FVVE87Ci0JCQlicmVhazsKIAkJY2FzZSBPcHRfY2hlY2tfbm9uZToKIAkJCSpjaGsgPSAwOwogCQkJYnJlYWs7CkBAIC0zNzAsOSArMzYxLDYgQEAKICAgICAgIHVtYXNrPXh4eCAgICAgICAgIHNldCBtb2RlIG9mIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBtb2RlIHNwZWNpZmllZCBpbiBlYXNcblwKICAgICAgIGNhc2U9bG93ZXIgICAgICAgIGxvd2VyY2FzZSBhbGwgZmlsZXNcblwKICAgICAgIGNhc2U9YXNpcyAgICAgICAgIGRvIG5vdCBsb3dlcmNhc2UgZmlsZXMgKGRlZmF1bHQpXG5cCi0gICAgICBjb252PWJpbmFyeSAgICAgICBkbyBub3QgY29udmVydCBDUi9MRiAtPiBMRiAoZGVmYXVsdClcblwKLSAgICAgIGNvbnY9YXV0byAgICAgICAgIGNvbnZlcnQgb25seSBmaWxlcyB3aXRoIGtub3duIHRleHQgZXh0ZW5zaW9uc1xuXAotICAgICAgY29udj10ZXh0ICAgICAgICAgY29udmVydCBhbGwgZmlsZXNcblwKICAgICAgIGNoZWNrPW5vbmUgICAgICAgIG5vIGZzIGNoZWNrcyAtIGtlcm5lbCBtYXkgY3Jhc2ggb24gY29ycnVwdGVkIGZpbGVzeXN0ZW1cblwKICAgICAgIGNoZWNrPW5vcm1hbCAgICAgIGRvIHNvbWUgY2hlY2tzIC0gaXQgc2hvdWxkIG5vdCBjcmFzaCAoZGVmYXVsdClcblwKICAgICAgIGNoZWNrPXN0cmljdCAgICAgIGRvIGV4dHJhIHRpbWUtY29uc3VtaW5nIGNoZWNrcywgdXNlZCBmb3IgZGVidWdnaW5nXG5cCkBAIC0zOTQsNyArMzgyLDcgQEAKIAl1aWRfdCB1aWQ7CiAJZ2lkX3QgZ2lkOwogCXVtb2RlX3QgdW1hc2s7Ci0JaW50IGxvd2VyY2FzZSwgY29udiwgZWFzLCBjaGssIGVycnMsIGNoa2RzaywgdGltZXNoaWZ0OworCWludCBsb3dlcmNhc2UsIGVhcywgY2hrLCBlcnJzLCBjaGtkc2ssIHRpbWVzaGlmdDsKIAlpbnQgbzsKIAlzdHJ1Y3QgaHBmc19zYl9pbmZvICpzYmkgPSBocGZzX3NiKHMpOwogCWNoYXIgKm5ld19vcHRzID0ga3N0cmR1cChkYXRhLCBHRlBfS0VSTkVMKTsKQEAgLTQwNSwxMSArMzkzLDExIEBACiAJbG9ja19zdXBlcihzKTsKIAl1aWQgPSBzYmktPnNiX3VpZDsgZ2lkID0gc2JpLT5zYl9naWQ7CiAJdW1hc2sgPSAwNzc3ICYgfnNiaS0+c2JfbW9kZTsKLQlsb3dlcmNhc2UgPSBzYmktPnNiX2xvd2VyY2FzZTsgY29udiA9IHNiaS0+c2JfY29udjsKKwlsb3dlcmNhc2UgPSBzYmktPnNiX2xvd2VyY2FzZTsKIAllYXMgPSBzYmktPnNiX2VhczsgY2hrID0gc2JpLT5zYl9jaGs7IGNoa2RzayA9IHNiaS0+c2JfY2hrZHNrOwogCWVycnMgPSBzYmktPnNiX2VycjsgdGltZXNoaWZ0ID0gc2JpLT5zYl90aW1lc2hpZnQ7CiAKLQlpZiAoIShvID0gcGFyc2Vfb3B0cyhkYXRhLCAmdWlkLCAmZ2lkLCAmdW1hc2ssICZsb3dlcmNhc2UsICZjb252LAorCWlmICghKG8gPSBwYXJzZV9vcHRzKGRhdGEsICZ1aWQsICZnaWQsICZ1bWFzaywgJmxvd2VyY2FzZSwKIAkgICAgJmVhcywgJmNoaywgJmVycnMsICZjaGtkc2ssICZ0aW1lc2hpZnQpKSkgewogCQlwcmludGsoIkhQRlM6IGJhZCBtb3VudCBvcHRpb25zLlxuIik7CiAJCWdvdG8gb3V0X2VycjsKQEAgLTQyNywxMSArNDE1LDExIEBACiAKIAlzYmktPnNiX3VpZCA9IHVpZDsgc2JpLT5zYl9naWQgPSBnaWQ7CiAJc2JpLT5zYl9tb2RlID0gMDc3NyAmIH51bWFzazsKLQlzYmktPnNiX2xvd2VyY2FzZSA9IGxvd2VyY2FzZTsgc2JpLT5zYl9jb252ID0gY29udjsKKwlzYmktPnNiX2xvd2VyY2FzZSA9IGxvd2VyY2FzZTsKIAlzYmktPnNiX2VhcyA9IGVhczsgc2JpLT5zYl9jaGsgPSBjaGs7IHNiaS0+c2JfY2hrZHNrID0gY2hrZHNrOwogCXNiaS0+c2JfZXJyID0gZXJyczsgc2JpLT5zYl90aW1lc2hpZnQgPSB0aW1lc2hpZnQ7CiAKLQlpZiAoISgqZmxhZ3MgJiBNU19SRE9OTFkpKSBtYXJrX2RpcnR5KHMpOworCWlmICghKCpmbGFncyAmIE1TX1JET05MWSkpIG1hcmtfZGlydHkocywgMSk7CiAKIAlyZXBsYWNlX21vdW50X29wdGlvbnMocywgbmV3X29wdHMpOwogCkBAIC00NzEsNyArNDU5LDcgQEAKIAl1aWRfdCB1aWQ7CiAJZ2lkX3QgZ2lkOwogCXVtb2RlX3QgdW1hc2s7Ci0JaW50IGxvd2VyY2FzZSwgY29udiwgZWFzLCBjaGssIGVycnMsIGNoa2RzaywgdGltZXNoaWZ0OworCWludCBsb3dlcmNhc2UsIGVhcywgY2hrLCBlcnJzLCBjaGtkc2ssIHRpbWVzaGlmdDsKIAogCWRub2RlX3NlY25vIHJvb3RfZG5vOwogCXN0cnVjdCBocGZzX2RpcmVudCAqZGUgPSBOVUxMOwpAQCAtNDc5LDExICs0NjcsNiBAQAogCiAJaW50IG87CiAKLQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA+IDEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJIUEZTIGlzIG5vdCBTTVAgc2FmZVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXNhdmVfbW91bnRfb3B0aW9ucyhzLCBvcHRpb25zKTsKIAogCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsKQEAgLTQ5NSwyMCArNDc4LDIwIEBACiAJc2JpLT5zYl9ibXBfZGlyID0gTlVMTDsKIAlzYmktPnNiX2NwX3RhYmxlID0gTlVMTDsKIAotCW11dGV4X2luaXQoJnNiaS0+aHBmc19jcmVhdGlvbl9kZSk7CisJbXV0ZXhfaW5pdCgmc2JpLT5ocGZzX211dGV4KTsKKwlocGZzX2xvY2socyk7CiAKIAl1aWQgPSBjdXJyZW50X3VpZCgpOwogCWdpZCA9IGN1cnJlbnRfZ2lkKCk7CiAJdW1hc2sgPSBjdXJyZW50X3VtYXNrKCk7CiAJbG93ZXJjYXNlID0gMDsKLQljb252ID0gQ09OVl9CSU5BUlk7CiAJZWFzID0gMjsKIAljaGsgPSAxOwogCWVycnMgPSAxOwogCWNoa2RzayA9IDE7CiAJdGltZXNoaWZ0ID0gMDsKIAotCWlmICghKG8gPSBwYXJzZV9vcHRzKG9wdGlvbnMsICZ1aWQsICZnaWQsICZ1bWFzaywgJmxvd2VyY2FzZSwgJmNvbnYsCisJaWYgKCEobyA9IHBhcnNlX29wdHMob3B0aW9ucywgJnVpZCwgJmdpZCwgJnVtYXNrLCAmbG93ZXJjYXNlLAogCSAgICAmZWFzLCAmY2hrLCAmZXJycywgJmNoa2RzaywgJnRpbWVzaGlmdCkpKSB7CiAJCXByaW50aygiSFBGUzogYmFkIG1vdW50IG9wdGlvbnMuXG4iKTsKIAkJZ290byBiYWlsMDsKQEAgLTUyNiw5ICs1MDksOSBAQAogCWlmICghKHNwYXJlYmxvY2sgPSBocGZzX21hcF9zZWN0b3IocywgMTcsICZiaDIsIDApKSkgZ290byBiYWlsMzsKIAogCS8qIENoZWNrIG1hZ2ljcyAqLwotCWlmICgvKmJvb3RibG9jay0+bWFnaWMgIT0gQkJfTUFHSUMKLQkgICAgfHwqLyBzdXBlcmJsb2NrLT5tYWdpYyAhPSBTQl9NQUdJQwotCSAgICB8fCBzcGFyZWJsb2NrLT5tYWdpYyAhPSBTUF9NQUdJQykgeworCWlmICgvKmxlMTZfdG9fY3B1KGJvb3RibG9jay0+bWFnaWMpICE9IEJCX01BR0lDCisJICAgIHx8Ki8gbGUzMl90b19jcHUoc3VwZXJibG9jay0+bWFnaWMpICE9IFNCX01BR0lDCisJICAgIHx8IGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPm1hZ2ljKSAhPSBTUF9NQUdJQykgewogCQlpZiAoIXNpbGVudCkgcHJpbnRrKCJIUEZTOiBCYWQgbWFnaWMgLi4uIHByb2JhYmx5IG5vdCBIUEZTXG4iKTsKIAkJZ290byBiYWlsNDsKIAl9CkBAIC01NDksMTkgKzUzMiwxOCBAQAogCXMtPnNfb3AgPSAmaHBmc19zb3BzOwogCXMtPnNfZF9vcCA9ICZocGZzX2RlbnRyeV9vcGVyYXRpb25zOwogCi0Jc2JpLT5zYl9yb290ID0gc3VwZXJibG9jay0+cm9vdDsKLQlzYmktPnNiX2ZzX3NpemUgPSBzdXBlcmJsb2NrLT5uX3NlY3RvcnM7Ci0Jc2JpLT5zYl9iaXRtYXBzID0gc3VwZXJibG9jay0+Yml0bWFwczsKLQlzYmktPnNiX2RpcmJhbmRfc3RhcnQgPSBzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydDsKLQlzYmktPnNiX2RpcmJhbmRfc2l6ZSA9IHN1cGVyYmxvY2stPm5fZGlyX2JhbmQ7Ci0Jc2JpLT5zYl9kbWFwID0gc3VwZXJibG9jay0+ZGlyX2JhbmRfYml0bWFwOworCXNiaS0+c2Jfcm9vdCA9IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPnJvb3QpOworCXNiaS0+c2JfZnNfc2l6ZSA9IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPm5fc2VjdG9ycyk7CisJc2JpLT5zYl9iaXRtYXBzID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+Yml0bWFwcyk7CisJc2JpLT5zYl9kaXJiYW5kX3N0YXJ0ID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQpOworCXNiaS0+c2JfZGlyYmFuZF9zaXplID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+bl9kaXJfYmFuZCk7CisJc2JpLT5zYl9kbWFwID0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfYml0bWFwKTsKIAlzYmktPnNiX3VpZCA9IHVpZDsKIAlzYmktPnNiX2dpZCA9IGdpZDsKIAlzYmktPnNiX21vZGUgPSAwNzc3ICYgfnVtYXNrOwogCXNiaS0+c2Jfbl9mcmVlID0gLTE7CiAJc2JpLT5zYl9uX2ZyZWVfZG5vZGVzID0gLTE7CiAJc2JpLT5zYl9sb3dlcmNhc2UgPSBsb3dlcmNhc2U7Ci0Jc2JpLT5zYl9jb252ID0gY29udjsKIAlzYmktPnNiX2VhcyA9IGVhczsKIAlzYmktPnNiX2NoayA9IGNoazsKIAlzYmktPnNiX2Noa2RzayA9IGNoa2RzazsKQEAgLTU3Myw3ICs1NTUsNyBAQAogCXNiaS0+c2JfbWF4X2Z3ZF9hbGxvYyA9IDB4ZmZmZmZmOwogCQogCS8qIExvYWQgYml0bWFwIGRpcmVjdG9yeSAqLwotCWlmICghKHNiaS0+c2JfYm1wX2RpciA9IGhwZnNfbG9hZF9iaXRtYXBfZGlyZWN0b3J5KHMsIHN1cGVyYmxvY2stPmJpdG1hcHMpKSkKKwlpZiAoIShzYmktPnNiX2JtcF9kaXIgPSBocGZzX2xvYWRfYml0bWFwX2RpcmVjdG9yeShzLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5iaXRtYXBzKSkpKQogCQlnb3RvIGJhaWw0OwogCQogCS8qIENoZWNrIGZvciBnZW5lcmFsIGZzIGVycm9ycyovCkBAIC01OTEsMjAgKzU3MywyMCBAQAogCQltYXJrX2J1ZmZlcl9kaXJ0eShiaDIpOwogCX0KIAotCWlmIChzcGFyZWJsb2NrLT5ob3RmaXhlc191c2VkIHx8IHNwYXJlYmxvY2stPm5fc3BhcmVzX3VzZWQpIHsKKwlpZiAobGUzMl90b19jcHUoc3BhcmVibG9jay0+aG90Zml4ZXNfdXNlZCkgfHwgbGUzMl90b19jcHUoc3BhcmVibG9jay0+bl9zcGFyZXNfdXNlZCkpIHsKIAkJaWYgKGVycnMgPj0gMikgewogCQkJcHJpbnRrKCJIUEZTOiBIb3RmaXhlcyBub3Qgc3VwcG9ydGVkIGhlcmUsIHRyeSBjaGtkc2tcbiIpOwotCQkJbWFya19kaXJ0eShzKTsKKwkJCW1hcmtfZGlydHkocywgMCk7CiAJCQlnb3RvIGJhaWw0OwogCQl9CiAJCWhwZnNfZXJyb3IocywgImhvdGZpeGVzIG5vdCBzdXBwb3J0ZWQgaGVyZSwgdHJ5IGNoa2RzayIpOwogCQlpZiAoZXJycyA9PSAwKSBwcmludGsoIkhQRlM6IFByb2NlZWRpbmcsIGJ1dCB5b3VyIGZpbGVzeXN0ZW0gd2lsbCBiZSBwcm9iYWJseSBjb3JydXB0ZWQgYnkgdGhpcyBkcml2ZXIuLi5cbiIpOwogCQllbHNlIHByaW50aygiSFBGUzogVGhpcyBkcml2ZXIgbWF5IHJlYWQgYmFkIGZpbGVzIG9yIGNyYXNoIHdoZW4gb3BlcmF0aW5nIG9uIGRpc2sgd2l0aCBob3RmaXhlcy5cbiIpOwogCX0KLQlpZiAoc3BhcmVibG9jay0+bl9kbm9kZV9zcGFyZXMgIT0gc3BhcmVibG9jay0+bl9kbm9kZV9zcGFyZXNfZnJlZSkgeworCWlmIChsZTMyX3RvX2NwdShzcGFyZWJsb2NrLT5uX2Rub2RlX3NwYXJlcykgIT0gbGUzMl90b19jcHUoc3BhcmVibG9jay0+bl9kbm9kZV9zcGFyZXNfZnJlZSkpIHsKIAkJaWYgKGVycnMgPj0gMikgewogCQkJcHJpbnRrKCJIUEZTOiBTcGFyZSBkbm9kZXMgdXNlZCwgdHJ5IGNoa2Rza1xuIik7Ci0JCQltYXJrX2RpcnR5KHMpOworCQkJbWFya19kaXJ0eShzLCAwKTsKIAkJCWdvdG8gYmFpbDQ7CiAJCX0KIAkJaHBmc19lcnJvcihzLCAid2FybmluZzogc3BhcmUgZG5vZGVzIHVzZWQsIHRyeSBjaGtkc2siKTsKQEAgLTYxMiwyNiArNTk0LDI2IEBACiAJfQogCWlmIChjaGspIHsKIAkJdW5zaWduZWQgYTsKLQkJaWYgKHN1cGVyYmxvY2stPmRpcl9iYW5kX2VuZCAtIHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0ICsgMSAhPSBzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kIHx8Ci0JCSAgICBzdXBlcmJsb2NrLT5kaXJfYmFuZF9lbmQgPCBzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCB8fCBzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kID4gMHg0MDAwKSB7CisJCWlmIChsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9lbmQpIC0gbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQpICsgMSAhPSBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKSB8fAorCQkgICAgbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfZW5kKSA8IGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmRpcl9iYW5kX3N0YXJ0KSB8fCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKSA+IDB4NDAwMCkgewogCQkJaHBmc19lcnJvcihzLCAiZGlyIGJhbmQgc2l6ZSBtaXNtYXRjaDogZGlyX2JhbmRfc3RhcnQ9PSUwOHgsIGRpcl9iYW5kX2VuZD09JTA4eCwgbl9kaXJfYmFuZD09JTA4eCIsCi0JCQkJc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQsIHN1cGVyYmxvY2stPmRpcl9iYW5kX2VuZCwgc3VwZXJibG9jay0+bl9kaXJfYmFuZCk7CisJCQkJbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQpLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5kaXJfYmFuZF9lbmQpLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKSk7CiAJCQlnb3RvIGJhaWw0OwogCQl9CiAJCWEgPSBzYmktPnNiX2RpcmJhbmRfc2l6ZTsKIAkJc2JpLT5zYl9kaXJiYW5kX3NpemUgPSAwOwotCQlpZiAoaHBmc19jaGtfc2VjdG9ycyhzLCBzdXBlcmJsb2NrLT5kaXJfYmFuZF9zdGFydCwgc3VwZXJibG9jay0+bl9kaXJfYmFuZCwgImRpcl9iYW5kIikgfHwKLQkJICAgIGhwZnNfY2hrX3NlY3RvcnMocywgc3VwZXJibG9jay0+ZGlyX2JhbmRfYml0bWFwLCA0LCAiZGlyX2JhbmRfYml0bWFwIikgfHwKLQkJICAgIGhwZnNfY2hrX3NlY3RvcnMocywgc3VwZXJibG9jay0+Yml0bWFwcywgNCwgImJpdG1hcHMiKSkgewotCQkJbWFya19kaXJ0eShzKTsKKwkJaWYgKGhwZnNfY2hrX3NlY3RvcnMocywgbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfc3RhcnQpLCBsZTMyX3RvX2NwdShzdXBlcmJsb2NrLT5uX2Rpcl9iYW5kKSwgImRpcl9iYW5kIikgfHwKKwkJICAgIGhwZnNfY2hrX3NlY3RvcnMocywgbGUzMl90b19jcHUoc3VwZXJibG9jay0+ZGlyX2JhbmRfYml0bWFwKSwgNCwgImRpcl9iYW5kX2JpdG1hcCIpIHx8CisJCSAgICBocGZzX2Noa19zZWN0b3JzKHMsIGxlMzJfdG9fY3B1KHN1cGVyYmxvY2stPmJpdG1hcHMpLCA0LCAiYml0bWFwcyIpKSB7CisJCQltYXJrX2RpcnR5KHMsIDApOwogCQkJZ290byBiYWlsNDsKIAkJfQogCQlzYmktPnNiX2RpcmJhbmRfc2l6ZSA9IGE7CiAJfSBlbHNlIHByaW50aygiSFBGUzogWW91IHJlYWxseSBkb24ndCB3YW50IGFueSBjaGVja3M/IFlvdSBhcmUgY3JhenkuLi5cbiIpOwogCiAJLyogTG9hZCBjb2RlIHBhZ2UgdGFibGUgKi8KLQlpZiAoc3BhcmVibG9jay0+bl9jb2RlX3BhZ2VzKQotCQlpZiAoIShzYmktPnNiX2NwX3RhYmxlID0gaHBmc19sb2FkX2NvZGVfcGFnZShzLCBzcGFyZWJsb2NrLT5jb2RlX3BhZ2VfZGlyKSkpCisJaWYgKGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPm5fY29kZV9wYWdlcykpCisJCWlmICghKHNiaS0+c2JfY3BfdGFibGUgPSBocGZzX2xvYWRfY29kZV9wYWdlKHMsIGxlMzJfdG9fY3B1KHNwYXJlYmxvY2stPmNvZGVfcGFnZV9kaXIpKSkpCiAJCQlwcmludGsoIkhQRlM6IFdhcm5pbmc6IGNvZGUgcGFnZSBzdXBwb3J0IGlzIGRpc2FibGVkXG4iKTsKIAogCWJyZWxzZShiaDIpOwpAQCAtNjYwLDEzICs2NDIsMTMgQEAKIAlpZiAoIWRlKQogCQlocGZzX2Vycm9yKHMsICJ1bmFibGUgdG8gZmluZCByb290IGRpciIpOwogCWVsc2UgewotCQlyb290LT5pX2F0aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChzLCBkZS0+cmVhZF9kYXRlKTsKKwkJcm9vdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQocywgbGUzMl90b19jcHUoZGUtPnJlYWRfZGF0ZSkpOwogCQlyb290LT5pX2F0aW1lLnR2X25zZWMgPSAwOwotCQlyb290LT5pX210aW1lLnR2X3NlYyA9IGxvY2FsX3RvX2dtdChzLCBkZS0+d3JpdGVfZGF0ZSk7CisJCXJvb3QtPmlfbXRpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KHMsIGxlMzJfdG9fY3B1KGRlLT53cml0ZV9kYXRlKSk7CiAJCXJvb3QtPmlfbXRpbWUudHZfbnNlYyA9IDA7Ci0JCXJvb3QtPmlfY3RpbWUudHZfc2VjID0gbG9jYWxfdG9fZ210KHMsIGRlLT5jcmVhdGlvbl9kYXRlKTsKKwkJcm9vdC0+aV9jdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQocywgbGUzMl90b19jcHUoZGUtPmNyZWF0aW9uX2RhdGUpKTsKIAkJcm9vdC0+aV9jdGltZS50dl9uc2VjID0gMDsKLQkJaHBmc19pKHJvb3QpLT5pX2VhX3NpemUgPSBkZS0+ZWFfc2l6ZTsKKwkJaHBmc19pKHJvb3QpLT5pX2VhX3NpemUgPSBsZTE2X3RvX2NwdShkZS0+ZWFfc2l6ZSk7CiAJCWhwZnNfaShyb290KS0+aV9wYXJlbnRfZGlyID0gcm9vdC0+aV9pbm87CiAJCWlmIChyb290LT5pX3NpemUgPT0gLTEpCiAJCQlyb290LT5pX3NpemUgPSAyMDQ4OwpAQCAtNjc0LDYgKzY1Niw3IEBACiAJCQlyb290LT5pX2Jsb2NrcyA9IDU7CiAJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAl9CisJaHBmc191bmxvY2socyk7CiAJcmV0dXJuIDA7CiAKIGJhaWw0OglicmVsc2UoYmgyKTsKQEAgLTY4MSw2ICs2NjQsNyBAQAogYmFpbDI6CWJyZWxzZShiaDApOwogYmFpbDE6CiBiYWlsMDoKKwlocGZzX3VubG9jayhzKTsKIAlrZnJlZShzYmktPnNiX2JtcF9kaXIpOwogCWtmcmVlKHNiaS0+c2JfY3BfdGFibGUpOwogCXMtPnNfZnNfaW5mbyA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9zdXBlci5jIGIvZnMvbG9nZnMvc3VwZXIuYwppbmRleCAzMzQzNWU0Li5jZTAzYTE4IDEwMDY0NAotLS0gYS9mcy9sb2dmcy9zdXBlci5jCisrKyBiL2ZzL2xvZ2ZzL3N1cGVyLmMKQEAgLTQ4MCwxMCArNDgwLDYgQEAKIAkJCSFyZWFkX29ubHkpCiAJCXJldHVybiAtRUlPOwogCi0JbXV0ZXhfaW5pdCgmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOwotCW11dGV4X2luaXQoJnN1cGVyLT5zX29iamVjdF9hbGlhc19tdXRleCk7Ci0JSU5JVF9MSVNUX0hFQUQoJnN1cGVyLT5zX2ZyZWVpbmdfbGlzdCk7Ci0KIAlyZXQgPSBsb2dmc19pbml0X3J3KHNiKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtNjAxLDYgKzU5NywxMCBAQAogCWlmICghc3VwZXIpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCisJbXV0ZXhfaW5pdCgmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOworCW11dGV4X2luaXQoJnN1cGVyLT5zX29iamVjdF9hbGlhc19tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJnN1cGVyLT5zX2ZyZWVpbmdfbGlzdCk7CisKIAlpZiAoIWRldm5hbWUpCiAJCWVyciA9IGxvZ2ZzX2dldF9zYl9iZGV2KHN1cGVyLCB0eXBlLCBkZXZuYW1lKTsKIAllbHNlIGlmIChzdHJuY21wKGRldm5hbWUsICJtdGQiLCAzKSkKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDU0ZmM5OTMuLmUzYzRmMTEgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMTc5LDcgKzE3OSw3IEBACiBzdGF0aWMgaW50IGFjbF9wZXJtaXNzaW9uX2NoZWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAJCWludCAoKmNoZWNrX2FjbCkoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGludCBmbGFncykpCiB7Ci0JdW1vZGVfdAkJCW1vZGUgPSBpbm9kZS0+aV9tb2RlOworCXVuc2lnbmVkIGludCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKIAogCW1hc2sgJj0gTUFZX1JFQUQgfCBNQVlfV1JJVEUgfCBNQVlfRVhFQzsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25hbWVzcGFjZS5jIGIvZnMvbmZzL25hbWVzcGFjZS5jCmluZGV4IDg5ZmMxNjAuLjFmMDYzYmEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmFtZXNwYWNlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX05GU19WNAotc3RhdGljIHJwY19hdXRoZmxhdm9yX3QgbmZzX2ZpbmRfYmVzdF9zZWMoc3RydWN0IG5mczRfc2VjaW5mb19mbGF2b3JzICpmbGF2b3JzLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHJwY19hdXRoZmxhdm9yX3QgbmZzX2ZpbmRfYmVzdF9zZWMoc3RydWN0IG5mczRfc2VjaW5mb19mbGF2b3JzICpmbGF2b3JzKQogewogCXN0cnVjdCBnc3NfYXBpX21lY2ggKm1lY2g7CiAJc3RydWN0IHhkcl9uZXRvYmogb2lkOwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJCX0KIAkJZmxhdm9ycyA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAkJcmV0ID0gc2VjaW5mbyhwYXJlbnQtPmRfaW5vZGUsICZkZW50cnktPmRfbmFtZSwgZmxhdm9ycyk7Ci0JCSpmbGF2b3IgPSBuZnNfZmluZF9iZXN0X3NlYyhmbGF2b3JzLCBkZW50cnktPmRfaW5vZGUpOworCQkqZmxhdm9yID0gbmZzX2ZpbmRfYmVzdF9zZWMoZmxhdm9ycyk7CiAJCXB1dF9wYWdlKHBhZ2UpOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRfZnMuaCBiL2ZzL25mcy9uZnM0X2ZzLmgKaW5kZXggZTFjMjYxZC4uYzRhNjk4MyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRfZnMuaAorKysgYi9mcy9uZnMvbmZzNF9mcy5oCkBAIC00Nyw2ICs0Nyw3IEBACiAJTkZTNENMTlRfTEFZT1VUUkVDQUxMLAogCU5GUzRDTE5UX1NFU1NJT05fUkVTRVQsCiAJTkZTNENMTlRfUkVDQUxMX1NMT1QsCisJTkZTNENMTlRfTEVBU0VfQ09ORklSTSwKIH07CiAKIGVudW0gbmZzNF9zZXNzaW9uX3N0YXRlIHsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5jIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKaW5kZXggNmY4MTkyZi4uYmU3OWRjOSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKKysrIGIvZnMvbmZzL25mczRmaWxlbGF5b3V0LmMKQEAgLTExNyw2ICsxMTcsOCBAQAogCWNhc2UgLUVLRVlFWFBJUkVEOgogCQlycGNfZGVsYXkodGFzaywgRklMRUxBWU9VVF9QT0xMX1JFVFJZX01BWCk7CiAJCWJyZWFrOworCWNhc2UgLU5GUzRFUlJfUkVUUllfVU5DQUNIRURfUkVQOgorCQlicmVhazsKIAlkZWZhdWx0OgogCQlkcHJpbnRrKCIlcyBEUyBlcnJvci4gUmV0cnkgdGhyb3VnaCBNRFMgJWRcbiIsIF9fZnVuY19fLAogCQkJdGFzay0+dGtfc3RhdHVzKTsKQEAgLTQxNiw3ICs0MTgsOCBAQAogZmlsZWxheW91dF9jaGVja19sYXlvdXQoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbG8sCiAJCQlzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsLAogCQkJc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyLAotCQkJc3RydWN0IG5mczRfZGV2aWNlaWQgKmlkKQorCQkJc3RydWN0IG5mczRfZGV2aWNlaWQgKmlkLAorCQkJZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkciAqZHNhZGRyOwogCWludCBzdGF0dXMgPSAtRUlOVkFMOwpAQCAtNDM5LDcgKzQ0Miw3IEBACiAJLyogZmluZCBhbmQgcmVmZXJlbmNlIHRoZSBkZXZpY2VpZCAqLwogCWRzYWRkciA9IG5mczRfZmxfZmluZF9nZXRfZGV2aWNlaWQoaWQpOwogCWlmIChkc2FkZHIgPT0gTlVMTCkgewotCQlkc2FkZHIgPSBnZXRfZGV2aWNlX2luZm8obG8tPnBsaF9pbm9kZSwgaWQpOworCQlkc2FkZHIgPSBnZXRfZGV2aWNlX2luZm8obG8tPnBsaF9pbm9kZSwgaWQsIGdmcF9mbGFncyk7CiAJCWlmIChkc2FkZHIgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTUwMCw3ICs1MDMsOCBAQAogZmlsZWxheW91dF9kZWNvZGVfbGF5b3V0KHN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmZsbywKIAkJCSBzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsLAogCQkJIHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKmxnciwKLQkJCSBzdHJ1Y3QgbmZzNF9kZXZpY2VpZCAqaWQpCisJCQkgc3RydWN0IG5mczRfZGV2aWNlaWQgKmlkLAorCQkJIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgeGRyX3N0cmVhbSBzdHJlYW07CiAJc3RydWN0IHhkcl9idWYgYnVmID0gewpAQCAtNTE2LDcgKzUyMCw3IEBACiAKIAlkcHJpbnRrKCIlczogc2V0X2xheW91dF9tYXAgQmVnaW5cbiIsIF9fZnVuY19fKTsKIAotCXNjcmF0Y2ggPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpOworCXNjcmF0Y2ggPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJaWYgKCFzY3JhdGNoKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNTU0LDEzICs1NTgsMTMgQEAKIAkJZ290byBvdXRfZXJyOwogCiAJZmwtPmZoX2FycmF5ID0ga3phbGxvYyhmbC0+bnVtX2ZoICogc2l6ZW9mKHN0cnVjdCBuZnNfZmggKiksCi0JCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJCQkgICAgICAgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWZsLT5maF9hcnJheSkKIAkJZ290byBvdXRfZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IGZsLT5udW1fZmg7IGkrKykgewogCQkvKiBEbyB3ZSB3YW50IHRvIHVzZSBhIG1lbXBvb2wgaGVyZT8gKi8KLQkJZmwtPmZoX2FycmF5W2ldID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5mc19maCksIEdGUF9LRVJORUwpOworCQlmbC0+ZmhfYXJyYXlbaV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmZzX2ZoKSwgZ2ZwX2ZsYWdzKTsKIAkJaWYgKCFmbC0+ZmhfYXJyYXlbaV0pCiAJCQlnb3RvIG91dF9lcnJfZnJlZTsKIApAQCAtNjA1LDE5ICs2MDksMjAgQEAKIAogc3RhdGljIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIGZpbGVsYXlvdXRfYWxsb2NfbHNlZyhzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsYXlvdXRpZCwKLQkJICAgICAgc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyKQorCQkgICAgICBzdHJ1Y3QgbmZzNF9sYXlvdXRnZXRfcmVzICpsZ3IsCisJCSAgICAgIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgbmZzNF9maWxlbGF5b3V0X3NlZ21lbnQgKmZsOwogCWludCByYzsKIAlzdHJ1Y3QgbmZzNF9kZXZpY2VpZCBpZDsKIAogCWRwcmludGsoIi0tPiAlc1xuIiwgX19mdW5jX18pOwotCWZsID0ga3phbGxvYyhzaXplb2YoKmZsKSwgR0ZQX0tFUk5FTCk7CisJZmwgPSBremFsbG9jKHNpemVvZigqZmwpLCBnZnBfZmxhZ3MpOwogCWlmICghZmwpCiAJCXJldHVybiBOVUxMOwogCi0JcmMgPSBmaWxlbGF5b3V0X2RlY29kZV9sYXlvdXQobGF5b3V0aWQsIGZsLCBsZ3IsICZpZCk7Ci0JaWYgKHJjICE9IDAgfHwgZmlsZWxheW91dF9jaGVja19sYXlvdXQobGF5b3V0aWQsIGZsLCBsZ3IsICZpZCkpIHsKKwlyYyA9IGZpbGVsYXlvdXRfZGVjb2RlX2xheW91dChsYXlvdXRpZCwgZmwsIGxnciwgJmlkLCBnZnBfZmxhZ3MpOworCWlmIChyYyAhPSAwIHx8IGZpbGVsYXlvdXRfY2hlY2tfbGF5b3V0KGxheW91dGlkLCBmbCwgbGdyLCAmaWQsIGdmcF9mbGFncykpIHsKIAkJX2ZpbGVsYXlvdXRfZnJlZV9sc2VnKGZsKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNjMzLDcgKzYzOCw3IEBACiAJCWludCBzaXplID0gKGZsLT5zdHJpcGVfdHlwZSA9PSBTVFJJUEVfU1BBUlNFKSA/CiAJCQlmbC0+ZHNhZGRyLT5kc19udW0gOiBmbC0+ZHNhZGRyLT5zdHJpcGVfY291bnQ7CiAKLQkJZmwtPmNvbW1pdF9idWNrZXRzID0ga2NhbGxvYyhzaXplLCBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9LRVJORUwpOworCQlmbC0+Y29tbWl0X2J1Y2tldHMgPSBrY2FsbG9jKHNpemUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwgZ2ZwX2ZsYWdzKTsKIAkJaWYgKCFmbC0+Y29tbWl0X2J1Y2tldHMpIHsKIAkJCWZpbGVsYXlvdXRfZnJlZV9sc2VnKCZmbC0+Z2VuZXJpY19oZHIpOwogCQkJcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXQuaCBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oCmluZGV4IDdjNDQ1NzkuLjJiNDYxZDcgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oCisrKyBiL2ZzL25mcy9uZnM0ZmlsZWxheW91dC5oCkBAIC0xMDQsNiArMTA0LDYgQEAKIG5mczRfZmxfZmluZF9nZXRfZGV2aWNlaWQoc3RydWN0IG5mczRfZGV2aWNlaWQgKmRldl9pZCk7CiBleHRlcm4gdm9pZCBuZnM0X2ZsX3B1dF9kZXZpY2VpZChzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKmRzYWRkcik7CiBzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKgotZ2V0X2RldmljZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnM0X2RldmljZWlkICpkZXZfaWQpOworZ2V0X2RldmljZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnM0X2RldmljZWlkICpkZXZfaWQsIGdmcF90IGdmcF9mbGFncyk7CiAKICNlbmRpZiAvKiBGU19ORlNfTkZTNEZJTEVMQVlPVVRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRmaWxlbGF5b3V0ZGV2LmMgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwppbmRleCBkZTUzNTBmLi5kYjA3YzdhIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYworKysgYi9mcy9uZnMvbmZzNGZpbGVsYXlvdXRkZXYuYwpAQCAtMjI1LDExICsyMjUsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBuZnM0X3BuZnNfZHMgKgotbmZzNF9wbmZzX2RzX2FkZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1MzIgaXBfYWRkciwgdTMyIHBvcnQpCituZnM0X3BuZnNfZHNfYWRkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHUzMiBpcF9hZGRyLCB1MzIgcG9ydCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnM0X3BuZnNfZHMgKnRtcF9kcywgKmRzOwogCi0JZHMgPSBremFsbG9jKHNpemVvZigqdG1wX2RzKSwgR0ZQX0tFUk5FTCk7CisJZHMgPSBremFsbG9jKHNpemVvZigqdG1wX2RzKSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWRzKQogCQlnb3RvIG91dDsKIApAQCAtMjYxLDcgKzI2MSw3IEBACiAgKiBDdXJyZW50bHkgb25seSBzdXBwb3J0IGlwdjQsIGFuZCBvbmUgbXVsdGktcGF0aCBhZGRyZXNzLgogICovCiBzdGF0aWMgc3RydWN0IG5mczRfcG5mc19kcyAqCi1kZWNvZGVfYW5kX2FkZF9kcyhzdHJ1Y3QgeGRyX3N0cmVhbSAqc3RyZWFtcCwgc3RydWN0IGlub2RlICppbm9kZSkKK2RlY29kZV9hbmRfYWRkX2RzKHN0cnVjdCB4ZHJfc3RyZWFtICpzdHJlYW1wLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mczRfcG5mc19kcyAqZHMgPSBOVUxMOwogCWNoYXIgKmJ1ZjsKQEAgLTMwMyw3ICszMDMsNyBAQAogCQkJcmxlbik7CiAJCWdvdG8gb3V0X2VycjsKIAl9Ci0JYnVmID0ga21hbGxvYyhybGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJYnVmID0ga21hbGxvYyhybGVuICsgMSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWJ1ZikgewogCQlkcHJpbnRrKCIlczogTm90IGVub3VnaCBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfZXJyOwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJc3NjYW5mKHBzdHIsICItJWQtJWQiLCAmdG1wWzBdLCAmdG1wWzFdKTsKIAlwb3J0ID0gaHRvbnMoKHRtcFswXSA8PCA4KSB8ICh0bXBbMV0pKTsKIAotCWRzID0gbmZzNF9wbmZzX2RzX2FkZChpbm9kZSwgaXBfYWRkciwgcG9ydCk7CisJZHMgPSBuZnM0X3BuZnNfZHNfYWRkKGlub2RlLCBpcF9hZGRyLCBwb3J0LCBnZnBfZmxhZ3MpOwogCWRwcmludGsoIiVzOiBEZWNvZGVkIGFkZHJlc3MgYW5kIHBvcnQgJXNcbiIsIF9fZnVuY19fLCBidWYpOwogb3V0X2ZyZWU6CiAJa2ZyZWUoYnVmKTsKQEAgLTM0Myw3ICszNDMsNyBAQAogCiAvKiBEZWNvZGUgb3BhcXVlIGRldmljZSBkYXRhIGFuZCByZXR1cm4gdGhlIHJlc3VsdCAqLwogc3RhdGljIHN0cnVjdCBuZnM0X2ZpbGVfbGF5b3V0X2RzYWRkcioKLWRlY29kZV9kZXZpY2Uoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBwbmZzX2RldmljZSAqcGRldikKK2RlY29kZV9kZXZpY2Uoc3RydWN0IGlub2RlICppbm8sIHN0cnVjdCBwbmZzX2RldmljZSAqcGRldiwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCWludCBpOwogCXUzMiBjbnQsIG51bTsKQEAgLTM2Miw3ICszNjIsNyBAQAogCXN0cnVjdCBwYWdlICpzY3JhdGNoOwogCiAJLyogc2V0IHVwIHhkciBzdHJlYW0gKi8KLQlzY3JhdGNoID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwlzY3JhdGNoID0gYWxsb2NfcGFnZShnZnBfZmxhZ3MpOwogCWlmICghc2NyYXRjaCkKIAkJZ290byBvdXRfZXJyOwogCkBAIC0zODQsNyArMzg0LDcgQEAKIAl9CiAKIAkvKiByZWFkIHN0cmlwZSBpbmRpY2VzICovCi0Jc3RyaXBlX2luZGljZXMgPSBrY2FsbG9jKGNudCwgc2l6ZW9mKHU4KSwgR0ZQX0tFUk5FTCk7CisJc3RyaXBlX2luZGljZXMgPSBrY2FsbG9jKGNudCwgc2l6ZW9mKHU4KSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIXN0cmlwZV9pbmRpY2VzKQogCQlnb3RvIG91dF9lcnJfZnJlZV9zY3JhdGNoOwogCkBAIC00MjMsNyArNDIzLDcgQEAKIAogCWRzYWRkciA9IGt6YWxsb2Moc2l6ZW9mKCpkc2FkZHIpICsKIAkJCShzaXplb2Yoc3RydWN0IG5mczRfcG5mc19kcyAqKSAqIChudW0gLSAxKSksCi0JCQlHRlBfS0VSTkVMKTsKKwkJCWdmcF9mbGFncyk7CiAJaWYgKCFkc2FkZHIpCiAJCWdvdG8gb3V0X2Vycl9mcmVlX3N0cmlwZV9pbmRpY2VzOwogCkBAIC00NTIsNyArNDUyLDcgQEAKIAkJZm9yIChqID0gMDsgaiA8IG1wX2NvdW50OyBqKyspIHsKIAkJCWlmIChqID09IDApIHsKIAkJCQlkc2FkZHItPmRzX2xpc3RbaV0gPSBkZWNvZGVfYW5kX2FkZF9kcygmc3RyZWFtLAotCQkJCQlpbm8pOworCQkJCQlpbm8sIGdmcF9mbGFncyk7CiAJCQkJaWYgKGRzYWRkci0+ZHNfbGlzdFtpXSA9PSBOVUxMKQogCQkJCQlnb3RvIG91dF9lcnJfZnJlZV9kZXZpY2VpZDsKIAkJCX0gZWxzZSB7CkBAIC01MDMsMTIgKzUwMywxMiBAQAogICogYXZhaWxhYmxlIGRldmljZXMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKgotZGVjb2RlX2FuZF9hZGRfZGV2aWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwbmZzX2RldmljZSAqZGV2KQorZGVjb2RlX2FuZF9hZGRfZGV2aWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwbmZzX2RldmljZSAqZGV2LCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mczRfZmlsZV9sYXlvdXRfZHNhZGRyICpkLCAqbmV3OwogCWxvbmcgaGFzaDsKIAotCW5ldyA9IGRlY29kZV9kZXZpY2UoaW5vZGUsIGRldik7CisJbmV3ID0gZGVjb2RlX2RldmljZShpbm9kZSwgZGV2LCBnZnBfZmxhZ3MpOwogCWlmICghbmV3KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZCBub3QgZGVjb2RlIG9yIGFkZCBkZXZpY2VcbiIsCiAJCQlfX2Z1bmNfXyk7CkBAIC01MzcsNyArNTM3LDcgQEAKICAqIG9mIGF2YWlsYWJsZSBkZXZpY2VzLCBhbmQgcmV0dXJuIGl0LgogICovCiBzdHJ1Y3QgbmZzNF9maWxlX2xheW91dF9kc2FkZHIgKgotZ2V0X2RldmljZV9pbmZvKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBuZnM0X2RldmljZWlkICpkZXZfaWQpCitnZXRfZGV2aWNlX2luZm8oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IG5mczRfZGV2aWNlaWQgKmRldl9pZCwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBwbmZzX2RldmljZSAqcGRldiA9IE5VTEw7CiAJdTMyIG1heF9yZXNwX3N6OwpAQCAtNTU2LDE3ICs1NTYsMTcgQEAKIAlkcHJpbnRrKCIlcyBpbm9kZSAlcCBtYXhfcmVzcF9zeiAldSBtYXhfcGFnZXMgJWRcbiIsCiAJCV9fZnVuY19fLCBpbm9kZSwgbWF4X3Jlc3Bfc3osIG1heF9wYWdlcyk7CiAKLQlwZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBuZnNfZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisJcGRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBwbmZzX2RldmljZSksIGdmcF9mbGFncyk7CiAJaWYgKHBkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBnZnBfZmxhZ3MpOwogCWlmIChwYWdlcyA9PSBOVUxMKSB7CiAJCWtmcmVlKHBkZXYpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IG1heF9wYWdlczsgaSsrKSB7Ci0JCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJCWlmICghcGFnZXNbaV0pCiAJCQlnb3RvIG91dF9mcmVlOwogCX0KQEAgLTU4Nyw3ICs1ODcsNyBAQAogCSAqIEZvdW5kIG5ldyBkZXZpY2UsIG5lZWQgdG8gZGVjb2RlIGl0IGFuZCB0aGVuIGFkZCBpdCB0byB0aGUKIAkgKiBsaXN0IG9mIGtub3duIGRldmljZXMgZm9yIHRoaXMgbW91bnRwb2ludC4KIAkgKi8KLQlkc2FkZHIgPSBkZWNvZGVfYW5kX2FkZF9kZXZpY2UoaW5vZGUsIHBkZXYpOworCWRzYWRkciA9IGRlY29kZV9hbmRfYWRkX2RldmljZShpbm9kZSwgcGRldiwgZ2ZwX2ZsYWdzKTsKIG91dF9mcmVlOgogCWZvciAoaSA9IDA7IGkgPCBtYXhfcGFnZXM7IGkrKykKIAkJX19mcmVlX3BhZ2UocGFnZXNbaV0pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCA5YmY0MWVhLi5jZjFiMzM5IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uZnNfcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L25mc19tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI5OSw2ICszMDAsNyBAQAogCQkJcmV0ID0gbmZzNF9kZWxheShzZXJ2ZXItPmNsaWVudCwgJmV4Y2VwdGlvbi0+dGltZW91dCk7CiAJCQlpZiAocmV0ICE9IDApCiAJCQkJYnJlYWs7CisJCWNhc2UgLU5GUzRFUlJfUkVUUllfVU5DQUNIRURfUkVQOgogCQljYXNlIC1ORlM0RVJSX09MRF9TVEFURUlEOgogCQkJZXhjZXB0aW9uLT5yZXRyeSA9IDE7CiAJCQlicmVhazsKQEAgLTQ0Myw4ICs0NDUsOCBAQAogCWlmIChyZXMtPnNyX3N0YXR1cyA9PSAxKQogCQlyZXMtPnNyX3N0YXR1cyA9IE5GU19PSzsKIAotCS8qIC1FUkVTVEFSVFNZUyBjYW4gcmVzdWx0IGluIHNraXBwaW5nIG5mczQxX3NlcXVlbmNlX3NldHVwICovCi0JaWYgKCFyZXMtPnNyX3Nsb3QpCisJLyogZG9uJ3QgaW5jcmVtZW50IHRoZSBzZXF1ZW5jZSBudW1iZXIgaWYgdGhlIHRhc2sgd2Fzbid0IHNlbnQgKi8KKwlpZiAoIVJQQ19XQVNfU0VOVCh0YXNrKSkKIAkJZ290byBvdXQ7CiAKIAkvKiBDaGVjayB0aGUgU0VRVUVOQ0Ugb3BlcmF0aW9uIHN0YXR1cyAqLwpAQCAtMjE4NSw5ICsyMTg3LDE0IEBACiAJc3RydWN0IG5mczRfZXhjZXB0aW9uIGV4Y2VwdGlvbiA9IHsgfTsKIAlpbnQgZXJyOwogCWRvIHsKLQkJZXJyID0gbmZzNF9oYW5kbGVfZXhjZXB0aW9uKHNlcnZlciwKLQkJCQlfbmZzNF9sb29rdXBfcm9vdChzZXJ2ZXIsIGZoYW5kbGUsIGluZm8pLAotCQkJCSZleGNlcHRpb24pOworCQllcnIgPSBfbmZzNF9sb29rdXBfcm9vdChzZXJ2ZXIsIGZoYW5kbGUsIGluZm8pOworCQlzd2l0Y2ggKGVycikgeworCQljYXNlIDA6CisJCWNhc2UgLU5GUzRFUlJfV1JPTkdTRUM6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVyciA9IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihzZXJ2ZXIsIGVyciwgJmV4Y2VwdGlvbik7CisJCX0KIAl9IHdoaWxlIChleGNlcHRpb24ucmV0cnkpOwogCXJldHVybiBlcnI7CiB9CkBAIC0yMjA4LDI1ICsyMjE1LDQ3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBuZnM0X2ZpbmRfcm9vdF9zZWMoc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlciwgc3RydWN0IG5mc19maCAqZmhhbmRsZSwKKwkJCSAgICAgIHN0cnVjdCBuZnNfZnNpbmZvICppbmZvKQoreworCWludCBpLCBsZW4sIHN0YXR1cyA9IDA7CisJcnBjX2F1dGhmbGF2b3JfdCBmbGF2X2FycmF5W05GU19NQVhfU0VDRkxBVk9SU107CisKKwlsZW4gPSBnc3NfbWVjaF9saXN0X3BzZXVkb2ZsYXZvcnMoJmZsYXZfYXJyYXlbMF0pOworCWZsYXZfYXJyYXlbbGVuXSA9IFJQQ19BVVRIX05VTEw7CisJbGVuICs9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJc3RhdHVzID0gbmZzNF9sb29rdXBfcm9vdF9zZWMoc2VydmVyLCBmaGFuZGxlLCBpbmZvLCBmbGF2X2FycmF5W2ldKTsKKwkJaWYgKHN0YXR1cyA9PSAtTkZTNEVSUl9XUk9OR1NFQyB8fCBzdGF0dXMgPT0gLUVBQ0NFUykKKwkJCWNvbnRpbnVlOworCQlicmVhazsKKwl9CisJLyoKKwkgKiAtRUFDQ0VTUyBjb3VsZCBtZWFuIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGNvcnJlY3QgcGVybWlzc2lvbnMKKwkgKiB0byBhY2Nlc3MgdGhlIG1vdW50LiAgSXQgY291bGQgYWxzbyBtZWFuIHRoYXQgd2UgdHJpZWQgdG8gbW91bnQKKwkgKiB3aXRoIGEgZ3NzIGF1dGggZmxhdm9yLCBidXQgcnBjLmdzc2QgaXNuJ3QgcnVubmluZy4gIEVpdGhlciB3YXksCisJICogZXhpc3RpbmcgbW91bnQgcHJvZ3JhbXMgZG9uJ3QgaGFuZGxlIC1FQUNDRVMgdmVyeSB3ZWxsIHNvIGl0IHNob3VsZAorCSAqIGJlIG1hcHBlZCB0byAtRVBFUk0gaW5zdGVhZC4KKwkgKi8KKwlpZiAoc3RhdHVzID09IC1FQUNDRVMpCisJCXN0YXR1cyA9IC1FUEVSTTsKKwlyZXR1cm4gc3RhdHVzOworfQorCiAvKgogICogZ2V0IHRoZSBmaWxlIGhhbmRsZSBmb3IgdGhlICIvIiBkaXJlY3Rvcnkgb24gdGhlIHNlcnZlcgogICovCiBzdGF0aWMgaW50IG5mczRfcHJvY19nZXRfcm9vdChzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyLCBzdHJ1Y3QgbmZzX2ZoICpmaGFuZGxlLAogCQkJICAgICAgc3RydWN0IG5mc19mc2luZm8gKmluZm8pCiB7Ci0JaW50IGksIGxlbiwgc3RhdHVzID0gMDsKLQlycGNfYXV0aGZsYXZvcl90IGZsYXZfYXJyYXlbTkZTX01BWF9TRUNGTEFWT1JTICsgMl07Ci0KLQlmbGF2X2FycmF5WzBdID0gUlBDX0FVVEhfVU5JWDsKLQlsZW4gPSBnc3NfbWVjaF9saXN0X3BzZXVkb2ZsYXZvcnMoJmZsYXZfYXJyYXlbMV0pOwotCWZsYXZfYXJyYXlbMStsZW5dID0gUlBDX0FVVEhfTlVMTDsKLQlsZW4gKz0gMjsKLQotCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewotCQlzdGF0dXMgPSBuZnM0X2xvb2t1cF9yb290X3NlYyhzZXJ2ZXIsIGZoYW5kbGUsIGluZm8sIGZsYXZfYXJyYXlbaV0pOwotCQlpZiAoc3RhdHVzICE9IC1FUEVSTSkKLQkJCWJyZWFrOwotCX0KKwlpbnQgc3RhdHVzID0gbmZzNF9sb29rdXBfcm9vdChzZXJ2ZXIsIGZoYW5kbGUsIGluZm8pOworCWlmICgoc3RhdHVzID09IC1ORlM0RVJSX1dST05HU0VDKSAmJiAhKHNlcnZlci0+ZmxhZ3MgJiBORlNfTU9VTlRfU0VDRkxBVk9VUikpCisJCS8qCisJCSAqIEEgc3RhdHVzIG9mIC1ORlM0RVJSX1dST05HU0VDIHdpbGwgYmUgbWFwcGVkIHRvIC1FUEVSTQorCQkgKiBieSBuZnM0X21hcF9lcnJvcnMoKSBhcyB0aGlzIGZ1bmN0aW9uIGV4aXRzLgorCQkgKi8KKwkJc3RhdHVzID0gbmZzNF9maW5kX3Jvb3Rfc2VjKHNlcnZlciwgZmhhbmRsZSwgaW5mbyk7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQlzdGF0dXMgPSBuZnM0X3NlcnZlcl9jYXBhYmlsaXRpZXMoc2VydmVyLCBmaGFuZGxlKTsKIAlpZiAoc3RhdHVzID09IDApCkBAIC0zNjY3LDYgKzM2OTYsNyBAQAogCQkJcnBjX2RlbGF5KHRhc2ssIE5GUzRfUE9MTF9SRVRSWV9NQVgpOwogCQkJdGFzay0+dGtfc3RhdHVzID0gMDsKIAkJCXJldHVybiAtRUFHQUlOOworCQljYXNlIC1ORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUDoKIAkJY2FzZSAtTkZTNEVSUl9PTERfU1RBVEVJRDoKIAkJCXRhc2stPnRrX3N0YXR1cyA9IDA7CiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTM3MjMsMjEgKzM3NTMsMjAgQEAKIAkJCQlzaXplb2Yoc2V0Y2xpZW50aWQuc2NfdWFkZHIpLCAiJXMuJXUuJXUiLAogCQkJCWNscC0+Y2xfaXBhZGRyLCBwb3J0ID4+IDgsIHBvcnQgJiAyNTUpOwogCi0JCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAkJaWYgKHN0YXR1cyAhPSAtTkZTNEVSUl9DTElEX0lOVVNFKQogCQkJYnJlYWs7Ci0JCWlmIChzaWduYWxsZWQoKSkKKwkJaWYgKGxvb3AgIT0gMCkgeworCQkJKytjbHAtPmNsX2lkX3VuaXF1aWZpZXI7CiAJCQlicmVhazsKLQkJaWYgKGxvb3ArKyAmIDEpCi0JCQlzc2xlZXAoY2xwLT5jbF9sZWFzZV90aW1lIC8gSFogKyAxKTsKLQkJZWxzZQotCQkJaWYgKCsrY2xwLT5jbF9pZF91bmlxdWlmaWVyID09IDApCi0JCQkJYnJlYWs7CisJCX0KKwkJKytsb29wOworCQlzc2xlZXAoY2xwLT5jbF9sZWFzZV90aW1lIC8gSFogKyAxKTsKIAl9CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIGludCBfbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oc3RydWN0IG5mc19jbGllbnQgKmNscCwKK2ludCBuZnM0X3Byb2Nfc2V0Y2xpZW50aWRfY29uZmlybShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLAogCQlzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZF9yZXMgKmFyZywKIAkJc3RydWN0IHJwY19jcmVkICpjcmVkKQogewpAQCAtMzc1Miw3ICszNzgxLDcgQEAKIAlpbnQgc3RhdHVzOwogCiAJbm93ID0gamlmZmllczsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKGNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAlpZiAoc3RhdHVzID09IDApIHsKIAkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwogCQljbHAtPmNsX2xlYXNlX3RpbWUgPSBmc2luZm8ubGVhc2VfdGltZSAqIEhaOwpAQCAtMzc2MiwyNiArMzc5MSw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotaW50IG5mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsCi0JCXN0cnVjdCBuZnM0X3NldGNsaWVudGlkX3JlcyAqYXJnLAotCQlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCi17Ci0JbG9uZyB0aW1lb3V0ID0gMDsKLQlpbnQgZXJyOwotCWRvIHsKLQkJZXJyID0gX25mczRfcHJvY19zZXRjbGllbnRpZF9jb25maXJtKGNscCwgYXJnLCBjcmVkKTsKLQkJc3dpdGNoIChlcnIpIHsKLQkJCWNhc2UgMDoKLQkJCQlyZXR1cm4gZXJyOwotCQkJY2FzZSAtTkZTNEVSUl9SRVNPVVJDRToKLQkJCQkvKiBUaGUgSUJNIGxhd3llcnMgbWlzcmVhZCBhbm90aGVyIGRvY3VtZW50ISAqLwotCQkJY2FzZSAtTkZTNEVSUl9ERUxBWToKLQkJCQllcnIgPSBuZnM0X2RlbGF5KGNscC0+Y2xfcnBjY2xpZW50LCAmdGltZW91dCk7Ci0JCX0KLQl9IHdoaWxlIChlcnIgPT0gMCk7Ci0JcmV0dXJuIGVycjsKLX0KLQogc3RydWN0IG5mczRfZGVsZWdyZXR1cm5kYXRhIHsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybmFyZ3MgYXJnczsKIAlzdHJ1Y3QgbmZzNF9kZWxlZ3JldHVybnJlcyByZXM7CkBAIC00Nzg2LDcgKzQ3OTUsNyBAQAogCQkJCWluaXRfdXRzbmFtZSgpLT5kb21haW5uYW1lLAogCQkJCWNscC0+Y2xfcnBjY2xpZW50LT5jbF9hdXRoLT5hdV9mbGF2b3IpOwogCi0Jc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CisJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgUlBDX1RBU0tfVElNRU9VVCk7CiAJaWYgKCFzdGF0dXMpCiAJCXN0YXR1cyA9IG5mczRfY2hlY2tfY2xfZXhjaGFuZ2VfZmxhZ3MoY2xwLT5jbF9leGNoYW5nZV9mbGFncyk7CiAJZHByaW50aygiPC0tICVzIHN0YXR1cz0gJWRcbiIsIF9fZnVuY19fLCBzdGF0dXMpOwpAQCAtNDgzNyw2ICs0ODQ2LDggQEAKIAkJZHByaW50aygiJXMgUmV0cnk6IHRrX3N0YXR1cyAlZFxuIiwgX19mdW5jX18sIHRhc2stPnRrX3N0YXR1cyk7CiAJCXJwY19kZWxheSh0YXNrLCBORlM0X1BPTExfUkVUUllfTUlOKTsKIAkJdGFzay0+dGtfc3RhdHVzID0gMDsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAtTkZTNEVSUl9SRVRSWV9VTkNBQ0hFRF9SRVA6CiAJCW5mc19yZXN0YXJ0X3JwYyh0YXNrLCBkYXRhLT5jbHApOwogCQlyZXR1cm47CiAJfQpAQCAtNDg2OSw3ICs0ODgwLDggQEAKIAkJLnJwY19jbGllbnQgPSBjbHAtPmNsX3JwY2NsaWVudCwKIAkJLnJwY19tZXNzYWdlID0gJm1zZywKIAkJLmNhbGxiYWNrX29wcyA9ICZuZnM0X2dldF9sZWFzZV90aW1lX29wcywKLQkJLmNhbGxiYWNrX2RhdGEgPSAmZGF0YQorCQkuY2FsbGJhY2tfZGF0YSA9ICZkYXRhLAorCQkuZmxhZ3MgPSBSUENfVEFTS19USU1FT1VULAogCX07CiAJaW50IHN0YXR1czsKIApAQCAtNTE3MSw3ICs1MTgzLDcgQEAKIAluZnM0X2luaXRfY2hhbm5lbF9hdHRycygmYXJncyk7CiAJYXJncy5mbGFncyA9IChTRVNTSU9ONF9QRVJTSVNUIHwgU0VTU0lPTjRfQkFDS19DSEFOKTsKIAotCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2Vzc2lvbi0+Y2xwLT5jbF9ycGNjbGllbnQsICZtc2csIDApOworCXN0YXR1cyA9IHJwY19jYWxsX3N5bmMoc2Vzc2lvbi0+Y2xwLT5jbF9ycGNjbGllbnQsICZtc2csIFJQQ19UQVNLX1RJTUVPVVQpOwogCiAJaWYgKCFzdGF0dXMpCiAJCS8qIFZlcmlmeSB0aGUgc2Vzc2lvbidzIG5lZ290aWF0ZWQgY2hhbm5lbF9hdHRycyB2YWx1ZXMgKi8KQEAgLTUxOTQsMjAgKzUyMDYsMTAgQEAKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkICpwdHI7CiAJc3RydWN0IG5mczRfc2Vzc2lvbiAqc2Vzc2lvbiA9IGNscC0+Y2xfc2Vzc2lvbjsKLQlsb25nIHRpbWVvdXQgPSAwOwotCWludCBlcnI7CiAKIAlkcHJpbnRrKCItLT4gJXMgY2xwPSVwIHNlc3Npb249JXBcbiIsIF9fZnVuY19fLCBjbHAsIHNlc3Npb24pOwogCi0JZG8gewotCQlzdGF0dXMgPSBfbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7Ci0JCWlmIChzdGF0dXMgPT0gLU5GUzRFUlJfREVMQVkpIHsKLQkJCWVyciA9IG5mczRfZGVsYXkoY2xwLT5jbF9ycGNjbGllbnQsICZ0aW1lb3V0KTsKLQkJCWlmIChlcnIpCi0JCQkJc3RhdHVzID0gZXJyOwotCQl9Ci0JfSB3aGlsZSAoc3RhdHVzID09IC1ORlM0RVJSX0RFTEFZKTsKLQorCXN0YXR1cyA9IF9uZnM0X3Byb2NfY3JlYXRlX3Nlc3Npb24oY2xwKTsKIAlpZiAoc3RhdHVzKQogCQlnb3RvIG91dDsKIApAQCAtNTI0OCw3ICs1MjUwLDcgQEAKIAltc2cucnBjX2FyZ3AgPSBzZXNzaW9uOwogCW1zZy5ycGNfcmVzcCA9IE5VTEw7CiAJbXNnLnJwY19jcmVkID0gTlVMTDsKLQlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlc3Npb24tPmNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCAwKTsKKwlzdGF0dXMgPSBycGNfY2FsbF9zeW5jKHNlc3Npb24tPmNscC0+Y2xfcnBjY2xpZW50LCAmbXNnLCBSUENfVEFTS19USU1FT1VUKTsKIAogCWlmIChzdGF0dXMpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTU0ODEsNiArNTQ4Myw4IEBACiAJCWJyZWFrOwogCWNhc2UgLU5GUzRFUlJfREVMQVk6CiAJCXJwY19kZWxheSh0YXNrLCBORlM0X1BPTExfUkVUUllfTUFYKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAtTkZTNEVSUl9SRVRSWV9VTkNBQ0hFRF9SRVA6CiAJCXJldHVybiAtRUFHQUlOOwogCWRlZmF1bHQ6CiAJCW5mczRfc2NoZWR1bGVfbGVhc2VfcmVjb3ZlcnkoY2xwKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0c3RhdGUuYyBiL2ZzL25mcy9uZnM0c3RhdGUuYwppbmRleCBhNjgwNGY3Li4wMzZmNWFkIDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzL25mczRzdGF0ZS5jCkBAIC02NCwxMCArNjQsMTUgQEAKIAogaW50IG5mczRfaW5pdF9jbGllbnRpZChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7Ci0Jc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzIGNsaWQ7CisJc3RydWN0IG5mczRfc2V0Y2xpZW50aWRfcmVzIGNsaWQgPSB7CisJCS5jbGllbnRpZCA9IGNscC0+Y2xfY2xpZW50aWQsCisJCS5jb25maXJtID0gY2xwLT5jbF9jb25maXJtLAorCX07CiAJdW5zaWduZWQgc2hvcnQgcG9ydDsKIAlpbnQgc3RhdHVzOwogCisJaWYgKHRlc3RfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKSkKKwkJZ290byBkb19jb25maXJtOwogCXBvcnQgPSBuZnNfY2FsbGJhY2tfdGNwcG9ydDsKIAlpZiAoY2xwLT5jbF9hZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikKIAkJcG9ydCA9IG5mc19jYWxsYmFja190Y3Bwb3J0NjsKQEAgLTc1LDEwICs4MCwxNCBAQAogCXN0YXR1cyA9IG5mczRfcHJvY19zZXRjbGllbnRpZChjbHAsIE5GUzRfQ0FMTEJBQ0ssIHBvcnQsIGNyZWQsICZjbGlkKTsKIAlpZiAoc3RhdHVzICE9IDApCiAJCWdvdG8gb3V0OworCWNscC0+Y2xfY2xpZW50aWQgPSBjbGlkLmNsaWVudGlkOworCWNscC0+Y2xfY29uZmlybSA9IGNsaWQuY29uZmlybTsKKwlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKTsKK2RvX2NvbmZpcm06CiAJc3RhdHVzID0gbmZzNF9wcm9jX3NldGNsaWVudGlkX2NvbmZpcm0oY2xwLCAmY2xpZCwgY3JlZCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKLQljbHAtPmNsX2NsaWVudGlkID0gY2xpZC5jbGllbnRpZDsKKwljbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpOwogCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVuZXdhbChjbHApOwogb3V0OgogCXJldHVybiBzdGF0dXM7CkBAIC0yMzAsMTMgKzIzOSwxOCBAQAogewogCWludCBzdGF0dXM7CiAKKwlpZiAodGVzdF9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpKQorCQlnb3RvIGRvX2NvbmZpcm07CiAJbmZzNF9iZWdpbl9kcmFpbl9zZXNzaW9uKGNscCk7CiAJc3RhdHVzID0gbmZzNF9wcm9jX2V4Y2hhbmdlX2lkKGNscCwgY3JlZCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKKwlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0NPTkZJUk0sICZjbHAtPmNsX3N0YXRlKTsKK2RvX2NvbmZpcm06CiAJc3RhdHVzID0gbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7CiAJaWYgKHN0YXR1cyAhPSAwKQogCQlnb3RvIG91dDsKKwljbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfQ09ORklSTSwgJmNscC0+Y2xfc3RhdGUpOwogCW5mczQxX3NldHVwX3N0YXRlX3JlbmV3YWwoY2xwKTsKIAluZnNfbWFya19jbGllbnRfcmVhZHkoY2xwLCBORlNfQ1NfUkVBRFkpOwogb3V0OgpAQCAtMTU4NCwyMCArMTU5OCwyMyBAQAogICovCiBzdGF0aWMgdm9pZCBuZnM0X3NldF9sZWFzZV9leHBpcmVkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIGludCBzdGF0dXMpCiB7Ci0JaWYgKG5mczRfaGFzX3Nlc3Npb24oY2xwKSkgewotCQlzd2l0Y2ggKHN0YXR1cykgewotCQljYXNlIC1ORlM0RVJSX0RFTEFZOgotCQljYXNlIC1ORlM0RVJSX0NMSURfSU5VU0U6Ci0JCWNhc2UgLUVBR0FJTjoKLQkJCWJyZWFrOworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAtTkZTNEVSUl9DTElEX0lOVVNFOgorCWNhc2UgLU5GUzRFUlJfU1RBTEVfQ0xJRU5USUQ6CisJCWNsZWFyX2JpdChORlM0Q0xOVF9MRUFTRV9DT05GSVJNLCAmY2xwLT5jbF9zdGF0ZSk7CisJCWJyZWFrOworCWNhc2UgLU5GUzRFUlJfREVMQVk6CisJY2FzZSAtRVRJTUVET1VUOgorCWNhc2UgLUVBR0FJTjoKKwkJc3NsZWVwKDEpOworCQlicmVhazsKIAotCQljYXNlIC1FS0VZRVhQSVJFRDoKLQkJCW5mczRfd2Fybl9rZXlleHBpcmVkKGNscC0+Y2xfaG9zdG5hbWUpOwotCQljYXNlIC1ORlM0RVJSX05PVF9TQU1FOiAvKiBGaXhNZTogaW1wbGVtZW50IHJlY292ZXJ5Ci0JCQkJCSAqIGluIG5mczRfZXhjaGFuZ2VfaWQgKi8KLQkJZGVmYXVsdDoKLQkJCXJldHVybjsKLQkJfQorCWNhc2UgLUVLRVlFWFBJUkVEOgorCQluZnM0X3dhcm5fa2V5ZXhwaXJlZChjbHAtPmNsX2hvc3RuYW1lKTsKKwljYXNlIC1ORlM0RVJSX05PVF9TQU1FOiAvKiBGaXhNZTogaW1wbGVtZW50IHJlY292ZXJ5CisJCQkJICogaW4gbmZzNF9leGNoYW5nZV9pZCAqLworCWRlZmF1bHQ6CisJCXJldHVybjsKIAl9CiAJc2V0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSk7CiB9CkBAIC0xNjA3LDcgKzE2MjQsNyBAQAogCWludCBzdGF0dXMgPSAwOwogCiAJLyogRW5zdXJlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gTkZTdjQgc3RhdGUgKi8KLQlmb3IoOzspIHsKKwlkbyB7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTNENMTlRfTEVBU0VfRVhQSVJFRCwgJmNscC0+Y2xfc3RhdGUpKSB7CiAJCQkvKiBXZSdyZSBnb2luZyB0byBoYXZlIHRvIHJlLWVzdGFibGlzaCBhIGNsaWVudGlkICovCiAJCQlzdGF0dXMgPSBuZnM0X3JlY2xhaW1fbGVhc2UoY2xwKTsKQEAgLTE2OTEsNyArMTcwOCw3IEBACiAJCQlicmVhazsKIAkJaWYgKHRlc3RfYW5kX3NldF9iaXQoTkZTNENMTlRfTUFOQUdFUl9SVU5OSU5HLCAmY2xwLT5jbF9zdGF0ZSkgIT0gMCkKIAkJCWJyZWFrOwotCX0KKwl9IHdoaWxlIChhdG9taWNfcmVhZCgmY2xwLT5jbF9jb3VudCkgPiAxKTsKIAlyZXR1cm47CiBvdXRfZXJyb3I6CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiRXJyb3I6IHN0YXRlIG1hbmFnZXIgZmFpbGVkIG9uIE5GU3Y0IHNlcnZlciAlcyIKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhkci5jCmluZGV4IGRkZGZiNTcuLmMzY2NkMmMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0eGRyLmMKKysrIGIvZnMvbmZzL25mczR4ZHIuYwpAQCAtMTQ1MiwyNiArMTQ1MiwyNSBAQAogCiBzdGF0aWMgdm9pZCBlbmNvZGVfcmVhZGRpcihzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBjb25zdCBzdHJ1Y3QgbmZzNF9yZWFkZGlyX2FyZyAqcmVhZGRpciwgc3RydWN0IHJwY19ycXN0ICpyZXEsIHN0cnVjdCBjb21wb3VuZF9oZHIgKmhkcikKIHsKLQl1aW50MzJfdCBhdHRyc1syXSA9IHswLCAwfTsKKwl1aW50MzJfdCBhdHRyc1syXSA9IHsKKwkJRkFUVFI0X1dPUkQwX1JEQVRUUl9FUlJPUiwKKwkJRkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlELAorCX07CiAJdWludDMyX3QgZGlyY291bnQgPSByZWFkZGlyLT5jb3VudCA+PiAxOwogCV9fYmUzMiAqcDsKIAogCWlmIChyZWFkZGlyLT5wbHVzKSB7CiAJCWF0dHJzWzBdIHw9IEZBVFRSNF9XT1JEMF9UWVBFfEZBVFRSNF9XT1JEMF9DSEFOR0V8RkFUVFI0X1dPUkQwX1NJWkV8Ci0JCQlGQVRUUjRfV09SRDBfRlNJRHxGQVRUUjRfV09SRDBfRklMRUhBTkRMRTsKKwkJCUZBVFRSNF9XT1JEMF9GU0lEfEZBVFRSNF9XT1JEMF9GSUxFSEFORExFfEZBVFRSNF9XT1JEMF9GSUxFSUQ7CiAJCWF0dHJzWzFdIHw9IEZBVFRSNF9XT1JEMV9NT0RFfEZBVFRSNF9XT1JEMV9OVU1MSU5LU3xGQVRUUjRfV09SRDFfT1dORVJ8CiAJCQlGQVRUUjRfV09SRDFfT1dORVJfR1JPVVB8RkFUVFI0X1dPUkQxX1JBV0RFVnwKIAkJCUZBVFRSNF9XT1JEMV9TUEFDRV9VU0VEfEZBVFRSNF9XT1JEMV9USU1FX0FDQ0VTU3wKIAkJCUZBVFRSNF9XT1JEMV9USU1FX01FVEFEQVRBfEZBVFRSNF9XT1JEMV9USU1FX01PRElGWTsKIAkJZGlyY291bnQgPj49IDE7CiAJfQotCWF0dHJzWzBdIHw9IEZBVFRSNF9XT1JEMF9SREFUVFJfRVJST1J8RkFUVFI0X1dPUkQwX0ZJTEVJRDsKLQlhdHRyc1sxXSB8PSBGQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQ7Ci0JLyogU3dpdGNoIHRvIG1vdW50ZWRfb25fZmlsZWlkIGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQgKi8KLQlpZiAocmVhZGRpci0+Yml0bWFza1sxXSAmIEZBVFRSNF9XT1JEMV9NT1VOVEVEX09OX0ZJTEVJRCkKLQkJYXR0cnNbMF0gJj0gfkZBVFRSNF9XT1JEMF9GSUxFSUQ7Ci0JZWxzZQotCQlhdHRyc1sxXSAmPSB+RkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEOworCS8qIFVzZSBtb3VudGVkX29uX2ZpbGVpZCBvbmx5IGlmIHRoZSBzZXJ2ZXIgc3VwcG9ydHMgaXQgKi8KKwlpZiAoIShyZWFkZGlyLT5iaXRtYXNrWzFdICYgRkFUVFI0X1dPUkQxX01PVU5URURfT05fRklMRUlEKSkKKwkJYXR0cnNbMF0gfD0gRkFUVFI0X1dPUkQwX0ZJTEVJRDsKIAogCXAgPSByZXNlcnZlX3NwYWNlKHhkciwgMTIrTkZTNF9WRVJJRklFUl9TSVpFKzIwKTsKIAkqcCsrID0gY3B1X3RvX2JlMzIoT1BfUkVBRERJUik7CkBAIC0zMTQwLDcgKzMxMzksNyBAQAogCQkJZ290byBvdXRfb3ZlcmZsb3c7CiAJCXhkcl9kZWNvZGVfaHlwZXIocCwgZmlsZWlkKTsKIAkJYml0bWFwWzFdICY9IH5GQVRUUjRfV09SRDFfTU9VTlRFRF9PTl9GSUxFSUQ7Ci0JCXJldCA9IE5GU19BVFRSX0ZBVFRSX0ZJTEVJRDsKKwkJcmV0ID0gTkZTX0FUVFJfRkFUVFJfTU9VTlRFRF9PTl9GSUxFSUQ7CiAJfQogCWRwcmludGsoIiVzOiBmaWxlaWQ9JUx1XG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZykqZmlsZWlkKTsKIAlyZXR1cm4gcmV0OwpAQCAtNDAwMiw3ICs0MDAxLDYgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXVtb2RlX3QgZm1vZGUgPSAwOwotCXVpbnQ2NF90IGZpbGVpZDsKIAl1aW50MzJfdCB0eXBlOwogCiAJc3RhdHVzID0gZGVjb2RlX2F0dHJfdHlwZSh4ZHIsIGJpdG1hcCwgJnR5cGUpOwpAQCAtNDEwMSwxMyArNDA5OSwxMCBAQAogCQlnb3RvIHhkcl9lcnJvcjsKIAlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwogCi0Jc3RhdHVzID0gZGVjb2RlX2F0dHJfbW91bnRlZF9vbl9maWxlaWQoeGRyLCBiaXRtYXAsICZmaWxlaWQpOworCXN0YXR1cyA9IGRlY29kZV9hdHRyX21vdW50ZWRfb25fZmlsZWlkKHhkciwgYml0bWFwLCAmZmF0dHItPm1vdW50ZWRfb25fZmlsZWlkKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byB4ZHJfZXJyb3I7Ci0JaWYgKHN0YXR1cyAhPSAwICYmICEoZmF0dHItPnZhbGlkICYgc3RhdHVzKSkgewotCQlmYXR0ci0+ZmlsZWlkID0gZmlsZWlkOwotCQlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwotCX0KKwlmYXR0ci0+dmFsaWQgfD0gc3RhdHVzOwogCiB4ZHJfZXJyb3I6CiAJZHByaW50aygiJXM6IHhkciByZXR1cm5lZCAlZFxuIiwgX19mdW5jX18sIC1zdGF0dXMpOwpAQCAtNDgzOCwxNyArNDgzMywyMSBAQAogCXN0cnVjdCBuZnM0X3NlY2luZm9fZmxhdm9yICpzZWNfZmxhdm9yOwogCWludCBzdGF0dXM7CiAJX19iZTMyICpwOwotCWludCBpOworCWludCBpLCBudW1fZmxhdm9yczsKIAogCXN0YXR1cyA9IGRlY29kZV9vcF9oZHIoeGRyLCBPUF9TRUNJTkZPKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIG91dDsKIAlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKIAlpZiAodW5saWtlbHkoIXApKQogCQlnb3RvIG91dF9vdmVyZmxvdzsKLQlyZXMtPmZsYXZvcnMtPm51bV9mbGF2b3JzID0gYmUzMl90b19jcHVwKHApOwogCi0JZm9yIChpID0gMDsgaSA8IHJlcy0+Zmxhdm9ycy0+bnVtX2ZsYXZvcnM7IGkrKykgeworCXJlcy0+Zmxhdm9ycy0+bnVtX2ZsYXZvcnMgPSAwOworCW51bV9mbGF2b3JzID0gYmUzMl90b19jcHVwKHApOworCisJZm9yIChpID0gMDsgaSA8IG51bV9mbGF2b3JzOyBpKyspIHsKIAkJc2VjX2ZsYXZvciA9ICZyZXMtPmZsYXZvcnMtPmZsYXZvcnNbaV07Ci0JCWlmICgoY2hhciAqKSZzZWNfZmxhdm9yWzFdIC0gKGNoYXIgKilyZXMgPiBQQUdFX1NJWkUpCisJCWlmICgoY2hhciAqKSZzZWNfZmxhdm9yWzFdIC0gKGNoYXIgKilyZXMtPmZsYXZvcnMgPiBQQUdFX1NJWkUpCiAJCQlicmVhazsKIAogCQlwID0geGRyX2lubGluZV9kZWNvZGUoeGRyLCA0KTsKQEAgLTQ4NTcsMTMgKzQ4NTYsMTUgQEAKIAkJc2VjX2ZsYXZvci0+Zmxhdm9yID0gYmUzMl90b19jcHVwKHApOwogCiAJCWlmIChzZWNfZmxhdm9yLT5mbGF2b3IgPT0gUlBDX0FVVEhfR1NTKSB7Ci0JCQlpZiAoZGVjb2RlX3NlY2luZm9fZ3NzKHhkciwgc2VjX2ZsYXZvcikpCi0JCQkJYnJlYWs7CisJCQlzdGF0dXMgPSBkZWNvZGVfc2VjaW5mb19nc3MoeGRyLCBzZWNfZmxhdm9yKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJZ290byBvdXQ7CiAJCX0KKwkJcmVzLT5mbGF2b3JzLT5udW1fZmxhdm9ycysrOwogCX0KIAotCXJldHVybiAwOwotCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKIG91dF9vdmVyZmxvdzoKIAlwcmludF9vdmVyZmxvd19tc2coX19mdW5jX18sIHhkcik7CiAJcmV0dXJuIC1FSU87CkBAIC02NDA4LDcgKzY0MDksOSBAQAogCWlmIChkZWNvZGVfZ2V0ZmF0dHJfYXR0cnMoeGRyLCBiaXRtYXAsIGVudHJ5LT5mYXR0ciwgZW50cnktPmZoLAogCQkJCQllbnRyeS0+c2VydmVyLCAxKSA8IDApCiAJCWdvdG8gb3V0X292ZXJmbG93OwotCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfRklMRUlEKQorCWlmIChlbnRyeS0+ZmF0dHItPnZhbGlkICYgTkZTX0FUVFJfRkFUVFJfTU9VTlRFRF9PTl9GSUxFSUQpCisJCWVudHJ5LT5pbm8gPSBlbnRyeS0+ZmF0dHItPm1vdW50ZWRfb25fZmlsZWlkOworCWVsc2UgaWYgKGVudHJ5LT5mYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9GSUxFSUQpCiAJCWVudHJ5LT5pbm8gPSBlbnRyeS0+ZmF0dHItPmZpbGVpZDsKIAogCWVudHJ5LT5kX3R5cGUgPSBEVF9VTktOT1dOOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3BuZnMuYyBiL2ZzL25mcy9wbmZzLmMKaW5kZXggZDlhYjk3Mi4uZjU3ZjUyOCAxMDA2NDQKLS0tIGEvZnMvbmZzL3BuZnMuYworKysgYi9mcy9uZnMvcG5mcy5jCkBAIC0zODMsNiArMzgzLDcgQEAKIAkJCQlwbGhfbGF5b3V0cyk7CiAJCWRwcmludGsoIiVzIGZyZWVpbmcgbGF5b3V0IGZvciBpbm9kZSAlbHVcbiIsIF9fZnVuY19fLAogCQkJbG8tPnBsaF9pbm9kZS0+aV9pbm8pOworCQlsaXN0X2RlbF9pbml0KCZsby0+cGxoX2xheW91dHMpOwogCQlwbmZzX2Rlc3Ryb3lfbGF5b3V0KE5GU19JKGxvLT5wbGhfaW5vZGUpKTsKIAl9CiB9CkBAIC00NjYsNyArNDY3LDggQEAKIHN0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqCiBzZW5kX2xheW91dGdldChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsbywKIAkgICBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAotCSAgIHUzMiBpb21vZGUpCisJICAgdTMyIGlvbW9kZSwKKwkgICBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IGlub2RlICppbm8gPSBsby0+cGxoX2lub2RlOwogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGlubyk7CkBAIC00NzksNyArNDgxLDcgQEAKIAlkcHJpbnRrKCItLT4gJXNcbiIsIF9fZnVuY19fKTsKIAogCUJVR19PTihjdHggPT0gTlVMTCk7Ci0JbGdwID0ga3phbGxvYyhzaXplb2YoKmxncCksIEdGUF9LRVJORUwpOworCWxncCA9IGt6YWxsb2Moc2l6ZW9mKCpsZ3ApLCBnZnBfZmxhZ3MpOwogCWlmIChsZ3AgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTQ4NywxMiArNDg5LDEyIEBACiAJbWF4X3Jlc3Bfc3ogPSBzZXJ2ZXItPm5mc19jbGllbnQtPmNsX3Nlc3Npb24tPmZjX2F0dHJzLm1heF9yZXNwX3N6OwogCW1heF9wYWdlcyA9IG1heF9yZXNwX3N6ID4+IFBBR0VfU0hJRlQ7CiAKLQlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTsKKwlwYWdlcyA9IGt6YWxsb2MobWF4X3BhZ2VzICogc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBnZnBfZmxhZ3MpOwogCWlmICghcGFnZXMpCiAJCWdvdG8gb3V0X2Vycl9mcmVlOwogCiAJZm9yIChpID0gMDsgaSA8IG1heF9wYWdlczsgaSsrKSB7Ci0JCXBhZ2VzW2ldID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMKTsKKwkJcGFnZXNbaV0gPSBhbGxvY19wYWdlKGdmcF9mbGFncyk7CiAJCWlmICghcGFnZXNbaV0pCiAJCQlnb3RvIG91dF9lcnJfZnJlZTsKIAl9CkBAIC01MDgsNiArNTEwLDcgQEAKIAlsZ3AtPmFyZ3MubGF5b3V0LnBhZ2VzID0gcGFnZXM7CiAJbGdwLT5hcmdzLmxheW91dC5wZ2xlbiA9IG1heF9wYWdlcyAqIFBBR0VfU0laRTsKIAlsZ3AtPmxzZWdwcCA9ICZsc2VnOworCWxncC0+Z2ZwX2ZsYWdzID0gZ2ZwX2ZsYWdzOwogCiAJLyogU3luY2hyb25vdXNseSByZXRyaWV2ZSBsYXlvdXQgaW5mb3JtYXRpb24gZnJvbSBzZXJ2ZXIgYW5kCiAJICogc3RvcmUgaW4gbHNlZy4KQEAgLTY2NSwxMSArNjY4LDExIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICoKLWFsbG9jX2luaXRfbGF5b3V0X2hkcihzdHJ1Y3QgaW5vZGUgKmlubykKK2FsbG9jX2luaXRfbGF5b3V0X2hkcihzdHJ1Y3QgaW5vZGUgKmlubywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKmxvOwogCi0JbG8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyKSwgR0ZQX0tFUk5FTCk7CisJbG8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyKSwgZ2ZwX2ZsYWdzKTsKIAlpZiAoIWxvKQogCQlyZXR1cm4gTlVMTDsKIAlhdG9taWNfc2V0KCZsby0+cGxoX3JlZmNvdW50LCAxKTsKQEAgLTY4MSw3ICs2ODQsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqCi1wbmZzX2ZpbmRfYWxsb2NfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vKQorcG5mc19maW5kX2FsbG9jX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlubywgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm8pOwogCXN0cnVjdCBwbmZzX2xheW91dF9oZHIgKm5ldyA9IE5VTEw7CkBAIC02OTYsNyArNjk5LDcgQEAKIAkJCXJldHVybiBuZnNpLT5sYXlvdXQ7CiAJfQogCXNwaW5fdW5sb2NrKCZpbm8tPmlfbG9jayk7Ci0JbmV3ID0gYWxsb2NfaW5pdF9sYXlvdXRfaGRyKGlubyk7CisJbmV3ID0gYWxsb2NfaW5pdF9sYXlvdXRfaGRyKGlubywgZ2ZwX2ZsYWdzKTsKIAlzcGluX2xvY2soJmluby0+aV9sb2NrKTsKIAogCWlmIChsaWtlbHkobmZzaS0+bGF5b3V0ID09IE5VTEwpKQkvKiBXb24gdGhlIHJhY2U/ICovCkBAIC03NTYsNyArNzU5LDggQEAKIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIHBuZnNfdXBkYXRlX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlubywKIAkJICAgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKLQkJICAgZW51bSBwbmZzX2lvbW9kZSBpb21vZGUpCisJCSAgIGVudW0gcG5mc19pb21vZGUgaW9tb2RlLAorCQkgICBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlubyk7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IE5GU19TRVJWRVIoaW5vKS0+bmZzX2NsaWVudDsKQEAgLTc2Nyw3ICs3NzEsNyBAQAogCWlmICghcG5mc19lbmFibGVkX3NiKE5GU19TRVJWRVIoaW5vKSkpCiAJCXJldHVybiBOVUxMOwogCXNwaW5fbG9jaygmaW5vLT5pX2xvY2spOwotCWxvID0gcG5mc19maW5kX2FsbG9jX2xheW91dChpbm8pOworCWxvID0gcG5mc19maW5kX2FsbG9jX2xheW91dChpbm8sIGdmcF9mbGFncyk7CiAJaWYgKGxvID09IE5VTEwpIHsKIAkJZHByaW50aygiJXMgRVJST1I6IGNhbid0IGdldCBwbmZzX2xheW91dF9oZHJcbiIsIF9fZnVuY19fKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtODA3LDcgKzgxMSw3IEBACiAJCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOwogCX0KIAotCWxzZWcgPSBzZW5kX2xheW91dGdldChsbywgY3R4LCBpb21vZGUpOworCWxzZWcgPSBzZW5kX2xheW91dGdldChsbywgY3R4LCBpb21vZGUsIGdmcF9mbGFncyk7CiAJaWYgKCFsc2VnICYmIGZpcnN0KSB7CiAJCXNwaW5fbG9jaygmY2xwLT5jbF9sb2NrKTsKIAkJbGlzdF9kZWxfaW5pdCgmbG8tPnBsaF9sYXlvdXRzKTsKQEAgLTg0Niw3ICs4NTAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAJLyogSW5qZWN0IGxheW91dCBibG9iIGludG8gSS9PIGRldmljZSBkcml2ZXIgKi8KLQlsc2VnID0gTkZTX1NFUlZFUihpbm8pLT5wbmZzX2N1cnJfbGQtPmFsbG9jX2xzZWcobG8sIHJlcyk7CisJbHNlZyA9IE5GU19TRVJWRVIoaW5vKS0+cG5mc19jdXJyX2xkLT5hbGxvY19sc2VnKGxvLCByZXMsIGxncC0+Z2ZwX2ZsYWdzKTsKIAlpZiAoIWxzZWcgfHwgSVNfRVJSKGxzZWcpKSB7CiAJCWlmICghbHNlZykKIAkJCXN0YXR1cyA9IC1FTk9NRU07CkBAIC04OTksNyArOTAzLDggQEAKIAkJLyogVGhpcyBpcyBmaXJzdCBjb2VsZXNjZSBjYWxsIGZvciBhIHNlcmllcyBvZiBuZnNfcGFnZXMgKi8KIAkJcGdpby0+cGdfbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChwZ2lvLT5wZ19pbm9kZSwKIAkJCQkJCSAgIHByZXYtPndiX2NvbnRleHQsCi0JCQkJCQkgICBJT01PREVfUkVBRCk7CisJCQkJCQkgICBJT01PREVfUkVBRCwKKwkJCQkJCSAgIEdGUF9LRVJORUwpOwogCX0KIAlyZXR1cm4gTkZTX1NFUlZFUihwZ2lvLT5wZ19pbm9kZSktPnBuZnNfY3Vycl9sZC0+cGdfdGVzdChwZ2lvLCBwcmV2LCByZXEpOwogfQpAQCAtOTIxLDcgKzkyNiw4IEBACiAJCS8qIFRoaXMgaXMgZmlyc3QgY29lbGVzY2UgY2FsbCBmb3IgYSBzZXJpZXMgb2YgbmZzX3BhZ2VzICovCiAJCXBnaW8tPnBnX2xzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQocGdpby0+cGdfaW5vZGUsCiAJCQkJCQkgICBwcmV2LT53Yl9jb250ZXh0LAotCQkJCQkJICAgSU9NT0RFX1JXKTsKKwkJCQkJCSAgIElPTU9ERV9SVywKKwkJCQkJCSAgIEdGUF9OT0ZTKTsKIAl9CiAJcmV0dXJuIE5GU19TRVJWRVIocGdpby0+cGdfaW5vZGUpLT5wbmZzX2N1cnJfbGQtPnBnX3Rlc3QocGdpbywgcHJldiwgcmVxKTsKIH0KQEAgLTEwMDQsNiArMTAxMCw3IEBACiB7CiAJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKHdkYXRhLT5pbm9kZSk7CiAJbG9mZl90IGVuZF9wb3MgPSB3ZGF0YS0+YXJncy5vZmZzZXQgKyB3ZGF0YS0+cmVzLmNvdW50OworCWJvb2wgbWFya19hc19kaXJ0eSA9IGZhbHNlOwogCiAJc3Bpbl9sb2NrKCZuZnNpLT52ZnNfaW5vZGUuaV9sb2NrKTsKIAlpZiAoIXRlc3RfYW5kX3NldF9iaXQoTkZTX0lOT19MQVlPVVRDT01NSVQsICZuZnNpLT5mbGFncykpIHsKQEAgLTEwMTEsMTMgKzEwMTgsMTggQEAKIAkJZ2V0X2xzZWcod2RhdGEtPmxzZWcpOwogCQl3ZGF0YS0+bHNlZy0+cGxzX2xjX2NyZWQgPQogCQkJZ2V0X3JwY2NyZWQod2RhdGEtPmFyZ3MuY29udGV4dC0+c3RhdGUtPm93bmVyLT5zb19jcmVkKTsKLQkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKHdkYXRhLT5pbm9kZSk7CisJCW1hcmtfYXNfZGlydHkgPSB0cnVlOwogCQlkcHJpbnRrKCIlczogU2V0IGxheW91dGNvbW1pdCBmb3IgaW5vZGUgJWx1ICIsCiAJCQlfX2Z1bmNfXywgd2RhdGEtPmlub2RlLT5pX2lubyk7CiAJfQogCWlmIChlbmRfcG9zID4gd2RhdGEtPmxzZWctPnBsc19lbmRfcG9zKQogCQl3ZGF0YS0+bHNlZy0+cGxzX2VuZF9wb3MgPSBlbmRfcG9zOwogCXNwaW5fdW5sb2NrKCZuZnNpLT52ZnNfaW5vZGUuaV9sb2NrKTsKKworCS8qIGlmIHBuZnNfbGF5b3V0Y29tbWl0X2lub2RlKCkgcnVucyBiZXR3ZWVuIGlub2RlIGxvY2tzLCB0aGUgbmV4dCBvbmUKKwkgKiB3aWxsIGJlIGEgbm9vcCBiZWNhdXNlIE5GU19JTk9fTEFZT1VUQ09NTUlUIHdpbGwgbm90IGJlIHNldCAqLworCWlmIChtYXJrX2FzX2RpcnR5KQorCQltYXJrX2lub2RlX2RpcnR5X3N5bmMod2RhdGEtPmlub2RlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBuZnNfc2V0X2xheW91dGNvbW1pdCk7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9wbmZzLmggYi9mcy9uZnMvcG5mcy5oCmluZGV4IGJjNDgyNzIuLjBjMDE1YmEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9wbmZzLmgKKysrIGIvZnMvbmZzL3BuZnMuaApAQCAtNzAsNyArNzAsNyBAQAogCWNvbnN0IHUzMiBpZDsKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBtb2R1bGUgKm93bmVyOwotCXN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICogKCphbGxvY19sc2VnKSAoc3RydWN0IHBuZnNfbGF5b3V0X2hkciAqbGF5b3V0aWQsIHN0cnVjdCBuZnM0X2xheW91dGdldF9yZXMgKmxncik7CisJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKiAoKmFsbG9jX2xzZWcpIChzdHJ1Y3QgcG5mc19sYXlvdXRfaGRyICpsYXlvdXRpZCwgc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyAqbGdyLCBnZnBfdCBnZnBfZmxhZ3MpOwogCXZvaWQgKCpmcmVlX2xzZWcpIChzdHJ1Y3QgcG5mc19sYXlvdXRfc2VnbWVudCAqbHNlZyk7CiAKIAkvKiB0ZXN0IGZvciBuZnMgcGFnZSBjYWNoZSBjb2FsZXNjaW5nICovCkBAIC0xMjYsNyArMTI2LDcgQEAKIHZvaWQgcHV0X2xzZWcoc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKmxzZWcpOwogc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKgogcG5mc191cGRhdGVfbGF5b3V0KHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4LAotCQkgICBlbnVtIHBuZnNfaW9tb2RlIGFjY2Vzc190eXBlKTsKKwkJICAgZW51bSBwbmZzX2lvbW9kZSBhY2Nlc3NfdHlwZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKTsKIHZvaWQgc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICosIHUzMiBpZCk7CiB2b2lkIHVuc2V0X3BuZnNfbGF5b3V0ZHJpdmVyKHN0cnVjdCBuZnNfc2VydmVyICopOwogZW51bSBwbmZzX3RyeV9zdGF0dXMgcG5mc190cnlfdG9fd3JpdGVfZGF0YShzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKiwKQEAgLTI0NSw3ICsyNDUsNyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwbmZzX2xheW91dF9zZWdtZW50ICoKIHBuZnNfdXBkYXRlX2xheW91dChzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCwKLQkJICAgZW51bSBwbmZzX2lvbW9kZSBhY2Nlc3NfdHlwZSkKKwkJICAgZW51bSBwbmZzX2lvbW9kZSBhY2Nlc3NfdHlwZSwgZ2ZwX3QgZ2ZwX2ZsYWdzKQogewogCXJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL3JlYWQuYyBiL2ZzL25mcy9yZWFkLmMKaW5kZXggN2NkZWQyYi4uMmJjZjBkYyAxMDA2NDQKLS0tIGEvZnMvbmZzL3JlYWQuYworKysgYi9mcy9uZnMvcmVhZC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAlhdG9taWNfc2V0KCZyZXEtPndiX2NvbXBsZXRlLCByZXF1ZXN0cyk7CiAKIAlCVUdfT04oZGVzYy0+cGdfbHNlZyAhPSBOVUxMKTsKLQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SRUFEKTsKKwlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SRUFELCBHRlBfS0VSTkVMKTsKIAlDbGVhclBhZ2VFcnJvcihwYWdlKTsKIAlvZmZzZXQgPSAwOwogCW5ieXRlcyA9IGRlc2MtPnBnX2NvdW50OwpAQCAtMzUxLDcgKzM1MSw3IEBACiAJfQogCXJlcSA9IG5mc19saXN0X2VudHJ5KGRhdGEtPnBhZ2VzLm5leHQpOwogCWlmICgoIWxzZWcpICYmIGxpc3RfaXNfc2luZ3VsYXIoJmRhdGEtPnBhZ2VzKSkKLQkJbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChkZXNjLT5wZ19pbm9kZSwgcmVxLT53Yl9jb250ZXh0LCBJT01PREVfUkVBRCk7CisJCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JFQUQsIEdGUF9LRVJORUwpOwogCiAJcmV0ID0gbmZzX3JlYWRfcnBjc2V0dXAocmVxLCBkYXRhLCAmbmZzX3JlYWRfZnVsbF9vcHMsIGRlc2MtPnBnX2NvdW50LAogCQkJCTAsIGxzZWcpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYwppbmRleCAyYjhlOWE1Li5lMjg4ZjA2IDEwMDY0NAotLS0gYS9mcy9uZnMvc3VwZXIuYworKysgYi9mcy9uZnMvc3VwZXIuYwpAQCAtMTAwNCw2ICsxMDA0LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJbW50LT5mbGFncyB8PSBORlNfTU9VTlRfU0VDRkxBVk9VUjsKIAltbnQtPmF1dGhfZmxhdm9yX2xlbiA9IDE7CiAJcmV0dXJuIDE7CiB9CkBAIC0xOTc2LDYgKzE5NzcsMTUgQEAKIAlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogbm9hYyBpcyBhIHNwZWNpYWwgY2FzZS4gSXQgaW1wbGllcyAtbyBzeW5jLCBidXQgdGhhdCdzIG5vdAorCSAqIG5lY2Vzc2FyaWx5IHJlZmxlY3RlZCBpbiB0aGUgbXRhYiBvcHRpb25zLiBkb19yZW1vdW50X3NiCisJICogd2lsbCBjbGVhciBNU19TWU5DSFJPTk9VUyBpZiAtbyBzeW5jIHdhc24ndCBzcGVjaWZpZWQgaW4gdGhlCisJICogcmVtb3VudCBvcHRpb25zLCBzbyB3ZSBoYXZlIHRvIGV4cGxpY2l0bHkgcmVzZXQgaXQuCisJICovCisJaWYgKGRhdGEtPmZsYWdzICYgTkZTX01PVU5UX05PQUMpCisJCSpmbGFncyB8PSBNU19TWU5DSFJPTk9VUzsKKwogCS8qIGNvbXBhcmUgbmV3IG1vdW50IG9wdGlvbnMgd2l0aCBvbGQgb25lcyAqLwogCWVycm9yID0gbmZzX2NvbXBhcmVfcmVtb3VudF9kYXRhKG5mc3MsIGRhdGEpOwogb3V0OgpAQCAtMjIzNSw4ICsyMjQ1LDcgQEAKIAlpZiAoIXMtPnNfcm9vdCkgewogCQkvKiBpbml0aWFsIHN1cGVyYmxvY2svcm9vdCBjcmVhdGlvbiAqLwogCQluZnNfZmlsbF9zdXBlcihzLCBkYXRhKTsKLQkJbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZSgKLQkJCXMsIGRhdGEgPyBkYXRhLT5mc2NhY2hlX3VuaXEgOiBOVUxMLCBOVUxMKTsKKwkJbmZzX2ZzY2FjaGVfZ2V0X3N1cGVyX2Nvb2tpZShzLCBkYXRhLT5mc2NhY2hlX3VuaXEsIE5VTEwpOwogCX0KIAogCW1udHJvb3QgPSBuZnNfZ2V0X3Jvb3QocywgbW50ZmgsIGRldl9uYW1lKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggZTRjYmMxMS4uNDljNzE1YiAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTY4MCw3ICs2ODAsNiBAQAogCXJlcSA9IG5mc19zZXR1cF93cml0ZV9yZXF1ZXN0KGN0eCwgcGFnZSwgb2Zmc2V0LCBjb3VudCk7CiAJaWYgKElTX0VSUihyZXEpKQogCQlyZXR1cm4gUFRSX0VSUihyZXEpOwotCW5mc19tYXJrX3JlcXVlc3RfZGlydHkocmVxKTsKIAkvKiBVcGRhdGUgZmlsZSBsZW5ndGggKi8KIAluZnNfZ3Jvd19maWxlKHBhZ2UsIG9mZnNldCwgY291bnQpOwogCW5mc19tYXJrX3VwdG9kYXRlKHBhZ2UsIHJlcS0+d2JfcGdiYXNlLCByZXEtPndiX2J5dGVzKTsKQEAgLTk0MCw3ICs5MzksNyBAQAogCWF0b21pY19zZXQoJnJlcS0+d2JfY29tcGxldGUsIHJlcXVlc3RzKTsKIAogCUJVR19PTihkZXNjLT5wZ19sc2VnKTsKLQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SVyk7CisJbHNlZyA9IHBuZnNfdXBkYXRlX2xheW91dChkZXNjLT5wZ19pbm9kZSwgcmVxLT53Yl9jb250ZXh0LCBJT01PREVfUlcsIEdGUF9OT0ZTKTsKIAlDbGVhclBhZ2VFcnJvcihwYWdlKTsKIAlvZmZzZXQgPSAwOwogCW5ieXRlcyA9IGRlc2MtPnBnX2NvdW50OwpAQCAtMTAxNCw3ICsxMDEzLDcgQEAKIAl9CiAJcmVxID0gbmZzX2xpc3RfZW50cnkoZGF0YS0+cGFnZXMubmV4dCk7CiAJaWYgKCghbHNlZykgJiYgbGlzdF9pc19zaW5ndWxhcigmZGF0YS0+cGFnZXMpKQotCQlsc2VnID0gcG5mc191cGRhdGVfbGF5b3V0KGRlc2MtPnBnX2lub2RlLCByZXEtPndiX2NvbnRleHQsIElPTU9ERV9SVyk7CisJCWxzZWcgPSBwbmZzX3VwZGF0ZV9sYXlvdXQoZGVzYy0+cGdfaW5vZGUsIHJlcS0+d2JfY29udGV4dCwgSU9NT0RFX1JXLCBHRlBfTk9GUyk7CiAKIAlpZiAoKGRlc2MtPnBnX2lvZmxhZ3MgJiBGTFVTSF9DT05EX1NUQUJMRSkgJiYKIAkgICAgKGRlc2MtPnBnX21vcmVpbyB8fCBORlNfSShkZXNjLT5wZ19pbm9kZSktPm5jb21taXQpKQpAQCAtMTQxOCw4ICsxNDE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFzay0+dGtfcGlkLCB0YXNrLT50a19zdGF0dXMpOwogCiAJLyogQ2FsbCB0aGUgTkZTIHZlcnNpb24tc3BlY2lmaWMgY29kZSAqLwotCWlmIChORlNfUFJPVE8oZGF0YS0+aW5vZGUpLT5jb21taXRfZG9uZSh0YXNrLCBkYXRhKSAhPSAwKQotCQlyZXR1cm47CisJTkZTX1BST1RPKGRhdGEtPmlub2RlKS0+Y29tbWl0X2RvbmUodGFzaywgZGF0YSk7CiB9CiAKIHZvaWQgbmZzX2NvbW1pdF9yZWxlYXNlX3BhZ2VzKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqZGF0YSkKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNHN0YXRlLmMgYi9mcy9uZnNkL25mczRzdGF0ZS5jCmluZGV4IGFhMzA5YWEuLjRjZjA0ZTEgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNHN0YXRlLmMKKysrIGIvZnMvbmZzZC9uZnM0c3RhdGUuYwpAQCAtMjU4LDYgKzI1OCw3IEBACiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmZwLT5maV9kZWxlZ2VlcykpIHsKIAkJdmZzX3NldGxlYXNlKGZwLT5maV9kZWxlZ19maWxlLCBGX1VOTENLLCAmZnAtPmZpX2xlYXNlKTsKIAkJZnAtPmZpX2xlYXNlID0gTlVMTDsKKwkJZnB1dChmcC0+ZmlfZGVsZWdfZmlsZSk7CiAJCWZwLT5maV9kZWxlZ19maWxlID0gTlVMTDsKIAl9CiB9CkBAIC00MDIsOCArNDAzLDggQEAKIAlpZiAoc3RwLT5zdF9hY2Nlc3NfYm1hcCkgewogCQlvZmxhZyA9IG5mczRfYWNjZXNzX2JtYXBfdG9fb21vZGUoc3RwKTsKIAkJbmZzNF9maWxlX3B1dF9hY2Nlc3Moc3RwLT5zdF9maWxlLCBvZmxhZyk7Ci0JCXB1dF9uZnM0X2ZpbGUoc3RwLT5zdF9maWxlKTsKIAl9CisJcHV0X25mczRfZmlsZShzdHAtPnN0X2ZpbGUpOwogCWttZW1fY2FjaGVfZnJlZShzdGF0ZWlkX3NsYWIsIHN0cCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvdmZzLmMgYi9mcy9uZnNkL3Zmcy5jCmluZGV4IDJlMWNlYmQuLjEyOWYzYzkgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvdmZzLmMKKysrIGIvZnMvbmZzZC92ZnMuYwpAQCAtMTM2Myw3ICsxMzYzLDcgQEAKIAkJZ290byBvdXQ7CiAJaWYgKCEoaWFwLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkpCiAJCWlhcC0+aWFfbW9kZSA9IDA7Ci0JZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE5GU0RfTUFZX0NSRUFURSk7CisJZXJyID0gZmhfdmVyaWZ5KHJxc3RwLCBmaHAsIFNfSUZESVIsIE5GU0RfTUFZX0VYRUMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCkBAIC0xMzg1LDYgKzEzODUsMTMgQEAKIAlpZiAoSVNfRVJSKGRjaGlsZCkpCiAJCWdvdG8gb3V0X25mc2VycjsKIAorCS8qIElmIGZpbGUgZG9lc24ndCBleGlzdCwgY2hlY2sgZm9yIHBlcm1pc3Npb25zIHRvIGNyZWF0ZSBvbmUgKi8KKwlpZiAoIWRjaGlsZC0+ZF9pbm9kZSkgeworCQllcnIgPSBmaF92ZXJpZnkocnFzdHAsIGZocCwgU19JRkRJUiwgTkZTRF9NQVlfQ1JFQVRFKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGZoX2NvbXBvc2UocmVzZmhwLCBmaHAtPmZoX2V4cG9ydCwgZGNoaWxkLCBmaHApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2FsbG9jLmMgYi9mcy9uaWxmczIvYWxsb2MuYwppbmRleCAwYTBhNjZkLi5mNzY4NDQ4IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvYWxsb2MuYworKysgYi9mcy9uaWxmczIvYWxsb2MuYwpAQCAtNjQ2LDcgKzY0Niw3IEBACiAJdW5zaWduZWQgbG9uZyBncm91cCwgZ3JvdXBfb2Zmc2V0OwogCWludCBpLCBqLCBuLCByZXQ7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpICs9IG4pIHsKKwlmb3IgKGkgPSAwOyBpIDwgbml0ZW1zOyBpID0gaikgewogCQlncm91cCA9IG5pbGZzX3BhbGxvY19ncm91cChpbm9kZSwgZW50cnlfbnJzW2ldLCAmZ3JvdXBfb2Zmc2V0KTsKIAkJcmV0ID0gbmlsZnNfcGFsbG9jX2dldF9kZXNjX2Jsb2NrKGlub2RlLCBncm91cCwgMCwgJmRlc2NfYmgpOwogCQlpZiAocmV0IDwgMCkKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCmluZGV4IDY0MzcyMDIuLjlhM2U2YmIgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYwpAQCAtNTM5LDI1ICs1MzksNDEgQEAKIAogLyogV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdCBub2JvZHkgaXMgaGVhcnRiZWF0aW5nIG9uIHRvcCBvZiB1cyAtLQogICogdGhpcyB3aWxsIGhlbHAgZGV0ZWN0IGFuIGludmFsaWQgY29uZmlndXJhdGlvbi4gKi8KLXN0YXRpYyBpbnQgbzJoYl9jaGVja19sYXN0X3RpbWVzdGFtcChzdHJ1Y3QgbzJoYl9yZWdpb24gKnJlZykKK3N0YXRpYyB2b2lkIG8yaGJfY2hlY2tfbGFzdF90aW1lc3RhbXAoc3RydWN0IG8yaGJfcmVnaW9uICpyZWcpCiB7Ci0JaW50IG5vZGVfbnVtLCByZXQ7CiAJc3RydWN0IG8yaGJfZGlza19zbG90ICpzbG90OwogCXN0cnVjdCBvMmhiX2Rpc2tfaGVhcnRiZWF0X2Jsb2NrICpoYl9ibG9jazsKKwljaGFyICplcnJzdHI7CiAKLQlub2RlX251bSA9IG8ybm1fdGhpc19ub2RlKCk7Ci0KLQlyZXQgPSAxOwotCXNsb3QgPSAmcmVnLT5ocl9zbG90c1tub2RlX251bV07CisJc2xvdCA9ICZyZWctPmhyX3Nsb3RzW28ybm1fdGhpc19ub2RlKCldOwogCS8qIERvbid0IGNoZWNrIG9uIG91ciAxc3QgdGltZXN0YW1wICovCi0JaWYgKHNsb3QtPmRzX2xhc3RfdGltZSkgewotCQloYl9ibG9jayA9IHNsb3QtPmRzX3Jhd19ibG9jazsKKwlpZiAoIXNsb3QtPmRzX2xhc3RfdGltZSkKKwkJcmV0dXJuOwogCi0JCWlmIChsZTY0X3RvX2NwdShoYl9ibG9jay0+aGJfc2VxKSAhPSBzbG90LT5kc19sYXN0X3RpbWUpCi0JCQlyZXQgPSAwOwotCX0KKwloYl9ibG9jayA9IHNsb3QtPmRzX3Jhd19ibG9jazsKKwlpZiAobGU2NF90b19jcHUoaGJfYmxvY2stPmhiX3NlcSkgPT0gc2xvdC0+ZHNfbGFzdF90aW1lICYmCisJICAgIGxlNjRfdG9fY3B1KGhiX2Jsb2NrLT5oYl9nZW5lcmF0aW9uKSA9PSBzbG90LT5kc19sYXN0X2dlbmVyYXRpb24gJiYKKwkgICAgaGJfYmxvY2stPmhiX25vZGUgPT0gc2xvdC0+ZHNfbm9kZV9udW0pCisJCXJldHVybjsKIAotCXJldHVybiByZXQ7CisjZGVmaW5lIEVSUlNUUjEJCSJBbm90aGVyIG5vZGUgaXMgaGVhcnRiZWF0aW5nIG9uIGRldmljZSIKKyNkZWZpbmUgRVJSU1RSMgkJIkhlYXJ0YmVhdCBnZW5lcmF0aW9uIG1pc21hdGNoIG9uIGRldmljZSIKKyNkZWZpbmUgRVJSU1RSMwkJIkhlYXJ0YmVhdCBzZXF1ZW5jZSBtaXNtYXRjaCBvbiBkZXZpY2UiCisKKwlpZiAoaGJfYmxvY2stPmhiX25vZGUgIT0gc2xvdC0+ZHNfbm9kZV9udW0pCisJCWVycnN0ciA9IEVSUlNUUjE7CisJZWxzZSBpZiAobGU2NF90b19jcHUoaGJfYmxvY2stPmhiX2dlbmVyYXRpb24pICE9CisJCSBzbG90LT5kc19sYXN0X2dlbmVyYXRpb24pCisJCWVycnN0ciA9IEVSUlNUUjI7CisJZWxzZQorCQllcnJzdHIgPSBFUlJTVFIzOworCisJbWxvZyhNTF9FUlJPUiwgIiVzICglcyk6IGV4cGVjdGVkKCV1OjB4JWxseCwgMHglbGx4KSwgIgorCSAgICAgIm9uZGlzaygldToweCVsbHgsIDB4JWxseClcbiIsIGVycnN0ciwgcmVnLT5ocl9kZXZfbmFtZSwKKwkgICAgIHNsb3QtPmRzX25vZGVfbnVtLCAodW5zaWduZWQgbG9uZyBsb25nKXNsb3QtPmRzX2xhc3RfZ2VuZXJhdGlvbiwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpc2xvdC0+ZHNfbGFzdF90aW1lLCBoYl9ibG9jay0+aGJfbm9kZSwKKwkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoaGJfYmxvY2stPmhiX2dlbmVyYXRpb24pLAorCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShoYl9ibG9jay0+aGJfc2VxKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvMmhiX3ByZXBhcmVfYmxvY2soc3RydWN0IG8yaGJfcmVnaW9uICpyZWcsCkBAIC05ODMsOSArOTk5LDcgQEAKIAkvKiBXaXRoIGFuIHVwIHRvIGRhdGUgdmlldyBvZiB0aGUgc2xvdHMsIHdlIGNhbiBjaGVjayB0aGF0IG5vCiAJICogb3RoZXIgbm9kZSBoYXMgYmVlbiBpbXByb3Blcmx5IGNvbmZpZ3VyZWQgdG8gaGVhcnRiZWF0IGluCiAJICogb3VyIHNsb3QuICovCi0JaWYgKCFvMmhiX2NoZWNrX2xhc3RfdGltZXN0YW1wKHJlZykpCi0JCW1sb2coTUxfRVJST1IsICJEZXZpY2UgXCIlc1wiOiBhbm90aGVyIG5vZGUgaXMgaGVhcnRiZWF0aW5nICIKLQkJICAgICAiaW4gb3VyIHNsb3QhXG4iLCByZWctPmhyX2Rldl9uYW1lKTsKKwlvMmhiX2NoZWNrX2xhc3RfdGltZXN0YW1wKHJlZyk7CiAKIAkvKiBmaWxsIGluIHRoZSBwcm9wZXIgaW5mbyBmb3Igb3VyIG5leHQgaGVhcnRiZWF0ICovCiAJbzJoYl9wcmVwYXJlX2Jsb2NrKHJlZywgcmVnLT5ocl9nZW5lcmF0aW9uKTsKQEAgLTk5OSw4ICsxMDEzLDggQEAKIAl9CiAKIAlpID0gLTE7Ci0Jd2hpbGUoKGkgPSBmaW5kX25leHRfYml0KGNvbmZpZ3VyZWRfbm9kZXMsIE8yTk1fTUFYX05PREVTLCBpICsgMSkpIDwgTzJOTV9NQVhfTk9ERVMpIHsKLQorCXdoaWxlKChpID0gZmluZF9uZXh0X2JpdChjb25maWd1cmVkX25vZGVzLAorCQkJCSBPMk5NX01BWF9OT0RFUywgaSArIDEpKSA8IE8yTk1fTUFYX05PREVTKSB7CiAJCWNoYW5nZSB8PSBvMmhiX2NoZWNrX3Nsb3QocmVnLCAmcmVnLT5ocl9zbG90c1tpXSk7CiAJfQogCkBAIC0xNjkwLDYgKzE3MDQsNyBAQAogCXN0cnVjdCBmaWxlICpmaWxwID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gTlVMTDsKIAlzc2l6ZV90IHJldCA9IC1FSU5WQUw7CisJaW50IGxpdmVfdGhyZXNob2xkOwogCiAJaWYgKHJlZy0+aHJfYmRldikKIAkJZ290byBvdXQ7CkBAIC0xNzY2LDggKzE3ODEsMTggQEAKIAkgKiBBIG5vZGUgaXMgY29uc2lkZXJlZCBsaXZlIGFmdGVyIGl0IGhhcyBiZWF0IExJVkVfVEhSRVNIT0xECiAJICogdGltZXMuICBXZSdyZSBub3Qgc3RlYWR5IHVudGlsIHdlJ3ZlIGdpdmVuIHRoZW0gYSBjaGFuY2UKIAkgKiBfYWZ0ZXJfIG91ciBmaXJzdCByZWFkLgorCSAqIFRoZSBkZWZhdWx0IHRocmVzaG9sZCBpcyBiYXJlIG1pbmltdW0gc28gYXMgdG8gbGltaXQgdGhlIGRlbGF5CisJICogZHVyaW5nIG1vdW50cy4gRm9yIGdsb2JhbCBoZWFydGJlYXQsIHRoZSB0aHJlc2hvbGQgZG91YmxlZCBmb3IgdGhlCisJICogZmlyc3QgcmVnaW9uLgogCSAqLwotCWF0b21pY19zZXQoJnJlZy0+aHJfc3RlYWR5X2l0ZXJhdGlvbnMsIE8ySEJfTElWRV9USFJFU0hPTEQgKyAxKTsKKwlsaXZlX3RocmVzaG9sZCA9IE8ySEJfTElWRV9USFJFU0hPTEQ7CisJaWYgKG8yaGJfZ2xvYmFsX2hlYXJ0YmVhdF9hY3RpdmUoKSkgeworCQlzcGluX2xvY2soJm8yaGJfbGl2ZV9sb2NrKTsKKwkJaWYgKG8yaGJfcG9wX2NvdW50KCZvMmhiX3JlZ2lvbl9iaXRtYXAsIE8yTk1fTUFYX1JFR0lPTlMpID09IDEpCisJCQlsaXZlX3RocmVzaG9sZCA8PD0gMTsKKwkJc3Bpbl91bmxvY2soJm8yaGJfbGl2ZV9sb2NrKTsKKwl9CisJYXRvbWljX3NldCgmcmVnLT5ocl9zdGVhZHlfaXRlcmF0aW9ucywgbGl2ZV90aHJlc2hvbGQgKyAxKTsKIAogCWhiX3Rhc2sgPSBrdGhyZWFkX3J1bihvMmhiX3RocmVhZCwgcmVnLCAibzJoYi0lcyIsCiAJCQkgICAgICByZWctPmhyX2l0ZW0uY2lfbmFtZSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kaXIuYyBiL2ZzL29jZnMyL2Rpci5jCmluZGV4IDlmZTViOGYuLjg1ODJlM2YgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2Rpci5jCisrKyBiL2ZzL29jZnMyL2Rpci5jCkBAIC0yODY4LDcgKzI4NjgsNyBAQAogCQlieXRlcyA9IGJsb2Nrc193YW50ZWQgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOwogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koZGlyKTsKLQlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYzsKKwlzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqZGF0YV9hYyA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGlyZGF0YV9iaCA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkeF9yb290X2JoID0gTlVMTDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYyBiL2ZzL29jZnMyL2RsbS9kbG1kb21haW4uYwppbmRleCA3NTQwYTQ5Li4zYjE3OWQ2IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZG9tYWluLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWRvbWFpbi5jCkBAIC0xNjE0LDcgKzE2MTQsOCBAQAogCXNwaW5fdW5sb2NrKCZkbG0tPnNwaW5sb2NrKTsKIAogCS8qIFN1cHBvcnQgZm9yIGdsb2JhbCBoZWFydGJlYXQgYW5kIG5vZGUgaW5mbyB3YXMgYWRkZWQgaW4gMS4xICovCi0JaWYgKGRsbV9wcm90b2NvbC5wdl9tYWpvciA+IDEgfHwgZGxtX3Byb3RvY29sLnB2X21pbm9yID4gMCkgeworCWlmIChkbG0tPmRsbV9sb2NraW5nX3Byb3RvLnB2X21ham9yID4gMSB8fAorCSAgICBkbG0tPmRsbV9sb2NraW5nX3Byb3RvLnB2X21pbm9yID4gMCkgewogCQlzdGF0dXMgPSBkbG1fc2VuZF9ub2RlaW5mbyhkbG0sIGN0eHQtPnllc19yZXNwX21hcCk7CiAJCWlmIChzdGF0dXMpIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYyBiL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYwppbmRleCBmZWRlNTdlLi44NGQxNjYzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCkBAIC0yNTc0LDYgKzI1NzQsOSBAQAogCQlyZXMtPnN0YXRlICY9IH5ETE1fTE9DS19SRVNfTUlHUkFUSU5HOwogCQl3YWtlID0gMTsKIAkJc3Bpbl91bmxvY2soJnJlcy0+c3BpbmxvY2spOworCQlpZiAoZGxtX2lzX2hvc3RfZG93bihyZXQpKQorCQkJZGxtX3dhaXRfZm9yX25vZGVfZGVhdGgoZGxtLCB0YXJnZXQsCisJCQkJCQlETE1fTk9ERV9ERUFUSF9XQUlUX01BWCk7CiAJCWdvdG8gbGVhdmU7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggNDE1NjVhZS4uODk2NTlkNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtMTYwNyw2ICsxNjA3LDkgQEAKIAlyYW5nZSA9IGxlMzJfdG9fY3B1KHJlYy0+ZV9jcG9zKSArIG9jZnMyX3JlY19jbHVzdGVycyhlbCwgcmVjKTsKIAogCWlmIChsZTMyX3RvX2NwdShyZWMtPmVfY3BvcykgPj0gdHJ1bmNfc3RhcnQpIHsKKwkJLyoKKwkJICogcmVtb3ZlIGFuIGVudGlyZSBleHRlbnQgcmVjb3JkLgorCQkgKi8KIAkJKnRydW5jX2Nwb3MgPSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CiAJCS8qCiAJCSAqIFNraXAgaG9sZXMgaWYgYW55LgpAQCAtMTYxNyw3ICsxNjIwLDE2IEBACiAJCSpibGtubyA9IGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubyk7CiAJCSp0cnVuY19lbmQgPSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CiAJfSBlbHNlIGlmIChyYW5nZSA+IHRydW5jX3N0YXJ0KSB7CisJCS8qCisJCSAqIHJlbW92ZSBhIHBhcnRpYWwgZXh0ZW50IHJlY29yZCwgd2hpY2ggbWVhbnMgd2UncmUKKwkJICogcmVtb3ZpbmcgdGhlIGxhc3QgZXh0ZW50IHJlY29yZC4KKwkJICovCiAJCSp0cnVuY19jcG9zID0gdHJ1bmNfc3RhcnQ7CisJCS8qCisJCSAqIHNraXAgaG9sZSBpZiBhbnkuCisJCSAqLworCQlpZiAocmFuZ2UgPCAqdHJ1bmNfZW5kKQorCQkJKnRydW5jX2VuZCA9IHJhbmdlOwogCQkqdHJ1bmNfbGVuID0gKnRydW5jX2VuZCAtIHRydW5jX3N0YXJ0OwogCQljb2ZmID0gdHJ1bmNfc3RhcnQgLSBsZTMyX3RvX2NwdShyZWMtPmVfY3Bvcyk7CiAJCSpibGtubyA9IGxlNjRfdG9fY3B1KHJlYy0+ZV9ibGtubykgKwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvam91cm5hbC5jIGIvZnMvb2NmczIvam91cm5hbC5jCmluZGV4IGIxNDFhNDQuLjI5NWQ1NjQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2pvdXJuYWwuYworKysgYi9mcy9vY2ZzMi9qb3VybmFsLmMKQEAgLTEyNjAsNiArMTI2MCw5IEBACiB7CiAJc3RydWN0IG9jZnMyX2pvdXJuYWwgKmpvdXJuYWwgPSBvc2ItPmpvdXJuYWw7CiAKKwlpZiAob2NmczJfaXNfaGFyZF9yZWFkb25seShvc2IpKQorCQlyZXR1cm47CisKIAkvKiBObyBuZWVkIHRvIHF1ZXVlIHVwIG91ciB0cnVuY2F0ZV9sb2cgYXMgcmVndWxhciBjbGVhbnVwIHdpbGwgY2F0Y2gKIAkgKiB0aGF0ICovCiAJb2NmczJfcXVldWVfcmVjb3ZlcnlfY29tcGxldGlvbihqb3VybmFsLCBvc2ItPnNsb3RfbnVtLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggYjY4Zjg3YS4uOTM4Mzg3YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC0xMDE5LDcgKzEwMTksNyBAQAogCV9fbGUxNgl4ZV9uYW1lX29mZnNldDsgIC8qIGJ5dGUgb2Zmc2V0IGZyb20gdGhlIDFzdCBlbnRyeSBpbiB0aGUKIAkJCQkgICAgbG9jYWwgeGF0dHIgc3RvcmFnZShpbm9kZSwgeGF0dHIgYmxvY2sgb3IKIAkJCQkgICAgeGF0dHIgYnVja2V0KS4gKi8KLQlfX3U4CXhlX25hbWVfbGVuOwkgLyogeGF0dHIgbmFtZSBsZW4sIGRvZXMndCBpbmNsdWRlIHByZWZpeC4gKi8KKwlfX3U4CXhlX25hbWVfbGVuOwkgLyogeGF0dHIgbmFtZSBsZW4sIGRvZXNuJ3QgaW5jbHVkZSBwcmVmaXguICovCiAJX191OAl4ZV90eXBlOyAgICAgICAgIC8qIHRoZSBsb3cgNyBiaXRzIGluZGljYXRlIHRoZSBuYW1lIHByZWZpeAogCQkJCSAgKiB0eXBlIGFuZCB0aGUgaGlnaGVzdCBiaXQgaW5kaWNhdGVzIHdoZXRoZXIKIAkJCQkgICogdGhlIEVBIGlzIHN0b3JlZCBpbiB0aGUgbG9jYWwgc3RvcmFnZS4gKi8KZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvZWZpLmMgYi9mcy9wYXJ0aXRpb25zL2VmaS5jCmluZGV4IGFjMGNjYjUuLjE5ZDY3NTAgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvZWZpLmMKKysrIGIvZnMvcGFydGl0aW9ucy9lZmkuYwpAQCAtMzQ4LDYgKzM0OCwxMiBAQAogCQlnb3RvIGZhaWw7CiAJfQogCisJLyogQ2hlY2sgdGhhdCBzaXplb2ZfcGFydGl0aW9uX2VudHJ5IGhhcyB0aGUgY29ycmVjdCB2YWx1ZSAqLworCWlmIChsZTMyX3RvX2NwdSgoKmdwdCktPnNpemVvZl9wYXJ0aXRpb25fZW50cnkpICE9IHNpemVvZihncHRfZW50cnkpKSB7CisJCXByX2RlYnVnKCJHVUlEIFBhcnRpdGl0aW9uIEVudHJ5IFNpemUgY2hlY2sgZmFpbGVkLlxuIik7CisJCWdvdG8gZmFpbDsKKwl9CisKIAlpZiAoISgqcHRlcyA9IGFsbG9jX3JlYWRfZ3B0X2VudHJpZXMoc3RhdGUsICpncHQpKSkKIAkJZ290byBmYWlsOwogCmRpZmYgLS1naXQgYS9mcy9wcm9jL2Jhc2UuYyBiL2ZzL3Byb2MvYmFzZS5jCmluZGV4IGRkNjYyOGQuLmRmYTUzMjcgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYmFzZS5jCisrKyBiL2ZzL3Byb2MvYmFzZS5jCkBAIC0zMTI0LDExICszMTI0LDE2IEBACiAvKiBmb3IgdGhlIC9wcm9jLyBkaXJlY3RvcnkgaXRzZWxmLCBhZnRlciBub24tcHJvY2VzcyBzdHVmZiBoYXMgYmVlbiBkb25lICovCiBpbnQgcHJvY19waWRfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqIGZpbHAsIHZvaWQgKiBkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewotCXVuc2lnbmVkIGludCBuciA9IGZpbHAtPmZfcG9zIC0gRklSU1RfUFJPQ0VTU19FTlRSWTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnJlYXBlciA9IGdldF9wcm9jX3Rhc2soZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJdW5zaWduZWQgaW50IG5yOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVhcGVyOwogCXN0cnVjdCB0Z2lkX2l0ZXIgaXRlcjsKIAlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnM7CiAKKwlpZiAoZmlscC0+Zl9wb3MgPj0gUElEX01BWF9MSU1JVCArIFRHSURfT0ZGU0VUKQorCQlnb3RvIG91dF9ub190YXNrOworCW5yID0gZmlscC0+Zl9wb3MgLSBGSVJTVF9QUk9DRVNTX0VOVFJZOworCisJcmVhcGVyID0gZ2V0X3Byb2NfdGFzayhmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKIAlpZiAoIXJlYXBlcikKIAkJZ290byBvdXRfbm9fdGFzazsKIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IDJlN2FkZGYuLjMxOGQ4NjUgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTIxNCw3ICsyMTQsNyBAQAogCWludCBmbGFncyA9IHZtYS0+dm1fZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBpbm8gPSAwOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBwZ29mZiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CiAJZGV2X3QgZGV2ID0gMDsKIAlpbnQgbGVuOwogCkBAIC0yMjcsMTMgKzIyNywxNSBAQAogCiAJLyogV2UgZG9uJ3Qgc2hvdyB0aGUgc3RhY2sgZ3VhcmQgcGFnZSBpbiAvcHJvYy9tYXBzICovCiAJc3RhcnQgPSB2bWEtPnZtX3N0YXJ0OwotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKQotCQlpZiAoIXZtYV9zdGFja19jb250aW51ZSh2bWEtPnZtX3ByZXYsIHZtYS0+dm1fc3RhcnQpKQotCQkJc3RhcnQgKz0gUEFHRV9TSVpFOworCWlmIChzdGFja19ndWFyZF9wYWdlX3N0YXJ0KHZtYSwgc3RhcnQpKQorCQlzdGFydCArPSBQQUdFX1NJWkU7CisJZW5kID0gdm1hLT52bV9lbmQ7CisJaWYgKHN0YWNrX2d1YXJkX3BhZ2VfZW5kKHZtYSwgZW5kKSkKKwkJZW5kIC09IFBBR0VfU0laRTsKIAogCXNlcV9wcmludGYobSwgIiUwOGx4LSUwOGx4ICVjJWMlYyVjICUwOGxseCAlMDJ4OiUwMnggJWx1ICVuIiwKIAkJCXN0YXJ0LAotCQkJdm1hLT52bV9lbmQsCisJCQllbmQsCiAJCQlmbGFncyAmIFZNX1JFQUQgPyAncicgOiAnLScsCiAJCQlmbGFncyAmIFZNX1dSSVRFID8gJ3cnIDogJy0nLAogCQkJZmxhZ3MgJiBWTV9FWEVDID8gJ3gnIDogJy0nLApkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvbG9nLmMgYi9mcy91Ymlmcy9sb2cuYwppbmRleCA0ZDBjYjEyLi40MGZhNzgwIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9sb2cuYworKysgYi9mcy91Ymlmcy9sb2cuYwpAQCAtMTc1LDI2ICsxNzUsNiBAQAogfQogCiAvKioKLSAqIHViaWZzX2NyZWF0ZV9idWRzX2xpc3RzIC0gY3JlYXRlIGpvdXJuYWwgaGVhZCBidWRzIGxpc3RzIGZvciByZW1vdW50IHJ3LgotICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAotICovCi12b2lkIHViaWZzX2NyZWF0ZV9idWRzX2xpc3RzKHN0cnVjdCB1Ymlmc19pbmZvICpjKQotewotCXN0cnVjdCByYl9ub2RlICpwOwotCi0Jc3Bpbl9sb2NrKCZjLT5idWRzX2xvY2spOwotCXAgPSByYl9maXJzdCgmYy0+YnVkcyk7Ci0Jd2hpbGUgKHApIHsKLQkJc3RydWN0IHViaWZzX2J1ZCAqYnVkID0gcmJfZW50cnkocCwgc3RydWN0IHViaWZzX2J1ZCwgcmIpOwotCQlzdHJ1Y3QgdWJpZnNfamhlYWQgKmpoZWFkID0gJmMtPmpoZWFkc1tidWQtPmpoZWFkXTsKLQotCQlsaXN0X2FkZF90YWlsKCZidWQtPmxpc3QsICZqaGVhZC0+YnVkc19saXN0KTsKLQkJcCA9IHJiX25leHQocCk7Ci0JfQotCXNwaW5fdW5sb2NrKCZjLT5idWRzX2xvY2spOwotfQotCi0vKioKICAqIHViaWZzX2FkZF9idWRfdG9fbG9nIC0gYWRkIGEgbmV3IGJ1ZCB0byB0aGUgbG9nLgogICogQGM6IFVCSUZTIGZpbGUtc3lzdGVtIGRlc2NyaXB0aW9uIG9iamVjdAogICogQGpoZWFkOiBqb3VybmFsIGhlYWQgdGhlIGJ1ZCBiZWxvbmdzIHRvCmRpZmYgLS1naXQgYS9mcy91Ymlmcy9yZWNvdmVyeS5jIGIvZnMvdWJpZnMvcmVjb3ZlcnkuYwppbmRleCA5MzZmMmNiLi4zZGJhZDZmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9yZWNvdmVyeS5jCisrKyBiL2ZzL3ViaWZzL3JlY292ZXJ5LmMKQEAgLTMxNyw2ICszMTcsMzIgQEAKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KIAkJbWVtY3B5KGMtPnJjdnJkX21zdF9ub2RlLCBjLT5tc3Rfbm9kZSwgVUJJRlNfTVNUX05PREVfU1opOworCisJCS8qCisJCSAqIFdlIGhhZCB0byByZWNvdmVyIHRoZSBtYXN0ZXIgbm9kZSwgd2hpY2ggbWVhbnMgdGhlcmUgd2FzIGFuCisJCSAqIHVuY2xlYW4gcmVib290LiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBtYXN0ZXIgbm9kZQorCQkgKiBpcyBjbGVhbiBhdCB0aGlzIHBvaW50LCBpLmUuLCAlVUJJRlNfTVNUX0RJUlRZIGlzIG5vdCBzZXQuCisJCSAqIEUuZy4sIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY2hhaW4gb2YgZXZlbnRzOgorCQkgKgorCQkgKiAxLiBVQklGUyB3YXMgY2xlYW5seSB1bm1vdW50ZWQsIHNvIHRoZSBtYXN0ZXIgbm9kZSBpcyBjbGVhbgorCQkgKiAyLiBVQklGUyBpcyBiZWluZyBtb3VudGVkIFIvVyBhbmQgc3RhcnRzIGNoYW5naW5nIHRoZSBtYXN0ZXIKKwkJICogICAgbm9kZSBpbiB0aGUgZmlyc3QgKCVVQklGU19NU1RfTE5VTSkuIEEgcG93ZXIgY3V0IGhhcHBlbnMsCisJCSAqICAgIHNvIHRoaXMgTEVCIGVuZHMgdXAgd2l0aCBzb21lIGFtb3VudCBvZiBnYXJiYWdlIGF0IHRoZQorCQkgKiAgICBlbmQuCisJCSAqIDMuIFVCSUZTIGlzIGJlaW5nIG1vdW50ZWQgUi9PLiBXZSByZWFjaCB0aGlzIHBsYWNlIGFuZAorCQkgKiAgICByZWNvdmVyIHRoZSBtYXN0ZXIgbm9kZSBmcm9tIHRoZSBzZWNvbmQgTEVCCisJCSAqICAgICglVUJJRlNfTVNUX0xOVU0gKyAxKS4gQnV0IHdlIGNhbm5vdCB1cGRhdGUgdGhlIG1lZGlhCisJCSAqICAgIGJlY2F1c2Ugd2UgYXJlIGJlaW5nIG1vdW50ZWQgUi9PLiBXZSBoYXZlIHRvIGRlZmVyIHRoZQorCQkgKiAgICBvcGVyYXRpb24uCisJCSAqIDQuIEhvd2V2ZXIsIHRoaXMgbWFzdGVyIG5vZGUgKEBjLT5tc3Rfbm9kZSkgaXMgbWFya2VkIGFzCisJCSAqICAgIGNsZWFuIChzaW5jZSB0aGUgc3RlcCAxKS4gQW5kIGlmIHdlIGp1c3QgcmV0dXJuLCB0aGUKKwkJICogICAgbW91bnQgY29kZSB3aWxsIGJlIGNvbmZ1c2VkIGFuZCB3b24ndCByZWNvdmVyIHRoZSBtYXN0ZXIKKwkJICogICAgbm9kZSB3aGVuIGl0IGlzIHJlLW1vdW50ZXIgUi9XIGxhdGVyLgorCQkgKgorCQkgKiAgICBUaHVzLCB0byBmb3JjZSB0aGUgcmVjb3ZlcnkgYnkgbWFya2luZyB0aGUgbWFzdGVyIG5vZGUgYXMKKwkJICogICAgZGlydHkuCisJCSAqLworCQljLT5tc3Rfbm9kZS0+ZmxhZ3MgfD0gY3B1X3RvX2xlMzIoVUJJRlNfTVNUX0RJUlRZKTsKIAl9IGVsc2UgewogCQkvKiBXcml0ZSB0aGUgcmVjb3ZlcmVkIG1hc3RlciBub2RlICovCiAJCWMtPm1heF9zcW51bSA9IGxlNjRfdG9fY3B1KG1zdC0+Y2guc3FudW0pIC0gMTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL3JlcGxheS5jIGIvZnMvdWJpZnMvcmVwbGF5LmMKaW5kZXggZWVkMGZjZi4uZDNkNmQzNiAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvcmVwbGF5LmMKKysrIGIvZnMvdWJpZnMvcmVwbGF5LmMKQEAgLTU5LDYgKzU5LDcgQEAKICAqIEBuZXdfc2l6ZTogdHJ1bmNhdGlvbiBuZXcgc2l6ZQogICogQGZyZWU6IGFtb3VudCBvZiBmcmVlIHNwYWNlIGluIGEgYnVkCiAgKiBAZGlydHk6IGFtb3VudCBvZiBkaXJ0eSBzcGFjZSBpbiBhIGJ1ZCBmcm9tIHBhZGRpbmcgYW5kIGRlbGV0aW9uIG5vZGVzCisgKiBAamhlYWQ6IGpvdXJuYWwgaGVhZCBudW1iZXIgb2YgdGhlIGJ1ZAogICoKICAqIFVCSUZTIGpvdXJuYWwgcmVwbGF5IG11c3QgY29tcGFyZSBub2RlIHNlcXVlbmNlIG51bWJlcnMsIHdoaWNoIG1lYW5zIGl0IG11c3QKICAqIGJ1aWxkIGEgdHJlZSBvZiBub2RlIGluZm9ybWF0aW9uIHRvIGluc2VydCBpbnRvIHRoZSBUTkMuCkBAIC04MCw2ICs4MSw3IEBACiAJCXN0cnVjdCB7CiAJCQlpbnQgZnJlZTsKIAkJCWludCBkaXJ0eTsKKwkJCWludCBqaGVhZDsKIAkJfTsKIAl9OwogfTsKQEAgLTE1OSw2ICsxNjEsMTEgQEAKIAkJZXJyID0gUFRSX0VSUihscCk7CiAJCWdvdG8gb3V0OwogCX0KKworCS8qIE1ha2Ugc3VyZSB0aGUgam91cm5hbCBoZWFkIHBvaW50cyB0byB0aGUgbGF0ZXN0IGJ1ZCAqLworCWVyciA9IHViaWZzX3didWZfc2Vla19ub2xvY2soJmMtPmpoZWFkc1tyLT5qaGVhZF0ud2J1Ziwgci0+bG51bSwKKwkJCQkgICAgIGMtPmxlYl9zaXplIC0gci0+ZnJlZSwgVUJJX1NIT1JUVEVSTSk7CisKIG91dDoKIAl1Ymlmc19yZWxlYXNlX2xwcm9wcyhjKTsKIAlyZXR1cm4gZXJyOwpAQCAtNjI3LDEwICs2MzQsNiBAQAogCXViaWZzX2Fzc2VydChzbGViLT5lbmRwdCAtIG9mZnMgPj0gdXNlZCk7CiAJdWJpZnNfYXNzZXJ0KHNsZWItPmVuZHB0ICUgYy0+bWluX2lvX3NpemUgPT0gMCk7CiAKLQlpZiAoc2xlYi0+ZW5kcHQgKyBjLT5taW5faW9fc2l6ZSA8PSBjLT5sZWJfc2l6ZSAmJiAhYy0+cm9fbW91bnQpCi0JCWVyciA9IHViaWZzX3didWZfc2Vla19ub2xvY2soJmMtPmpoZWFkc1tqaGVhZF0ud2J1ZiwgbG51bSwKLQkJCQkJICAgICBzbGViLT5lbmRwdCwgVUJJX1NIT1JUVEVSTSk7Ci0KIAkqZGlydHkgPSBzbGViLT5lbmRwdCAtIG9mZnMgLSB1c2VkOwogCSpmcmVlID0gYy0+bGViX3NpemUgLSBzbGViLT5lbmRwdDsKIApAQCAtNjUzLDEyICs2NTYsMTQgQEAKICAqIEBzcW51bTogc2VxdWVuY2UgbnVtYmVyCiAgKiBAZnJlZTogYW1vdW50IG9mIGZyZWUgc3BhY2UgaW4gYnVkCiAgKiBAZGlydHk6IGFtb3VudCBvZiBkaXJ0eSBzcGFjZSBmcm9tIHBhZGRpbmcgYW5kIGRlbGV0aW9uIG5vZGVzCisgKiBAamhlYWQ6IGpvdXJuYWwgaGVhZCBudW1iZXIgZm9yIHRoZSBidWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGluc2VydHMgYSByZWZlcmVuY2Ugbm9kZSB0byB0aGUgcmVwbGF5IHRyZWUgYW5kIHJldHVybnMgemVybwogICogaW4gY2FzZSBvZiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBpbnQgaW5zZXJ0X3JlZl9ub2RlKHN0cnVjdCB1Ymlmc19pbmZvICpjLCBpbnQgbG51bSwgaW50IG9mZnMsCi0JCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgc3FudW0sIGludCBmcmVlLCBpbnQgZGlydHkpCisJCQkgICB1bnNpZ25lZCBsb25nIGxvbmcgc3FudW0sIGludCBmcmVlLCBpbnQgZGlydHksCisJCQkgICBpbnQgamhlYWQpCiB7CiAJc3RydWN0IHJiX25vZGUgKipwID0gJmMtPnJlcGxheV90cmVlLnJiX25vZGUsICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCByZXBsYXlfZW50cnkgKnI7CkBAIC02ODgsNiArNjkzLDcgQEAKIAlyLT5mbGFncyA9IFJFUExBWV9SRUY7CiAJci0+ZnJlZSA9IGZyZWU7CiAJci0+ZGlydHkgPSBkaXJ0eTsKKwlyLT5qaGVhZCA9IGpoZWFkOwogCiAJcmJfbGlua19ub2RlKCZyLT5yYiwgcGFyZW50LCBwKTsKIAlyYl9pbnNlcnRfY29sb3IoJnItPnJiLCAmYy0+cmVwbGF5X3RyZWUpOwpAQCAtNzEyLDcgKzcxOCw3IEBACiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCQllcnIgPSBpbnNlcnRfcmVmX25vZGUoYywgYi0+YnVkLT5sbnVtLCBiLT5idWQtPnN0YXJ0LCBiLT5zcW51bSwKLQkJCQkgICAgICBmcmVlLCBkaXJ0eSk7CisJCQkJICAgICAgZnJlZSwgZGlydHksIGItPmJ1ZC0+amhlYWQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9mcy91Ymlmcy9zdXBlci5jIGIvZnMvdWJpZnMvc3VwZXIuYwppbmRleCBjNzVmNjEzLi4wNGFkMDdmIDEwMDY0NAotLS0gYS9mcy91Ymlmcy9zdXBlci5jCisrKyBiL2ZzL3ViaWZzL3N1cGVyLmMKQEAgLTEyNTcsMTIgKzEyNTcsMTIgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKKwllcnIgPSBhbGxvY193YnVmcyhjKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dF9jYnVmOworCiAJc3ByaW50ZihjLT5iZ3RfbmFtZSwgQkdUX05BTUVfUEFUVEVSTiwgYy0+dmkudWJpX251bSwgYy0+dmkudm9sX2lkKTsKIAlpZiAoIWMtPnJvX21vdW50KSB7Ci0JCWVyciA9IGFsbG9jX3didWZzKGMpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXRfY2J1ZjsKLQogCQkvKiBDcmVhdGUgYmFja2dyb3VuZCB0aHJlYWQgKi8KIAkJYy0+Ymd0ID0ga3RocmVhZF9jcmVhdGUodWJpZnNfYmdfdGhyZWFkLCBjLCAiJXMiLCBjLT5iZ3RfbmFtZSk7CiAJCWlmIChJU19FUlIoYy0+Ymd0KSkgewpAQCAtMTYzMSwxMiArMTYzMSw2IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQllcnIgPSBhbGxvY193YnVmcyhjKTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dDsKLQotCXViaWZzX2NyZWF0ZV9idWRzX2xpc3RzKGMpOwotCiAJLyogQ3JlYXRlIGJhY2tncm91bmQgdGhyZWFkICovCiAJYy0+Ymd0ID0ga3RocmVhZF9jcmVhdGUodWJpZnNfYmdfdGhyZWFkLCBjLCAiJXMiLCBjLT5iZ3RfbmFtZSk7CiAJaWYgKElTX0VSUihjLT5iZ3QpKSB7CkBAIC0xNjcxLDE0ICsxNjY1LDI1IEBACiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKKwlkYmdfZ2VuKCJyZS1tb3VudGVkIHJlYWQtd3JpdGUiKTsKKwljLT5yZW1vdW50aW5nX3J3ID0gMDsKKwogCWlmIChjLT5uZWVkX3JlY292ZXJ5KSB7CiAJCWMtPm5lZWRfcmVjb3ZlcnkgPSAwOwogCQl1Ymlmc19tc2coImRlZmVycmVkIHJlY292ZXJ5IGNvbXBsZXRlZCIpOworCX0gZWxzZSB7CisJCS8qCisJCSAqIERvIG5vdCBydW4gdGhlIGRlYnVnZ2luZyBzcGFjZSBjaGVjayBpZiB0aGUgd2VyZSBkb2luZworCQkgKiByZWNvdmVyeSwgYmVjYXVzZSB3aGVuIHdlIHNhdmVkIHRoZSBpbmZvcm1hdGlvbiB3ZSBoYWQgdGhlCisJCSAqIGZpbGUtc3lzdGVtIGluIGEgc3RhdGUgd2hlcmUgdGhlIFROQyBhbmQgbHByb3BzIGhhcyBiZWVuCisJCSAqIG1vZGlmaWVkIGluIG1lbW9yeSwgYnV0IGFsbCB0aGUgSS9PIG9wZXJhdGlvbnMgKGluY2x1ZGluZyBhCisJCSAqIGNvbW1pdCkgd2VyZSBkZWZlcnJlZC4gU28gdGhlIGZpbGUtc3lzdGVtIHdhcyBpbgorCQkgKiAibm9uLWNvbW1pdHRlZCIgc3RhdGUuIE5vdyB0aGUgZmlsZS1zeXN0ZW0gaXMgaW4gY29tbWl0dGVkCisJCSAqIHN0YXRlLCBhbmQgb2YgY291cnNlIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSB3aWxsIGNoYW5nZQorCQkgKiBiZWNhdXNlLCBmb3IgZXhhbXBsZSwgdGhlIG9sZCBpbmRleCBzaXplIHdhcyBpbXByZWNpc2UuCisJCSAqLworCQllcnIgPSBkYmdfY2hlY2tfc3BhY2VfaW5mbyhjKTsKIAl9Ci0KLQlkYmdfZ2VuKCJyZS1tb3VudGVkIHJlYWQtd3JpdGUiKTsKLQljLT5yZW1vdW50aW5nX3J3ID0gMDsKLQllcnIgPSBkYmdfY2hlY2tfc3BhY2VfaW5mbyhjKTsKIAltdXRleF91bmxvY2soJmMtPnVtb3VudF9tdXRleCk7CiAJcmV0dXJuIGVycjsKIApAQCAtMTczMyw3ICsxNzM4LDYgQEAKIAlpZiAoZXJyKQogCQl1Ymlmc19yb19tb2RlKGMsIGVycik7CiAKLQlmcmVlX3didWZzKGMpOwogCXZmcmVlKGMtPm9ycGhfYnVmKTsKIAljLT5vcnBoX2J1ZiA9IE5VTEw7CiAJa2ZyZWUoYy0+d3JpdGVfcmVzZXJ2ZV9idWYpOwpAQCAtMTc2MSwxMCArMTc2NSwxMiBAQAogCSAqIG9mIHRoZSBtZWRpYS4gRm9yIGV4YW1wbGUsIHRoZXJlIHdpbGwgYmUgZGlydHkgaW5vZGVzIGlmIHdlIGZhaWxlZAogCSAqIHRvIHdyaXRlIHRoZW0gYmFjayBiZWNhdXNlIG9mIEkvTyBlcnJvcnMuCiAJICovCi0JdWJpZnNfYXNzZXJ0KGF0b21pY19sb25nX3JlYWQoJmMtPmRpcnR5X3BnX2NudCkgPT0gMCk7Ci0JdWJpZnNfYXNzZXJ0KGMtPmJ1ZGdfaWR4X2dyb3d0aCA9PSAwKTsKLQl1Ymlmc19hc3NlcnQoYy0+YnVkZ19kZF9ncm93dGggPT0gMCk7Ci0JdWJpZnNfYXNzZXJ0KGMtPmJ1ZGdfZGF0YV9ncm93dGggPT0gMCk7CisJaWYgKCFjLT5yb19lcnJvcikgeworCQl1Ymlmc19hc3NlcnQoYXRvbWljX2xvbmdfcmVhZCgmYy0+ZGlydHlfcGdfY250KSA9PSAwKTsKKwkJdWJpZnNfYXNzZXJ0KGMtPmJ1ZGdfaWR4X2dyb3d0aCA9PSAwKTsKKwkJdWJpZnNfYXNzZXJ0KGMtPmJ1ZGdfZGRfZ3Jvd3RoID09IDApOworCQl1Ymlmc19hc3NlcnQoYy0+YnVkZ19kYXRhX2dyb3d0aCA9PSAwKTsKKwl9CiAKIAkvKgogCSAqIFRoZSAnYy0+dW1vdW50X2xvY2snIHByZXZlbnRzIHJhY2VzIGJldHdlZW4gVUJJRlMgbWVtb3J5IHNocmlua2VyCmRpZmYgLS1naXQgYS9mcy94YXR0ci5jIGIvZnMveGF0dHIuYwppbmRleCBhMTlhY2RiLi5mMWVmOTQ5IDEwMDY0NAotLS0gYS9mcy94YXR0ci5jCisrKyBiL2ZzL3hhdHRyLmMKQEAgLTY2Niw3ICs2NjYsNyBAQAogCWhhbmRsZXIgPSB4YXR0cl9yZXNvbHZlX25hbWUoZGVudHJ5LT5kX3NiLT5zX3hhdHRyLCAmbmFtZSk7CiAJaWYgKCFoYW5kbGVyKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JcmV0dXJuIGhhbmRsZXItPnNldChkZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCAwLCBoYW5kbGVyLT5mbGFncyk7CisJcmV0dXJuIGhhbmRsZXItPnNldChkZW50cnksIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncywgaGFuZGxlci0+ZmxhZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbWVzc2FnZS5jCmluZGV4IDNjYTc5NTYuLjlmNzZjY2UgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX21lc3NhZ2UuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19tZXNzYWdlLmMKQEAgLTM0LDggKzM0LDEwIEBACiAJY29uc3Qgc3RydWN0IHhmc19tb3VudAkqbXAsCiAJc3RydWN0IHZhX2Zvcm1hdAkqdmFmKQogewotCWlmIChtcCAmJiBtcC0+bV9mc25hbWUpCisJaWYgKG1wICYmIG1wLT5tX2ZzbmFtZSkgewogCQlwcmludGsoIiVzWEZTICglcyk6ICVwVlxuIiwgbGV2ZWwsIG1wLT5tX2ZzbmFtZSwgdmFmKTsKKwkJcmV0dXJuOworCX0KIAlwcmludGsoIiVzWEZTOiAlcFZcbiIsIGxldmVsLCB2YWYpOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKaW5kZXggZTRmOWMxYi4uM2U4OThhNCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYwpAQCAtOTI2LDYgKzkyNiw3IEBACiAJCQkJCVhGU19MT09LVVBfQkFUQ0gsCiAJCQkJCVhGU19JQ0lfUkVDTEFJTV9UQUcpOwogCQkJaWYgKCFucl9mb3VuZCkgeworCQkJCWRvbmUgPSAxOwogCQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19haWwuYyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKaW5kZXggYWNkYjkyZi4uNWZjMjM4MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19haWwuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCkBAIC0zNDYsMjAgKzM0NiwyMyBAQAogICovCiBTVEFUSUMgdm9pZAogeGZzX2FpbF93b3JrZXIoCi0Jc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorCXN0cnVjdCB3b3JrX3N0cnVjdAkqd29yaykKIHsKLQlzdHJ1Y3QgeGZzX2FpbAkqYWlscCA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCisJc3RydWN0IHhmc19haWwJCSphaWxwID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKIAkJCQkJc3RydWN0IHhmc19haWwsIHhhX3dvcmspOwotCWxvbmcJCXRvdXQ7Ci0JeGZzX2xzbl90CXRhcmdldCA9ICBhaWxwLT54YV90YXJnZXQ7Ci0JeGZzX2xzbl90CWxzbjsKLQl4ZnNfbG9nX2l0ZW1fdAkqbGlwOwotCWludAkJZmx1c2hfbG9nLCBjb3VudCwgc3R1Y2s7Ci0JeGZzX21vdW50X3QJKm1wID0gYWlscC0+eGFfbW91bnQ7CisJeGZzX21vdW50X3QJCSptcCA9IGFpbHAtPnhhX21vdW50OwogCXN0cnVjdCB4ZnNfYWlsX2N1cnNvcgkqY3VyID0gJmFpbHAtPnhhX2N1cnNvcnM7Ci0JaW50CQlwdXNoX3hmc2J1ZmQgPSAwOworCXhmc19sb2dfaXRlbV90CQkqbGlwOworCXhmc19sc25fdAkJbHNuOworCXhmc19sc25fdAkJdGFyZ2V0OworCWxvbmcJCQl0b3V0ID0gMTA7CisJaW50CQkJZmx1c2hfbG9nID0gMDsKKwlpbnQJCQlzdHVjayA9IDA7CisJaW50CQkJY291bnQgPSAwOworCWludAkJCXB1c2hfeGZzYnVmZCA9IDA7CiAKIAlzcGluX2xvY2soJmFpbHAtPnhhX2xvY2spOworCXRhcmdldCA9IGFpbHAtPnhhX3RhcmdldDsKIAl4ZnNfdHJhbnNfYWlsX2N1cnNvcl9pbml0KGFpbHAsIGN1cik7CiAJbGlwID0geGZzX3RyYW5zX2FpbF9jdXJzb3JfZmlyc3QoYWlscCwgY3VyLCBhaWxwLT54YV9sYXN0X3B1c2hlZF9sc24pOwogCWlmICghbGlwIHx8IFhGU19GT1JDRURfU0hVVERPV04obXApKSB7CkBAIC0zNjgsOCArMzcxLDcgQEAKIAkJICovCiAJCXhmc190cmFuc19haWxfY3Vyc29yX2RvbmUoYWlscCwgY3VyKTsKIAkJc3Bpbl91bmxvY2soJmFpbHAtPnhhX2xvY2spOwotCQlhaWxwLT54YV9sYXN0X3B1c2hlZF9sc24gPSAwOwotCQlyZXR1cm47CisJCWdvdG8gb3V0X2RvbmU7CiAJfQogCiAJWEZTX1NUQVRTX0lOQyh4c19wdXNoX2FpbCk7CkBAIC0zODYsOCArMzg4LDcgQEAKIAkgKiBsb3RzIG9mIGNvbnRlbnRpb24gb24gdGhlIEFJTCBsaXN0cy4KIAkgKi8KIAlsc24gPSBsaXAtPmxpX2xzbjsKLQlmbHVzaF9sb2cgPSBzdHVjayA9IGNvdW50ID0gMDsKLQl3aGlsZSAoKFhGU19MU05fQ01QKGxpcC0+bGlfbHNuLCB0YXJnZXQpIDwgMCkpIHsKKwl3aGlsZSAoKFhGU19MU05fQ01QKGxpcC0+bGlfbHNuLCB0YXJnZXQpIDw9IDApKSB7CiAJCWludAlsb2NrX3Jlc3VsdDsKIAkJLyoKIAkJICogSWYgd2UgY2FuIGxvY2sgdGhlIGl0ZW0gd2l0aG91dCBzbGVlcGluZywgdW5sb2NrIHRoZSBBSUwKQEAgLTQ4MCwyMSArNDgxLDI1IEBACiAJfQogCiAJLyogYXNzdW1lIHdlIGhhdmUgbW9yZSB3b3JrIHRvIGRvIGluIGEgc2hvcnQgd2hpbGUgKi8KLQl0b3V0ID0gMTA7CitvdXRfZG9uZToKIAlpZiAoIWNvdW50KSB7CiAJCS8qIFdlJ3JlIHBhc3Qgb3VyIHRhcmdldCBvciBlbXB0eSwgc28gaWRsZSAqLwogCQlhaWxwLT54YV9sYXN0X3B1c2hlZF9sc24gPSAwOwogCiAJCS8qCi0JCSAqIENoZWNrIGZvciBhbiB1cGRhdGVkIHB1c2ggdGFyZ2V0IGJlZm9yZSBjbGVhcmluZyB0aGUKLQkJICogWEZTX0FJTF9QVVNISU5HX0JJVC4gSWYgdGhlIHRhcmdldCBjaGFuZ2VkLCB3ZSd2ZSBnb3QgbW9yZQotCQkgKiB3b3JrIHRvIGRvLiBXYWl0IGEgYml0IGxvbmdlciBiZWZvcmUgc3RhcnRpbmcgdGhhdCB3b3JrLgorCQkgKiBXZSBjbGVhciB0aGUgWEZTX0FJTF9QVVNISU5HX0JJVCBmaXJzdCBiZWZvcmUgY2hlY2tpbmcKKwkJICogd2hldGhlciB0aGUgdGFyZ2V0IGhhcyBjaGFuZ2VkLiBJZiB0aGUgdGFyZ2V0IGhhcyBjaGFuZ2VkLAorCQkgKiB0aGlzIHB1c2hlcyB0aGUgcmVxdWV1ZSByYWNlIGRpcmVjdGx5IG9udG8gdGhlIHJlc3VsdCBvZiB0aGUKKwkJICogYXRvbWljIHRlc3Qvc2V0IGJpdCwgc28gd2UgYXJlIGd1YXJhbnRlZWQgdGhhdCBlaXRoZXIgdGhlCisJCSAqIHRoZSBwdXNoZXIgdGhhdCBjaGFuZ2VkIHRoZSB0YXJnZXQgb3Igb3Vyc2VsdmVzIHdpbGwgcmVxdWV1ZQorCQkgKiB0aGUgd29yayAoYnV0IG5vdCBib3RoKS4KIAkJICovCisJCWNsZWFyX2JpdChYRlNfQUlMX1BVU0hJTkdfQklULCAmYWlscC0+eGFfZmxhZ3MpOwogCQlzbXBfcm1iKCk7Ci0JCWlmIChhaWxwLT54YV90YXJnZXQgPT0gdGFyZ2V0KSB7Ci0JCQljbGVhcl9iaXQoWEZTX0FJTF9QVVNISU5HX0JJVCwgJmFpbHAtPnhhX2ZsYWdzKTsKKwkJaWYgKFhGU19MU05fQ01QKGFpbHAtPnhhX3RhcmdldCwgdGFyZ2V0KSA9PSAwIHx8CisJCSAgICB0ZXN0X2FuZF9zZXRfYml0KFhGU19BSUxfUFVTSElOR19CSVQsICZhaWxwLT54YV9mbGFncykpCiAJCQlyZXR1cm47Ci0JCX0KKwogCQl0b3V0ID0gNTA7CiAJfSBlbHNlIGlmIChYRlNfTFNOX0NNUChsc24sIHRhcmdldCkgPj0gMCkgewogCQkvKgpAQCAtNTUzLDcgKzU1OCw3IEBACiAJICogdGhlIFhGU19BSUxfUFVTSElOR19CSVQuCiAJICovCiAJc21wX3dtYigpOwotCWFpbHAtPnhhX3RhcmdldCA9IHRocmVzaG9sZF9sc247CisJeGZzX3RyYW5zX2FpbF9jb3B5X2xzbihhaWxwLCAmYWlscC0+eGFfdGFyZ2V0LCAmdGhyZXNob2xkX2xzbik7CiAJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFhGU19BSUxfUFVTSElOR19CSVQsICZhaWxwLT54YV9mbGFncykpCiAJCXF1ZXVlX2RlbGF5ZWRfd29yayh4ZnNfc3luY2Rfd3EsICZhaWxwLT54YV93b3JrLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaAppbmRleCBiZDI5N2EyLi4wNzdjMDBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCkBAIC0xNzAsNiArMTcwLDEwIEBACiAJU1RSVUNUX0FMSUdOKCk7CQkJCQkJCVwKIAkqKF9fdHJhY2Vwb2ludHMpCQkJCQkJXAogCS8qIGltcGxlbWVudCBkeW5hbWljIHByaW50ayBkZWJ1ZyAqLwkJCQlcCisJLiA9IEFMSUdOKDgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fanVtcF90YWJsZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgXAorCSooX19qdW1wX3RhYmxlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fanVtcF90YWJsZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgIFwKIAkuID0gQUxJR04oOCk7CQkJCQkJCVwKIAlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fdmVyYm9zZSkgPSAuOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCSooX192ZXJib3NlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0yMjgsOCArMjMyLDYgQEAKIAkJCQkJCQkJCVwKIAlCVUdfVEFCTEUJCQkJCQkJXAogCQkJCQkJCQkJXAotCUpVTVBfVEFCTEUJCQkJCQkJXAotCQkJCQkJCQkJXAogCS8qIFBDSSBxdWlya3MgKi8JCQkJCQlcCiAJLnBjaV9maXh1cCAgICAgICAgOiBBVChBRERSKC5wY2lfZml4dXApIC0gTE9BRF9PRkZTRVQpIHsJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X3BjaV9maXh1cHNfZWFybHkpID0gLjsJCVwKQEAgLTI3NCw3MCArMjc2LDcwIEBACiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHN5bWJvbHMgKi8JCQlcCiAJX19rc3ltdGFiICAgICAgICAgOiBBVChBRERSKF9fa3N5bXRhYikgLSBMT0FEX09GRlNFVCkgewkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa3N5bXRhYikgPSAuOwkJCVwKLQkJKihfX2tzeW10YWIpCQkJCQkJXAorCQkqKFNPUlQoX19fa3N5bXRhYisqKSkJCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa3N5bXRhYikgPSAuOwkJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLW9ubHkgc3ltYm9scyAqLwkJCVwKIAlfX2tzeW10YWJfZ3BsICAgICA6IEFUKEFERFIoX19rc3ltdGFiX2dwbCkgLSBMT0FEX09GRlNFVCkgewlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19rc3ltdGFiX2dwbCkgPSAuOwkJXAotCQkqKF9fa3N5bXRhYl9ncGwpCQkJCQlcCisJCSooU09SVChfX19rc3ltdGFiX2dwbCsqKSkJCQkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19rc3ltdGFiX2dwbCkgPSAuOwkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBOb3JtYWwgdW51c2VkIHN5bWJvbHMgKi8JCVwKIAlfX2tzeW10YWJfdW51c2VkICA6IEFUKEFERFIoX19rc3ltdGFiX3VudXNlZCkgLSBMT0FEX09GRlNFVCkgewlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19rc3ltdGFiX3VudXNlZCkgPSAuOwkJXAotCQkqKF9fa3N5bXRhYl91bnVzZWQpCQkJCQlcCisJCSooU09SVChfX19rc3ltdGFiX3VudXNlZCsqKSkJCQkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19rc3ltdGFiX3VudXNlZCkgPSAuOwkJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKIAkvKiBLZXJuZWwgc3ltYm9sIHRhYmxlOiBHUEwtb25seSB1bnVzZWQgc3ltYm9scyAqLwkJXAogCV9fa3N5bXRhYl91bnVzZWRfZ3BsIDogQVQoQUREUihfX2tzeW10YWJfdW51c2VkX2dwbCkgLSBMT0FEX09GRlNFVCkgeyBcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19rc3ltdGFiX3VudXNlZF9ncGwpID0gLjsJXAotCQkqKF9fa3N5bXRhYl91bnVzZWRfZ3BsKQkJCQkJXAorCQkqKFNPUlQoX19fa3N5bXRhYl91bnVzZWRfZ3BsKyopKQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa3N5bXRhYl91bnVzZWRfZ3BsKSA9IC47CVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLWZ1dHVyZS1vbmx5IHN5bWJvbHMgKi8JCVwKIAlfX2tzeW10YWJfZ3BsX2Z1dHVyZSA6IEFUKEFERFIoX19rc3ltdGFiX2dwbF9mdXR1cmUpIC0gTE9BRF9PRkZTRVQpIHsgXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa3N5bXRhYl9ncGxfZnV0dXJlKSA9IC47CVwKLQkJKihfX2tzeW10YWJfZ3BsX2Z1dHVyZSkJCQkJCVwKKwkJKihTT1JUKF9fX2tzeW10YWJfZ3BsX2Z1dHVyZSsqKSkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tzeW10YWJfZ3BsX2Z1dHVyZSkgPSAuOwlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAogCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IE5vcm1hbCBzeW1ib2xzICovCQkJXAogCV9fa2NyY3RhYiAgICAgICAgIDogQVQoQUREUihfX2tjcmN0YWIpIC0gTE9BRF9PRkZTRVQpIHsJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tjcmN0YWIpID0gLjsJCQlcCi0JCSooX19rY3JjdGFiKQkJCQkJCVwKKwkJKihTT1JUKF9fX2tjcmN0YWIrKikpCQkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tjcmN0YWIpID0gLjsJCQlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAogCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IEdQTC1vbmx5IHN5bWJvbHMgKi8JCQlcCiAJX19rY3JjdGFiX2dwbCAgICAgOiBBVChBRERSKF9fa2NyY3RhYl9ncGwpIC0gTE9BRF9PRkZTRVQpIHsJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa2NyY3RhYl9ncGwpID0gLjsJCVwKLQkJKihfX2tjcmN0YWJfZ3BsKQkJCQkJXAorCQkqKFNPUlQoX19fa2NyY3RhYl9ncGwrKikpCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa2NyY3RhYl9ncGwpID0gLjsJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogTm9ybWFsIHVudXNlZCBzeW1ib2xzICovCQlcCiAJX19rY3JjdGFiX3VudXNlZCAgOiBBVChBRERSKF9fa2NyY3RhYl91bnVzZWQpIC0gTE9BRF9PRkZTRVQpIHsJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa2NyY3RhYl91bnVzZWQpID0gLjsJCVwKLQkJKihfX2tjcmN0YWJfdW51c2VkKQkJCQkJXAorCQkqKFNPUlQoX19fa2NyY3RhYl91bnVzZWQrKikpCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fa2NyY3RhYl91bnVzZWQpID0gLjsJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCiAJLyogS2VybmVsIHN5bWJvbCB0YWJsZTogR1BMLW9ubHkgdW51c2VkIHN5bWJvbHMgKi8JCVwKIAlfX2tjcmN0YWJfdW51c2VkX2dwbCA6IEFUKEFERFIoX19rY3JjdGFiX3VudXNlZF9ncGwpIC0gTE9BRF9PRkZTRVQpIHsgXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fa2NyY3RhYl91bnVzZWRfZ3BsKSA9IC47CVwKLQkJKihfX2tjcmN0YWJfdW51c2VkX2dwbCkJCQkJCVwKKwkJKihTT1JUKF9fX2tjcmN0YWJfdW51c2VkX2dwbCsqKSkJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2tjcmN0YWJfdW51c2VkX2dwbCkgPSAuOwlcCiAJfQkJCQkJCQkJXAogCQkJCQkJCQkJXAogCS8qIEtlcm5lbCBzeW1ib2wgdGFibGU6IEdQTC1mdXR1cmUtb25seSBzeW1ib2xzICovCQlcCiAJX19rY3JjdGFiX2dwbF9mdXR1cmUgOiBBVChBRERSKF9fa2NyY3RhYl9ncGxfZnV0dXJlKSAtIExPQURfT0ZGU0VUKSB7IFwKIAkJVk1MSU5VWF9TWU1CT0woX19zdGFydF9fX2tjcmN0YWJfZ3BsX2Z1dHVyZSkgPSAuOwlcCi0JCSooX19rY3JjdGFiX2dwbF9mdXR1cmUpCQkJCQlcCisJCSooU09SVChfX19rY3JjdGFiX2dwbF9mdXR1cmUrKikpCQkJXAogCQlWTUxJTlVYX1NZTUJPTChfX3N0b3BfX19rY3JjdGFiX2dwbF9mdXR1cmUpID0gLjsJXAogCX0JCQkJCQkJCVwKIAkJCQkJCQkJCVwKQEAgLTU4OSwxNCArNTkxLDYgQEAKICNkZWZpbmUgQlVHX1RBQkxFCiAjZW5kaWYKIAotI2RlZmluZSBKVU1QX1RBQkxFCQkJCQkJCVwKLQkuID0gQUxJR04oOCk7CQkJCQkJCVwKLQlfX2p1bXBfdGFibGUgOiBBVChBRERSKF9fanVtcF90YWJsZSkgLSBMT0FEX09GRlNFVCkgewkJXAotCQlWTUxJTlVYX1NZTUJPTChfX3N0YXJ0X19fanVtcF90YWJsZSkgPSAuOwkJXAotCQkqKF9fanVtcF90YWJsZSkJCQkJCQlcCi0JCVZNTElOVVhfU1lNQk9MKF9fc3RvcF9fX2p1bXBfdGFibGUpID0gLjsJCVwKLQl9Ci0KICNpZmRlZiBDT05GSUdfUE1fVFJBQ0UKICNkZWZpbmUgVFJBQ0VEQVRBCQkJCQkJCVwKIAkuID0gQUxJR04oNCk7CQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaCBiL2luY2x1ZGUvZHJtL2RybV9mYl9oZWxwZXIuaAppbmRleCBmMjJlN2ZlLi5jOTljM2QzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fZmJfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZiX2hlbHBlci5oCkBAIC0xMTgsNiArMTE4LDcgQEAKIAkJCSAgICB1bnNpZ25lZCB0cmFuc3AsCiAJCQkgICAgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCitib29sIGRybV9mYl9oZWxwZXJfcmVzdG9yZV9mYmRldl9tb2RlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIpOwogdm9pZCBkcm1fZmJfaGVscGVyX3Jlc3RvcmUodm9pZCk7CiB2b2lkIGRybV9mYl9oZWxwZXJfZmlsbF92YXIoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBkcm1fZmJfaGVscGVyICpmYl9oZWxwZXIsCiAJCQkgICAgdWludDMyX3QgZmJfd2lkdGgsIHVpbnQzMl90IGZiX2hlaWdodCk7CkBAIC0xMjYsNyArMTI3LDcgQEAKIAogaW50IGRybV9mYl9oZWxwZXJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pOwogCi1ib29sIGRybV9mYl9oZWxwZXJfaG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKK2ludCBkcm1fZmJfaGVscGVyX2hvdHBsdWdfZXZlbnQoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlcik7CiBib29sIGRybV9mYl9oZWxwZXJfaW5pdGlhbF9jb25maWcoc3RydWN0IGRybV9mYl9oZWxwZXIgKmZiX2hlbHBlciwgaW50IGJwcF9zZWwpOwogaW50IGRybV9mYl9oZWxwZXJfc2luZ2xlX2FkZF9hbGxfY29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJfaGVscGVyKTsKIGludCBkcm1fZmJfaGVscGVyX2RlYnVnX2VudGVyKHN0cnVjdCBmYl9pbmZvICppbmZvKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9tbS5oIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKaW5kZXggYzJmOTNhOC4uNTY0YjE0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX21tLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX21tLmgKQEAgLTg2LDcgKzg2LDcgQEAKIH0KICNkZWZpbmUgZHJtX21tX2Zvcl9lYWNoX25vZGUoZW50cnksIG1tKSBsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBcCiAJCQkJCQkmKG1tKS0+aGVhZF9ub2RlLm5vZGVfbGlzdCwgXAotCQkJCQkJbm9kZV9saXN0KTsKKwkJCQkJCW5vZGVfbGlzdCkKICNkZWZpbmUgZHJtX21tX2Zvcl9lYWNoX3NjYW5uZWRfbm9kZV9yZXZlcnNlKGVudHJ5LCBuLCBtbSkgXAogCWZvciAoZW50cnkgPSAobW0pLT5wcmV2X3NjYW5uZWRfbm9kZSwgXAogCQluZXh0ID0gZW50cnkgPyBsaXN0X2VudHJ5KGVudHJ5LT5ub2RlX2xpc3QubmV4dCwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IDgxNmUzMGMuLmYwNGIyYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTE1NSw2ICsxNTUsNyBAQAogCXsweDEwMDIsIDB4NjcxOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DQVlNQU58UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzFjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NBWU1BTnxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MWQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0FZTUFOfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjcxZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DQVlNQU58UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MjEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjcyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTE2Nyw2ICsxNjgsNyBAQAogCXsweDEwMDIsIDB4NjcyOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3MzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQkFSVFN8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0JBUlRTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjczZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9CQVJUU3xSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY3NDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfVFVSS1N8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njc0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9UVVJLU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2NzQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1RVUktTfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKQEAgLTE5OSw2ICsyMDEsNyBAQAogCXsweDEwMDIsIDB4Njg4RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4Njg5YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9IRU1MT0NLfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9IRU1MT0NLfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4Njg5ZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DWVBSRVNTfFJBREVPTl9ORVdfTUVNTUFQfSwgXApAQCAtMjA5LDcgKzIxMiw5IEBACiAJezB4MTAwMiwgMHg2OGIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhiOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhiOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhiYSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhiZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhiZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NjhjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SRURXT09EfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDY4YzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg2OGM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JFRFdPT0R8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oIGIvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCmluZGV4IDNiY2UxYTQuLjc4N2Y3YjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaAorKysgYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKQEAgLTkwOSw2ICs5MDksOCBAQAogI2RlZmluZSBSQURFT05fSU5GT19XQU5UX0NNQVNLCQkweDA4IC8qIGdldCBhY2Nlc3MgdG8gQ01BU0sgb24gcjMwMCAqLwogI2RlZmluZSBSQURFT05fSU5GT19DTE9DS19DUllTVEFMX0ZSRVEJMHgwOSAvKiBjbG9jayBjcnlzdGFsIGZyZXF1ZW5jeSAqLwogI2RlZmluZSBSQURFT05fSU5GT19OVU1fQkFDS0VORFMJMHgwYSAvKiBEQi9iYWNrZW5kcyBmb3IgcjYwMCsgLSBuZWVkIGZvciBPUSAqLworI2RlZmluZSBSQURFT05fSU5GT19OVU1fVElMRV9QSVBFUwkweDBiIC8qIHRpbGUgcGlwZXMgZm9yIHI2MDArICovCisjZGVmaW5lIFJBREVPTl9JTkZPX0ZVU0lPTl9HQVJUX1dPUktJTkcJMHgwYyAvKiBmdXNpb24gd3JpdGVzIHRvIEdUVCB3ZXJlIGJyb2tlbiBiZWZvcmUgdGhpcyAqLwogCiBzdHJ1Y3QgZHJtX3JhZGVvbl9pbmZvIHsKIAl1aW50MzJfdAkJcmVxdWVzdDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWxhcm10aW1lci5oIGIvaW5jbHVkZS9saW51eC9hbGFybXRpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVkNjA5NQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYWxhcm10aW1lci5oCkBAIC0wLDAgKzEsNDAgQEAKKyNpZm5kZWYgX0xJTlVYX0FMQVJNVElNRVJfSAorI2RlZmluZSBfTElOVVhfQUxBUk1USU1FUl9ICisKKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVycXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKworZW51bSBhbGFybXRpbWVyX3R5cGUgeworCUFMQVJNX1JFQUxUSU1FLAorCUFMQVJNX0JPT1RUSU1FLAorCisJQUxBUk1fTlVNVFlQRSwKK307CisKKy8qKgorICogc3RydWN0IGFsYXJtIC0gQWxhcm0gdGltZXIgc3RydWN0dXJlCisgKiBAbm9kZToJdGltZXJxdWV1ZSBub2RlIGZvciBhZGRpbmcgdG8gdGhlIGV2ZW50IGxpc3QgdGhpcyB2YWx1ZQorICoJCWFsc28gaW5jbHVkZXMgdGhlIGV4cGlyYXRpb24gdGltZS4KKyAqIEBwZXJpb2Q6CVBlcmlvZCBmb3IgcmVjdXJpbmcgYWxhcm1zCisgKiBAZnVuY3Rpb246CUZ1bmN0aW9uIHBvaW50ZXIgdG8gYmUgZXhlY3V0ZWQgd2hlbiB0aGUgdGltZXIgZmlyZXMuCisgKiBAdHlwZToJQWxhcm0gdHlwZSAoQk9PVFRJTUUvUkVBTFRJTUUpCisgKiBAZW5hYmxlZDoJRmxhZyB0aGF0IHJlcHJlc2VudHMgaWYgdGhlIGFsYXJtIGlzIHNldCB0byBmaXJlIG9yIG5vdAorICogQGRhdGE6CUludGVybmFsIGRhdGEgdmFsdWUuCisgKi8KK3N0cnVjdCBhbGFybSB7CisJc3RydWN0IHRpbWVycXVldWVfbm9kZQlub2RlOworCWt0aW1lX3QJCQlwZXJpb2Q7CisJdm9pZAkJCSgqZnVuY3Rpb24pKHN0cnVjdCBhbGFybSAqKTsKKwllbnVtIGFsYXJtdGltZXJfdHlwZQl0eXBlOworCWJvb2wJCQllbmFibGVkOworCXZvaWQJCQkqZGF0YTsKK307CisKK3ZvaWQgYWxhcm1faW5pdChzdHJ1Y3QgYWxhcm0gKmFsYXJtLCBlbnVtIGFsYXJtdGltZXJfdHlwZSB0eXBlLAorCQl2b2lkICgqZnVuY3Rpb24pKHN0cnVjdCBhbGFybSAqKSk7Cit2b2lkIGFsYXJtX3N0YXJ0KHN0cnVjdCBhbGFybSAqYWxhcm0sIGt0aW1lX3Qgc3RhcnQsIGt0aW1lX3QgcGVyaW9kKTsKK3ZvaWQgYWxhcm1fY2FuY2VsKHN0cnVjdCBhbGFybSAqYWxhcm0pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0X3NwaW5sb2NrLmggYi9pbmNsdWRlL2xpbnV4L2JpdF9zcGlubG9jay5oCmluZGV4IGU2MTI1NzUuLmI0MzI2YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0X3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRfc3BpbmxvY2suaApAQCAtMjMsMTEgKzIzLDExIEBACiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAjaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19ERUJVR19TUElOTE9DSykKIAl3aGlsZSAodW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdF9sb2NrKGJpdG51bSwgYWRkcikpKSB7Ci0JCXdoaWxlICh0ZXN0X2JpdChiaXRudW0sIGFkZHIpKSB7Ci0JCQlwcmVlbXB0X2VuYWJsZSgpOworCQlwcmVlbXB0X2VuYWJsZSgpOworCQlkbyB7CiAJCQljcHVfcmVsYXgoKTsKLQkJCXByZWVtcHRfZGlzYWJsZSgpOwotCQl9CisJCX0gd2hpbGUgKHRlc3RfYml0KGJpdG51bSwgYWRkcikpOworCQlwcmVlbXB0X2Rpc2FibGUoKTsKIAl9CiAjZW5kaWYKIAlfX2FjcXVpcmUoYml0bG9jayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oIGIvaW5jbHVkZS9saW51eC9ibGtkZXYuaAppbmRleCBlYzAzNTdkLi4yYWQ5NWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKQEAgLTE5Niw3ICsxOTYsNiBAQAogdHlwZWRlZiBpbnQgKG1ha2VfcmVxdWVzdF9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgYmlvICpiaW8pOwogdHlwZWRlZiBpbnQgKHByZXBfcnFfZm4pIChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgdm9pZCAodW5wcmVwX3JxX2ZuKSAoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci10eXBlZGVmIHZvaWQgKHVucGx1Z2dlZF9mbikgKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICopOwogCiBzdHJ1Y3QgYmlvX3ZlYzsKIHN0cnVjdCBidmVjX21lcmdlX2RhdGEgewpAQCAtMjg0LDcgKzI4Myw2IEBACiAJcnFfdGltZWRfb3V0X2ZuCQkqcnFfdGltZWRfb3V0X2ZuOwogCWRtYV9kcmFpbl9uZWVkZWRfZm4JKmRtYV9kcmFpbl9uZWVkZWQ7CiAJbGxkX2J1c3lfZm4JCSpsbGRfYnVzeV9mbjsKLQl1bnBsdWdnZWRfZm4JCSp1bnBsdWdnZWRfZm47CiAKIAkvKgogCSAqIERpc3BhdGNoIHF1ZXVlIHNvcnRpbmcKQEAgLTM5MCwyMCArMzg4LDE5IEBACiAjZGVmaW5lCVFVRVVFX0ZMQUdfU1lOQ0ZVTEwJMwkvKiByZWFkIHF1ZXVlIGhhcyBiZWVuIGZpbGxlZCAqLwogI2RlZmluZSBRVUVVRV9GTEFHX0FTWU5DRlVMTAk0CS8qIHdyaXRlIHF1ZXVlIGhhcyBiZWVuIGZpbGxlZCAqLwogI2RlZmluZSBRVUVVRV9GTEFHX0RFQUQJCTUJLyogcXVldWUgYmVpbmcgdG9ybiBkb3duICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfUkVFTlRFUgk2CS8qIFJlLWVudHJhbmN5IGF2b2lkYW5jZSAqLwotI2RlZmluZSBRVUVVRV9GTEFHX0VMVlNXSVRDSAk3CS8qIGRvbid0IHVzZSBlbGV2YXRvciwganVzdCBkbyBGSUZPICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfQklESQkJOAkvKiBxdWV1ZSBzdXBwb3J0cyBiaWRpIHJlcXVlc3RzICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfTk9NRVJHRVMgICAgIDkJLyogZGlzYWJsZSBtZXJnZSBhdHRlbXB0cyAqLwotI2RlZmluZSBRVUVVRV9GTEFHX1NBTUVfQ09NUCAgIDEwCS8qIGZvcmNlIGNvbXBsZXRlIG9uIHNhbWUgQ1BVICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfRkFJTF9JTyAgICAgMTEJLyogZmFrZSB0aW1lb3V0ICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfU1RBQ0tBQkxFICAgMTIJLyogc3VwcG9ydHMgcmVxdWVzdCBzdGFja2luZyAqLwotI2RlZmluZSBRVUVVRV9GTEFHX05PTlJPVCAgICAgIDEzCS8qIG5vbi1yb3RhdGlvbmFsIGRldmljZSAoU1NEKSAqLworI2RlZmluZSBRVUVVRV9GTEFHX0VMVlNXSVRDSAk2CS8qIGRvbid0IHVzZSBlbGV2YXRvciwganVzdCBkbyBGSUZPICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfQklESQkJNwkvKiBxdWV1ZSBzdXBwb3J0cyBiaWRpIHJlcXVlc3RzICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfTk9NRVJHRVMgICAgIDgJLyogZGlzYWJsZSBtZXJnZSBhdHRlbXB0cyAqLworI2RlZmluZSBRVUVVRV9GTEFHX1NBTUVfQ09NUAk5CS8qIGZvcmNlIGNvbXBsZXRlIG9uIHNhbWUgQ1BVICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRkFJTF9JTyAgICAgMTAJLyogZmFrZSB0aW1lb3V0ICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfU1RBQ0tBQkxFICAgMTEJLyogc3VwcG9ydHMgcmVxdWVzdCBzdGFja2luZyAqLworI2RlZmluZSBRVUVVRV9GTEFHX05PTlJPVCAgICAgIDEyCS8qIG5vbi1yb3RhdGlvbmFsIGRldmljZSAoU1NEKSAqLwogI2RlZmluZSBRVUVVRV9GTEFHX1ZJUlQgICAgICAgIFFVRVVFX0ZMQUdfTk9OUk9UIC8qIHBhcmF2aXJ0IGRldmljZSAqLwotI2RlZmluZSBRVUVVRV9GTEFHX0lPX1NUQVQgICAgIDE1CS8qIGRvIElPIHN0YXRzICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfRElTQ0FSRCAgICAgMTYJLyogc3VwcG9ydHMgRElTQ0FSRCAqLwotI2RlZmluZSBRVUVVRV9GTEFHX05PWE1FUkdFUyAgIDE3CS8qIE5vIGV4dGVuZGVkIG1lcmdlcyAqLwotI2RlZmluZSBRVUVVRV9GTEFHX0FERF9SQU5ET00gIDE4CS8qIENvbnRyaWJ1dGVzIHRvIHJhbmRvbSBwb29sICovCi0jZGVmaW5lIFFVRVVFX0ZMQUdfU0VDRElTQ0FSRCAgMTkJLyogc3VwcG9ydHMgU0VDRElTQ0FSRCAqLworI2RlZmluZSBRVUVVRV9GTEFHX0lPX1NUQVQgICAgIDEzCS8qIGRvIElPIHN0YXRzICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfRElTQ0FSRCAgICAgMTQJLyogc3VwcG9ydHMgRElTQ0FSRCAqLworI2RlZmluZSBRVUVVRV9GTEFHX05PWE1FUkdFUyAgIDE1CS8qIE5vIGV4dGVuZGVkIG1lcmdlcyAqLworI2RlZmluZSBRVUVVRV9GTEFHX0FERF9SQU5ET00gIDE2CS8qIENvbnRyaWJ1dGVzIHRvIHJhbmRvbSBwb29sICovCisjZGVmaW5lIFFVRVVFX0ZMQUdfU0VDRElTQ0FSRCAgMTcJLyogc3VwcG9ydHMgU0VDRElTQ0FSRCAqLwogCiAjZGVmaW5lIFFVRVVFX0ZMQUdfREVGQVVMVAkoKDEgPDwgUVVFVUVfRkxBR19JT19TVEFUKSB8CQlcCiAJCQkJICgxIDw8IFFVRVVFX0ZMQUdfU1RBQ0tBQkxFKQl8CVwKQEAgLTY5OSw4ICs2OTYsOSBAQAogZXh0ZXJuIHZvaWQgYmxrX3N0b3BfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3N5bmNfcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgX19ibGtfc3RvcF9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSk7Ci1leHRlcm4gdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGJvb2wgZm9yY2Vfa2Jsb2NrZCk7CitleHRlcm4gdm9pZCBfX2Jsa19ydW5fcXVldWUoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIHZvaWQgYmxrX3J1bl9xdWV1ZShzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqKTsKK2V4dGVybiB2b2lkIGJsa19ydW5fcXVldWVfYXN5bmMoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogZXh0ZXJuIGludCBibGtfcnFfbWFwX3VzZXIoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc3RydWN0IHJlcXVlc3QgKiwKIAkJCSAgIHN0cnVjdCBycV9tYXBfZGF0YSAqLCB2b2lkIF9fdXNlciAqLCB1bnNpZ25lZCBsb25nLAogCQkJICAgZ2ZwX3QpOwpAQCAtODQzLDcgKzg0MSw2IEBACiBleHRlcm4gdm9pZCBibGtfcXVldWVfdXBkYXRlX2RtYV9hbGlnbm1lbnQoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9zb2Z0aXJxX2RvbmUoc3RydWN0IHJlcXVlc3RfcXVldWUgKiwgc29mdGlycV9kb25lX2ZuICopOwogZXh0ZXJuIHZvaWQgYmxrX3F1ZXVlX3JxX3RpbWVkX291dChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqLCBycV90aW1lZF9vdXRfZm4gKik7Ci1leHRlcm4gdm9pZCBibGtfcXVldWVfdW5wbHVnZ2VkKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVucGx1Z2dlZF9mbiAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9ycV90aW1lb3V0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICosIHVuc2lnbmVkIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfZmx1c2goc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIHVuc2lnbmVkIGludCBmbHVzaCk7CiBleHRlcm4gc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gKmJsa19nZXRfYmFja2luZ19kZXZfaW5mbyhzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KTsKQEAgLTg2MCw4ICs4NTcsMTMgQEAKIHN0cnVjdCBibGtfcGx1ZyB7CiAJdW5zaWduZWQgbG9uZyBtYWdpYzsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBjYl9saXN0OwogCXVuc2lnbmVkIGludCBzaG91bGRfc29ydDsKIH07CitzdHJ1Y3QgYmxrX3BsdWdfY2IgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBibGtfcGx1Z19jYiAqKTsKK307CiAKIGV4dGVybiB2b2lkIGJsa19zdGFydF9wbHVnKHN0cnVjdCBibGtfcGx1ZyAqKTsKIGV4dGVybiB2b2lkIGJsa19maW5pc2hfcGx1ZyhzdHJ1Y3QgYmxrX3BsdWcgKik7CkBAIC04ODcsNyArODg5LDcgQEAKIHsKIAlzdHJ1Y3QgYmxrX3BsdWcgKnBsdWcgPSB0c2stPnBsdWc7CiAKLQlyZXR1cm4gcGx1ZyAmJiAhbGlzdF9lbXB0eSgmcGx1Zy0+bGlzdCk7CisJcmV0dXJuIHBsdWcgJiYgKCFsaXN0X2VtcHR5KCZwbHVnLT5saXN0KSB8fCAhbGlzdF9lbXB0eSgmcGx1Zy0+Y2JfbGlzdCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ib290bWVtLmggYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAppbmRleCBiODYxM2U4Li4wMWVjYTE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jvb3RtZW0uaApAQCAtMTExLDYgKzExMSw4IEBACiAJX19hbGxvY19ib290bWVtX25vcGFuaWMoeCwgUEFHRV9TSVpFLCBfX3BhKE1BWF9ETUFfQUREUkVTUykpCiAjZGVmaW5lIGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgeCkgXAogCV9fYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCB4LCBTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKKyNkZWZpbmUgYWxsb2NfYm9vdG1lbV9ub2RlX25vcGFuaWMocGdkYXQsIHgpIFwKKwlfX2FsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LCB4LCBTTVBfQ0FDSEVfQllURVMsIF9fcGEoTUFYX0RNQV9BRERSRVNTKSkKICNkZWZpbmUgYWxsb2NfYm9vdG1lbV9wYWdlc19ub2RlKHBnZGF0LCB4KSBcCiAJX19hbGxvY19ib290bWVtX25vZGUocGdkYXQsIHgsIFBBR0VfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpKQogI2RlZmluZSBhbGxvY19ib290bWVtX3BhZ2VzX25vZGVfbm9wYW5pYyhwZ2RhdCwgeCkgXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ic2VhcmNoLmggYi9pbmNsdWRlL2xpbnV4L2JzZWFyY2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGIxYWE4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9ic2VhcmNoLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9MSU5VWF9CU0VBUkNIX0gKKyNkZWZpbmUgX0xJTlVYX0JTRUFSQ0hfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordm9pZCAqYnNlYXJjaChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UsIHNpemVfdCBudW0sIHNpemVfdCBzaXplLAorCSAgICAgIGludCAoKmNtcCkoY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICplbHQpKTsKKworI2VuZGlmIC8qIF9MSU5VWF9CU0VBUkNIX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKaW5kZXggMTZlZThiNC4uNDU1NGRiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTM1NSw3ICszNTUsMTIgQEAKIAogI2RlZmluZSBDQVBfU1lTTE9HICAgICAgICAgICAzNAogCi0jZGVmaW5lIENBUF9MQVNUX0NBUCAgICAgICAgIENBUF9TWVNMT0cKKy8qIEFsbG93IHRyaWdnZXJpbmcgc29tZXRoaW5nIHRoYXQgd2lsbCB3YWtlIHRoZSBzeXN0ZW0gKi8KKworI2RlZmluZSBDQVBfV0FLRV9BTEFSTSAgICAgICAgICAgIDM1CisKKworI2RlZmluZSBDQVBfTEFTVF9DQVAgICAgICAgICBDQVBfV0FLRV9BTEFSTQogCiAjZGVmaW5lIGNhcF92YWxpZCh4KSAoKHgpID49IDAgJiYgKHgpIDw9IENBUF9MQVNUX0NBUCkKIApAQCAtNTQ2LDE4ICs1NTEsNyBAQAogZXh0ZXJuIGJvb2wgY2FwYWJsZShpbnQgY2FwKTsKIGV4dGVybiBib29sIG5zX2NhcGFibGUoc3RydWN0IHVzZXJfbmFtZXNwYWNlICpucywgaW50IGNhcCk7CiBleHRlcm4gYm9vbCB0YXNrX25zX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0LCBpbnQgY2FwKTsKLQotLyoqCi0gKiBuc293bl9jYXBhYmxlIC0gQ2hlY2sgc3VwZXJpb3IgY2FwYWJpbGl0eSB0byBvbmUncyBvd24gdXNlcl9ucwotICogQGNhcDogVGhlIGNhcGFiaWxpdHkgaW4gcXVlc3Rpb24KLSAqCi0gKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCB0YXNrIGhhcyB0aGUgZ2l2ZW4gc3VwZXJpb3IgY2FwYWJpbGl0eQotICogdGFyZ2V0ZWQgYXQgaXRzIG93biB1c2VyIG5hbWVzcGFjZS4KLSAqLwotc3RhdGljIGlubGluZSBib29sIG5zb3duX2NhcGFibGUoaW50IGNhcCkKLXsKLQlyZXR1cm4gbnNfY2FwYWJsZShjdXJyZW50X3VzZXJfbnMoKSwgY2FwKTsKLX0KK2V4dGVybiBib29sIG5zb3duX2NhcGFibGUoaW50IGNhcCk7CiAKIC8qIGF1ZGl0IHN5c3RlbSB3YW50cyB0byBnZXQgY2FwIGluZm8gZnJvbSBmaWxlcyBhcyB3ZWxsICovCiBleHRlcm4gaW50IGdldF92ZnNfY2Fwc19mcm9tX2Rpc2soY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgY3B1X3Zmc19jYXBfZGF0YSAqY3B1X2NhcHMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja2NoaXBzLmggYi9pbmNsdWRlL2xpbnV4L2Nsb2NrY2hpcHMuaAppbmRleCBmYzUzNDkyLi5kNjczM2UyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nsb2NrY2hpcHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsb2NrY2hpcHMuaApAQCAtNTYsNDYgKzU2LDUyIEBACiAKIC8qKgogICogc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAtIGNsb2NrIGV2ZW50IGRldmljZSBkZXNjcmlwdG9yCi0gKiBAbmFtZToJCXB0ciB0byBjbG9jayBldmVudCBuYW1lCi0gKiBAZmVhdHVyZXM6CQlmZWF0dXJlcworICogQGV2ZW50X2hhbmRsZXI6CUFzc2lnbmVkIGJ5IHRoZSBmcmFtZXdvcmsgdG8gYmUgY2FsbGVkIGJ5IHRoZSBsb3cKKyAqCQkJbGV2ZWwgaGFuZGxlciBvZiB0aGUgZXZlbnQgc291cmNlCisgKiBAc2V0X25leHRfZXZlbnQ6CXNldCBuZXh0IGV2ZW50IGZ1bmN0aW9uCisgKiBAbmV4dF9ldmVudDoJCWxvY2FsIHN0b3JhZ2UgZm9yIHRoZSBuZXh0IGV2ZW50IGluIG9uZXNob3QgbW9kZQogICogQG1heF9kZWx0YV9uczoJbWF4aW11bSBkZWx0YSB2YWx1ZSBpbiBucwogICogQG1pbl9kZWx0YV9uczoJbWluaW11bSBkZWx0YSB2YWx1ZSBpbiBucwogICogQG11bHQ6CQluYW5vc2Vjb25kIHRvIGN5Y2xlcyBtdWx0aXBsaWVyCiAgKiBAc2hpZnQ6CQluYW5vc2Vjb25kcyB0byBjeWNsZXMgZGl2aXNvciAocG93ZXIgb2YgdHdvKQorICogQG1vZGU6CQlvcGVyYXRpbmcgbW9kZSBhc3NpZ25lZCBieSB0aGUgbWFuYWdlbWVudCBjb2RlCisgKiBAZmVhdHVyZXM6CQlmZWF0dXJlcworICogQHJldHJpZXM6CQludW1iZXIgb2YgZm9yY2VkIHByb2dyYW1taW5nIHJldHJpZXMKKyAqIEBzZXRfbW9kZToJCXNldCBtb2RlIGZ1bmN0aW9uCisgKiBAYnJvYWRjYXN0OgkJZnVuY3Rpb24gdG8gYnJvYWRjYXN0IGV2ZW50cworICogQG1pbl9kZWx0YV90aWNrczoJbWluaW11bSBkZWx0YSB2YWx1ZSBpbiB0aWNrcyBzdG9yZWQgZm9yIHJlY29uZmlndXJhdGlvbgorICogQG1heF9kZWx0YV90aWNrczoJbWF4aW11bSBkZWx0YSB2YWx1ZSBpbiB0aWNrcyBzdG9yZWQgZm9yIHJlY29uZmlndXJhdGlvbgorICogQG5hbWU6CQlwdHIgdG8gY2xvY2sgZXZlbnQgbmFtZQogICogQHJhdGluZzoJCXZhcmlhYmxlIHRvIHJhdGUgY2xvY2sgZXZlbnQgZGV2aWNlcwogICogQGlycToJCUlSUSBudW1iZXIgKG9ubHkgZm9yIG5vbiBDUFUgbG9jYWwgZGV2aWNlcykKICAqIEBjcHVtYXNrOgkJY3B1bWFzayB0byBpbmRpY2F0ZSBmb3Igd2hpY2ggQ1BVcyB0aGlzIGRldmljZSB3b3JrcwotICogQHNldF9uZXh0X2V2ZW50OglzZXQgbmV4dCBldmVudCBmdW5jdGlvbgotICogQHNldF9tb2RlOgkJc2V0IG1vZGUgZnVuY3Rpb24KLSAqIEBldmVudF9oYW5kbGVyOglBc3NpZ25lZCBieSB0aGUgZnJhbWV3b3JrIHRvIGJlIGNhbGxlZCBieSB0aGUgbG93Ci0gKgkJCWxldmVsIGhhbmRsZXIgb2YgdGhlIGV2ZW50IHNvdXJjZQotICogQGJyb2FkY2FzdDoJCWZ1bmN0aW9uIHRvIGJyb2FkY2FzdCBldmVudHMKICAqIEBsaXN0OgkJbGlzdCBoZWFkIGZvciB0aGUgbWFuYWdlbWVudCBjb2RlCi0gKiBAbW9kZToJCW9wZXJhdGluZyBtb2RlIGFzc2lnbmVkIGJ5IHRoZSBtYW5hZ2VtZW50IGNvZGUKLSAqIEBuZXh0X2V2ZW50OgkJbG9jYWwgc3RvcmFnZSBmb3IgdGhlIG5leHQgZXZlbnQgaW4gb25lc2hvdCBtb2RlCi0gKiBAcmV0cmllczoJCW51bWJlciBvZiBmb3JjZWQgcHJvZ3JhbW1pbmcgcmV0cmllcwogICovCiBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlIHsKLQljb25zdCBjaGFyCQkqbmFtZTsKLQl1bnNpZ25lZCBpbnQJCWZlYXR1cmVzOworCXZvaWQJCQkoKmV2ZW50X2hhbmRsZXIpKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7CisJaW50CQkJKCpzZXRfbmV4dF9ldmVudCkodW5zaWduZWQgbG9uZyBldnQsCisJCQkJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7CisJa3RpbWVfdAkJCW5leHRfZXZlbnQ7CiAJdTY0CQkJbWF4X2RlbHRhX25zOwogCXU2NAkJCW1pbl9kZWx0YV9uczsKIAl1MzIJCQltdWx0OwogCXUzMgkJCXNoaWZ0OworCWVudW0gY2xvY2tfZXZlbnRfbW9kZQltb2RlOworCXVuc2lnbmVkIGludAkJZmVhdHVyZXM7CisJdW5zaWduZWQgbG9uZwkJcmV0cmllczsKKworCXZvaWQJCQkoKmJyb2FkY2FzdCkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOworCXZvaWQJCQkoKnNldF9tb2RlKShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKKwkJCQkJICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7CisJdW5zaWduZWQgbG9uZwkJbWluX2RlbHRhX3RpY2tzOworCXVuc2lnbmVkIGxvbmcJCW1heF9kZWx0YV90aWNrczsKKworCWNvbnN0IGNoYXIJCSpuYW1lOwogCWludAkJCXJhdGluZzsKIAlpbnQJCQlpcnE7CiAJY29uc3Qgc3RydWN0IGNwdW1hc2sJKmNwdW1hc2s7Ci0JaW50CQkJKCpzZXRfbmV4dF9ldmVudCkodW5zaWduZWQgbG9uZyBldnQsCi0JCQkJCQkgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKik7Ci0Jdm9pZAkJCSgqc2V0X21vZGUpKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAotCQkJCQkgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKLQl2b2lkCQkJKCpldmVudF9oYW5kbGVyKShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICopOwotCXZvaWQJCQkoKmJyb2FkY2FzdCkoY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2spOwogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKLQllbnVtIGNsb2NrX2V2ZW50X21vZGUJbW9kZTsKLQlrdGltZV90CQkJbmV4dF9ldmVudDsKLQl1bnNpZ25lZCBsb25nCQlyZXRyaWVzOwotfTsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCiAvKgogICogQ2FsY3VsYXRlIGEgbXVsdGlwbGljYXRpb24gZmFjdG9yIGZvciBzY2FsZWQgbWF0aCwgd2hpY2ggaXMgdXNlZCB0byBjb252ZXJ0CkBAIC0xMjIsNiArMTI4LDEyIEBACiAJCQkgICAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0KTsKIGV4dGVybiB2b2lkIGNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpOwogCitleHRlcm4gdm9pZCBjbG9ja2V2ZW50c19jb25maWdfYW5kX3JlZ2lzdGVyKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHUzMiBmcmVxLCB1bnNpZ25lZCBsb25nIG1pbl9kZWx0YSwKKwkJCQkJICAgIHVuc2lnbmVkIGxvbmcgbWF4X2RlbHRhKTsKKworZXh0ZXJuIGludCBjbG9ja2V2ZW50c191cGRhdGVfZnJlcShzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZSwgdTMyIGZyZXEpOworCiBleHRlcm4gdm9pZCBjbG9ja2V2ZW50c19leGNoYW5nZV9kZXZpY2Uoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqb2xkLAogCQkJCQlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpuZXcpOwogZXh0ZXJuIHZvaWQgY2xvY2tldmVudHNfc2V0X21vZGUoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oIGIvaW5jbHVkZS9saW51eC9jbG9ja3NvdXJjZS5oCmluZGV4IGMzN2IyMWEuLmM5MThmYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2xvY2tzb3VyY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nsb2Nrc291cmNlLmgKQEAgLTE1OSw0MiArMTU5LDM4IEBACiAgKi8KIHN0cnVjdCBjbG9ja3NvdXJjZSB7CiAJLyoKLQkgKiBGaXJzdCBwYXJ0IG9mIHN0cnVjdHVyZSBpcyByZWFkIG1vc3RseQorCSAqIEhvdHBhdGggZGF0YSwgZml0cyBpbiBhIHNpbmdsZSBjYWNoZSBsaW5lIHdoZW4gdGhlCisJICogY2xvY2tzb3VyY2UgaXRzZWxmIGlzIGNhY2hlbGluZSBhbGlnbmVkLgogCSAqLwotCWNoYXIgKm5hbWU7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWludCByYXRpbmc7CiAJY3ljbGVfdCAoKnJlYWQpKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOwotCWludCAoKmVuYWJsZSkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7Ci0Jdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOworCWN5Y2xlX3QgY3ljbGVfbGFzdDsKIAljeWNsZV90IG1hc2s7CiAJdTMyIG11bHQ7CiAJdTMyIHNoaWZ0OwogCXU2NCBtYXhfaWRsZV9uczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWN5Y2xlX3QgKCp2cmVhZCkodm9pZCk7Ci0Jdm9pZCAoKnN1c3BlbmQpKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOwotCXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOworCiAjaWZkZWYgQ09ORklHX0lBNjQKIAl2b2lkICpmc3lzX21taW87ICAgICAgICAvKiB1c2VkIGJ5IGZzeXNjYWxsIGFzbSBjb2RlICovCiAjZGVmaW5lIENMS1NSQ19GU1lTX01NSU9fU0VUKG1taW8sIGFkZHIpICAgICAgKChtbWlvKSA9IChhZGRyKSkKICNlbHNlCiAjZGVmaW5lIENMS1NSQ19GU1lTX01NSU9fU0VUKG1taW8sIGFkZHIpICAgICAgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCi0KLQkvKgotCSAqIFNlY29uZCBwYXJ0IGlzIHdyaXR0ZW4gYXQgZWFjaCB0aW1lciBpbnRlcnJ1cHQKLQkgKiBLZWVwIGl0IGluIGEgZGlmZmVyZW50IGNhY2hlIGxpbmUgdG8gZGlydHkgbm8KLQkgKiBtb3JlIHRoYW4gb25lIGNhY2hlIGxpbmUuCi0JICovCi0JY3ljbGVfdCBjeWNsZV9sYXN0IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisJY29uc3QgY2hhciAqbmFtZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJaW50IHJhdGluZzsKKwljeWNsZV90ICgqdnJlYWQpKHZvaWQpOworCWludCAoKmVuYWJsZSkoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CisJdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdm9pZCAoKnN1c3BlbmQpKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOworCXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpOwogCiAjaWZkZWYgQ09ORklHX0NMT0NLU09VUkNFX1dBVENIRE9HCiAJLyogV2F0Y2hkb2cgcmVsYXRlZCBkYXRhLCB1c2VkIGJ5IHRoZSBmcmFtZXdvcmsgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHdkX2xpc3Q7CiAJY3ljbGVfdCB3ZF9sYXN0OwogI2VuZGlmCi19OworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CiAKIC8qCiAgKiBDbG9jayBzb3VyY2UgZmxhZ3MgYml0czo6CkBAIC0zNDEsNCArMzM3LDYgQEAKIAogZXh0ZXJuIHZvaWQgdGltZWtlZXBpbmdfbm90aWZ5KHN0cnVjdCBjbG9ja3NvdXJjZSAqY2xvY2spOwogCitleHRlcm4gaW50IGNsb2Nrc291cmNlX2k4MjUzX2luaXQodm9pZCk7CisKICNlbmRpZiAvKiBfTElOVVhfQ0xPQ0tTT1VSQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcHVmcmVxLmggYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAppbmRleCA5MzQzZGQzLi4xMWJlNDhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaAorKysgYi9pbmNsdWRlL2xpbnV4L2NwdWZyZXEuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFJ1c3NlbGwgS2luZwogICogICAgICAgICAgICAoQykgMjAwMiAtIDIwMDMgRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgotICogICAgICAgICAgICAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgpAQCAtNTYsOSArNTYsOSBAQAogI2RlZmluZSBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkUJKDEpCiAjZGVmaW5lIENQVUZSRVFfUE9MSUNZX1BFUkZPUk1BTkNFCSgyKQogCi0vKiBGcmVxdWVuY3kgdmFsdWVzIGhlcmUgYXJlIENQVSBrSHogc28gdGhhdCBoYXJkd2FyZSB3aGljaCBkb2Vzbid0IHJ1biAKLSAqIHdpdGggc29tZSBmcmVxdWVuY2llcyBjYW4gY29tcGxhaW4gd2l0aG91dCBoYXZpbmcgdG8gZ3Vlc3Mgd2hhdCBwZXIgCi0gKiBjZW50IC8gcGVyIG1pbGxlIG1lYW5zLiAKKy8qIEZyZXF1ZW5jeSB2YWx1ZXMgaGVyZSBhcmUgQ1BVIGtIeiBzbyB0aGF0IGhhcmR3YXJlIHdoaWNoIGRvZXNuJ3QgcnVuCisgKiB3aXRoIHNvbWUgZnJlcXVlbmNpZXMgY2FuIGNvbXBsYWluIHdpdGhvdXQgaGF2aW5nIHRvIGd1ZXNzIHdoYXQgcGVyCisgKiBjZW50IC8gcGVyIG1pbGxlIG1lYW5zLgogICogTWF4aW11bSB0cmFuc2l0aW9uIGxhdGVuY3kgaXMgaW4gbmFub3NlY29uZHMgLSBpZiBpdCdzIHVua25vd24sCiAgKiBDUFVGUkVRX0VURVJOQUwgc2hhbGwgYmUgdXNlZC4KICAqLwpAQCAtNzIsMTMgKzcyLDE1IEBACiBzdHJ1Y3QgY3B1ZnJlcV9jcHVpbmZvIHsKIAl1bnNpZ25lZCBpbnQJCW1heF9mcmVxOwogCXVuc2lnbmVkIGludAkJbWluX2ZyZXE7Ci0JdW5zaWduZWQgaW50CQl0cmFuc2l0aW9uX2xhdGVuY3k7IC8qIGluIDEwXigtOSkgcyA9IG5hbm9zZWNvbmRzICovCisKKwkvKiBpbiAxMF4oLTkpIHMgPSBuYW5vc2Vjb25kcyAqLworCXVuc2lnbmVkIGludAkJdHJhbnNpdGlvbl9sYXRlbmN5OwogfTsKIAogc3RydWN0IGNwdWZyZXFfcmVhbF9wb2xpY3kgewogCXVuc2lnbmVkIGludAkJbWluOyAgICAvKiBpbiBrSHogKi8KIAl1bnNpZ25lZCBpbnQJCW1heDsgICAgLyogaW4ga0h6ICovCi0gICAgICAgIHVuc2lnbmVkIGludAkJcG9saWN5OyAvKiBzZWUgYWJvdmUgKi8KKwl1bnNpZ25lZCBpbnQJCXBvbGljeTsgLyogc2VlIGFib3ZlICovCiAJc3RydWN0IGNwdWZyZXFfZ292ZXJub3IJKmdvdmVybm9yOyAvKiBzZWUgYmVsb3cgKi8KIH07CiAKQEAgLTk0LDcgKzk2LDcgQEAKIAl1bnNpZ25lZCBpbnQJCW1heDsgICAgLyogaW4ga0h6ICovCiAJdW5zaWduZWQgaW50CQljdXI7ICAgIC8qIGluIGtIeiwgb25seSBuZWVkZWQgaWYgY3B1ZnJlcQogCQkJCQkgKiBnb3Zlcm5vcnMgYXJlIHVzZWQgKi8KLSAgICAgICAgdW5zaWduZWQgaW50CQlwb2xpY3k7IC8qIHNlZSBhYm92ZSAqLworCXVuc2lnbmVkIGludAkJcG9saWN5OyAvKiBzZWUgYWJvdmUgKi8KIAlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vcgkqZ292ZXJub3I7IC8qIHNlZSBiZWxvdyAqLwogCiAJc3RydWN0IHdvcmtfc3RydWN0CXVwZGF0ZTsgLyogaWYgdXBkYXRlX3BvbGljeSgpIG5lZWRzIHRvIGJlCkBAIC0xNjcsMTEgKzE2OSwxMSBAQAogCiBzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciB7CiAJY2hhcgluYW1lW0NQVUZSRVFfTkFNRV9MRU5dOwotCWludCAJKCpnb3Zlcm5vcikJKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5LAorCWludAkoKmdvdmVybm9yKQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkJIHVuc2lnbmVkIGludCBldmVudCk7CiAJc3NpemVfdAkoKnNob3dfc2V0c3BlZWQpCShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCQkJIGNoYXIgKmJ1Zik7Ci0JaW50IAkoKnN0b3JlX3NldHNwZWVkKQkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJaW50CSgqc3RvcmVfc2V0c3BlZWQpCShzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwKIAkJCQkJIHVuc2lnbmVkIGludCBmcmVxKTsKIAl1bnNpZ25lZCBpbnQgbWF4X3RyYW5zaXRpb25fbGF0ZW5jeTsgLyogSFcgbXVzdCBiZSBhYmxlIHRvIHN3aXRjaCB0bwogCQkJbmV4dCBmcmVxIGZhc3RlciB0aGFuIHRoaXMgdmFsdWUgaW4gbmFubyBzZWNzIG9yIHdlCkBAIC0xODAsNyArMTgyLDggQEAKIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7CiB9OwogCi0vKiBwYXNzIGEgdGFyZ2V0IHRvIHRoZSBjcHVmcmVxIGRyaXZlciAKKy8qCisgKiBQYXNzIGEgdGFyZ2V0IHRvIHRoZSBjcHVmcmVxIGRyaXZlci4KICAqLwogZXh0ZXJuIGludCBjcHVmcmVxX2RyaXZlcl90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCiAJCQkJIHVuc2lnbmVkIGludCB0YXJnZXRfZnJlcSwKQEAgLTIzNyw5ICsyNDAsOSBAQAogCiAvKiBmbGFncyAqLwogCi0jZGVmaW5lIENQVUZSRVFfU1RJQ0tZCQkweDAxCS8qIHRoZSBkcml2ZXIgaXNuJ3QgcmVtb3ZlZCBldmVuIGlmIAorI2RlZmluZSBDUFVGUkVRX1NUSUNLWQkJMHgwMQkvKiB0aGUgZHJpdmVyIGlzbid0IHJlbW92ZWQgZXZlbiBpZgogCQkJCQkgKiBhbGwgLT5pbml0KCkgY2FsbHMgZmFpbGVkICovCi0jZGVmaW5lIENQVUZSRVFfQ09OU1RfTE9PUFMgCTB4MDIJLyogbG9vcHNfcGVyX2ppZmZ5IG9yIG90aGVyIGtlcm5lbAorI2RlZmluZSBDUFVGUkVRX0NPTlNUX0xPT1BTCTB4MDIJLyogbG9vcHNfcGVyX2ppZmZ5IG9yIG90aGVyIGtlcm5lbAogCQkJCQkgKiAiY29uc3RhbnRzIiBhcmVuJ3QgYWZmZWN0ZWQgYnkKIAkJCQkJICogZnJlcXVlbmN5IHRyYW5zaXRpb25zICovCiAjZGVmaW5lIENQVUZSRVFfUE1fTk9fV0FSTgkweDA0CS8qIGRvbid0IHdhcm4gb24gc3VzcGVuZC9yZXN1bWUgc3BlZWQKQEAgLTI1Miw3ICsyNTUsNyBAQAogdm9pZCBjcHVmcmVxX25vdGlmeV90cmFuc2l0aW9uKHN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxcywgdW5zaWduZWQgaW50IHN0YXRlKTsKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCkgCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSwgdW5zaWduZWQgaW50IG1pbiwgdW5zaWduZWQgaW50IG1heCkKIHsKIAlpZiAocG9saWN5LT5taW4gPCBtaW4pCiAJCXBvbGljeS0+bWluID0gbWluOwpAQCAtMzg2LDM0ICszODksMTUgQEAKIC8qIHRoZSBmb2xsb3dpbmcgMyBmdW50aW9ucyBhcmUgZm9yIGNwdWZyZXEgY29yZSB1c2Ugb25seSAqLwogc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpjcHVmcmVxX2ZyZXF1ZW5jeV9nZXRfdGFibGUodW5zaWduZWQgaW50IGNwdSk7CiBzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKmNwdWZyZXFfY3B1X2dldCh1bnNpZ25lZCBpbnQgY3B1KTsKLXZvaWQgICBjcHVmcmVxX2NwdV9wdXQgKHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqZGF0YSk7Cit2b2lkICAgY3B1ZnJlcV9jcHVfcHV0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqZGF0YSk7CiAKIC8qIHRoZSBmb2xsb3dpbmcgYXJlIHJlYWxseSByZWFsbHkgb3B0aW9uYWwgKi8KIGV4dGVybiBzdHJ1Y3QgZnJlcV9hdHRyIGNwdWZyZXFfZnJlcV9hdHRyX3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXFzOwogCi12b2lkIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX2dldF9hdHRyKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqdGFibGUsIAordm9pZCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZV9nZXRfYXR0cihzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKnRhYmxlLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBjcHUpOwogCiB2b2lkIGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlX3B1dF9hdHRyKHVuc2lnbmVkIGludCBjcHUpOwogCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgVU5JRklFRCBERUJVRyBIRUxQRVJTICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNkZWZpbmUgQ1BVRlJFUV9ERUJVR19DT1JFCTEKLSNkZWZpbmUgQ1BVRlJFUV9ERUJVR19EUklWRVIJMgotI2RlZmluZSBDUFVGUkVRX0RFQlVHX0dPVkVSTk9SCTQKLQotI2lmZGVmIENPTkZJR19DUFVfRlJFUV9ERUJVRwotCi1leHRlcm4gdm9pZCBjcHVmcmVxX2RlYnVnX3ByaW50ayh1bnNpZ25lZCBpbnQgdHlwZSwgY29uc3QgY2hhciAqcHJlZml4LCAKLQkJCQkgY29uc3QgY2hhciAqZm10LCAuLi4pOwotCi0jZWxzZQotCi0jZGVmaW5lIGNwdWZyZXFfZGVidWdfcHJpbnRrKG1zZy4uLikgZG8geyB9IHdoaWxlKDApCi0KLSNlbmRpZiAvKiBDT05GSUdfQ1BVX0ZSRVFfREVCVUcgKi8KLQogI2VuZGlmIC8qIF9MSU5VWF9DUFVGUkVRX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3JlZC5oIGIvaW5jbHVkZS9saW51eC9jcmVkLmgKaW5kZXggOWFlZWIwYi4uYmUxNmI2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcmVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcmVkLmgKQEAgLTE0Niw2ICsxNDYsNyBAQAogCXZvaWQJCSpzZWN1cml0eTsJLyogc3ViamVjdGl2ZSBMU00gc2VjdXJpdHkgKi8KICNlbmRpZgogCXN0cnVjdCB1c2VyX3N0cnVjdCAqdXNlcjsJLyogcmVhbCB1c2VyIElEIHN1YnNjcmlwdGlvbiAqLworCXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uczsgLyogY2FjaGVkIHVzZXItPnVzZXJfbnMgKi8KIAlzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbzsJLyogc3VwcGxlbWVudGFyeSBncm91cHMgZm9yIGV1aWQvZnNnaWQgKi8KIAlzdHJ1Y3QgcmN1X2hlYWQJcmN1OwkJLyogUkNVIGRlbGV0aW9uIGhvb2sgKi8KIH07CkBAIC0zNTQsMTAgKzM1NSwxNSBAQAogI2RlZmluZSBjdXJyZW50X2ZzZ2lkKCkgCShjdXJyZW50X2NyZWRfeHh4KGZzZ2lkKSkKICNkZWZpbmUgY3VycmVudF9jYXAoKQkJKGN1cnJlbnRfY3JlZF94eHgoY2FwX2VmZmVjdGl2ZSkpCiAjZGVmaW5lIGN1cnJlbnRfdXNlcigpCQkoY3VycmVudF9jcmVkX3h4eCh1c2VyKSkKLSNkZWZpbmUgX2N1cnJlbnRfdXNlcl9ucygpCShjdXJyZW50X2NyZWRfeHh4KHVzZXIpLT51c2VyX25zKQogI2RlZmluZSBjdXJyZW50X3NlY3VyaXR5KCkJKGN1cnJlbnRfY3JlZF94eHgoc2VjdXJpdHkpKQogCi1leHRlcm4gc3RydWN0IHVzZXJfbmFtZXNwYWNlICpjdXJyZW50X3VzZXJfbnModm9pZCk7CisjaWZkZWYgQ09ORklHX1VTRVJfTlMKKyNkZWZpbmUgY3VycmVudF91c2VyX25zKCkgKGN1cnJlbnRfY3JlZF94eHgodXNlcl9ucykpCisjZWxzZQorZXh0ZXJuIHN0cnVjdCB1c2VyX25hbWVzcGFjZSBpbml0X3VzZXJfbnM7CisjZGVmaW5lIGN1cnJlbnRfdXNlcl9ucygpICgmaW5pdF91c2VyX25zKQorI2VuZGlmCisKIAogI2RlZmluZSBjdXJyZW50X3VpZF9naWQoX3VpZCwgX2dpZCkJCVwKIGRvIHsJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIGIvaW5jbHVkZS9saW51eC9kY2FjaGUuaAppbmRleCBmMmFmZWQ0Li4xOWQ5MGE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGNhY2hlLmgKQEAgLTE5Nyw3ICsxOTcsNyBAQAogICAgICAgKiB0eXBpY2FsbHkgdXNpbmcgZF9zcGxpY2VfYWxpYXMuICovCiAKICNkZWZpbmUgRENBQ0hFX1JFRkVSRU5DRUQJMHgwMDA4ICAvKiBSZWNlbnRseSB1c2VkLCBkb24ndCBkaXNjYXJkLiAqLwotI2RlZmluZSBEQ0FDSEVfVU5IQVNIRUQJCTB4MDAxMAkKKyNkZWZpbmUgRENBQ0hFX1JDVUFDQ0VTUwkweDAwMTAJLyogRW50cnkgaGFzIGV2ZXIgYmVlbiBSQ1UtdmlzaWJsZSAqLwogI2RlZmluZSBEQ0FDSEVfSU5PVElGWV9QQVJFTlRfV0FUQ0hFRCAweDAwMjAKICAgICAgLyogUGFyZW50IGlub2RlIGlzIHdhdGNoZWQgYnkgaW5vdGlmeSAqLwogCkBAIC0zODQsNyArMzg0LDcgQEAKICAKIHN0YXRpYyBpbmxpbmUgaW50IGRfdW5oYXNoZWQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXJldHVybiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX1VOSEFTSEVEKTsKKwlyZXR1cm4gaGxpc3RfYmxfdW5oYXNoZWQoJmRlbnRyeS0+ZF9oYXNoKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZF91bmxpbmtlZChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS1tYXBwZXIuaCBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCmluZGV4IGUyNzY4ODMuLjMyYTQ0MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oCkBAIC0xOTcsNyArMTk3LDYgQEAKIHN0cnVjdCBkbV90YXJnZXRfY2FsbGJhY2tzIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50ICgqY29uZ2VzdGVkX2ZuKSAoc3RydWN0IGRtX3RhcmdldF9jYWxsYmFja3MgKiwgaW50KTsKLQl2b2lkICgqdW5wbHVnX2ZuKShzdHJ1Y3QgZG1fdGFyZ2V0X2NhbGxiYWNrcyAqKTsKIH07CiAKIGludCBkbV9yZWdpc3Rlcl90YXJnZXQoc3RydWN0IHRhcmdldF90eXBlICp0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2RldmljZS5oCmluZGV4IGFiOGRmYzAuLjBkNzUzNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaApAQCAtNDQyLDcgKzQ0Miw2IEBACiAJc3RydWN0IGRldl9hcmNoZGF0YQlhcmNoZGF0YTsKIAogCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsgLyogYXNzb2NpYXRlZCBkZXZpY2UgdHJlZSBub2RlICovCi0JY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfbWF0Y2g7IC8qIG1hdGNoaW5nIG9mX2RldmljZV9pZCBmcm9tIGRyaXZlciAqLwogCiAJZGV2X3QJCQlkZXZ0OwkvKiBkZXZfdCwgY3JlYXRlcyB0aGUgc3lzZnMgImRldiIgKi8KIApAQCAtNjMzLDEzICs2MzIsNiBAQAogLyogZHJpdmVycy9iYXNlL3Bvd2VyL3NodXRkb3duLmMgKi8KIGV4dGVybiB2b2lkIGRldmljZV9zaHV0ZG93bih2b2lkKTsKIAotI2lmbmRlZiBDT05GSUdfQVJDSF9OT19TWVNERVZfT1BTCi0vKiBkcml2ZXJzL2Jhc2Uvc3lzLmMgKi8KLWV4dGVybiB2b2lkIHN5c2Rldl9zaHV0ZG93bih2b2lkKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgc3lzZGV2X3NodXRkb3duKHZvaWQpIHsgfQotI2VuZGlmCi0KIC8qIGRlYnVnZ2luZyBhbmQgdHJvdWJsZXNob290aW5nL2RpYWdub3N0aWMgaGVscGVycy4gKi8KIGV4dGVybiBjb25zdCBjaGFyICpkZXZfZHJpdmVyX3N0cmluZyhjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2R5bmFtaWNfZGVidWcuaCBiL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCmluZGV4IDBjOTY1M2YuLmU3NDdlY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvZHluYW1pY19kZWJ1Zy5oCkBAIC0xLDggKzEsNiBAQAogI2lmbmRlZiBfRFlOQU1JQ19ERUJVR19ICiAjZGVmaW5lIF9EWU5BTUlDX0RFQlVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KLQogLyogZHluYW1pY19wcmludGtfZW5hYmxlZCwgYW5kIGR5bmFtaWNfcHJpbnRrX2VuYWJsZWQyIGFyZSBiaXRtYXNrcyBpbiB3aGljaAogICogYml0IG4gaXMgc2V0IHRvIDEgaWYgYW55IG1vZG5hbWUgaGFzaGVzIGludG8gdGhlIGJ1Y2tldCBuLCAwIG90aGVyd2lzZS4gVGhleQogICogdXNlIGluZGVwZW5kZW50IGhhc2ggZnVuY3Rpb25zLCB0byByZWR1Y2UgdGhlIGNoYW5jZSBvZiBmYWxzZSBwb3NpdGl2ZXMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggZGY3MjhjMS4uNmE4Mjc0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtODMyLDYgKzgzMiw3IEBACiAjZGVmaW5lIEZCSU5GT19DQU5fRk9SQ0VfT1VUUFVUICAgICAweDIwMDAwMAogCiBzdHJ1Y3QgZmJfaW5mbyB7CisJYXRvbWljX3QgY291bnQ7CiAJaW50IG5vZGU7CiAJaW50IGZsYWdzOwogCXN0cnVjdCBtdXRleCBsb2NrOwkJLyogTG9jayBmb3Igb3Blbi9yZWxlYXNlL2lvY3RsIGZ1bmNzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZsZXhfYXJyYXkuaCBiL2luY2x1ZGUvbGludXgvZmxleF9hcnJheS5oCmluZGV4IDcwZTRlZmEuLmViZWIyZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZmxleF9hcnJheS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmxleF9hcnJheS5oCkBAIC02MSw3ICs2MSw3IEBACiBzdHJ1Y3QgZmxleF9hcnJheSAqZmxleF9hcnJheV9hbGxvYyhpbnQgZWxlbWVudF9zaXplLCB1bnNpZ25lZCBpbnQgdG90YWwsCiAJCWdmcF90IGZsYWdzKTsKIGludCBmbGV4X2FycmF5X3ByZWFsbG9jKHN0cnVjdCBmbGV4X2FycmF5ICpmYSwgdW5zaWduZWQgaW50IHN0YXJ0LAotCQl1bnNpZ25lZCBpbnQgZW5kLCBnZnBfdCBmbGFncyk7CisJCXVuc2lnbmVkIGludCBucl9lbGVtZW50cywgZ2ZwX3QgZmxhZ3MpOwogdm9pZCBmbGV4X2FycmF5X2ZyZWUoc3RydWN0IGZsZXhfYXJyYXkgKmZhKTsKIHZvaWQgZmxleF9hcnJheV9mcmVlX3BhcnRzKHN0cnVjdCBmbGV4X2FycmF5ICpmYSk7CiBpbnQgZmxleF9hcnJheV9wdXQoc3RydWN0IGZsZXhfYXJyYXkgKmZhLCB1bnNpZ25lZCBpbnQgZWxlbWVudF9uciwgdm9pZCAqc3JjLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGRiZDg2MGEuLmNkZjk0OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTM1OCw3ICszNTgsNiBAQAogI2RlZmluZSBGU19FWFRFTlRfRkwJCQkweDAwMDgwMDAwIC8qIEV4dGVudHMgKi8KICNkZWZpbmUgRlNfRElSRUNUSU9fRkwJCQkweDAwMTAwMDAwIC8qIFVzZSBkaXJlY3QgaS9vICovCiAjZGVmaW5lIEZTX05PQ09XX0ZMCQkJMHgwMDgwMDAwMCAvKiBEbyBub3QgY293IGZpbGUgKi8KLSNkZWZpbmUgRlNfQ09XX0ZMCQkJMHgwMjAwMDAwMCAvKiBDb3cgZmlsZSAqLwogI2RlZmluZSBGU19SRVNFUlZFRF9GTAkJCTB4ODAwMDAwMDAgLyogcmVzZXJ2ZWQgZm9yIGV4dDIgbGliICovCiAKICNkZWZpbmUgRlNfRkxfVVNFUl9WSVNJQkxFCQkweDAwMDNERkZGIC8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaCBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKaW5kZXggY2EyOWUwMy4uOWQ4OGUxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mdHJhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCkBAIC0yOSw5ICsyOSwyMiBAQAogCiB0eXBlZGVmIHZvaWQgKCpmdHJhY2VfZnVuY190KSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCk7CiAKK3N0cnVjdCBmdHJhY2VfaGFzaDsKKworZW51bSB7CisJRlRSQUNFX09QU19GTF9FTkFCTEVECQk9IDEgPDwgMCwKKwlGVFJBQ0VfT1BTX0ZMX0dMT0JBTAkJPSAxIDw8IDEsCisJRlRSQUNFX09QU19GTF9EWU5BTUlDCQk9IDEgPDwgMiwKK307CisKIHN0cnVjdCBmdHJhY2Vfb3BzIHsKLQlmdHJhY2VfZnVuY190CSAgZnVuYzsKLQlzdHJ1Y3QgZnRyYWNlX29wcyAqbmV4dDsKKwlmdHJhY2VfZnVuY190CQkJZnVuYzsKKwlzdHJ1Y3QgZnRyYWNlX29wcwkJKm5leHQ7CisJdW5zaWduZWQgbG9uZwkJCWZsYWdzOworI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQorCXN0cnVjdCBmdHJhY2VfaGFzaAkJKm5vdHJhY2VfaGFzaDsKKwlzdHJ1Y3QgZnRyYWNlX2hhc2gJCSpmaWx0ZXJfaGFzaDsKKyNlbmRpZgogfTsKIAogZXh0ZXJuIGludCBmdW5jdGlvbl90cmFjZV9zdG9wOwpAQCAtMTQ2LDE0ICsxNTksMTMgQEAKIGV4dGVybiBpbnQgZnRyYWNlX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7CiAKIGVudW0gewotCUZUUkFDRV9GTF9GUkVFCQk9ICgxIDw8IDApLAotCUZUUkFDRV9GTF9GQUlMRUQJPSAoMSA8PCAxKSwKLQlGVFJBQ0VfRkxfRklMVEVSCT0gKDEgPDwgMiksCi0JRlRSQUNFX0ZMX0VOQUJMRUQJPSAoMSA8PCAzKSwKLQlGVFJBQ0VfRkxfTk9UUkFDRQk9ICgxIDw8IDQpLAotCUZUUkFDRV9GTF9DT05WRVJURUQJPSAoMSA8PCA1KSwKKwlGVFJBQ0VfRkxfRU5BQkxFRAk9ICgxIDw8IDMwKSwKKwlGVFJBQ0VfRkxfRlJFRQkJPSAoMSA8PCAzMSksCiB9OwogCisjZGVmaW5lIEZUUkFDRV9GTF9NQVNLCQkoMHgzVUwgPDwgMzApCisjZGVmaW5lIEZUUkFDRV9SRUZfTUFYCQkoKDEgPDwgMzApIC0gMSkKKwogc3RydWN0IGR5bl9mdHJhY2UgewogCXVuaW9uIHsKIAkJdW5zaWduZWQgbG9uZwkJaXA7IC8qIGFkZHJlc3Mgb2YgbWNvdW50IGNhbGwtc2l0ZSAqLwpAQCAtMTY3LDcgKzE3OSwxMiBAQAogfTsKIAogaW50IGZ0cmFjZV9mb3JjZV91cGRhdGUodm9pZCk7Ci12b2lkIGZ0cmFjZV9zZXRfZmlsdGVyKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHJlc2V0KTsKK3ZvaWQgZnRyYWNlX3NldF9maWx0ZXIoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICAgaW50IGxlbiwgaW50IHJlc2V0KTsKK3ZvaWQgZnRyYWNlX3NldF9ub3RyYWNlKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCWludCBsZW4sIGludCByZXNldCk7Cit2b2lkIGZ0cmFjZV9zZXRfZ2xvYmFsX2ZpbHRlcih1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sIGludCByZXNldCk7Cit2b2lkIGZ0cmFjZV9zZXRfZ2xvYmFsX25vdHJhY2UodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgcmVzZXQpOwogCiBpbnQgcmVnaXN0ZXJfZnRyYWNlX2NvbW1hbmQoc3RydWN0IGZ0cmFjZV9mdW5jX2NvbW1hbmQgKmNtZCk7CiBpbnQgdW5yZWdpc3Rlcl9mdHJhY2VfY29tbWFuZChzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqY21kKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L2Z0cmFjZV9ldmVudC5oCmluZGV4IDIyYjMyYWYuLmI1YTU1MGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnRyYWNlX2V2ZW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9mdHJhY2VfZXZlbnQuaApAQCAtMzcsNiArMzcsNyBAQAogCXVuc2lnbmVkIGNoYXIJCWZsYWdzOwogCXVuc2lnbmVkIGNoYXIJCXByZWVtcHRfY291bnQ7CiAJaW50CQkJcGlkOworCWludAkJCXBhZGRpbmc7CiB9OwogCiAjZGVmaW5lIEZUUkFDRV9NQVhfRVZFTlQJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmcC5oIGIvaW5jbHVkZS9saW51eC9nZnAuaAppbmRleCBiZmI4ZjkzLi41NmQ4ZmM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dmcC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKQEAgLTM1Myw2ICszNTMsOCBAQAogCiB2b2lkICphbGxvY19wYWdlc19leGFjdChzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spOwogdm9pZCBmcmVlX3BhZ2VzX2V4YWN0KHZvaWQgKnZpcnQsIHNpemVfdCBzaXplKTsKKy8qIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gYWxsb2NfcGFnZXNfZXhhY3Rfbm9kZSAhISEgKi8KK3ZvaWQgKmFsbG9jX3BhZ2VzX2V4YWN0X25pZChpbnQgbmlkLCBzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spOwogCiAjZGVmaW5lIF9fZ2V0X2ZyZWVfcGFnZShnZnBfbWFzaykgXAogCQlfX2dldF9mcmVlX3BhZ2VzKChnZnBfbWFzayksIDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaCBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCmluZGV4IGRmMjljOGYuLjg4NDdjOGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvaHVnZV9tbS5oCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkJCQkJIHVuc2lnbmVkIGxvbmcgZW5kLAogCQkJCQkgbG9uZyBhZGp1c3RfbmV4dCkKIHsKLQlpZiAoIXZtYS0+YW5vbl92bWEgfHwgdm1hLT52bV9vcHMgfHwgdm1hLT52bV9maWxlKQorCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcykKIAkJcmV0dXJuOwogCV9fdm1hX2FkanVzdF90cmFuc19odWdlKHZtYSwgc3RhcnQsIGVuZCwgYWRqdXN0X25leHQpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbml0LmggYi9pbmNsdWRlL2xpbnV4L2luaXQuaAppbmRleCA1Nzc2NzFjLi45MTQ2ZjM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luaXQuaApAQCAtNzksMjkgKzc5LDI5IEBACiAjZGVmaW5lIF9fZXhpdHVzZWQgIF9fdXNlZAogI2VuZGlmCiAKLSNkZWZpbmUgX19leGl0ICAgICAgICAgIF9fc2VjdGlvbiguZXhpdC50ZXh0KSBfX2V4aXR1c2VkIF9fY29sZAorI2RlZmluZSBfX2V4aXQgICAgICAgICAgX19zZWN0aW9uKC5leGl0LnRleHQpIF9fZXhpdHVzZWQgX19jb2xkIG5vdHJhY2UKIAogLyogVXNlZCBmb3IgSE9UUExVRyAqLwotI2RlZmluZSBfX2RldmluaXQgICAgICAgIF9fc2VjdGlvbiguZGV2aW5pdC50ZXh0KSBfX2NvbGQKKyNkZWZpbmUgX19kZXZpbml0ICAgICAgICBfX3NlY3Rpb24oLmRldmluaXQudGV4dCkgX19jb2xkIG5vdHJhY2UKICNkZWZpbmUgX19kZXZpbml0ZGF0YSAgICBfX3NlY3Rpb24oLmRldmluaXQuZGF0YSkKICNkZWZpbmUgX19kZXZpbml0Y29uc3QgICBfX3NlY3Rpb24oLmRldmluaXQucm9kYXRhKQotI2RlZmluZSBfX2RldmV4aXQgICAgICAgIF9fc2VjdGlvbiguZGV2ZXhpdC50ZXh0KSBfX2V4aXR1c2VkIF9fY29sZAorI2RlZmluZSBfX2RldmV4aXQgICAgICAgIF9fc2VjdGlvbiguZGV2ZXhpdC50ZXh0KSBfX2V4aXR1c2VkIF9fY29sZCBub3RyYWNlCiAjZGVmaW5lIF9fZGV2ZXhpdGRhdGEgICAgX19zZWN0aW9uKC5kZXZleGl0LmRhdGEpCiAjZGVmaW5lIF9fZGV2ZXhpdGNvbnN0ICAgX19zZWN0aW9uKC5kZXZleGl0LnJvZGF0YSkKIAogLyogVXNlZCBmb3IgSE9UUExVR19DUFUgKi8KLSNkZWZpbmUgX19jcHVpbml0ICAgICAgICBfX3NlY3Rpb24oLmNwdWluaXQudGV4dCkgX19jb2xkCisjZGVmaW5lIF9fY3B1aW5pdCAgICAgICAgX19zZWN0aW9uKC5jcHVpbml0LnRleHQpIF9fY29sZCBub3RyYWNlCiAjZGVmaW5lIF9fY3B1aW5pdGRhdGEgICAgX19zZWN0aW9uKC5jcHVpbml0LmRhdGEpCiAjZGVmaW5lIF9fY3B1aW5pdGNvbnN0ICAgX19zZWN0aW9uKC5jcHVpbml0LnJvZGF0YSkKLSNkZWZpbmUgX19jcHVleGl0ICAgICAgICBfX3NlY3Rpb24oLmNwdWV4aXQudGV4dCkgX19leGl0dXNlZCBfX2NvbGQKKyNkZWZpbmUgX19jcHVleGl0ICAgICAgICBfX3NlY3Rpb24oLmNwdWV4aXQudGV4dCkgX19leGl0dXNlZCBfX2NvbGQgbm90cmFjZQogI2RlZmluZSBfX2NwdWV4aXRkYXRhICAgIF9fc2VjdGlvbiguY3B1ZXhpdC5kYXRhKQogI2RlZmluZSBfX2NwdWV4aXRjb25zdCAgIF9fc2VjdGlvbiguY3B1ZXhpdC5yb2RhdGEpCiAKIC8qIFVzZWQgZm9yIE1FTU9SWV9IT1RQTFVHICovCi0jZGVmaW5lIF9fbWVtaW5pdCAgICAgICAgX19zZWN0aW9uKC5tZW1pbml0LnRleHQpIF9fY29sZAorI2RlZmluZSBfX21lbWluaXQgICAgICAgIF9fc2VjdGlvbigubWVtaW5pdC50ZXh0KSBfX2NvbGQgbm90cmFjZQogI2RlZmluZSBfX21lbWluaXRkYXRhICAgIF9fc2VjdGlvbigubWVtaW5pdC5kYXRhKQogI2RlZmluZSBfX21lbWluaXRjb25zdCAgIF9fc2VjdGlvbigubWVtaW5pdC5yb2RhdGEpCi0jZGVmaW5lIF9fbWVtZXhpdCAgICAgICAgX19zZWN0aW9uKC5tZW1leGl0LnRleHQpIF9fZXhpdHVzZWQgX19jb2xkCisjZGVmaW5lIF9fbWVtZXhpdCAgICAgICAgX19zZWN0aW9uKC5tZW1leGl0LnRleHQpIF9fZXhpdHVzZWQgX19jb2xkIG5vdHJhY2UKICNkZWZpbmUgX19tZW1leGl0ZGF0YSAgICBfX3NlY3Rpb24oLm1lbWV4aXQuZGF0YSkKICNkZWZpbmUgX19tZW1leGl0Y29uc3QgICBfX3NlY3Rpb24oLm1lbWV4aXQucm9kYXRhKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAppbmRleCBjYWExNTFmLi42ODk0OTZiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKQEAgLTEzNCw3ICsxMzQsNiBAQAogCS5zdGFjawkJPSAmaW5pdF90aHJlYWRfaW5mbywJCQkJXAogCS51c2FnZQkJPSBBVE9NSUNfSU5JVCgyKSwJCQkJXAogCS5mbGFncwkJPSBQRl9LVEhSRUFELAkJCQkJXAotCS5sb2NrX2RlcHRoCT0gLTEsCQkJCQkJXAogCS5wcmlvCQk9IE1BWF9QUklPLTIwLAkJCQkJXAogCS5zdGF0aWNfcHJpbwk9IE1BWF9QUklPLTIwLAkJCQkJXAogCS5ub3JtYWxfcHJpbwk9IE1BWF9QUklPLTIwLAkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IGYzYTc3OTQuLjc3MWQ2ZDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTE2Nyw2ICsxNjcsNyBAQAogI2RlZmluZSBTWU5fUkVQT1JUCQkwCiAjZGVmaW5lIFNZTl9DT05GSUcJCTEKICNkZWZpbmUgU1lOX01UX1JFUE9SVAkJMgorI2RlZmluZSBTWU5fRFJPUFBFRAkJMwogCiAvKgogICogS2V5cyBhbmQgYnV0dG9ucwpAQCAtNTUzLDggKzU1NCw4IEBACiAjZGVmaW5lIEtFWV9EVkQJCQkweDE4NQkvKiBNZWRpYSBTZWxlY3QgRFZEICovCiAjZGVmaW5lIEtFWV9BVVgJCQkweDE4NgogI2RlZmluZSBLRVlfTVAzCQkJMHgxODcKLSNkZWZpbmUgS0VZX0FVRElPCQkweDE4OAotI2RlZmluZSBLRVlfVklERU8JCTB4MTg5CisjZGVmaW5lIEtFWV9BVURJTwkJMHgxODgJLyogQUwgQXVkaW8gQnJvd3NlciAqLworI2RlZmluZSBLRVlfVklERU8JCTB4MTg5CS8qIEFMIE1vdmllIEJyb3dzZXIgKi8KICNkZWZpbmUgS0VZX0RJUkVDVE9SWQkJMHgxOGEKICNkZWZpbmUgS0VZX0xJU1QJCTB4MThiCiAjZGVmaW5lIEtFWV9NRU1PCQkweDE4YwkvKiBNZWRpYSBTZWxlY3QgTWVzc2FnZXMgKi8KQEAgLTYwMyw4ICs2MDQsOSBAQAogI2RlZmluZSBLRVlfRlJBTUVGT1JXQVJECTB4MWI1CiAjZGVmaW5lIEtFWV9DT05URVhUX01FTlUJMHgxYjYJLyogR2VuRGVzYyAtIHN5c3RlbSBjb250ZXh0IG1lbnUgKi8KICNkZWZpbmUgS0VZX01FRElBX1JFUEVBVAkweDFiNwkvKiBDb25zdW1lciAtIHRyYW5zcG9ydCBjb250cm9sICovCi0jZGVmaW5lIEtFWV8xMENIQU5ORUxTVVAgICAgICAgIDB4MWI4ICAgLyogMTAgY2hhbm5lbHMgdXAgKDEwKykgKi8KLSNkZWZpbmUgS0VZXzEwQ0hBTk5FTFNET1dOICAgICAgMHgxYjkgICAvKiAxMCBjaGFubmVscyBkb3duICgxMC0pICovCisjZGVmaW5lIEtFWV8xMENIQU5ORUxTVVAJMHgxYjgJLyogMTAgY2hhbm5lbHMgdXAgKDEwKykgKi8KKyNkZWZpbmUgS0VZXzEwQ0hBTk5FTFNET1dOCTB4MWI5CS8qIDEwIGNoYW5uZWxzIGRvd24gKDEwLSkgKi8KKyNkZWZpbmUgS0VZX0lNQUdFUwkJMHgxYmEJLyogQUwgSW1hZ2UgQnJvd3NlciAqLwogCiAjZGVmaW5lIEtFWV9ERUxfRU9MCQkweDFjMAogI2RlZmluZSBLRVlfREVMX0VPUwkJMHgxYzEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5wdXQvbXQuaCBiL2luY2x1ZGUvbGludXgvaW5wdXQvbXQuaAppbmRleCBiM2FjMDZhLi4zMThiYjgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lucHV0L210LmgKKysrIGIvaW5jbHVkZS9saW51eC9pbnB1dC9tdC5oCkBAIC00OCw2ICs0OCwxMiBAQAogCWlucHV0X2V2ZW50KGRldiwgRVZfQUJTLCBBQlNfTVRfU0xPVCwgc2xvdCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnB1dF9pc19tdF9heGlzKGludCBheGlzKQoreworCXJldHVybiBheGlzID09IEFCU19NVF9TTE9UIHx8CisJCShheGlzID49IEFCU19NVF9GSVJTVCAmJiBheGlzIDw9IEFCU19NVF9MQVNUKTsKK30KKwogdm9pZCBpbnB1dF9tdF9yZXBvcnRfc2xvdF9zdGF0ZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsCiAJCQkJdW5zaWduZWQgaW50IHRvb2xfdHlwZSwgYm9vbCBhY3RpdmUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCAwOWEzMDgwLi44YjQ1Mzg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTUzLDEyICs1MywxMyBAQAogICogQml0cyB3aGljaCBjYW4gYmUgbW9kaWZpZWQgdmlhIGlycV9zZXQvY2xlYXIvbW9kaWZ5X3N0YXR1c19mbGFncygpCiAgKiBJUlFfTEVWRUwJCQktIEludGVycnVwdCBpcyBsZXZlbCB0eXBlLiBXaWxsIGJlIGFsc28KICAqCQkJCSAgdXBkYXRlZCBpbiB0aGUgY29kZSB3aGVuIHRoZSBhYm92ZSB0cmlnZ2VyCi0gKgkJCQkgIGJpdHMgYXJlIG1vZGlmaWVkIHZpYSBzZXRfaXJxX3R5cGUoKQorICoJCQkJICBiaXRzIGFyZSBtb2RpZmllZCB2aWEgaXJxX3NldF9pcnFfdHlwZSgpCiAgKiBJUlFfUEVSX0NQVQkJCS0gTWFyayBhbiBpbnRlcnJ1cHQgUEVSX0NQVS4gV2lsbCBwcm90ZWN0CiAgKgkJCQkgIGl0IGZyb20gYWZmaW5pdHkgc2V0dGluZwogICogSVJRX05PUFJPQkUJCQktIEludGVycnVwdCBjYW5ub3QgYmUgcHJvYmVkIGJ5IGF1dG9wcm9iaW5nCiAgKiBJUlFfTk9SRVFVRVNUCQktIEludGVycnVwdCBjYW5ub3QgYmUgcmVxdWVzdGVkIHZpYQogICoJCQkJICByZXF1ZXN0X2lycSgpCisgKiBJUlFfTk9USFJFQUQJCQktIEludGVycnVwdCBjYW5ub3QgYmUgdGhyZWFkZWQKICAqIElSUV9OT0FVVE9FTgkJCS0gSW50ZXJydXB0IGlzIG5vdCBhdXRvbWF0aWNhbGx5IGVuYWJsZWQgaW4KICAqCQkJCSAgcmVxdWVzdC9zZXR1cF9pcnEoKQogICogSVJRX05PX0JBTEFOQ0lORwkJLSBJbnRlcnJ1cHQgY2Fubm90IGJlIGJhbGFuY2VkIChhZmZpbml0eSBzZXQpCkBAIC04NSw2ICs4Niw3IEBACiAJSVJRX05PX0JBTEFOQ0lORwk9ICgxIDw8IDEzKSwKIAlJUlFfTU9WRV9QQ05UWFQJCT0gKDEgPDwgMTQpLAogCUlSUV9ORVNURURfVEhSRUFECT0gKDEgPDwgMTUpLAorCUlSUV9OT1RIUkVBRAkJPSAoMSA8PCAxNiksCiB9OwogCiAjZGVmaW5lIElSUUZfTU9ESUZZX01BU0sJXApAQCAtMjYxLDIzICsyNjMsNiBAQAogICogc3RydWN0IGlycV9jaGlwIC0gaGFyZHdhcmUgaW50ZXJydXB0IGNoaXAgZGVzY3JpcHRvcgogICoKICAqIEBuYW1lOgkJbmFtZSBmb3IgL3Byb2MvaW50ZXJydXB0cwotICogQHN0YXJ0dXA6CQlkZXByZWNhdGVkLCByZXBsYWNlZCBieSBpcnFfc3RhcnR1cAotICogQHNodXRkb3duOgkJZGVwcmVjYXRlZCwgcmVwbGFjZWQgYnkgaXJxX3NodXRkb3duCi0gKiBAZW5hYmxlOgkJZGVwcmVjYXRlZCwgcmVwbGFjZWQgYnkgaXJxX2VuYWJsZQotICogQGRpc2FibGU6CQlkZXByZWNhdGVkLCByZXBsYWNlZCBieSBpcnFfZGlzYWJsZQotICogQGFjazoJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9hY2sKLSAqIEBtYXNrOgkJZGVwcmVjYXRlZCwgcmVwbGFjZWQgYnkgaXJxX21hc2sKLSAqIEBtYXNrX2FjazoJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9tYXNrX2FjawotICogQHVubWFzazoJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV91bm1hc2sKLSAqIEBlb2k6CQlkZXByZWNhdGVkLCByZXBsYWNlZCBieSBpcnFfZW9pCi0gKiBAZW5kOgkJZGVwcmVjYXRlZCwgd2lsbCBnbyBhd2F5IHdpdGggX19kb19JUlEoKQotICogQHNldF9hZmZpbml0eToJZGVwcmVjYXRlZCwgcmVwbGFjZWQgYnkgaXJxX3NldF9hZmZpbml0eQotICogQHJldHJpZ2dlcjoJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9yZXRyaWdnZXIKLSAqIEBzZXRfdHlwZToJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9zZXRfdHlwZQotICogQHNldF93YWtlOgkJZGVwcmVjYXRlZCwgcmVwbGFjZWQgYnkgaXJxX3dha2UKLSAqIEBidXNfbG9jazoJCWRlcHJlY2F0ZWQsIHJlcGxhY2VkIGJ5IGlycV9idXNfbG9jawotICogQGJ1c19zeW5jX3VubG9jazoJZGVwcmVjYXRlZCwgcmVwbGFjZWQgYnkgaXJxX2J1c19zeW5jX3VubG9jawotICoKICAqIEBpcnFfc3RhcnR1cDoJc3RhcnQgdXAgdGhlIGludGVycnVwdCAoZGVmYXVsdHMgdG8gLT5lbmFibGUgaWYgTlVMTCkKICAqIEBpcnFfc2h1dGRvd246CXNodXQgZG93biB0aGUgaW50ZXJydXB0IChkZWZhdWx0cyB0byAtPmRpc2FibGUgaWYgTlVMTCkKICAqIEBpcnFfZW5hYmxlOgkJZW5hYmxlIHRoZSBpbnRlcnJ1cHQgKGRlZmF1bHRzIHRvIGNoaXAtPnVubWFzayBpZiBOVUxMKQpAQCAtMjk1LDYgKzI4MCw5IEBACiAgKiBAaXJxX2J1c19zeW5jX3VubG9jazpmdW5jdGlvbiB0byBzeW5jIGFuZCB1bmxvY2sgc2xvdyBidXMgKGkyYykgY2hpcHMKICAqIEBpcnFfY3B1X29ubGluZToJY29uZmlndXJlIGFuIGludGVycnVwdCBzb3VyY2UgZm9yIGEgc2Vjb25kYXJ5IENQVQogICogQGlycV9jcHVfb2ZmbGluZToJdW4tY29uZmlndXJlIGFuIGludGVycnVwdCBzb3VyY2UgZm9yIGEgc2Vjb25kYXJ5IENQVQorICogQGlycV9zdXNwZW5kOglmdW5jdGlvbiBjYWxsZWQgZnJvbSBjb3JlIGNvZGUgb24gc3VzcGVuZCBvbmNlIHBlciBjaGlwCisgKiBAaXJxX3Jlc3VtZToJCWZ1bmN0aW9uIGNhbGxlZCBmcm9tIGNvcmUgY29kZSBvbiByZXN1bWUgb25jZSBwZXIgY2hpcAorICogQGlycV9wbV9zaHV0ZG93bjoJZnVuY3Rpb24gY2FsbGVkIGZyb20gY29yZSBjb2RlIG9uIHNodXRkb3duIG9uY2UgcGVyIGNoaXAKICAqIEBpcnFfcHJpbnRfY2hpcDoJb3B0aW9uYWwgdG8gcHJpbnQgc3BlY2lhbCBjaGlwIGluZm8gaW4gc2hvd19pbnRlcnJ1cHRzCiAgKiBAZmxhZ3M6CQljaGlwIHNwZWNpZmljIGZsYWdzCiAgKgpAQCAtMzI0LDYgKzMxMiwxMCBAQAogCXZvaWQJCSgqaXJxX2NwdV9vbmxpbmUpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CiAJdm9pZAkJKCppcnFfY3B1X29mZmxpbmUpKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSk7CiAKKwl2b2lkCQkoKmlycV9zdXNwZW5kKShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpOworCXZvaWQJCSgqaXJxX3Jlc3VtZSkoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKKwl2b2lkCQkoKmlycV9wbV9zaHV0ZG93bikoc3RydWN0IGlycV9kYXRhICpkYXRhKTsKKwogCXZvaWQJCSgqaXJxX3ByaW50X2NoaXApKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwgc3RydWN0IHNlcV9maWxlICpwKTsKIAogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CkBAIC00MzksNyArNDMxLDcgQEAKIC8qCiAgKiBTZXQgYSBoaWdobGV2ZWwgY2hhaW5lZCBmbG93IGhhbmRsZXIgZm9yIGEgZ2l2ZW4gSVJRLgogICogKGEgY2hhaW5lZCBoYW5kbGVyIGlzIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCBhbmQgc2V0IHRvCi0gKiAgSVJRX05PUkVRVUVTVCBhbmQgSVJRX05PUFJPQkUpCisgKiAgSVJRX05PUkVRVUVTVCwgSVJRX05PUFJPQkUsIGFuZCBJUlFfTk9USFJFQUQpCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZAogaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgaXJxX2Zsb3dfaGFuZGxlcl90IGhhbmRsZSkKQEAgLTQ2OSw2ICs0NjEsMTYgQEAKIAlpcnFfbW9kaWZ5X3N0YXR1cyhpcnEsIElSUV9OT1BST0JFLCAwKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGlycV9zZXRfbm90aHJlYWQodW5zaWduZWQgaW50IGlycSkKK3sKKwlpcnFfbW9kaWZ5X3N0YXR1cyhpcnEsIDAsIElSUV9OT1RIUkVBRCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfc2V0X3RocmVhZCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlycV9tb2RpZnlfc3RhdHVzKGlycSwgSVJRX05PVEhSRUFELCAwKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGlycV9zZXRfbmVzdGVkX3RocmVhZCh1bnNpZ25lZCBpbnQgaXJxLCBib29sIG5lc3QpCiB7CiAJaWYgKG5lc3QpCkBAIC01NzMsNiArNTc1LDE0NSBAQAogCXJldHVybiBpcnFfcmVzZXJ2ZV9pcnFzKGlycSwgMSk7CiB9CiAKKyNpZm5kZWYgaXJxX3JlZ193cml0ZWwKKyMgZGVmaW5lIGlycV9yZWdfd3JpdGVsKHZhbCwgYWRkcikJd3JpdGVsKHZhbCwgYWRkcikKKyNlbmRpZgorI2lmbmRlZiBpcnFfcmVnX3JlYWRsCisjIGRlZmluZSBpcnFfcmVnX3JlYWRsKGFkZHIpCQlyZWFkbChhZGRyKQorI2VuZGlmCisKKy8qKgorICogc3RydWN0IGlycV9jaGlwX3JlZ3MgLSByZWdpc3RlciBvZmZzZXRzIGZvciBzdHJ1Y3QgaXJxX2djaQorICogQGVuYWJsZToJRW5hYmxlIHJlZ2lzdGVyIG9mZnNldCB0byByZWdfYmFzZQorICogQGRpc2FibGU6CURpc2FibGUgcmVnaXN0ZXIgb2Zmc2V0IHRvIHJlZ19iYXNlCisgKiBAbWFzazoJTWFzayByZWdpc3RlciBvZmZzZXQgdG8gcmVnX2Jhc2UKKyAqIEBhY2s6CUFjayByZWdpc3RlciBvZmZzZXQgdG8gcmVnX2Jhc2UKKyAqIEBlb2k6CUVvaSByZWdpc3RlciBvZmZzZXQgdG8gcmVnX2Jhc2UKKyAqIEB0eXBlOglUeXBlIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgb2Zmc2V0IHRvIHJlZ19iYXNlCisgKiBAcG9sYXJpdHk6CVBvbGFyaXR5IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgb2Zmc2V0IHRvIHJlZ19iYXNlCisgKi8KK3N0cnVjdCBpcnFfY2hpcF9yZWdzIHsKKwl1bnNpZ25lZCBsb25nCQllbmFibGU7CisJdW5zaWduZWQgbG9uZwkJZGlzYWJsZTsKKwl1bnNpZ25lZCBsb25nCQltYXNrOworCXVuc2lnbmVkIGxvbmcJCWFjazsKKwl1bnNpZ25lZCBsb25nCQllb2k7CisJdW5zaWduZWQgbG9uZwkJdHlwZTsKKwl1bnNpZ25lZCBsb25nCQlwb2xhcml0eTsKK307CisKKy8qKgorICogc3RydWN0IGlycV9jaGlwX3R5cGUgLSBHZW5lcmljIGludGVycnVwdCBjaGlwIGluc3RhbmNlIGZvciBhIGZsb3cgdHlwZQorICogQGNoaXA6CQlUaGUgcmVhbCBpbnRlcnJ1cHQgY2hpcCB3aGljaCBwcm92aWRlcyB0aGUgY2FsbGJhY2tzCisgKiBAcmVnczoJCVJlZ2lzdGVyIG9mZnNldHMgZm9yIHRoaXMgY2hpcAorICogQGhhbmRsZXI6CQlGbG93IGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hpcAorICogQHR5cGU6CQlDaGlwIGNhbiBoYW5kbGUgdGhlc2UgZmxvdyB0eXBlcworICoKKyAqIEEgaXJxX2dlbmVyaWNfY2hpcCBjYW4gaGF2ZSBzZXZlcmFsIGluc3RhbmNlcyBvZiBpcnFfY2hpcF90eXBlIHdoZW4KKyAqIGl0IHJlcXVpcmVzIGRpZmZlcmVudCBmdW5jdGlvbnMgYW5kIHJlZ2lzdGVyIG9mZnNldHMgZm9yIGRpZmZlcmVudAorICogZmxvdyB0eXBlcy4KKyAqLworc3RydWN0IGlycV9jaGlwX3R5cGUgeworCXN0cnVjdCBpcnFfY2hpcAkJY2hpcDsKKwlzdHJ1Y3QgaXJxX2NoaXBfcmVncwlyZWdzOworCWlycV9mbG93X2hhbmRsZXJfdAloYW5kbGVyOworCXUzMgkJCXR5cGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljIC0gR2VuZXJpYyBpcnEgY2hpcCBkYXRhIHN0cnVjdHVyZQorICogQGxvY2s6CQlMb2NrIHRvIHByb3RlY3QgcmVnaXN0ZXIgYW5kIGNhY2hlIGRhdGEgYWNjZXNzCisgKiBAcmVnX2Jhc2U6CQlSZWdpc3RlciBiYXNlIGFkZHJlc3MgKHZpcnR1YWwpCisgKiBAaXJxX2Jhc2U6CQlJbnRlcnJ1cHQgYmFzZSBuciBmb3IgdGhpcyBjaGlwCisgKiBAaXJxX2NudDoJCU51bWJlciBvZiBpbnRlcnJ1cHRzIGhhbmRsZWQgYnkgdGhpcyBjaGlwCisgKiBAbWFza19jYWNoZToJCUNhY2hlZCBtYXNrIHJlZ2lzdGVyCisgKiBAdHlwZV9jYWNoZToJCUNhY2hlZCB0eXBlIHJlZ2lzdGVyCisgKiBAcG9sYXJpdHlfY2FjaGU6CUNhY2hlZCBwb2xhcml0eSByZWdpc3RlcgorICogQHdha2VfZW5hYmxlZDoJSW50ZXJydXB0IGNhbiB3YWtldXAgZnJvbSBzdXNwZW5kCisgKiBAd2FrZV9hY3RpdmU6CUludGVycnVwdCBpcyBtYXJrZWQgYXMgYW4gd2FrZXVwIGZyb20gc3VzcGVuZCBzb3VyY2UKKyAqIEBudW1fY3Q6CQlOdW1iZXIgb2YgYXZhaWxhYmxlIGlycV9jaGlwX3R5cGUgaW5zdGFuY2VzICh1c3VhbGx5IDEpCisgKiBAcHJpdmF0ZToJCVByaXZhdGUgZGF0YSBmb3Igbm9uIGdlbmVyaWMgY2hpcCBjYWxsYmFja3MKKyAqIEBsaXN0OgkJTGlzdCBoZWFkIGZvciBrZWVwaW5nIHRyYWNrIG9mIGluc3RhbmNlcworICogQGNoaXBfdHlwZXM6CQlBcnJheSBvZiBpbnRlcnJ1cHQgaXJxX2NoaXBfdHlwZXMKKyAqCisgKiBOb3RlLCB0aGF0IGlycV9jaGlwX2dlbmVyaWMgY2FuIGhhdmUgbXVsdGlwbGUgaXJxX2NoaXBfdHlwZQorICogaW1wbGVtZW50YXRpb25zIHdoaWNoIGNhbiBiZSBhc3NvY2lhdGVkIHRvIGEgcGFydGljdWxhciBpcnEgbGluZSBvZgorICogYW4gaXJxX2NoaXBfZ2VuZXJpYyBpbnN0YW5jZS4gVGhhdCBhbGxvd3MgdG8gc2hhcmUgYW5kIHByb3RlY3QKKyAqIHN0YXRlIGluIGFuIGlycV9jaGlwX2dlbmVyaWMgaW5zdGFuY2Ugd2hlbiB3ZSBuZWVkIHRvIGltcGxlbWVudAorICogZGlmZmVyZW50IGZsb3cgbWVjaGFuaXNtcyAobGV2ZWwvZWRnZSkgZm9yIGl0LgorICovCitzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyB7CisJcmF3X3NwaW5sb2NrX3QJCWxvY2s7CisJdm9pZCBfX2lvbWVtCQkqcmVnX2Jhc2U7CisJdW5zaWduZWQgaW50CQlpcnFfYmFzZTsKKwl1bnNpZ25lZCBpbnQJCWlycV9jbnQ7CisJdTMyCQkJbWFza19jYWNoZTsKKwl1MzIJCQl0eXBlX2NhY2hlOworCXUzMgkJCXBvbGFyaXR5X2NhY2hlOworCXUzMgkJCXdha2VfZW5hYmxlZDsKKwl1MzIJCQl3YWtlX2FjdGl2ZTsKKwl1bnNpZ25lZCBpbnQJCW51bV9jdDsKKwl2b2lkCQkJKnByaXZhdGU7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBpcnFfY2hpcF90eXBlCWNoaXBfdHlwZXNbMF07Cit9OworCisvKioKKyAqIGVudW0gaXJxX2djX2ZsYWdzIC0gSW5pdGlhbGl6YXRpb24gZmxhZ3MgZm9yIGdlbmVyaWMgaXJxIGNoaXBzCisgKiBASVJRX0dDX0lOSVRfTUFTS19DQUNIRToJSW5pdGlhbGl6ZSB0aGUgbWFza19jYWNoZSBieSByZWFkaW5nIG1hc2sgcmVnCisgKiBASVJRX0dDX0lOSVRfTkVTVEVEX0xPQ0s6CVNldCB0aGUgbG9jayBjbGFzcyBvZiB0aGUgaXJxcyB0byBuZXN0ZWQgZm9yCisgKgkJCQlpcnEgY2hpcHMgd2hpY2ggbmVlZCB0byBjYWxsIGlycV9zZXRfd2FrZSgpIG9uCisgKgkJCQl0aGUgcGFyZW50IGlycS4gVXN1YWxseSBHUElPIGltcGxlbWVudGF0aW9ucworICovCitlbnVtIGlycV9nY19mbGFncyB7CisJSVJRX0dDX0lOSVRfTUFTS19DQUNIRQkJPSAxIDw8IDAsCisJSVJRX0dDX0lOSVRfTkVTVEVEX0xPQ0sJCT0gMSA8PCAxLAorfTsKKworLyogR2VuZXJpYyBjaGlwIGNhbGxiYWNrIGZ1bmN0aW9ucyAqLwordm9pZCBpcnFfZ2Nfbm9vcChzdHJ1Y3QgaXJxX2RhdGEgKmQpOwordm9pZCBpcnFfZ2NfbWFza19kaXNhYmxlX3JlZyhzdHJ1Y3QgaXJxX2RhdGEgKmQpOwordm9pZCBpcnFfZ2NfbWFza19zZXRfYml0KHN0cnVjdCBpcnFfZGF0YSAqZCk7Cit2b2lkIGlycV9nY19tYXNrX2Nscl9iaXQoc3RydWN0IGlycV9kYXRhICpkKTsKK3ZvaWQgaXJxX2djX3VubWFza19lbmFibGVfcmVnKHN0cnVjdCBpcnFfZGF0YSAqZCk7Cit2b2lkIGlycV9nY19hY2soc3RydWN0IGlycV9kYXRhICpkKTsKK3ZvaWQgaXJxX2djX21hc2tfZGlzYWJsZV9yZWdfYW5kX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmQpOwordm9pZCBpcnFfZ2NfZW9pKHN0cnVjdCBpcnFfZGF0YSAqZCk7CitpbnQgaXJxX2djX3NldF93YWtlKHN0cnVjdCBpcnFfZGF0YSAqZCwgdW5zaWduZWQgaW50IG9uKTsKKworLyogU2V0dXAgZnVuY3Rpb25zIGZvciBpcnFfY2hpcF9nZW5lcmljICovCitzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqCitpcnFfYWxsb2NfZ2VuZXJpY19jaGlwKGNvbnN0IGNoYXIgKm5hbWUsIGludCBucl9jdCwgdW5zaWduZWQgaW50IGlycV9iYXNlLAorCQkgICAgICAgdm9pZCBfX2lvbWVtICpyZWdfYmFzZSwgaXJxX2Zsb3dfaGFuZGxlcl90IGhhbmRsZXIpOwordm9pZCBpcnFfc2V0dXBfZ2VuZXJpY19jaGlwKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywgdTMyIG1zaywKKwkJCSAgICBlbnVtIGlycV9nY19mbGFncyBmbGFncywgdW5zaWduZWQgaW50IGNsciwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2V0KTsKK2ludCBpcnFfc2V0dXBfYWx0X2NoaXAoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSk7Cit2b2lkIGlycV9yZW1vdmVfZ2VuZXJpY19jaGlwKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywgdTMyIG1zaywKKwkJCSAgICAgdW5zaWduZWQgaW50IGNsciwgdW5zaWduZWQgaW50IHNldCk7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlycV9jaGlwX3R5cGUgKmlycV9kYXRhX2dldF9jaGlwX3R5cGUoc3RydWN0IGlycV9kYXRhICpkKQoreworCXJldHVybiBjb250YWluZXJfb2YoZC0+Y2hpcCwgc3RydWN0IGlycV9jaGlwX3R5cGUsIGNoaXApOworfQorCisjZGVmaW5lIElSUV9NU0sobikgKHUzMikoKG4pIDwgMzIgPyAoKDEgPDwgKG4pKSAtIDEpIDogVUlOVF9NQVgpCisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX2djX2xvY2soc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjKQoreworCXJhd19zcGluX2xvY2soJmdjLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlycV9nY191bmxvY2soc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjKQoreworCXJhd19zcGluX3VubG9jaygmZ2MtPmxvY2spOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpcnFfZ2NfbG9jayhzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGlycV9nY191bmxvY2soc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjKSB7IH0KKyNlbmRpZgorCiAjZW5kaWYgLyogQ09ORklHX0dFTkVSSUNfSEFSRElSUVMgKi8KIAogI2VuZGlmIC8qICFDT05GSUdfUzM5MCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcnFkZXNjLmggYi9pbmNsdWRlL2xpbnV4L2lycWRlc2MuaAppbmRleCBhMDgyOTA1Li4yZDkyMWIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycWRlc2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lycWRlc2MuaApAQCAtMTYsMTYgKzE2LDE4IEBACiAgKiBAaXJxX2RhdGE6CQlwZXIgaXJxIGFuZCBjaGlwIGRhdGEgcGFzc2VkIGRvd24gdG8gY2hpcCBmdW5jdGlvbnMKICAqIEB0aW1lcl9yYW5kX3N0YXRlOglwb2ludGVyIHRvIHRpbWVyIHJhbmQgc3RhdGUgc3RydWN0CiAgKiBAa3N0YXRfaXJxczoJCWlycSBzdGF0cyBwZXIgY3B1Ci0gKiBAaGFuZGxlX2lycToJCWhpZ2hsZXZlbCBpcnEtZXZlbnRzIGhhbmRsZXIgW2lmIE5VTEwsIF9fZG9fSVJRKCldCisgKiBAaGFuZGxlX2lycToJCWhpZ2hsZXZlbCBpcnEtZXZlbnRzIGhhbmRsZXIKKyAqIEBwcmVmbG93X2hhbmRsZXI6CWhhbmRsZXIgY2FsbGVkIGJlZm9yZSB0aGUgZmxvdyBoYW5kbGVyIChjdXJyZW50bHkgdXNlZCBieSBzcGFyYykKICAqIEBhY3Rpb246CQl0aGUgaXJxIGFjdGlvbiBjaGFpbgogICogQHN0YXR1czoJCXN0YXR1cyBpbmZvcm1hdGlvbgogICogQGNvcmVfaW50ZXJuYWxfc3RhdGVfX2RvX25vdF9tZXNzX3dpdGhfaXQ6IGNvcmUgaW50ZXJuYWwgc3RhdHVzIGluZm9ybWF0aW9uCiAgKiBAZGVwdGg6CQlkaXNhYmxlLWRlcHRoLCBmb3IgbmVzdGVkIGlycV9kaXNhYmxlKCkgY2FsbHMKLSAqIEB3YWtlX2RlcHRoOgkJZW5hYmxlIGRlcHRoLCBmb3IgbXVsdGlwbGUgc2V0X2lycV93YWtlKCkgY2FsbGVycworICogQHdha2VfZGVwdGg6CQllbmFibGUgZGVwdGgsIGZvciBtdWx0aXBsZSBpcnFfc2V0X2lycV93YWtlKCkgY2FsbGVycwogICogQGlycV9jb3VudDoJCXN0YXRzIGZpZWxkIHRvIGRldGVjdCBzdGFsbGVkIGlycXMKICAqIEBsYXN0X3VuaGFuZGxlZDoJYWdpbmcgdGltZXIgZm9yIHVuaGFuZGxlZCBjb3VudAogICogQGlycXNfdW5oYW5kbGVkOglzdGF0cyBmaWVsZCBmb3Igc3B1cmlvdXMgdW5oYW5kbGVkIGludGVycnVwdHMKICAqIEBsb2NrOgkJbG9ja2luZyBmb3IgU01QCisgKiBAYWZmaW5pdHlfaGludDoJaGludCB0byB1c2VyIHNwYWNlIGZvciBwcmVmZXJyZWQgaXJxIGFmZmluaXR5CiAgKiBAYWZmaW5pdHlfbm90aWZ5Ogljb250ZXh0IGZvciBub3RpZmljYXRpb24gb2YgYWZmaW5pdHkgY2hhbmdlcwogICogQHBlbmRpbmdfbWFzazoJcGVuZGluZyByZWJhbGFuY2VkIGludGVycnVwdHMKICAqIEB0aHJlYWRzX29uZXNob3Q6CWJpdGZpZWxkIHRvIGhhbmRsZSBzaGFyZWQgb25lc2hvdCB0aHJlYWRzCkBAIC0xMDksMTAgKzExMSw3IEBACiAJZGVzYy0+aGFuZGxlX2lycShpcnEsIGRlc2MpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VuZXJpY19oYW5kbGVfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZ2VuZXJpY19oYW5kbGVfaXJxX2Rlc2MoaXJxLCBpcnFfdG9fZGVzYyhpcnEpKTsKLX0KK2ludCBnZW5lcmljX2hhbmRsZV9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKIC8qIFRlc3QgdG8gc2VlIGlmIGEgZHJpdmVyIGhhcyBzdWNjZXNzZnVsbHkgcmVxdWVzdGVkIGFuIGlycSAqLwogc3RhdGljIGlubGluZSBpbnQgaXJxX2hhc19hY3Rpb24odW5zaWduZWQgaW50IGlycSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvanVtcF9sYWJlbC5oIGIvaW5jbHVkZS9saW51eC9qdW1wX2xhYmVsLmgKaW5kZXggNzg4MGYxOC4uODNlNzQ1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9qdW1wX2xhYmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9qdW1wX2xhYmVsLmgKQEAgLTEsMjAgKzEsNDMgQEAKICNpZm5kZWYgX0xJTlVYX0pVTVBfTEFCRUxfSAogI2RlZmluZSBfTElOVVhfSlVNUF9MQUJFTF9ICiAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKICNpZiBkZWZpbmVkKENDX0hBVkVfQVNNX0dPVE8pICYmIGRlZmluZWQoQ09ORklHX0pVTVBfTEFCRUwpCisKK3N0cnVjdCBqdW1wX2xhYmVsX2tleSB7CisJYXRvbWljX3QgZW5hYmxlZDsKKwlzdHJ1Y3QganVtcF9lbnRyeSAqZW50cmllczsKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCXN0cnVjdCBqdW1wX2xhYmVsX21vZCAqbmV4dDsKKyNlbmRpZgorfTsKKwogIyBpbmNsdWRlIDxhc20vanVtcF9sYWJlbC5oPgogIyBkZWZpbmUgSEFWRV9KVU1QX0xBQkVMCiAjZW5kaWYKIAogZW51bSBqdW1wX2xhYmVsX3R5cGUgeworCUpVTVBfTEFCRUxfRElTQUJMRSA9IDAsCiAJSlVNUF9MQUJFTF9FTkFCTEUsCi0JSlVNUF9MQUJFTF9ESVNBQkxFCiB9OwogCiBzdHJ1Y3QgbW9kdWxlOwogCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCiAKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworI2RlZmluZSBKVU1QX0xBQkVMX0lOSVQge3sgMCB9LCBOVUxMLCBOVUxMfQorI2Vsc2UKKyNkZWZpbmUgSlVNUF9MQUJFTF9JTklUIHt7IDAgfSwgTlVMTH0KKyNlbmRpZgorCitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgc3RhdGljX2JyYW5jaChzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSkKK3sKKwlyZXR1cm4gYXJjaF9zdGF0aWNfYnJhbmNoKGtleSk7Cit9CisKIGV4dGVybiBzdHJ1Y3QganVtcF9lbnRyeSBfX3N0YXJ0X19fanVtcF90YWJsZVtdOwogZXh0ZXJuIHN0cnVjdCBqdW1wX2VudHJ5IF9fc3RvcF9fX2p1bXBfdGFibGVbXTsKIApAQCAtMjMsMzcgKzQ2LDM3IEBACiBleHRlcm4gdm9pZCBhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKHN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSwKIAkJCQkgZW51bSBqdW1wX2xhYmVsX3R5cGUgdHlwZSk7CiBleHRlcm4gdm9pZCBhcmNoX2p1bXBfbGFiZWxfdGV4dF9wb2tlX2Vhcmx5KGp1bXBfbGFiZWxfdCBhZGRyKTsKLWV4dGVybiB2b2lkIGp1bXBfbGFiZWxfdXBkYXRlKHVuc2lnbmVkIGxvbmcga2V5LCBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKTsKLWV4dGVybiB2b2lkIGp1bXBfbGFiZWxfYXBwbHlfbm9wcyhzdHJ1Y3QgbW9kdWxlICptb2QpOwogZXh0ZXJuIGludCBqdW1wX2xhYmVsX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCk7Ci0KLSNkZWZpbmUganVtcF9sYWJlbF9lbmFibGUoa2V5KSBcCi0JanVtcF9sYWJlbF91cGRhdGUoKHVuc2lnbmVkIGxvbmcpa2V5LCBKVU1QX0xBQkVMX0VOQUJMRSk7Ci0KLSNkZWZpbmUganVtcF9sYWJlbF9kaXNhYmxlKGtleSkgXAotCWp1bXBfbGFiZWxfdXBkYXRlKCh1bnNpZ25lZCBsb25nKWtleSwgSlVNUF9MQUJFTF9ESVNBQkxFKTsKK2V4dGVybiB2b2lkIGp1bXBfbGFiZWxfaW5jKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5KTsKK2V4dGVybiB2b2lkIGp1bXBfbGFiZWxfZGVjKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5KTsKK2V4dGVybiBib29sIGp1bXBfbGFiZWxfZW5hYmxlZChzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSk7CitleHRlcm4gdm9pZCBqdW1wX2xhYmVsX2FwcGx5X25vcHMoc3RydWN0IG1vZHVsZSAqbW9kKTsKIAogI2Vsc2UKIAotI2RlZmluZSBKVU1QX0xBQkVMKGtleSwgbGFiZWwpCQkJXAotZG8gewkJCQkJCVwKLQlpZiAodW5saWtlbHkoKmtleSkpCQkJXAotCQlnb3RvIGxhYmVsOwkJCVwKLX0gd2hpbGUgKDApCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi0jZGVmaW5lIGp1bXBfbGFiZWxfZW5hYmxlKGNvbmRfdmFyKQlcCi1kbyB7CQkJCQlcCi0gICAgICAgKihjb25kX3ZhcikgPSAxOwkJCVwKLX0gd2hpbGUgKDApCisjZGVmaW5lIEpVTVBfTEFCRUxfSU5JVCB7QVRPTUlDX0lOSVQoMCl9CiAKLSNkZWZpbmUganVtcF9sYWJlbF9kaXNhYmxlKGNvbmRfdmFyKQlcCi1kbyB7CQkJCQlcCi0gICAgICAgKihjb25kX3ZhcikgPSAwOwkJCVwKLX0gd2hpbGUgKDApCitzdHJ1Y3QganVtcF9sYWJlbF9rZXkgeworCWF0b21pY190IGVuYWJsZWQ7Cit9OwogCi1zdGF0aWMgaW5saW5lIGludCBqdW1wX2xhYmVsX2FwcGx5X25vcHMoc3RydWN0IG1vZHVsZSAqbW9kKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHN0YXRpY19icmFuY2goc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkpCiB7Ci0JcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZrZXktPmVuYWJsZWQpKSkKKwkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQganVtcF9sYWJlbF9pbmMoc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkpCit7CisJYXRvbWljX2luYygma2V5LT5lbmFibGVkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGp1bXBfbGFiZWxfZGVjKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5KQoreworCWF0b21pY19kZWMoJmtleS0+ZW5hYmxlZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGp1bXBfbGFiZWxfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQpAQCAtNjQsMTYgKzg3LDE2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQganVtcF9sYWJlbF9sb2NrKHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQganVtcF9sYWJlbF91bmxvY2sodm9pZCkge30KIAotI2VuZGlmCitzdGF0aWMgaW5saW5lIGJvb2wganVtcF9sYWJlbF9lbmFibGVkKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5KQoreworCXJldHVybiAhIWF0b21pY19yZWFkKCZrZXktPmVuYWJsZWQpOworfQogCi0jZGVmaW5lIENPTkRfU1RNVChrZXksIHN0bXQpCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0JX19sYWJlbF9fIGpsX2VuYWJsZWQ7CQkJCQlcCi0JSlVNUF9MQUJFTChrZXksIGpsX2VuYWJsZWQpOwkJCQlcCi0JaWYgKDApIHsJCQkJCQlcCi1qbF9lbmFibGVkOgkJCQkJCQlcCi0JCXN0bXQ7CQkJCQkJXAotCX0JCQkJCQkJXAotfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgaW50IGp1bXBfbGFiZWxfYXBwbHlfbm9wcyhzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvanVtcF9sYWJlbF9yZWYuaCBiL2luY2x1ZGUvbGludXgvanVtcF9sYWJlbF9yZWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVkMDEyYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2p1bXBfbGFiZWxfcmVmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jaWZuZGVmIF9MSU5VWF9KVU1QX0xBQkVMX1JFRl9ICi0jZGVmaW5lIF9MSU5VWF9KVU1QX0xBQkVMX1JFRl9ICi0KLSNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotCi0jaWZkZWYgSEFWRV9KVU1QX0xBQkVMCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBqdW1wX2xhYmVsX2luYyhhdG9taWNfdCAqa2V5KQotewotCWlmIChhdG9taWNfYWRkX3JldHVybigxLCBrZXkpID09IDEpCi0JCWp1bXBfbGFiZWxfZW5hYmxlKGtleSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBqdW1wX2xhYmVsX2RlYyhhdG9taWNfdCAqa2V5KQotewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KGtleSkpCi0JCWp1bXBfbGFiZWxfZGlzYWJsZShrZXkpOwotfQotCi0jZWxzZSAvKiAhSEFWRV9KVU1QX0xBQkVMICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBqdW1wX2xhYmVsX2luYyhhdG9taWNfdCAqa2V5KQotewotCWF0b21pY19pbmMoa2V5KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGp1bXBfbGFiZWxfZGVjKGF0b21pY190ICprZXkpCi17Ci0JYXRvbWljX2RlYyhrZXkpOwotfQotCi0jdW5kZWYgSlVNUF9MQUJFTAotI2RlZmluZSBKVU1QX0xBQkVMKGtleSwgbGFiZWwpCQkJCQkJXAotZG8gewkJCQkJCQkJCVwKLQlpZiAodW5saWtlbHkoX19idWlsdGluX2Nob29zZV9leHByKAkJCQlcCi0JICAgICAgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2Yoa2V5KSwgYXRvbWljX3QgKiksCVwKLQkgICAgICBhdG9taWNfcmVhZCgoYXRvbWljX3QgKikoa2V5KSksICooa2V5KSkpKQkJCVwKLQkJZ290byBsYWJlbDsJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZW5kaWYgLyogSEFWRV9KVU1QX0xBQkVMICovCi0KLSNlbmRpZiAvKiBfTElOVVhfSlVNUF9MQUJFTF9SRUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKaW5kZXggMDBjZWM0ZC4uZjM3YmE3MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXJuZWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCkBAIC0yODMsNiArMjgzLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgbWVtcGFyc2UoY29uc3QgY2hhciAqcHRyLCBjaGFyICoqcmV0cHRyKTsKIAogZXh0ZXJuIGludCBjb3JlX2tlcm5lbF90ZXh0KHVuc2lnbmVkIGxvbmcgYWRkcik7CitleHRlcm4gaW50IGNvcmVfa2VybmVsX2RhdGEodW5zaWduZWQgbG9uZyBhZGRyKTsKIGV4dGVybiBpbnQgX19rZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcik7CiBleHRlcm4gaW50IGtlcm5lbF90ZXh0X2FkZHJlc3ModW5zaWduZWQgbG9uZyBhZGRyKTsKIGV4dGVybiBpbnQgZnVuY19wdHJfaXNfa2VybmVsX3RleHQodm9pZCAqcHRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21vZC5oIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKaW5kZXggNmVmZDdhNy4uMzEwMjMxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbW9kLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKQEAgLTExMyw1ICsxMTMsNiBAQAogCiBleHRlcm4gaW50IHVzZXJtb2RlaGVscGVyX2Rpc2FibGUodm9pZCk7CiBleHRlcm4gdm9pZCB1c2VybW9kZWhlbHBlcl9lbmFibGUodm9pZCk7CitleHRlcm4gYm9vbCB1c2VybW9kZWhlbHBlcl9pc19kaXNhYmxlZCh2b2lkKTsKIAogI2VuZGlmIC8qIF9fTElOVVhfS01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGliYXRhLmggYi9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCmluZGV4IDdmNjc1YWEuLjA0ZjMyYTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGliYXRhLmgKKysrIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaApAQCAtMTM3LDggKzEzNyw2IEBACiAJQVRBX0RGTEFHX0FDUElfUEVORElORwk9ICgxIDw8IDUpLCAvKiBBQ1BJIHJlc3VtZSBhY3Rpb24gcGVuZGluZyAqLwogCUFUQV9ERkxBR19BQ1BJX0ZBSUxFRAk9ICgxIDw8IDYpLCAvKiBBQ1BJIG9uIGRldmNmZyBoYXMgZmFpbGVkICovCiAJQVRBX0RGTEFHX0FOCQk9ICgxIDw8IDcpLCAvKiBBTiBjb25maWd1cmVkICovCi0JQVRBX0RGTEFHX0hJUE0JCT0gKDEgPDwgOCksIC8qIGRldmljZSBzdXBwb3J0cyBISVBNICovCi0JQVRBX0RGTEFHX0RJUE0JCT0gKDEgPDwgOSksIC8qIGRldmljZSBzdXBwb3J0cyBESVBNICovCiAJQVRBX0RGTEFHX0RNQURJUgk9ICgxIDw8IDEwKSwgLyogZGV2aWNlIHJlcXVpcmVzIERNQURJUiAqLwogCUFUQV9ERkxBR19DRkdfTUFTSwk9ICgxIDw8IDEyKSAtIDEsCiAKQEAgLTE5OCw2ICsxOTYsNyBAQAogCQkJCQkgICAgICAqIG1hbmFnZW1lbnQgKi8KIAlBVEFfRkxBR19TV19BQ1RJVklUWQk9ICgxIDw8IDIyKSwgLyogZHJpdmVyIHN1cHBvcnRzIHN3IGFjdGl2aXR5CiAJCQkJCSAgICAgICogbGVkICovCisJQVRBX0ZMQUdfTk9fRElQTQk9ICgxIDw8IDIzKSwgLyogaG9zdCBub3QgaGFwcHkgd2l0aCBESVBNICovCiAKIAkvKiBiaXRzIDI0OjMxIG9mIGFwLT5mbGFncyBhcmUgcmVzZXJ2ZWQgZm9yIExMRCBzcGVjaWZpYyBmbGFncyAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3QuaCBiL2luY2x1ZGUvbGludXgvbGlzdC5oCmluZGV4IDNhNTQyNjYuLmNjNmQyYWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvcG9pc29uLmg+Ci0jaW5jbHVkZSA8bGludXgvcHJlZmV0Y2guaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zdC5oPgogCiAvKgogICogU2ltcGxlIGRvdWJseSBsaW5rZWQgbGlzdCBpbXBsZW1lbnRhdGlvbi4KQEAgLTM2NywxOCArMzY3LDE1IEBACiAgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgXAotCWZvciAocG9zID0gKGhlYWQpLT5uZXh0OyBwcmVmZXRjaChwb3MtPm5leHQpLCBwb3MgIT0gKGhlYWQpOyBcCi0gICAgICAgIAlwb3MgPSBwb3MtPm5leHQpCisJZm9yIChwb3MgPSAoaGVhZCktPm5leHQ7IHBvcyAhPSAoaGVhZCk7IHBvcyA9IHBvcy0+bmV4dCkKIAogLyoqCiAgKiBfX2xpc3RfZm9yX2VhY2gJLQlpdGVyYXRlIG92ZXIgYSBsaXN0CiAgKiBAcG9zOgl0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCiAgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KICAqCi0gKiBUaGlzIHZhcmlhbnQgZGlmZmVycyBmcm9tIGxpc3RfZm9yX2VhY2goKSBpbiB0aGF0IGl0J3MgdGhlCi0gKiBzaW1wbGVzdCBwb3NzaWJsZSBsaXN0IGl0ZXJhdGlvbiBjb2RlLCBubyBwcmVmZXRjaGluZyBpcyBkb25lLgotICogVXNlIHRoaXMgZm9yIGNvZGUgdGhhdCBrbm93cyB0aGUgbGlzdCB0byBiZSB2ZXJ5IHNob3J0IChlbXB0eQotICogb3IgMSBlbnRyeSkgbW9zdCBvZiB0aGUgdGltZS4KKyAqIFRoaXMgdmFyaWFudCBkb2Vzbid0IGRpZmZlciBmcm9tIGxpc3RfZm9yX2VhY2goKSBhbnkgbW9yZS4KKyAqIFdlIGRvbid0IGRvIHByZWZldGNoaW5nIGluIGVpdGhlciBjYXNlLgogICovCiAjZGVmaW5lIF9fbGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpIFwKIAlmb3IgKHBvcyA9IChoZWFkKS0+bmV4dDsgcG9zICE9IChoZWFkKTsgcG9zID0gcG9zLT5uZXh0KQpAQCAtMzg5LDggKzM4Niw3IEBACiAgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX3ByZXYocG9zLCBoZWFkKSBcCi0JZm9yIChwb3MgPSAoaGVhZCktPnByZXY7IHByZWZldGNoKHBvcy0+cHJldiksIHBvcyAhPSAoaGVhZCk7IFwKLSAgICAgICAgCXBvcyA9IHBvcy0+cHJldikKKwlmb3IgKHBvcyA9IChoZWFkKS0+cHJldjsgcG9zICE9IChoZWFkKTsgcG9zID0gcG9zLT5wcmV2KQogCiAvKioKICAqIGxpc3RfZm9yX2VhY2hfc2FmZSAtIGl0ZXJhdGUgb3ZlciBhIGxpc3Qgc2FmZSBhZ2FpbnN0IHJlbW92YWwgb2YgbGlzdCBlbnRyeQpAQCAtNDEwLDcgKzQwNiw3IEBACiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9wcmV2X3NhZmUocG9zLCBuLCBoZWFkKSBcCiAJZm9yIChwb3MgPSAoaGVhZCktPnByZXYsIG4gPSBwb3MtPnByZXY7IFwKLQkgICAgIHByZWZldGNoKHBvcy0+cHJldiksIHBvcyAhPSAoaGVhZCk7IFwKKwkgICAgIHBvcyAhPSAoaGVhZCk7IFwKIAkgICAgIHBvcyA9IG4sIG4gPSBwb3MtPnByZXYpCiAKIC8qKgpAQCAtNDIxLDcgKzQxNyw3IEBACiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG1lbWJlcikJCQkJXAogCWZvciAocG9zID0gbGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAotCSAgICAgcHJlZmV0Y2gocG9zLT5tZW1iZXIubmV4dCksICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IAlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyAJXAogCSAgICAgcG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCiAKIC8qKgpAQCAtNDMyLDcgKzQyOCw3IEBACiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHBvcywgaGVhZCwgbWVtYmVyKQkJCVwKIAlmb3IgKHBvcyA9IGxpc3RfZW50cnkoKGhlYWQpLT5wcmV2LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKLQkgICAgIHByZWZldGNoKHBvcy0+bWVtYmVyLnByZXYpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOyAJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsgCVwKIAkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIucHJldiwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQogCiAvKioKQEAgLTQ1Nyw3ICs0NTMsNyBAQAogICovCiAjZGVmaW5lIGxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUocG9zLCBoZWFkLCBtZW1iZXIpIAkJXAogCWZvciAocG9zID0gbGlzdF9lbnRyeShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7CVwKLQkgICAgIHByZWZldGNoKHBvcy0+bWVtYmVyLm5leHQpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCisJICAgICAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCiAJICAgICBwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLm5leHQsIHR5cGVvZigqcG9zKSwgbWVtYmVyKSkKIAogLyoqCkBAIC00NzEsNyArNDY3LDcgQEAKICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JldmVyc2UocG9zLCBoZWFkLCBtZW1iZXIpCQlcCiAJZm9yIChwb3MgPSBsaXN0X2VudHJ5KHBvcy0+bWVtYmVyLnByZXYsIHR5cGVvZigqcG9zKSwgbWVtYmVyKTsJXAotCSAgICAgcHJlZmV0Y2gocG9zLT5tZW1iZXIucHJldiksICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7CVwKKwkgICAgICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7CVwKIAkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIucHJldiwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQogCiAvKioKQEAgLTQ4Myw3ICs0NzksNyBAQAogICogSXRlcmF0ZSBvdmVyIGxpc3Qgb2YgZ2l2ZW4gdHlwZSwgY29udGludWluZyBmcm9tIGN1cnJlbnQgcG9zaXRpb24uCiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHBvcywgaGVhZCwgbWVtYmVyKSAJCQlcCi0JZm9yICg7IHByZWZldGNoKHBvcy0+bWVtYmVyLm5leHQpLCAmcG9zLT5tZW1iZXIgIT0gKGhlYWQpOwlcCisJZm9yICg7ICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7CVwKIAkgICAgIHBvcyA9IGxpc3RfZW50cnkocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQogCiAvKioKQEAgLTY2NCw4ICs2NjAsNyBAQAogI2RlZmluZSBobGlzdF9lbnRyeShwdHIsIHR5cGUsIG1lbWJlcikgY29udGFpbmVyX29mKHB0cix0eXBlLG1lbWJlcikKIAogI2RlZmluZSBobGlzdF9mb3JfZWFjaChwb3MsIGhlYWQpIFwKLQlmb3IgKHBvcyA9IChoZWFkKS0+Zmlyc3Q7IHBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxOyB9KTsgXAotCSAgICAgcG9zID0gcG9zLT5uZXh0KQorCWZvciAocG9zID0gKGhlYWQpLT5maXJzdDsgcG9zIDsgcG9zID0gcG9zLT5uZXh0KQogCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuLCBoZWFkKSBcCiAJZm9yIChwb3MgPSAoaGVhZCktPmZpcnN0OyBwb3MgJiYgKHsgbiA9IHBvcy0+bmV4dDsgMTsgfSk7IFwKQEAgLTY4MCw3ICs2NzUsNyBAQAogICovCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRwb3MsIHBvcywgaGVhZCwgbWVtYmVyKQkJCSBcCiAJZm9yIChwb3MgPSAoaGVhZCktPmZpcnN0OwkJCQkJIFwKLQkgICAgIHBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxO30pICYmCQkJIFwKKwkgICAgIHBvcyAmJgkJCQkJCQkgXAogCQkoeyB0cG9zID0gaGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKnRwb3MpLCBtZW1iZXIpOyAxO30pOyBcCiAJICAgICBwb3MgPSBwb3MtPm5leHQpCiAKQEAgLTY5Miw3ICs2ODcsNyBAQAogICovCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKHRwb3MsIHBvcywgbWVtYmVyKQkJIFwKIAlmb3IgKHBvcyA9IChwb3MpLT5uZXh0OwkJCQkJCSBcCi0JICAgICBwb3MgJiYgKHsgcHJlZmV0Y2gocG9zLT5uZXh0KTsgMTt9KSAmJgkJCSBcCisJICAgICBwb3MgJiYJCQkJCQkJIFwKIAkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTt9KTsgXAogCSAgICAgcG9zID0gcG9zLT5uZXh0KQogCkBAIC03MDMsNyArNjk4LDcgQEAKICAqIEBtZW1iZXI6CXRoZSBuYW1lIG9mIHRoZSBobGlzdF9ub2RlIHdpdGhpbiB0aGUgc3RydWN0LgogICovCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2Zyb20odHBvcywgcG9zLCBtZW1iZXIpCQkJIFwKLQlmb3IgKDsgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7fSkgJiYJCQkgXAorCWZvciAoOyBwb3MgJiYJCQkJCQkJIFwKIAkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTt9KTsgXAogCSAgICAgcG9zID0gcG9zLT5uZXh0KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3RfYmwuaCBiL2luY2x1ZGUvbGludXgvbGlzdF9ibC5oCmluZGV4IDViYWQxN2QuLjMxZjlkNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdF9ibC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdF9ibC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfTElOVVhfTElTVF9CTF9ICiAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvYml0X3NwaW5sb2NrLmg+CiAKIC8qCiAgKiBTcGVjaWFsIHZlcnNpb24gb2YgbGlzdHMsIHdoZXJlIGhlYWQgb2YgdGhlIGxpc3QgaGFzIGEgbG9jayBpbiB0aGUgbG93ZXN0CkBAIC0xMTQsNiArMTE1LDE2IEBACiAJfQogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaGxpc3RfYmxfbG9jayhzdHJ1Y3QgaGxpc3RfYmxfaGVhZCAqYikKK3sKKwliaXRfc3Bpbl9sb2NrKDAsICh1bnNpZ25lZCBsb25nICopYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBobGlzdF9ibF91bmxvY2soc3RydWN0IGhsaXN0X2JsX2hlYWQgKmIpCit7CisJX19iaXRfc3Bpbl91bmxvY2soMCwgKHVuc2lnbmVkIGxvbmcgKiliKTsKK30KKwogLyoqCiAgKiBobGlzdF9ibF9mb3JfZWFjaF9lbnRyeQktIGl0ZXJhdGUgb3ZlciBsaXN0IG9mIGdpdmVuIHR5cGUKICAqIEB0cG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L3BkYXRhLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvcGRhdGEuaAppbmRleCBhZmU0ZGI0Li42MzJkMTU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvcGRhdGEuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvcGRhdGEuaApAQCAtODEsNyArODEsOSBAQAogCWludCBycHU7ICAgICAgICAgICAgICAgLyoqIFBlbiBkb3duIHNlbnNpdGl2aXR5IHJlc2lzdG9yIGRpdmlkZXIgKi8KIAlpbnQgcHJlc3N1cmU7ICAgICAgICAgIC8qKiBSZXBvcnQgcHJlc3N1cmUgKGJvb2xlYW4pICovCiAJdW5zaWduZWQgaW50IGRhdGFfaXJxOyAvKiogVG91Y2ggZGF0YSByZWFkeSBJUlEgKi8KKwlpbnQgZGF0YV9pcnFmOyAgICAgICAgIC8qKiBJUlEgZmxhZ3MgZm9yIGRhdGEgcmVhZHkgSVJRICovCiAJdW5zaWduZWQgaW50IHBkX2lycTsgICAvKiogVG91Y2ggcGVuZG93biBkZXRlY3QgSVJRICovCisJaW50IHBkX2lycWY7ICAgICAgICAgICAvKiogSVJRIGZsYWdzIGZvciBwZW4gZG93biBJUlEgKi8KIH07CiAKIGVudW0gd204MzF4X3dhdGNoZG9nX2FjdGlvbiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tLmggYi9pbmNsdWRlL2xpbnV4L21tLmgKaW5kZXggNjkyZGJhZS4uNjUwN2RkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW0uaApAQCAtMTM3LDcgKzEzNyw4IEBACiAjZGVmaW5lIFZNX1JhbmRvbVJlYWRIaW50KHYpCQkoKHYpLT52bV9mbGFncyAmIFZNX1JBTkRfUkVBRCkKIAogLyoKLSAqIHNwZWNpYWwgdm1hcyB0aGF0IGFyZSBub24tbWVyZ2FibGUsIG5vbi1tbG9jaygpYWJsZQorICogU3BlY2lhbCB2bWFzIHRoYXQgYXJlIG5vbi1tZXJnYWJsZSwgbm9uLW1sb2NrKClhYmxlLgorICogTm90ZTogbW0vaHVnZV9tZW1vcnkuYyBWTV9OT19USFAgZGVwZW5kcyBvbiB0aGlzIGRlZmluaXRpb24uCiAgKi8KICNkZWZpbmUgVk1fU1BFQ0lBTCAoVk1fSU8gfCBWTV9ET05URVhQQU5EIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVApCiAKQEAgLTEwMTAsMTEgKzEwMTEsMzMgQEAKIGludCBjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIC8qIElzIHRoZSB2bWEgYSBjb250aW51YXRpb24gb2YgdGhlIHN0YWNrIHZtYSBhYm92ZSBpdD8gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZtYV9zdGFja19jb250aW51ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQorc3RhdGljIGlubGluZSBpbnQgdm1hX2dyb3dzZG93bihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXJldHVybiB2bWEgJiYgKHZtYS0+dm1fZW5kID09IGFkZHIpICYmICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc3RhY2tfZ3VhcmRfcGFnZV9zdGFydChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKSAmJgorCQkodm1hLT52bV9zdGFydCA9PSBhZGRyKSAmJgorCQkhdm1hX2dyb3dzZG93bih2bWEtPnZtX3ByZXYsIGFkZHIpOworfQorCisvKiBJcyB0aGUgdm1hIGEgY29udGludWF0aW9uIG9mIHRoZSBzdGFjayB2bWEgYmVsb3cgaXQ/ICovCitzdGF0aWMgaW5saW5lIGludCB2bWFfZ3Jvd3N1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXJldHVybiB2bWEgJiYgKHZtYS0+dm1fc3RhcnQgPT0gYWRkcikgJiYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU1VQKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3RhY2tfZ3VhcmRfcGFnZV9lbmQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU1VQKSAmJgorCQkodm1hLT52bV9lbmQgPT0gYWRkcikgJiYKKwkJIXZtYV9ncm93c3VwKHZtYS0+dm1fbmV4dCwgYWRkcik7Cit9CisKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1vdmVfcGFnZV90YWJsZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJCXVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqbmV3X3ZtYSwKIAkJdW5zaWduZWQgbG9uZyBuZXdfYWRkciwgdW5zaWduZWQgbG9uZyBsZW4pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNWRlNDIwNC4uZDljYTJkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC02NCw2ICs2NCw5IEBACiAJY29uc3QgY2hhciAqdmVyc2lvbjsKIH0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKHNpemVvZih2b2lkICopKSkpOwogCitleHRlcm4gc3NpemVfdCBfX21vZHZlcl92ZXJzaW9uX3Nob3coc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKiwKKwkJCQkgICAgIHN0cnVjdCBtb2R1bGUgKiwgY2hhciAqKTsKKwogc3RydWN0IG1vZHVsZV9rb2JqZWN0CiB7CiAJc3RydWN0IGtvYmplY3Qga29iajsKQEAgLTE3MiwxMiArMTc1LDcgQEAKICNkZWZpbmUgTU9EVUxFX1ZFUlNJT04oX3ZlcnNpb24pIE1PRFVMRV9JTkZPKHZlcnNpb24sIF92ZXJzaW9uKQogI2Vsc2UKICNkZWZpbmUgTU9EVUxFX1ZFUlNJT04oX3ZlcnNpb24pCQkJCQlcCi0JZXh0ZXJuIHNzaXplX3QgX19tb2R2ZXJfdmVyc2lvbl9zaG93KHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlICosCVwKLQkJCQkJICAgICBzdHJ1Y3QgbW9kdWxlICosIGNoYXIgKik7CVwKLQlzdGF0aWMgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSBfX21vZHZlcl92ZXJzaW9uX2F0dHIJXAotCV9fdXNlZAkJCQkJCQkJXAotICAgIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIl9fbW9kdmVyIiksYWxpZ25lZChzaXplb2Yodm9pZCAqKSkpKSBcCi0JPSB7CQkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgX19fbW9kdmVyX2F0dHIgPSB7CVwKIAkJLm1hdHRyCT0gewkJCQkJCVwKIAkJCS5hdHRyCT0gewkJCQkJXAogCQkJCS5uYW1lCT0gInZlcnNpb24iLAkJCVwKQEAgLTE4Nyw3ICsxODUsMTAgQEAKIAkJfSwJCQkJCQkJXAogCQkubW9kdWxlX25hbWUJPSBLQlVJTERfTU9ETkFNRSwJCQlcCiAJCS52ZXJzaW9uCT0gX3ZlcnNpb24sCQkJCVwKLQl9CisJfTsJCQkJCQkJCVwKKwlzdGF0aWMgY29uc3Qgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZQkJCVwKKwlfX3VzZWQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiX19tb2R2ZXIiKSkpCQlcCisJKiBfX21vZHVsZXBhcmFtX2NvbnN0IF9fbW9kdmVyX2F0dHIgPSAmX19fbW9kdmVyX2F0dHIKICNlbmRpZgogCiAvKiBPcHRpb25hbCBmaXJtd2FyZSBmaWxlIChvciBmaWxlcykgbmVlZGVkIGJ5IHRoZSBtb2R1bGUKQEAgLTIyMyw3ICsyMjQsNyBAQAogCWV4dGVybiB2b2lkICpfX2NyY18jI3N5bSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CQlcCiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgX19rY3JjdGFiXyMjc3ltCQlcCiAJX191c2VkCQkJCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2tjcmN0YWIiIHNlYyksIHVudXNlZCkpCVwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX19rY3JjdGFiIiBzZWMgIisiICNzeW0pLCB1bnVzZWQpKQlcCiAJPSAodW5zaWduZWQgbG9uZykgJl9fY3JjXyMjc3ltOwogI2Vsc2UKICNkZWZpbmUgX19DUkNfU1lNQk9MKHN5bSwgc2VjKQpAQCAtMjM4LDcgKzIzOSw3IEBACiAJPSBNT0RVTEVfU1lNQk9MX1BSRUZJWCAjc3ltOyAgICAgICAgICAgICAgICAgICAgCVwKIAlzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgX19rc3ltdGFiXyMjc3ltCVwKIAlfX3VzZWQJCQkJCQkJXAotCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fa3N5bXRhYiIgc2VjKSwgdW51c2VkKSkJXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fX2tzeW10YWIiIHNlYyAiKyIgI3N5bSksIHVudXNlZCkpCVwKIAk9IHsgKHVuc2lnbmVkIGxvbmcpJnN5bSwgX19rc3RydGFiXyMjc3ltIH0KIAogI2RlZmluZSBFWFBPUlRfU1lNQk9MKHN5bSkJCQkJCVwKQEAgLTM2NywzNCArMzY4LDM1IEBACiAJc3RydWN0IG1vZHVsZV9ub3Rlc19hdHRycyAqbm90ZXNfYXR0cnM7CiAjZW5kaWYKIAorCS8qIFRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIChtYXkgYmUgbWFuZ2xlZCkuICBQZW9wbGUgbGlrZQorCSAgIGtlZXBpbmcgcG9pbnRlcnMgdG8gdGhpcyBzdHVmZiAqLworCWNoYXIgKmFyZ3M7CisKICNpZmRlZiBDT05GSUdfU01QCiAJLyogUGVyLWNwdSBkYXRhLiAqLwogCXZvaWQgX19wZXJjcHUgKnBlcmNwdTsKIAl1bnNpZ25lZCBpbnQgcGVyY3B1X3NpemU7CiAjZW5kaWYKIAotCS8qIFRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnRzIChtYXkgYmUgbWFuZ2xlZCkuICBQZW9wbGUgbGlrZQotCSAgIGtlZXBpbmcgcG9pbnRlcnMgdG8gdGhpcyBzdHVmZiAqLwotCWNoYXIgKmFyZ3M7CiAjaWZkZWYgQ09ORklHX1RSQUNFUE9JTlRTCi0Jc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCAqdHJhY2Vwb2ludHNfcHRyczsKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlcG9pbnRzOworCXN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgKnRyYWNlcG9pbnRzX3B0cnM7CiAjZW5kaWYKICNpZmRlZiBIQVZFX0pVTVBfTEFCRUwKIAlzdHJ1Y3QganVtcF9lbnRyeSAqanVtcF9lbnRyaWVzOwogCXVuc2lnbmVkIGludCBudW1fanVtcF9lbnRyaWVzOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX1RSQUNJTkcKLQljb25zdCBjaGFyICoqdHJhY2VfYnByaW50a19mbXRfc3RhcnQ7CiAJdW5zaWduZWQgaW50IG51bV90cmFjZV9icHJpbnRrX2ZtdDsKKwljb25zdCBjaGFyICoqdHJhY2VfYnByaW50a19mbXRfc3RhcnQ7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRVZFTlRfVFJBQ0lORwogCXN0cnVjdCBmdHJhY2VfZXZlbnRfY2FsbCAqKnRyYWNlX2V2ZW50czsKIAl1bnNpZ25lZCBpbnQgbnVtX3RyYWNlX2V2ZW50czsKICNlbmRpZgogI2lmZGVmIENPTkZJR19GVFJBQ0VfTUNPVU5UX1JFQ09SRAotCXVuc2lnbmVkIGxvbmcgKmZ0cmFjZV9jYWxsc2l0ZXM7CiAJdW5zaWduZWQgaW50IG51bV9mdHJhY2VfY2FsbHNpdGVzOworCXVuc2lnbmVkIGxvbmcgKmZ0cmFjZV9jYWxsc2l0ZXM7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECkBAIC00NzUsOCArNDc3LDkgQEAKIAkJCQkJYm9vbCB3YXJuKTsKIAogLyogV2FsayB0aGUgZXhwb3J0ZWQgc3ltYm9sIHRhYmxlICovCi1ib29sIGVhY2hfc3ltYm9sKGJvb2wgKCpmbikoY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqYXJyLCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCSAgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7Citib29sIGVhY2hfc3ltYm9sX3NlY3Rpb24oYm9vbCAoKmZuKShjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICphcnIsCisJCQkJICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAorCQkJCSAgICB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSk7CiAKIC8qIFJldHVybnMgMCBhbmQgZmlsbHMgaW4gdmFsdWUsIGRlZmluZWQgYW5kIG5hbWVidWYsIG9yIC1FUkFOR0UgaWYKICAgIHN5bW51bSBvdXQgb2YgcmFuZ2UuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZXBhcmFtLmgKaW5kZXggMDdiNDE5NS4uZGRhYWU5OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGVwYXJhbS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlcGFyYW0uaApAQCAtNjcsOSArNjcsOSBAQAogc3RydWN0IGtwYXJhbV9hcnJheQogewogCXVuc2lnbmVkIGludCBtYXg7CisJdW5zaWduZWQgaW50IGVsZW1zaXplOwogCXVuc2lnbmVkIGludCAqbnVtOwogCWNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzICpvcHM7Ci0JdW5zaWduZWQgaW50IGVsZW1zaXplOwogCXZvaWQgKmVsZW07CiB9OwogCkBAIC0zNzEsOCArMzcxLDkgQEAKICAqLwogI2RlZmluZSBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQobmFtZSwgYXJyYXksIHR5cGUsIG51bXAsIHBlcm0pCQlcCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBrcGFyYW1fYXJyYXkgX19wYXJhbV9hcnJfIyNuYW1lCQlcCi0JPSB7IEFSUkFZX1NJWkUoYXJyYXkpLCBudW1wLCAmcGFyYW1fb3BzXyMjdHlwZSwJCQlcCi0JICAgIHNpemVvZihhcnJheVswXSksIGFycmF5IH07CQkJCQlcCisJPSB7IC5tYXggPSBBUlJBWV9TSVpFKGFycmF5KSwgLm51bSA9IG51bXAsICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgLm9wcyA9ICZwYXJhbV9vcHNfIyN0eXBlLAkJCQkJXAorCSAgICAuZWxlbXNpemUgPSBzaXplb2YoYXJyYXlbMF0pLCAuZWxlbSA9IGFycmF5IH07CQlcCiAJX19tb2R1bGVfcGFyYW1fY2FsbChNT0RVTEVfUEFSQU1fUFJFRklYLCBuYW1lLAkJCVwKIAkJCSAgICAmcGFyYW1fYXJyYXlfb3BzLAkJCQlcCiAJCQkgICAgLmFyciA9ICZfX3BhcmFtX2Fycl8jI25hbWUsCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdXRleC5oIGIvaW5jbHVkZS9saW51eC9tdXRleC5oCmluZGV4IDk0YjQ4YmQuLmM3NTQ3MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXV0ZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L211dGV4LmgKQEAgLTUxLDcgKzUxLDcgQEAKIAlzcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7CiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfTVVURVhFUykgfHwgZGVmaW5lZChDT05GSUdfU01QKQotCXN0cnVjdCB0aHJlYWRfaW5mbwkqb3duZXI7CisJc3RydWN0IHRhc2tfc3RydWN0CSpvd25lcjsKICNlbmRpZgogI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCiAJY29uc3QgY2hhciAJCSpuYW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKaW5kZXggMjE2Y2VhNS4uODc2OTRjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCkBAIC00Nyw2ICs0Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfTkZTX1Y0CiAJdTY0CQkJY2xfY2xpZW50aWQ7CS8qIGNvbnN0YW50ICovCisJbmZzNF92ZXJpZmllcgkJY2xfY29uZmlybTsJLyogQ2xpZW50aWQgdmVyaWZpZXIgKi8KIAl1bnNpZ25lZCBsb25nCQljbF9zdGF0ZTsKIAogCXNwaW5sb2NrX3QJCWNsX2xvY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaCBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCmluZGV4IDc4YjEwMWUuLjdlMzcxZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvbmZzX3hkci5oCkBAIC01MCw2ICs1MCw3IEBACiAJfSBkdTsKIAlzdHJ1Y3QgbmZzX2ZzaWQJCWZzaWQ7CiAJX191NjQJCQlmaWxlaWQ7CisJX191NjQJCQltb3VudGVkX29uX2ZpbGVpZDsKIAlzdHJ1Y3QgdGltZXNwZWMJCWF0aW1lOwogCXN0cnVjdCB0aW1lc3BlYwkJbXRpbWU7CiAJc3RydWN0IHRpbWVzcGVjCQljdGltZTsKQEAgLTgzLDYgKzg0LDcgQEAKICNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfUFJFQ0hBTkdFCSgxVSA8PCAxOCkKICNkZWZpbmUgTkZTX0FUVFJfRkFUVFJfVjRfUkVGRVJSQUwJKDFVIDw8IDE5KQkvKiBORlN2NCByZWZlcnJhbCAqLwogI2RlZmluZSBORlNfQVRUUl9GQVRUUl9NT1VOVFBPSU5UCSgxVSA8PCAyMCkJLyogVHJlYXQgYXMgbW91bnRwb2ludCAqLworI2RlZmluZSBORlNfQVRUUl9GQVRUUl9NT1VOVEVEX09OX0ZJTEVJRAkJKDFVIDw8IDIxKQogCiAjZGVmaW5lIE5GU19BVFRSX0ZBVFRSIChORlNfQVRUUl9GQVRUUl9UWVBFIFwKIAkJfCBORlNfQVRUUl9GQVRUUl9NT0RFIFwKQEAgLTIzMSw2ICsyMzMsNyBAQAogCXN0cnVjdCBuZnM0X2xheW91dGdldF9hcmdzIGFyZ3M7CiAJc3RydWN0IG5mczRfbGF5b3V0Z2V0X3JlcyByZXM7CiAJc3RydWN0IHBuZnNfbGF5b3V0X3NlZ21lbnQgKipsc2VncHA7CisJZ2ZwX3QgZ2ZwX2ZsYWdzOwogfTsKIAogc3RydWN0IG5mczRfZ2V0ZGV2aWNlaW5mb19hcmdzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvb2ZfZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L29mX2RldmljZS5oCmluZGV4IDhiZmU2YzEuLmFlNTYzODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvb2ZfZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9vZl9kZXZpY2UuaApAQCAtMjEsOCArMjEsNyBAQAogc3RhdGljIGlubGluZSBpbnQgb2ZfZHJpdmVyX21hdGNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkJCSBjb25zdCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCWRldi0+b2ZfbWF0Y2ggPSBvZl9tYXRjaF9kZXZpY2UoZHJ2LT5vZl9tYXRjaF90YWJsZSwgZGV2KTsKLQlyZXR1cm4gZGV2LT5vZl9tYXRjaCAhPSBOVUxMOworCXJldHVybiBvZl9tYXRjaF9kZXZpY2UoZHJ2LT5vZl9tYXRjaF90YWJsZSwgZGV2KSAhPSBOVUxMOwogfQogCiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqb2ZfZGV2X2dldChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpOwpAQCAtNTgsNiArNTcsMTEgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG9mX2RldmljZV9ub2RlX3B1dChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgfQogCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm9mX21hdGNoX2RldmljZSgKKwkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2hlcywgY29uc3Qgc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBOVUxMOworfQogI2VuZGlmIC8qIENPTkZJR19PRl9ERVZJQ0UgKi8KIAogI2VuZGlmIC8qIF9MSU5VWF9PRl9ERVZJQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktYXRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1hdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTU4MjRmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktYXRzLmgKQEAgLTAsMCArMSw1MiBAQAorI2lmbmRlZiBMSU5VWF9QQ0lfQVRTX0gKKyNkZWZpbmUgTElOVVhfUENJX0FUU19ICisKKy8qIEFkZHJlc3MgVHJhbnNsYXRpb24gU2VydmljZSAqLworc3RydWN0IHBjaV9hdHMgeworCWludCBwb3M7ICAgICAgICAvKiBjYXBhYmlsaXR5IHBvc2l0aW9uICovCisJaW50IHN0dTsgICAgICAgIC8qIFNtYWxsZXN0IFRyYW5zbGF0aW9uIFVuaXQgKi8KKwlpbnQgcWRlcDsgICAgICAgLyogSW52YWxpZGF0ZSBRdWV1ZSBEZXB0aCAqLworCWludCByZWZfY250OyAgICAvKiBQaHlzaWNhbCBGdW5jdGlvbiByZWZlcmVuY2UgY291bnQgKi8KKwl1bnNpZ25lZCBpbnQgaXNfZW5hYmxlZDoxOyAgICAgIC8qIEVuYWJsZSBiaXQgaXMgc2V0ICovCit9OworCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKworZXh0ZXJuIGludCBwY2lfZW5hYmxlX2F0cyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcHMpOworZXh0ZXJuIHZvaWQgcGNpX2Rpc2FibGVfYXRzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGludCBwY2lfYXRzX3F1ZXVlX2RlcHRoKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworLyoqCisgKiBwY2lfYXRzX2VuYWJsZWQgLSBxdWVyeSB0aGUgQVRTIHN0YXR1cworICogQGRldjogdGhlIFBDSSBkZXZpY2UKKyAqCisgKiBSZXR1cm5zIDEgaWYgQVRTIGNhcGFiaWxpdHkgaXMgZW5hYmxlZCwgb3IgMCBpZiBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9hdHNfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBkZXYtPmF0cyAmJiBkZXYtPmF0cy0+aXNfZW5hYmxlZDsKK30KKworI2Vsc2UgLyogQ09ORklHX1BDSV9JT1YgKi8KKworc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9hdHMoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBzKQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2Rpc2FibGVfYXRzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9hdHNfcXVldWVfZGVwdGgoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGNpX2F0c19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLworCisjZW5kaWYgLyogTElOVVhfUENJX0FUU19IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggNGUyYzkxNS4uOGFiZThkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTI0NzcsMTUgKzI0NzcsMTIgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0MF9IQgkweDFhMjEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NV9IQgkweDFhMzAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUCTB4MWEzOAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX1NNQlVTCTB4MWMyMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NPVUdBUlBPSU5UX0xQQ19NSU4JMHgxYzQxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfQ09VR0FSUE9JTlRfTFBDX01BWAkweDFjNWYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19TTUJVUwkweDFkMjIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19MUENfMAkweDFkNDAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QQVRTQlVSR19MUENfMQkweDFkNDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9ESDg5WFhDQ19MUENfTUlOCTB4MjMxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0RIODlYWENDX0xQQ19NQVgJMHgyMzFmCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfREg4OVhYQ0NfU01CVVMJMHgyMzMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8wCTB4MjQxMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMQkweDI0MTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzMJMHgyNDEzCkBAIC0yNjk2LDcgKzI2OTMsNiBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzUJMHgzYTYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNV8zNDAwX1NFUklFU19MUENfTUlOCTB4M2IwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzVfMzQwMF9TRVJJRVNfTFBDX01BWAkweDNiMWYKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF81XzM0MDBfU0VSSUVTX1NNQlVTCTB4M2IzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lPQVRfU05CCTB4NDAyZgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzUxMDBfMTYJMHg2NWYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfNTEwMF8yMQkweDY1ZjUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCmluZGV4IDNhNWM0NDQuLjhiOTczMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHUuaApAQCAtOTQ4LDcgKzk0OCw3IEBACiAJaXJxc2FmZV9nZW5lcmljX2NwdV9jbXB4Y2hnX2RvdWJsZShwY3AxLCBwY3AyLCBvdmFsMSwgb3ZhbDIsIG52YWwxLCBudmFsMikKICMgZW5kaWYKICMgZGVmaW5lIGlycXNhZmVfY3B1X2NtcHhjaGdfZG91YmxlKHBjcDEsIHBjcDIsIG92YWwxLCBvdmFsMiwgbnZhbDEsIG52YWwyKQlcCi0JX19wY3B1X2RvdWJsZV9jYWxsX3JldHVybl9pbnQoaXJxc2FmZV9jcHVfY21weGNoZ19kb3VibGVfLCAocGNwMSksIChwY3AyKSwgKG92YWwxKSwgKG92YWwyKSwgKG52YWwxKSwgKG52YWwyKSkKKwlfX3BjcHVfZG91YmxlX2NhbGxfcmV0dXJuX2Jvb2woaXJxc2FmZV9jcHVfY21weGNoZ19kb3VibGVfLCAocGNwMSksIChwY3AyKSwgKG92YWwxKSwgKG92YWwyKSwgKG52YWwxKSwgKG52YWwyKSkKICNlbmRpZgogCiAjZW5kaWYgLyogX19MSU5VWF9QRVJDUFVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmggYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAppbmRleCBlZTlmMWU3Li4zNDEyNjg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BlcmZfZXZlbnQuaApAQCAtMiw4ICsyLDggQEAKICAqIFBlcmZvcm1hbmNlIGV2ZW50czoKICAqCiAgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgVGhvbWFzIEdsZWl4bmVyIDx0Z2x4QGxpbnV0cm9uaXguZGU+Ci0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSwgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKLSAqICAgIENvcHlyaWdodCAoQykgMjAwOC0yMDA5LCBSZWQgSGF0LCBJbmMuLCBQZXRlciBaaWpsc3RyYQorICogICAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEsIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMSwgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEKICAqCiAgKiBEYXRhIHR5cGUgZGVmaW5pdGlvbnMsIGRlY2xhcmF0aW9ucywgcHJvdG90eXBlcy4KICAqCkBAIC01Miw2ICs1Miw4IEBACiAJUEVSRl9DT1VOVF9IV19CUkFOQ0hfSU5TVFJVQ1RJT05TCT0gNCwKIAlQRVJGX0NPVU5UX0hXX0JSQU5DSF9NSVNTRVMJCT0gNSwKIAlQRVJGX0NPVU5UX0hXX0JVU19DWUNMRVMJCT0gNiwKKwlQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0ZST05URU5ECT0gNywKKwlQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0JBQ0tFTkQJPSA4LAogCiAJUEVSRl9DT1VOVF9IV19NQVgsCQkJLyogbm9uLUFCSSAqLwogfTsKQEAgLTQ2OCw5ICs0NzAsOSBAQAogCVBFUkZfQ09OVEVYVF9NQVgJCT0gKF9fdTY0KS00MDk1LAogfTsKIAotI2RlZmluZSBQRVJGX0ZMQUdfRkRfTk9fR1JPVVAJKDFVIDw8IDApCi0jZGVmaW5lIFBFUkZfRkxBR19GRF9PVVRQVVQJKDFVIDw8IDEpCi0jZGVmaW5lIFBFUkZfRkxBR19QSURfQ0dST1VQCSgxVSA8PCAyKSAvKiBwaWQ9Y2dyb3VwIGlkLCBwZXItY3B1IG1vZGUgb25seSAqLworI2RlZmluZSBQRVJGX0ZMQUdfRkRfTk9fR1JPVVAJCSgxVSA8PCAwKQorI2RlZmluZSBQRVJGX0ZMQUdfRkRfT1VUUFVUCQkoMVUgPDwgMSkKKyNkZWZpbmUgUEVSRl9GTEFHX1BJRF9DR1JPVVAJCSgxVSA8PCAyKSAvKiBwaWQ9Y2dyb3VwIGlkLCBwZXItY3B1IG1vZGUgb25seSAqLwogCiAjaWZkZWYgX19LRVJORUxfXwogLyoKQEAgLTQ4NCw5ICs0ODYsOSBAQAogI2VuZGlmCiAKIHN0cnVjdCBwZXJmX2d1ZXN0X2luZm9fY2FsbGJhY2tzIHsKLQlpbnQgKCppc19pbl9ndWVzdCkgKHZvaWQpOwotCWludCAoKmlzX3VzZXJfbW9kZSkgKHZvaWQpOwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfZ3Vlc3RfaXApICh2b2lkKTsKKwlpbnQJCQkJKCppc19pbl9ndWVzdCkodm9pZCk7CisJaW50CQkJCSgqaXNfdXNlcl9tb2RlKSh2b2lkKTsKKwl1bnNpZ25lZCBsb25nCQkJKCpnZXRfZ3Vlc3RfaXApKHZvaWQpOwogfTsKIAogI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKQEAgLTUwNSw3ICs1MDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycV93b3JrLmg+Ci0jaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbF9yZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogCkBAIC02NTIsMTkgKzY1NCwxOSBAQAogCSAqIFN0YXJ0IHRoZSB0cmFuc2FjdGlvbiwgYWZ0ZXIgdGhpcyAtPmFkZCgpIGRvZXNuJ3QgbmVlZCB0bwogCSAqIGRvIHNjaGVkdWxhYmlsaXR5IHRlc3RzLgogCSAqLwotCXZvaWQgKCpzdGFydF90eG4pCShzdHJ1Y3QgcG11ICpwbXUpOyAvKiBvcHRpb25hbCAqLworCXZvaWQgKCpzdGFydF90eG4pCQkoc3RydWN0IHBtdSAqcG11KTsgLyogb3B0aW9uYWwgKi8KIAkvKgogCSAqIElmIC0+c3RhcnRfdHhuKCkgZGlzYWJsZWQgdGhlIC0+YWRkKCkgc2NoZWR1bGFiaWxpdHkgdGVzdAogCSAqIHRoZW4gLT5jb21taXRfdHhuKCkgaXMgcmVxdWlyZWQgdG8gcGVyZm9ybSBvbmUuIE9uIHN1Y2Nlc3MKIAkgKiB0aGUgdHJhbnNhY3Rpb24gaXMgY2xvc2VkLiBPbiBlcnJvciB0aGUgdHJhbnNhY3Rpb24gaXMga2VwdAogCSAqIG9wZW4gdW50aWwgLT5jYW5jZWxfdHhuKCkgaXMgY2FsbGVkLgogCSAqLwotCWludCAgKCpjb21taXRfdHhuKQkoc3RydWN0IHBtdSAqcG11KTsgLyogb3B0aW9uYWwgKi8KKwlpbnQgICgqY29tbWl0X3R4bikJCShzdHJ1Y3QgcG11ICpwbXUpOyAvKiBvcHRpb25hbCAqLwogCS8qCiAJICogV2lsbCBjYW5jZWwgdGhlIHRyYW5zYWN0aW9uLCBhc3N1bWVzIC0+ZGVsKCkgaXMgY2FsbGVkCiAJICogZm9yIGVhY2ggc3VjY2Vzc2Z1bCAtPmFkZCgpIGR1cmluZyB0aGUgdHJhbnNhY3Rpb24uCiAJICovCi0Jdm9pZCAoKmNhbmNlbF90eG4pCShzdHJ1Y3QgcG11ICpwbXUpOyAvKiBvcHRpb25hbCAqLworCXZvaWQgKCpjYW5jZWxfdHhuKQkJKHN0cnVjdCBwbXUgKnBtdSk7IC8qIG9wdGlvbmFsICovCiB9OwogCiAvKioKQEAgLTcxMiwxNSArNzE0LDE1IEBACiAJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogZW51bSBwZXJmX2dyb3VwX2ZsYWcgewotCVBFUkZfR1JPVVBfU09GVFdBUkUgPSAweDEsCisJUEVSRl9HUk9VUF9TT0ZUV0FSRQkJPSAweDEsCiB9OwogCi0jZGVmaW5lIFNXRVZFTlRfSExJU1RfQklUUwk4Ci0jZGVmaW5lIFNXRVZFTlRfSExJU1RfU0laRQkoMSA8PCBTV0VWRU5UX0hMSVNUX0JJVFMpCisjZGVmaW5lIFNXRVZFTlRfSExJU1RfQklUUwkJOAorI2RlZmluZSBTV0VWRU5UX0hMSVNUX1NJWkUJCSgxIDw8IFNXRVZFTlRfSExJU1RfQklUUykKIAogc3RydWN0IHN3ZXZlbnRfaGxpc3QgewotCXN0cnVjdCBobGlzdF9oZWFkCWhlYWRzW1NXRVZFTlRfSExJU1RfU0laRV07Ci0Jc3RydWN0IHJjdV9oZWFkCQlyY3VfaGVhZDsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAkJaGVhZHNbU1dFVkVOVF9ITElTVF9TSVpFXTsKKwlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3VfaGVhZDsKIH07CiAKICNkZWZpbmUgUEVSRl9BVFRBQ0hfQ09OVEVYVAkweDAxCkBAIC03MzMsMTMgKzczNSwxMyBAQAogICogVGhpcyBpcyBhIHBlci1jcHUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGRhdGEgc3RydWN0dXJlLgogICovCiBzdHJ1Y3QgcGVyZl9jZ3JvdXBfaW5mbyB7Ci0JdTY0IHRpbWU7Ci0JdTY0IHRpbWVzdGFtcDsKKwl1NjQJCQkJdGltZTsKKwl1NjQJCQkJdGltZXN0YW1wOwogfTsKIAogc3RydWN0IHBlcmZfY2dyb3VwIHsKLQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7Ci0Jc3RydWN0IHBlcmZfY2dyb3VwX2luZm8gKmluZm87CS8qIHRpbWluZyBpbmZvLCBvbmUgcGVyIGNwdSAqLworCXN0cnVjdAkJCQljZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKKwlzdHJ1Y3QJCQkJcGVyZl9jZ3JvdXBfaW5mbyAqaW5mbzsJLyogdGltaW5nIGluZm8sIG9uZSBwZXIgY3B1ICovCiB9OwogI2VuZGlmCiAKQEAgLTkyMyw3ICs5MjUsNyBAQAogCiAvKgogICogTnVtYmVyIG9mIGNvbnRleHRzIHdoZXJlIGFuIGV2ZW50IGNhbiB0cmlnZ2VyOgotICogCXRhc2ssIHNvZnRpcnEsIGhhcmRpcnEsIG5taS4KKyAqCXRhc2ssIHNvZnRpcnEsIGhhcmRpcnEsIG5taS4KICAqLwogI2RlZmluZSBQRVJGX05SX0NPTlRFWFRTCTQKIApAQCAtMTAwMSw4ICsxMDAzLDcgQEAKIAlzdHJ1Y3QgcGVyZl9yYXdfcmVjb3JkCQkqcmF3OwogfTsKIAotc3RhdGljIGlubGluZQotdm9pZCBwZXJmX3NhbXBsZV9kYXRhX2luaXQoc3RydWN0IHBlcmZfc2FtcGxlX2RhdGEgKmRhdGEsIHU2NCBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIHBlcmZfc2FtcGxlX2RhdGFfaW5pdChzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSAqZGF0YSwgdTY0IGFkZHIpCiB7CiAJZGF0YS0+YWRkciA9IGFkZHI7CiAJZGF0YS0+cmF3ICA9IE5VTEw7CkBAIC0xMDM0LDEzICsxMDM1LDEyIEBACiAJcmV0dXJuIGV2ZW50LT5wbXUtPnRhc2tfY3R4X25yID09IHBlcmZfc3dfY29udGV4dDsKIH0KIAotZXh0ZXJuIGF0b21pY190IHBlcmZfc3dldmVudF9lbmFibGVkW1BFUkZfQ09VTlRfU1dfTUFYXTsKK2V4dGVybiBzdHJ1Y3QganVtcF9sYWJlbF9rZXkgcGVyZl9zd2V2ZW50X2VuYWJsZWRbUEVSRl9DT1VOVF9TV19NQVhdOwogCiBleHRlcm4gdm9pZCBfX3BlcmZfc3dfZXZlbnQodTMyLCB1NjQsIGludCwgc3RydWN0IHB0X3JlZ3MgKiwgdTY0KTsKIAogI2lmbmRlZiBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3MKLXN0YXRpYyBpbmxpbmUgdm9pZAotcGVyZl9hcmNoX2ZldGNoX2NhbGxlcl9yZWdzKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGlwKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2FyY2hfZmV0Y2hfY2FsbGVyX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgaXApIHsgfQogI2VuZGlmCiAKIC8qCkBAIC0xMDYzLDI2ICsxMDYzLDI0IEBACiB7CiAJc3RydWN0IHB0X3JlZ3MgaG90X3JlZ3M7CiAKLQlKVU1QX0xBQkVMKCZwZXJmX3N3ZXZlbnRfZW5hYmxlZFtldmVudF9pZF0sIGhhdmVfZXZlbnQpOwotCXJldHVybjsKLQotaGF2ZV9ldmVudDoKLQlpZiAoIXJlZ3MpIHsKLQkJcGVyZl9mZXRjaF9jYWxsZXJfcmVncygmaG90X3JlZ3MpOwotCQlyZWdzID0gJmhvdF9yZWdzOworCWlmIChzdGF0aWNfYnJhbmNoKCZwZXJmX3N3ZXZlbnRfZW5hYmxlZFtldmVudF9pZF0pKSB7CisJCWlmICghcmVncykgeworCQkJcGVyZl9mZXRjaF9jYWxsZXJfcmVncygmaG90X3JlZ3MpOworCQkJcmVncyA9ICZob3RfcmVnczsKKwkJfQorCQlfX3BlcmZfc3dfZXZlbnQoZXZlbnRfaWQsIG5yLCBubWksIHJlZ3MsIGFkZHIpOwogCX0KLQlfX3BlcmZfc3dfZXZlbnQoZXZlbnRfaWQsIG5yLCBubWksIHJlZ3MsIGFkZHIpOwogfQogCi1leHRlcm4gYXRvbWljX3QgcGVyZl9zY2hlZF9ldmVudHM7CitleHRlcm4gc3RydWN0IGp1bXBfbGFiZWxfa2V5IHBlcmZfc2NoZWRfZXZlbnRzOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX2luKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQlDT05EX1NUTVQoJnBlcmZfc2NoZWRfZXZlbnRzLCBfX3BlcmZfZXZlbnRfdGFza19zY2hlZF9pbih0YXNrKSk7CisJaWYgKHN0YXRpY19icmFuY2goJnBlcmZfc2NoZWRfZXZlbnRzKSkKKwkJX19wZXJmX2V2ZW50X3Rhc2tfc2NoZWRfaW4odGFzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLXZvaWQgcGVyZl9ldmVudF90YXNrX3NjaGVkX291dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV4dCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBwZXJmX2V2ZW50X3Rhc2tfc2NoZWRfb3V0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogewogCXBlcmZfc3dfZXZlbnQoUEVSRl9DT1VOVF9TV19DT05URVhUX1NXSVRDSEVTLCAxLCAxLCBOVUxMLCAwKTsKIApAQCAtMTEwMCwxNCArMTA5OCwxMCBAQAogLyogQ2FsbGNoYWlucyAqLwogREVDTEFSRV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSwgcGVyZl9jYWxsY2hhaW5fZW50cnkpOwogCi1leHRlcm4gdm9pZCBwZXJmX2NhbGxjaGFpbl91c2VyKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnksCi0JCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHZvaWQgcGVyZl9jYWxsY2hhaW5fa2VybmVsKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnksCi0JCQkJICBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CitleHRlcm4gdm9pZCBwZXJmX2NhbGxjaGFpbl91c2VyKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSAqZW50cnksIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHBlcmZfY2FsbGNoYWluX2tlcm5lbChzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKLQotc3RhdGljIGlubGluZSB2b2lkCi1wZXJmX2NhbGxjaGFpbl9zdG9yZShzdHJ1Y3QgcGVyZl9jYWxsY2hhaW5fZW50cnkgKmVudHJ5LCB1NjQgaXApCitzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9jYWxsY2hhaW5fc3RvcmUoc3RydWN0IHBlcmZfY2FsbGNoYWluX2VudHJ5ICplbnRyeSwgdTY0IGlwKQogewogCWlmIChlbnRyeS0+bnIgPCBQRVJGX01BWF9TVEFDS19ERVBUSCkKIAkJZW50cnktPmlwW2VudHJ5LT5ucisrXSA9IGlwOwpAQCAtMTE0Myw5ICsxMTM3LDkgQEAKIGV4dGVybiB2b2lkIHBlcmZfYnBfZXZlbnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB2b2lkICpkYXRhKTsKIAogI2lmbmRlZiBwZXJmX21pc2NfZmxhZ3MKLSNkZWZpbmUgcGVyZl9taXNjX2ZsYWdzKHJlZ3MpCSh1c2VyX21vZGUocmVncykgPyBQRVJGX1JFQ09SRF9NSVNDX1VTRVIgOiBcCi0JCQkJIFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKQotI2RlZmluZSBwZXJmX2luc3RydWN0aW9uX3BvaW50ZXIocmVncykJaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQorIyBkZWZpbmUgcGVyZl9taXNjX2ZsYWdzKHJlZ3MpIFwKKwkJKHVzZXJfbW9kZShyZWdzKSA/IFBFUkZfUkVDT1JEX01JU0NfVVNFUiA6IFBFUkZfUkVDT1JEX01JU0NfS0VSTkVMKQorIyBkZWZpbmUgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCWluc3RydWN0aW9uX3BvaW50ZXIocmVncykKICNlbmRpZgogCiBleHRlcm4gaW50IHBlcmZfb3V0cHV0X2JlZ2luKHN0cnVjdCBwZXJmX291dHB1dF9oYW5kbGUgKmhhbmRsZSwKQEAgLTExODAsOSArMTE3NCw5IEBACiBwZXJmX2JwX2V2ZW50KHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCwgdm9pZCAqZGF0YSkJCQl7IH0KIAogc3RhdGljIGlubGluZSBpbnQgcGVyZl9yZWdpc3Rlcl9ndWVzdF9pbmZvX2NhbGxiYWNrcwotKHN0cnVjdCBwZXJmX2d1ZXN0X2luZm9fY2FsbGJhY2tzICpjYWxsYmFja3MpIHsgcmV0dXJuIDA7IH0KKyhzdHJ1Y3QgcGVyZl9ndWVzdF9pbmZvX2NhbGxiYWNrcyAqY2FsbGJhY2tzKQkJCQl7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBwZXJmX3VucmVnaXN0ZXJfZ3Vlc3RfaW5mb19jYWxsYmFja3MKLShzdHJ1Y3QgcGVyZl9ndWVzdF9pbmZvX2NhbGxiYWNrcyAqY2FsbGJhY2tzKSB7IHJldHVybiAwOyB9Cisoc3RydWN0IHBlcmZfZ3Vlc3RfaW5mb19jYWxsYmFja3MgKmNhbGxiYWNrcykJCQkJeyByZXR1cm4gMDsgfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9tbWFwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF9jb21tKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQkJeyB9CkBAIC0xMTk1LDIzICsxMTg5LDIyIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcGVyZl9ldmVudF90YXNrX3RpY2sodm9pZCkJCQkJeyB9CiAjZW5kaWYKIAotI2RlZmluZSBwZXJmX291dHB1dF9wdXQoaGFuZGxlLCB4KSBcCi0JcGVyZl9vdXRwdXRfY29weSgoaGFuZGxlKSwgJih4KSwgc2l6ZW9mKHgpKQorI2RlZmluZSBwZXJmX291dHB1dF9wdXQoaGFuZGxlLCB4KSBwZXJmX291dHB1dF9jb3B5KChoYW5kbGUpLCAmKHgpLCBzaXplb2YoeCkpCiAKIC8qCiAgKiBUaGlzIGhhcyB0byBoYXZlIGEgaGlnaGVyIHByaW9yaXR5IHRoYW4gbWlncmF0aW9uX25vdGlmaWVyIGluIHNjaGVkLmMuCiAgKi8KLSNkZWZpbmUgcGVyZl9jcHVfbm90aWZpZXIoZm4pCQkJCQlcCi1kbyB7CQkJCQkJCQlcCi0Jc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmbiMjX25iIF9fY3B1aW5pdGRhdGEgPQlcCi0JCXsgLm5vdGlmaWVyX2NhbGwgPSBmbiwgLnByaW9yaXR5ID0gQ1BVX1BSSV9QRVJGIH07IFwKLQlmbigmZm4jI19uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX1VQX1BSRVBBUkUsCQlcCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsJXAotCWZuKCZmbiMjX25iLCAodW5zaWduZWQgbG9uZylDUFVfU1RBUlRJTkcsCQlcCi0JCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpc21wX3Byb2Nlc3Nvcl9pZCgpKTsJXAotCWZuKCZmbiMjX25iLCAodW5zaWduZWQgbG9uZylDUFVfT05MSU5FLAkJCVwKLQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwlcCi0JcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZmbiMjX25iKTsJCQlcCisjZGVmaW5lIHBlcmZfY3B1X25vdGlmaWVyKGZuKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmbiMjX25iIF9fY3B1aW5pdGRhdGEgPQkJXAorCQl7IC5ub3RpZmllcl9jYWxsID0gZm4sIC5wcmlvcml0eSA9IENQVV9QUklfUEVSRiB9OwlcCisJZm4oJmZuIyNfbmIsICh1bnNpZ25lZCBsb25nKUNQVV9VUF9QUkVQQVJFLAkJCVwKKwkJKHZvaWQgKikodW5zaWduZWQgbG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwkJXAorCWZuKCZmbiMjX25iLCAodW5zaWduZWQgbG9uZylDUFVfU1RBUlRJTkcsCQkJXAorCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7CQlcCisJZm4oJmZuIyNfbmIsICh1bnNpZ25lZCBsb25nKUNQVV9PTkxJTkUsCQkJCVwKKwkJKHZvaWQgKikodW5zaWduZWQgbG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOwkJXAorCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmZm4jI19uYik7CQkJCVwKIH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BpZC5oIGIvaW5jbHVkZS9saW51eC9waWQuaAppbmRleCAzMWFmYjdlLi5jZGNlZDg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BpZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGlkLmgKQEAgLTExNyw3ICsxMTcsNyBAQAogICovCiBleHRlcm4gc3RydWN0IHBpZCAqZmluZF9nZXRfcGlkKGludCBucik7CiBleHRlcm4gc3RydWN0IHBpZCAqZmluZF9nZV9waWQoaW50IG5yLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqKTsKLWludCBuZXh0X3BpZG1hcChzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqcGlkX25zLCBpbnQgbGFzdCk7CitpbnQgbmV4dF9waWRtYXAoc3RydWN0IHBpZF9uYW1lc3BhY2UgKnBpZF9ucywgdW5zaWduZWQgaW50IGxhc3QpOwogCiBleHRlcm4gc3RydWN0IHBpZCAqYWxsb2NfcGlkKHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyk7CiBleHRlcm4gdm9pZCBmcmVlX3BpZChzdHJ1Y3QgcGlkICpwaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggNzQ0OTQyYy4uZWRlMWE4MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC0xNTAsOSArMTUwLDYgQEAKIAkJCQkJc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGludCBuX3JlcywKIAkJCQkJY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUpOwogCi1leHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKiBwbGF0Zm9ybV9idXNfZ2V0X3BtX29wcyh2b2lkKTsKLWV4dGVybiB2b2lkIHBsYXRmb3JtX2J1c19zZXRfcG1fb3BzKGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSk7Ci0KIC8qIGVhcmx5IHBsYXRmb3JtIGRyaXZlciBpbnRlcmZhY2UgKi8KIHN0cnVjdCBlYXJseV9wbGF0Zm9ybV9kcml2ZXIgewogCWNvbnN0IGNoYXIgKmNsYXNzX3N0cjsKQEAgLTIwNSw0ICsyMDIsNjQgQEAKIH0KICNlbmRpZiAvKiBNT0RVTEUgKi8KIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV9wcmVwYXJlKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwbGF0Zm9ybV9wbV9jb21wbGV0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworI2Vsc2UKKyNkZWZpbmUgcGxhdGZvcm1fcG1fcHJlcGFyZQlOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX2NvbXBsZXRlCU5VTEwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1NVU1BFTkQKK2V4dGVybiBpbnQgcGxhdGZvcm1fcG1fc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV9zdXNwZW5kX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBsYXRmb3JtX3BtX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KTsKKyNlbHNlCisjZGVmaW5lIHBsYXRmb3JtX3BtX3N1c3BlbmQJCU5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fcmVzdW1lCQlOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX3N1c3BlbmRfbm9pcnEJTlVMTAorI2RlZmluZSBwbGF0Zm9ybV9wbV9yZXN1bWVfbm9pcnEJTlVMTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSElCRVJOQVRFX0NBTExCQUNLUworZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV9mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fcG1fZnJlZXplX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBsYXRmb3JtX3BtX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcGxhdGZvcm1fcG1fdGhhd19ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV9wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbGF0Zm9ybV9wbV9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KTsKKyNlbHNlCisjZGVmaW5lIHBsYXRmb3JtX3BtX2ZyZWV6ZQkJTlVMTAorI2RlZmluZSBwbGF0Zm9ybV9wbV90aGF3CQlOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmCQlOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX3Jlc3RvcmUJCU5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fZnJlZXplX25vaXJxCU5VTEwKKyNkZWZpbmUgcGxhdGZvcm1fcG1fdGhhd19ub2lycQkJTlVMTAorI2RlZmluZSBwbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycQlOVUxMCisjZGVmaW5lIHBsYXRmb3JtX3BtX3Jlc3RvcmVfbm9pcnEJTlVMTAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKyNkZWZpbmUgVVNFX1BMQVRGT1JNX1BNX1NMRUVQX09QUyBcCisJLnByZXBhcmUgPSBwbGF0Zm9ybV9wbV9wcmVwYXJlLCBcCisJLmNvbXBsZXRlID0gcGxhdGZvcm1fcG1fY29tcGxldGUsIFwKKwkuc3VzcGVuZCA9IHBsYXRmb3JtX3BtX3N1c3BlbmQsIFwKKwkucmVzdW1lID0gcGxhdGZvcm1fcG1fcmVzdW1lLCBcCisJLmZyZWV6ZSA9IHBsYXRmb3JtX3BtX2ZyZWV6ZSwgXAorCS50aGF3ID0gcGxhdGZvcm1fcG1fdGhhdywgXAorCS5wb3dlcm9mZiA9IHBsYXRmb3JtX3BtX3Bvd2Vyb2ZmLCBcCisJLnJlc3RvcmUgPSBwbGF0Zm9ybV9wbV9yZXN0b3JlLCBcCisJLnN1c3BlbmRfbm9pcnEgPSBwbGF0Zm9ybV9wbV9zdXNwZW5kX25vaXJxLCBcCisJLnJlc3VtZV9ub2lycSA9IHBsYXRmb3JtX3BtX3Jlc3VtZV9ub2lycSwgXAorCS5mcmVlemVfbm9pcnEgPSBwbGF0Zm9ybV9wbV9mcmVlemVfbm9pcnEsIFwKKwkudGhhd19ub2lycSA9IHBsYXRmb3JtX3BtX3RoYXdfbm9pcnEsIFwKKwkucG93ZXJvZmZfbm9pcnEgPSBwbGF0Zm9ybV9wbV9wb3dlcm9mZl9ub2lycSwgXAorCS5yZXN0b3JlX25vaXJxID0gcGxhdGZvcm1fcG1fcmVzdG9yZV9ub2lycSwKKyNlbHNlCisjZGVmaW5lIFVTRV9QTEFURk9STV9QTV9TTEVFUF9PUFMKKyNlbmRpZgorCiAjZW5kaWYgLyogX1BMQVRGT1JNX0RFVklDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbS5oIGIvaW5jbHVkZS9saW51eC9wbS5oCmluZGV4IDUxMmUwOTEuLjMxNjA2NDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcG0uaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtLmgKQEAgLTQ2MCw2ICs0NjAsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWFjdGl2ZV9qaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcJCXN1c3BlbmRlZF9qaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcJCWFjY291bnRpbmdfdGltZXN0YW1wOworCXZvaWQJCQkqc3Vic3lzX2RhdGE7ICAvKiBPd25lZCBieSB0aGUgc3Vic3lzdGVtLiAqLwogI2VuZGlmCiB9OwogCkBAIC01MjksMjEgKzUzMCwxNyBAQAogICovCiAKICNpZmRlZiBDT05GSUdfUE1fU0xFRVAKLSNpZm5kZWYgQ09ORklHX0FSQ0hfTk9fU1lTREVWX09QUwotZXh0ZXJuIGludCBzeXNkZXZfc3VzcGVuZChwbV9tZXNzYWdlX3Qgc3RhdGUpOwotZXh0ZXJuIGludCBzeXNkZXZfcmVzdW1lKHZvaWQpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IHN5c2Rldl9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSkgeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBpbnQgc3lzZGV2X3Jlc3VtZSh2b2lkKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKLQogZXh0ZXJuIHZvaWQgZGV2aWNlX3BtX2xvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBkcG1fcmVzdW1lX25vaXJxKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBleHRlcm4gdm9pZCBkcG1fcmVzdW1lX2VuZChwbV9tZXNzYWdlX3Qgc3RhdGUpOworZXh0ZXJuIHZvaWQgZHBtX3Jlc3VtZShwbV9tZXNzYWdlX3Qgc3RhdGUpOworZXh0ZXJuIHZvaWQgZHBtX2NvbXBsZXRlKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAKIGV4dGVybiB2b2lkIGRldmljZV9wbV91bmxvY2sodm9pZCk7CiBleHRlcm4gaW50IGRwbV9zdXNwZW5kX25vaXJxKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiBleHRlcm4gaW50IGRwbV9zdXNwZW5kX3N0YXJ0KHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gaW50IGRwbV9zdXNwZW5kKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gaW50IGRwbV9wcmVwYXJlKHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAKIGV4dGVybiB2b2lkIF9fc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCB2b2lkICpmbiwgaW50IHJldCk7CiAKQEAgLTU1Myw2ICs1NTAsMTYgQEAKIAl9IHdoaWxlICgwKQogCiBleHRlcm4gaW50IGRldmljZV9wbV93YWl0X2Zvcl9kZXYoc3RydWN0IGRldmljZSAqc3ViLCBzdHJ1Y3QgZGV2aWNlICpkZXYpOworCitleHRlcm4gaW50IHBtX2dlbmVyaWNfcHJlcGFyZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9nZW5lcmljX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fZ2VuZXJpY19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcG1fZ2VuZXJpY190aGF3KHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBtX2dlbmVyaWNfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBwbV9nZW5lcmljX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwbV9nZW5lcmljX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKICNlbHNlIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogI2RlZmluZSBkZXZpY2VfcG1fbG9jaygpIGRvIHt9IHdoaWxlICgwKQpAQCAtNTY5LDYgKzU3NiwxNSBAQAogewogCXJldHVybiAwOwogfQorCisjZGVmaW5lIHBtX2dlbmVyaWNfcHJlcGFyZQlOVUxMCisjZGVmaW5lIHBtX2dlbmVyaWNfc3VzcGVuZAlOVUxMCisjZGVmaW5lIHBtX2dlbmVyaWNfcmVzdW1lCU5VTEwKKyNkZWZpbmUgcG1fZ2VuZXJpY19mcmVlemUJTlVMTAorI2RlZmluZSBwbV9nZW5lcmljX3RoYXcJCU5VTEwKKyNkZWZpbmUgcG1fZ2VuZXJpY19yZXN0b3JlCU5VTEwKKyNkZWZpbmUgcG1fZ2VuZXJpY19wb3dlcm9mZglOVUxMCisjZGVmaW5lIHBtX2dlbmVyaWNfY29tcGxldGUJTlVMTAogI2VuZGlmIC8qICFDT05GSUdfUE1fU0xFRVAgKi8KIAogLyogSG93IHRvIHJlb3JkZXIgZHBtX2xpc3QgYWZ0ZXIgZGV2aWNlX21vdmUoKSAqLwpAQCAtNTc5LDExICs1OTUsNCBAQAogCURQTV9PUkRFUl9ERVZfTEFTVCwKIH07CiAKLWV4dGVybiBpbnQgcG1fZ2VuZXJpY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IHBtX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IHBtX2dlbmVyaWNfZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IHBtX2dlbmVyaWNfdGhhdyhzdHJ1Y3QgZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCBwbV9nZW5lcmljX3Jlc3RvcmUoc3RydWN0IGRldmljZSAqZGV2KTsKLWV4dGVybiBpbnQgcG1fZ2VuZXJpY19wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCiAjZW5kaWYgLyogX0xJTlVYX1BNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG1fcnVudGltZS5oIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKaW5kZXggOGRlOWFhNi4uODc4Y2Y4NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmgKQEAgLTI0NSw0ICsyNDUsNDYgQEAKIAlfX3BtX3J1bnRpbWVfdXNlX2F1dG9zdXNwZW5kKGRldiwgZmFsc2UpOwogfQogCitzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrIHsKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmI7CisJc3RydWN0IGRldl9wb3dlcl9kb21haW4gKnB3cl9kb21haW47CisJY2hhciAqY29uX2lkc1tdOworfTsKKworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FX0NMSworZXh0ZXJuIGludCBwbV9ydW50aW1lX2Nsa19pbml0KHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2Nsa19kZXN0cm95KHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBtX3J1bnRpbWVfY2xrX2FkZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCk7CitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2Nsa19yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICpjb25faWQpOworZXh0ZXJuIGludCBwbV9ydW50aW1lX2Nsa19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CitleHRlcm4gaW50IHBtX3J1bnRpbWVfY2xrX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHBtX3J1bnRpbWVfY2xrX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfY2xrX2Rlc3Ryb3koc3RydWN0IGRldmljZSAqZGV2KQoreworfQorc3RhdGljIGlubGluZSBpbnQgcG1fcnVudGltZV9jbGtfYWRkKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqY29uX2lkKQoreworCXJldHVybiAtRUlOVkFMOworfQorc3RhdGljIGlubGluZSB2b2lkIHBtX3J1bnRpbWVfY2xrX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmNvbl9pZCkKK3sKK30KKyNkZWZpbmUgcG1fcnVudGltZV9jbG9ja19zdXNwZW5kCU5VTEwKKyNkZWZpbmUgcG1fcnVudGltZV9jbG9ja19yZXN1bWUJCU5VTEwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0hBVkVfQ0xLCitleHRlcm4gdm9pZCBwbV9ydW50aW1lX2Nsa19hZGRfbm90aWZpZXIoc3RydWN0IGJ1c190eXBlICpidXMsCisJCQkJCXN0cnVjdCBwbV9jbGtfbm90aWZpZXJfYmxvY2sgKmNsa25iKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9jbGtfYWRkX25vdGlmaWVyKHN0cnVjdCBidXNfdHlwZSAqYnVzLAorCQkJCQlzdHJ1Y3QgcG1fY2xrX25vdGlmaWVyX2Jsb2NrICpjbGtuYikKK3sKK30KKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG9zaXgtY2xvY2suaCBiL2luY2x1ZGUvbGludXgvcG9zaXgtY2xvY2suaAppbmRleCAzNjllMTlkLi43ZjExODNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LWNsb2NrLmgKKysrIGIvaW5jbHVkZS9saW51eC9wb3NpeC1jbG9jay5oCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXgtdGltZXJzLmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KIAogc3RydWN0IHBvc2l4X2Nsb2NrOwogCkBAIC0xMDQsNyArMTA1LDcgQEAKICAqIEBvcHM6ICAgICBGdW5jdGlvbmFsIGludGVyZmFjZSB0byB0aGUgY2xvY2sKICAqIEBjZGV2OiAgICBDaGFyYWN0ZXIgZGV2aWNlIGluc3RhbmNlIGZvciB0aGlzIGNsb2NrCiAgKiBAa3JlZjogICAgUmVmZXJlbmNlIGNvdW50LgotICogQG11dGV4OiAgIFByb3RlY3RzIHRoZSAnem9tYmllJyBmaWVsZCBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLgorICogQHJ3c2VtOiAgIFByb3RlY3RzIHRoZSAnem9tYmllJyBmaWVsZCBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzLgogICogQHpvbWJpZTogIElmICd6b21iaWUnIGlzIHRydWUsIHRoZW4gdGhlIGhhcmR3YXJlIGhhcyBkaXNhcHBlYXJlZC4KICAqIEByZWxlYXNlOiBBIGZ1bmN0aW9uIHRvIGZyZWUgdGhlIHN0cnVjdHVyZSB3aGVuIHRoZSByZWZlcmVuY2UgY291bnQgcmVhY2hlcwogICogICAgICAgICAgIHplcm8uIE1heSBiZSBOVUxMIGlmIHN0cnVjdHVyZSBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZC4KQEAgLTExNyw3ICsxMTgsNyBAQAogCXN0cnVjdCBwb3NpeF9jbG9ja19vcGVyYXRpb25zIG9wczsKIAlzdHJ1Y3QgY2RldiBjZGV2OwogCXN0cnVjdCBrcmVmIGtyZWY7Ci0Jc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07CiAJYm9vbCB6b21iaWU7CiAJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBwb3NpeF9jbG9jayAqY2xrKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oIGIvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAppbmRleCBkNTEyNDNhLi44MDgyMjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKyNpbmNsdWRlIDxsaW51eC9hbGFybXRpbWVyLmg+CiAKIHVuaW9uIGNwdV90aW1lX2NvdW50IHsKIAljcHV0aW1lX3QgY3B1OwpAQCAtODAsNiArODEsNyBAQAogCQkJdW5zaWduZWQgbG9uZyBpbmNyOwogCQkJdW5zaWduZWQgbG9uZyBleHBpcmVzOwogCQl9IG1tdGltZXI7CisJCXN0cnVjdCBhbGFybSBhbGFybXRpbWVyOwogCX0gaXQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaCBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCmluZGV4IDgzOGMxMTQuLmVhZjQzNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcHJvY19mcy5oCkBAIC0yMDgsNiArMjA4LDggQEAKIAkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQsY29uc3QgY2hhciAqZGVzdCkge3JldHVybiBOVUxMO30KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX21rZGlyKGNvbnN0IGNoYXIgKm5hbWUsCiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpIHtyZXR1cm4gTlVMTDt9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19ta2Rpcl9tb2RlKGNvbnN0IGNoYXIgKm5hbWUsCisJbW9kZV90IG1vZGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KSB7IHJldHVybiBOVUxMOyB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpjcmVhdGVfcHJvY19yZWFkX2VudHJ5KGNvbnN0IGNoYXIgKm5hbWUsCiAJbW9kZV90IG1vZGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqYmFzZSwgCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCBhMTE0N2U1Li45MTc4ZDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTE4OSw2ICsxODksMTAgQEAKIAkJY2hpbGQtPnB0cmFjZSA9IGN1cnJlbnQtPnB0cmFjZTsKIAkJX19wdHJhY2VfbGluayhjaGlsZCwgY3VycmVudC0+cGFyZW50KTsKIAl9CisKKyNpZmRlZiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UCisJYXRvbWljX3NldCgmY2hpbGQtPnB0cmFjZV9icF9yZWZjbnQsIDEpOworI2VuZGlmCiB9CiAKIC8qKgpAQCAtMzUwLDYgKzM1NCwxMyBAQAogCQkJCXVuc2lnbmVkIGxvbmcgYXJnc1s2XSwgdW5zaWduZWQgaW50IG1heGFyZ3MsCiAJCQkJdW5zaWduZWQgbG9uZyAqc3AsIHVuc2lnbmVkIGxvbmcgKnBjKTsKIAotI2VuZGlmCisjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAorZXh0ZXJuIGludCBwdHJhY2VfZ2V0X2JyZWFrcG9pbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKK2V4dGVybiB2b2lkIHB0cmFjZV9wdXRfYnJlYWtwb2ludHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdHJhY2VfcHV0X2JyZWFrcG9pbnRzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UICovCisKKyNlbmRpZiAvKiBfX0tFUk5FTCAqLwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmJ0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCmluZGV4IDcwNjZhY2IuLjAzM2I1MDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYnRyZWUuaApAQCAtMTM2LDYgKzEzNiwxNCBAQAogI2RlZmluZSBSQl9FTVBUWV9OT0RFKG5vZGUpCShyYl9wYXJlbnQobm9kZSkgPT0gbm9kZSkKICNkZWZpbmUgUkJfQ0xFQVJfTk9ERShub2RlKQkocmJfc2V0X3BhcmVudChub2RlLCBub2RlKSkKIAorc3RhdGljIGlubGluZSB2b2lkIHJiX2luaXRfbm9kZShzdHJ1Y3QgcmJfbm9kZSAqcmIpCit7CisJcmItPnJiX3BhcmVudF9jb2xvciA9IDA7CisJcmItPnJiX3JpZ2h0ID0gTlVMTDsKKwlyYi0+cmJfbGVmdCA9IE5VTEw7CisJUkJfQ0xFQVJfTk9ERShyYik7Cit9CisKIGV4dGVybiB2b2lkIHJiX2luc2VydF9jb2xvcihzdHJ1Y3QgcmJfbm9kZSAqLCBzdHJ1Y3QgcmJfcm9vdCAqKTsKIGV4dGVybiB2b2lkIHJiX2VyYXNlKHN0cnVjdCByYl9ub2RlICosIHN0cnVjdCByYl9yb290ICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdWxpc3QuaCBiL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCmluZGV4IDJkZWE5NGYuLmUzYmViMzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCkBAIC0yNTMsNyArMjUzLDcgQEAKICAqLwogI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwb3MsIGhlYWQsIG1lbWJlcikgXAogCWZvciAocG9zID0gbGlzdF9lbnRyeV9yY3UoKGhlYWQpLT5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcik7IFwKLQkJcHJlZmV0Y2gocG9zLT5tZW1iZXIubmV4dCksICZwb3MtPm1lbWJlciAhPSAoaGVhZCk7IFwKKwkJJnBvcy0+bWVtYmVyICE9IChoZWFkKTsgXAogCQlwb3MgPSBsaXN0X2VudHJ5X3JjdShwb3MtPm1lbWJlci5uZXh0LCB0eXBlb2YoKnBvcyksIG1lbWJlcikpCiAKIApAQCAtMjcwLDcgKzI3MCw3IEBACiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9jb250aW51ZV9yY3UocG9zLCBoZWFkKSBcCiAJZm9yICgocG9zKSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcobGlzdF9uZXh0X3JjdShwb3MpKTsgXAotCQlwcmVmZXRjaCgocG9zKS0+bmV4dCksIChwb3MpICE9IChoZWFkKTsgXAorCQkocG9zKSAhPSAoaGVhZCk7IFwKIAkJKHBvcykgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGxpc3RfbmV4dF9yY3UocG9zKSkpCiAKIC8qKgpAQCAtMjg0LDcgKzI4NCw3IEBACiAgKi8KICNkZWZpbmUgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9yY3UocG9zLCBoZWFkLCBtZW1iZXIpIAkJXAogCWZvciAocG9zID0gbGlzdF9lbnRyeV9yY3UocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpOyBcCi0JICAgICBwcmVmZXRjaChwb3MtPm1lbWJlci5uZXh0KSwgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJXAorCSAgICAgJnBvcy0+bWVtYmVyICE9IChoZWFkKTsJXAogCSAgICAgcG9zID0gbGlzdF9lbnRyeV9yY3UocG9zLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpwb3MpLCBtZW1iZXIpKQogCiAvKioKQEAgLTQyNyw3ICs0MjcsNyBAQAogCiAjZGVmaW5lIF9faGxpc3RfZm9yX2VhY2hfcmN1KHBvcywgaGVhZCkJCQkJXAogCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlKGhsaXN0X2ZpcnN0X3JjdShoZWFkKSk7CVwKLQkgICAgIHBvcyAmJiAoeyBwcmVmZXRjaChwb3MtPm5leHQpOyAxOyB9KTsJCVwKKwkgICAgIHBvczsJCQkJCQlcCiAJICAgICBwb3MgPSByY3VfZGVyZWZlcmVuY2UoaGxpc3RfbmV4dF9yY3UocG9zKSkpCiAKIC8qKgpAQCAtNDQzLDcgKzQ0Myw3IEBACiAgKi8KICNkZWZpbmUgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRwb3MsIHBvcywgaGVhZCwgbWVtYmVyKQkJXAogCWZvciAocG9zID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9maXJzdF9yY3UoaGVhZCkpOwkJXAotCQlwb3MgJiYgKHsgcHJlZmV0Y2gocG9zLT5uZXh0KTsgMTsgfSkgJiYJCQkgXAorCQlwb3MgJiYJCQkJCQkJIFwKIAkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7IFwKIAkJcG9zID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9uZXh0X3JjdShwb3MpKSkKIApAQCAtNDYwLDcgKzQ2MCw3IEBACiAgKi8KICNkZWZpbmUgaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1X2JoKHRwb3MsIHBvcywgaGVhZCwgbWVtYmVyKQkJIFwKIAlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9iaCgoaGVhZCktPmZpcnN0KTsJCQkgXAotCQlwb3MgJiYgKHsgcHJlZmV0Y2gocG9zLT5uZXh0KTsgMTsgfSkgJiYJCQkgXAorCQlwb3MgJiYJCQkJCQkJIFwKIAkJKHsgdHBvcyA9IGhsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCp0cG9zKSwgbWVtYmVyKTsgMTsgfSk7IFwKIAkJcG9zID0gcmN1X2RlcmVmZXJlbmNlX2JoKHBvcy0+bmV4dCkpCiAKQEAgLTQ3Miw3ICs0NzIsNyBAQAogICovCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdSh0cG9zLCBwb3MsIG1lbWJlcikJCVwKIAlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZSgocG9zKS0+bmV4dCk7CQkJXAotCSAgICAgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7IH0pICYmCQkJXAorCSAgICAgcG9zICYmCQkJCQkJCVwKIAkgICAgICh7IHRwb3MgPSBobGlzdF9lbnRyeShwb3MsIHR5cGVvZigqdHBvcyksIG1lbWJlcik7IDE7IH0pOyAgXAogCSAgICAgcG9zID0gcmN1X2RlcmVmZXJlbmNlKHBvcy0+bmV4dCkpCiAKQEAgLTQ4NCw3ICs0ODQsNyBAQAogICovCiAjZGVmaW5lIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdV9iaCh0cG9zLCBwb3MsIG1lbWJlcikJCVwKIAlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZV9iaCgocG9zKS0+bmV4dCk7CQkJXAotCSAgICAgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7IH0pICYmCQkJXAorCSAgICAgcG9zICYmCQkJCQkJCVwKIAkgICAgICh7IHRwb3MgPSBobGlzdF9lbnRyeShwb3MsIHR5cGVvZigqdHBvcyksIG1lbWJlcik7IDE7IH0pOyAgXAogCSAgICAgcG9zID0gcmN1X2RlcmVmZXJlbmNlX2JoKHBvcy0+bmV4dCkpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCAxOGQ2M2NlLi4xMjIxMWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0zNjAsNyArMzYwLDcgQEAKIGV4dGVybiBzaWduZWQgbG9uZyBzY2hlZHVsZV90aW1lb3V0X2tpbGxhYmxlKHNpZ25lZCBsb25nIHRpbWVvdXQpOwogZXh0ZXJuIHNpZ25lZCBsb25nIHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHNpZ25lZCBsb25nIHRpbWVvdXQpOwogYXNtbGlua2FnZSB2b2lkIHNjaGVkdWxlKHZvaWQpOwotZXh0ZXJuIGludCBtdXRleF9zcGluX29uX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaywgc3RydWN0IHRocmVhZF9pbmZvICpvd25lcik7CitleHRlcm4gaW50IG11dGV4X3NwaW5fb25fb3duZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm93bmVyKTsKIAogc3RydWN0IG5zcHJveHk7CiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7CkBAIC03MzEsMTAgKzczMSw2IEBACiAJLyogdGltZXN0YW1wcyAqLwogCXVuc2lnbmVkIGxvbmcgbG9uZyBsYXN0X2Fycml2YWwsLyogd2hlbiB3ZSBsYXN0IHJhbiBvbiBhIGNwdSAqLwogCQkJICAgbGFzdF9xdWV1ZWQ7CS8qIHdoZW4gd2Ugd2VyZSBsYXN0IHF1ZXVlZCB0byBydW4gKi8KLSNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwotCS8qIEJLTCBzdGF0cyAqLwotCXVuc2lnbmVkIGludCBia2xfY291bnQ7Ci0jZW5kaWYKIH07CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfU0NIRURTVEFUUykgfHwgZGVmaW5lZChDT05GSUdfVEFTS19ERUxBWV9BQ0NUKSAqLwogCkBAIC04NjgsNiArODY0LDcgQEAKIAogc3RydWN0IHNjaGVkX2dyb3VwIHsKIAlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKm5leHQ7CS8qIE11c3QgYmUgYSBjaXJjdWxhciBsaXN0ICovCisJYXRvbWljX3QgcmVmOwogCiAJLyoKIAkgKiBDUFUgcG93ZXIgb2YgdGhpcyBncm91cCwgU0NIRURfTE9BRF9TQ0FMRSBiZWluZyBtYXggcG93ZXIgZm9yIGEKQEAgLTg4Miw5ICs4NzksNiBAQAogCSAqIE5PVEU6IHRoaXMgZmllbGQgaXMgdmFyaWFibGUgbGVuZ3RoLiAoQWxsb2NhdGVkIGR5bmFtaWNhbGx5CiAJICogYnkgYXR0YWNoaW5nIGV4dHJhIHNwYWNlIHRvIHRoZSBlbmQgb2YgdGhlIHN0cnVjdHVyZSwKIAkgKiBkZXBlbmRpbmcgb24gaG93IG1hbnkgQ1BVcyB0aGUga2VybmVsIGhhcyBib290ZWQgdXAgd2l0aCkKLQkgKgotCSAqIEl0IGlzIGFsc28gYmUgZW1iZWRkZWQgaW50byBzdGF0aWMgZGF0YSBzdHJ1Y3R1cmVzIGF0IGJ1aWxkCi0JICogdGltZS4gKFNlZSAnc3RydWN0IHN0YXRpY19zY2hlZF9ncm91cCcgaW4ga2VybmVsL3NjaGVkLmMpCiAJICovCiAJdW5zaWduZWQgbG9uZyBjcHVtYXNrWzBdOwogfTsKQEAgLTg5NCwxNyArODg4LDYgQEAKIAlyZXR1cm4gdG9fY3B1bWFzayhzZy0+Y3B1bWFzayk7CiB9CiAKLWVudW0gc2NoZWRfZG9tYWluX2xldmVsIHsKLQlTRF9MVl9OT05FID0gMCwKLQlTRF9MVl9TSUJMSU5HLAotCVNEX0xWX01DLAotCVNEX0xWX0JPT0ssCi0JU0RfTFZfQ1BVLAotCVNEX0xWX05PREUsCi0JU0RfTFZfQUxMTk9ERVMsCi0JU0RfTFZfTUFYCi19OwotCiBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgewogCWludCByZWxheF9kb21haW5fbGV2ZWw7CiB9OwpAQCAtOTEzLDYgKzg5Niw4IEBACiAJLnJlbGF4X2RvbWFpbl9sZXZlbCA9IC0xLAkJCVwKIH0KIAorZXh0ZXJuIGludCBzY2hlZF9kb21haW5fbGV2ZWxfbWF4OworCiBzdHJ1Y3Qgc2NoZWRfZG9tYWluIHsKIAkvKiBUaGVzZSBmaWVsZHMgbXVzdCBiZSBzZXR1cCAqLwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnBhcmVudDsJLyogdG9wIGRvbWFpbiBtdXN0IGJlIG51bGwgdGVybWluYXRlZCAqLwpAQCAtOTMwLDcgKzkxNSw3IEBACiAJdW5zaWduZWQgaW50IGZvcmtleGVjX2lkeDsKIAl1bnNpZ25lZCBpbnQgc210X2dhaW47CiAJaW50IGZsYWdzOwkJCS8qIFNlZSBTRF8qICovCi0JZW51bSBzY2hlZF9kb21haW5fbGV2ZWwgbGV2ZWw7CisJaW50IGxldmVsOwogCiAJLyogUnVudGltZSBmaWVsZHMuICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X2JhbGFuY2U7CS8qIGluaXQgdG8gamlmZmllcy4gdW5pdHMgaW4gamlmZmllcyAqLwpAQCAtOTczLDYgKzk1OCwxMCBAQAogI2lmZGVmIENPTkZJR19TQ0hFRF9ERUJVRwogCWNoYXIgKm5hbWU7CiAjZW5kaWYKKwl1bmlvbiB7CisJCXZvaWQgKnByaXZhdGU7CQkvKiB1c2VkIGR1cmluZyBjb25zdHJ1Y3Rpb24gKi8KKwkJc3RydWN0IHJjdV9oZWFkIHJjdTsJLyogdXNlZCBkdXJpbmcgZGVzdHJ1Y3Rpb24gKi8KKwl9OwogCiAJdW5zaWduZWQgaW50IHNwYW5fd2VpZ2h0OwogCS8qCkBAIC05ODEsOSArOTcwLDYgQEAKIAkgKiBOT1RFOiB0aGlzIGZpZWxkIGlzIHZhcmlhYmxlIGxlbmd0aC4gKEFsbG9jYXRlZCBkeW5hbWljYWxseQogCSAqIGJ5IGF0dGFjaGluZyBleHRyYSBzcGFjZSB0byB0aGUgZW5kIG9mIHRoZSBzdHJ1Y3R1cmUsCiAJICogZGVwZW5kaW5nIG9uIGhvdyBtYW55IENQVXMgdGhlIGtlcm5lbCBoYXMgYm9vdGVkIHVwIHdpdGgpCi0JICoKLQkgKiBJdCBpcyBhbHNvIGJlIGVtYmVkZGVkIGludG8gc3RhdGljIGRhdGEgc3RydWN0dXJlcyBhdCBidWlsZAotCSAqIHRpbWUuIChTZWUgJ3N0cnVjdCBzdGF0aWNfc2NoZWRfZG9tYWluJyBpbiBrZXJuZWwvc2NoZWQuYykKIAkgKi8KIAl1bnNpZ25lZCBsb25nIHNwYW5bMF07CiB9OwpAQCAtMTA0OCw4ICsxMDM0LDEyIEBACiAjZGVmaW5lIFdGX0ZPUksJCTB4MDIJCS8qIGNoaWxkIHdha2V1cCBhZnRlciBmb3JrICovCiAKICNkZWZpbmUgRU5RVUVVRV9XQUtFVVAJCTEKLSNkZWZpbmUgRU5RVUVVRV9XQUtJTkcJCTIKLSNkZWZpbmUgRU5RVUVVRV9IRUFECQk0CisjZGVmaW5lIEVOUVVFVUVfSEVBRAkJMgorI2lmZGVmIENPTkZJR19TTVAKKyNkZWZpbmUgRU5RVUVVRV9XQUtJTkcJCTQJLyogc2NoZWRfY2xhc3M6OnRhc2tfd2FraW5nIHdhcyBjYWxsZWQgKi8KKyNlbHNlCisjZGVmaW5lIEVOUVVFVUVfV0FLSU5HCQkwCisjZW5kaWYKIAogI2RlZmluZSBERVFVRVVFX1NMRUVQCQkxCiAKQEAgLTEwNjcsMTIgKzEwNTcsMTEgQEAKIAl2b2lkICgqcHV0X3ByZXZfdGFzaykgKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JaW50ICAoKnNlbGVjdF90YXNrX3JxKShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCi0JCQkgICAgICAgaW50IHNkX2ZsYWcsIGludCBmbGFncyk7CisJaW50ICAoKnNlbGVjdF90YXNrX3JxKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzZF9mbGFnLCBpbnQgZmxhZ3MpOwogCiAJdm9pZCAoKnByZV9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIAl2b2lkICgqcG9zdF9zY2hlZHVsZSkgKHN0cnVjdCBycSAqdGhpc19ycSk7Ci0Jdm9pZCAoKnRhc2tfd2FraW5nKSAoc3RydWN0IHJxICp0aGlzX3JxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOworCXZvaWQgKCp0YXNrX3dha2luZykgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAJdm9pZCAoKnRhc2tfd29rZW4pIChzdHJ1Y3QgcnEgKnRoaXNfcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKIAl2b2lkICgqc2V0X2NwdXNfYWxsb3dlZCkoc3RydWN0IHRhc2tfc3RydWN0ICpwLApAQCAtMTE5NywxMyArMTE4NiwxMSBAQAogCXVuc2lnbmVkIGludCBmbGFnczsJLyogcGVyIHByb2Nlc3MgZmxhZ3MsIGRlZmluZWQgYmVsb3cgKi8KIAl1bnNpZ25lZCBpbnQgcHRyYWNlOwogCi0JaW50IGxvY2tfZGVwdGg7CQkvKiBCS0wgbG9jayBkZXB0aCAqLwotCiAjaWZkZWYgQ09ORklHX1NNUAotI2lmZGVmIF9fQVJDSF9XQU5UX1VOTE9DS0VEX0NUWFNXCi0JaW50IG9uY3B1OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqd2FrZV9lbnRyeTsKKwlpbnQgb25fY3B1OwogI2VuZGlmCi0jZW5kaWYKKwlpbnQgb25fcnE7CiAKIAlpbnQgcHJpbywgc3RhdGljX3ByaW8sIG5vcm1hbF9wcmlvOwogCXVuc2lnbmVkIGludCBydF9wcmlvcml0eTsKQEAgLTEyNzQsNiArMTI2MSw3IEBACiAKIAkvKiBSZXZlcnQgdG8gZGVmYXVsdCBwcmlvcml0eS9wb2xpY3kgd2hlbiBmb3JraW5nICovCiAJdW5zaWduZWQgc2NoZWRfcmVzZXRfb25fZm9yazoxOworCXVuc2lnbmVkIHNjaGVkX2NvbnRyaWJ1dGVzX3RvX2xvYWQ6MTsKIAogCXBpZF90IHBpZDsKIAlwaWRfdCB0Z2lkOwpAQCAtMTUzNyw2ICsxNTI1LDkgQEAKIAkJdW5zaWduZWQgbG9uZyBtZW1zd19ucl9wYWdlczsgLyogdW5jaGFyZ2VkIG1lbStzd2FwIHVzYWdlICovCiAJfSBtZW1jZ19iYXRjaDsKICNlbmRpZgorI2lmZGVmIENPTkZJR19IQVZFX0hXX0JSRUFLUE9JTlQKKwlhdG9taWNfdCBwdHJhY2VfYnBfcmVmY250OworI2VuZGlmCiB9OwogCiAvKiBGdXR1cmUtc2FmZSBhY2Nlc3NvciBmb3Igc3RydWN0IHRhc2tfc3RydWN0J3MgY3B1c19hbGxvd2VkLiAqLwpAQCAtMjA2MCwxNCArMjA1MSwxMyBAQAogCiBleHRlcm4gaW50IHdha2VfdXBfc3RhdGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGludCBzdGF0ZSk7CiBleHRlcm4gaW50IHdha2VfdXBfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7Ci1leHRlcm4gdm9pZCB3YWtlX3VwX25ld190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAotCQkJCXVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MpOworZXh0ZXJuIHZvaWQgd2FrZV91cF9uZXdfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAjaWZkZWYgQ09ORklHX1NNUAogIGV4dGVybiB2b2lkIGtpY2tfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAjZWxzZQogIHN0YXRpYyBpbmxpbmUgdm9pZCBraWNrX3Byb2Nlc3Moc3RydWN0IHRhc2tfc3RydWN0ICp0c2spIHsgfQogI2VuZGlmCi1leHRlcm4gdm9pZCBzY2hlZF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNsb25lX2ZsYWdzKTsKK2V4dGVybiB2b2lkIHNjaGVkX2Zvcmsoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIGV4dGVybiB2b2lkIHNjaGVkX2RlYWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIAogZXh0ZXJuIHZvaWQgcHJvY19jYWNoZXNfaW5pdCh2b2lkKTsKQEAgLTIxOTIsOCArMjE4MiwxMCBAQAogZXh0ZXJuIGNoYXIgKmdldF90YXNrX2NvbW0oY2hhciAqdG8sIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKTsKIAogI2lmZGVmIENPTkZJR19TTVAKK3ZvaWQgc2NoZWR1bGVyX2lwaSh2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIHdhaXRfdGFza19pbmFjdGl2ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgbG9uZyBtYXRjaF9zdGF0ZSk7CiAjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHNjaGVkdWxlcl9pcGkodm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgd2FpdF90YXNrX2luYWN0aXZlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQkJICAgICAgIGxvbmcgbWF0Y2hfc3RhdGUpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmggYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKaW5kZXggY2EwMmYxNy4uOGNlNTllZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaApAQCAtMTQ1Niw3ICsxNDU2LDcgQEAKIAkJCSAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KTsKIAlpbnQgKCppbm9kZV9yZWFkbGluaykgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiAJaW50ICgqaW5vZGVfZm9sbG93X2xpbmspIChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKTsKLQlpbnQgKCppbm9kZV9wZXJtaXNzaW9uKSAoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOworCWludCAoKmlub2RlX3Blcm1pc3Npb24pIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgZmxhZ3MpOwogCWludCAoKmlub2RlX3NldGF0dHIpCShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqYXR0cik7CiAJaW50ICgqaW5vZGVfZ2V0YXR0cikgKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwogCWludCAoKmlub2RlX3NldHhhdHRyKSAoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZXFsb2NrLmggYi9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaAppbmRleCBlOThjZDJlLi4wNmQ2OTY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcWxvY2suaApAQCAtODgsMTIgKzg4LDEyIEBACiAJdW5zaWduZWQgcmV0OwogCiByZXBlYXQ6Ci0JcmV0ID0gc2wtPnNlcXVlbmNlOwotCXNtcF9ybWIoKTsKKwlyZXQgPSBBQ0NFU1NfT05DRShzbC0+c2VxdWVuY2UpOwogCWlmICh1bmxpa2VseShyZXQgJiAxKSkgewogCQljcHVfcmVsYXgoKTsKIAkJZ290byByZXBlYXQ7CiAJfQorCXNtcF9ybWIoKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NzYi9zc2IuaCBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCmluZGV4IDk2NTllZmYuLjA0NWY3MmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3NiL3NzYi5oCkBAIC00MDQsNyArNDA0LDkgQEAKIAogLyogU2V0IGEgZmFsbGJhY2sgU1BST00uCiAgKiBTZWUga2RvYyBhdCB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgY29tcGxldGUgZG9jdW1lbnRhdGlvbi4gKi8KLWV4dGVybiBpbnQgc3NiX2FyY2hfc2V0X2ZhbGxiYWNrX3Nwcm9tKGNvbnN0IHN0cnVjdCBzc2Jfc3Byb20gKnNwcm9tKTsKK2V4dGVybiBpbnQgc3NiX2FyY2hfcmVnaXN0ZXJfZmFsbGJhY2tfc3Byb20oCisJCWludCAoKnNwcm9tX2NhbGxiYWNrKShzdHJ1Y3Qgc3NiX2J1cyAqYnVzLAorCQlzdHJ1Y3Qgc3NiX3Nwcm9tICpvdXQpKTsKIAogLyogU3VzcGVuZCBhIFNTQiBidXMuCiAgKiBDYWxsIHRoaXMgZnJvbSB0aGUgcGFyZW50IGJ1cyBzdXNwZW5kIHJvdXRpbmUuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCBhNzE2ZWUyLi5hMTc2ZGIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTEyMyw2ICsxMjMsNyBAQAogZXh0ZXJuIHZvaWQgYXJndl9mcmVlKGNoYXIgKiphcmd2KTsKIAogZXh0ZXJuIGJvb2wgc3lzZnNfc3RyZXEoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKTsKK2V4dGVybiBpbnQgc3RydG9ib29sKGNvbnN0IGNoYXIgKnMsIGJvb2wgKnJlcyk7CiAKICNpZmRlZiBDT05GSUdfQklOQVJZX1BSSU5URgogaW50IHZiaW5fcHJpbnRmKHUzMiAqYmluX2J1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zY2hlZC5oCmluZGV4IGQ4MWRiODAuLmY3M2M0ODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc2NoZWQuaApAQCAtMTI3LDEzICsxMjcsMTYgQEAKICNkZWZpbmUgUlBDX1RBU0tfS0lMTEVECQkweDAxMDAJCS8qIHRhc2sgd2FzIGtpbGxlZCAqLwogI2RlZmluZSBSUENfVEFTS19TT0ZUCQkweDAyMDAJCS8qIFVzZSBzb2Z0IHRpbWVvdXRzICovCiAjZGVmaW5lIFJQQ19UQVNLX1NPRlRDT05OCTB4MDQwMAkJLyogRmFpbCBpZiBjYW4ndCBjb25uZWN0ICovCisjZGVmaW5lIFJQQ19UQVNLX1NFTlQJCTB4MDgwMAkJLyogbWVzc2FnZSB3YXMgc2VudCAqLworI2RlZmluZSBSUENfVEFTS19USU1FT1VUCTB4MTAwMAkJLyogZmFpbCB3aXRoIEVUSU1FRE9VVCBvbiB0aW1lb3V0ICovCiAKICNkZWZpbmUgUlBDX0lTX0FTWU5DKHQpCQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX0FTWU5DKQogI2RlZmluZSBSUENfSVNfU1dBUFBFUih0KQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1NXQVBQRVIpCiAjZGVmaW5lIFJQQ19ET19ST09UT1ZFUlJJREUodCkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19ST09UQ1JFRFMpCiAjZGVmaW5lIFJQQ19BU1NBU1NJTkFURUQodCkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19LSUxMRUQpCi0jZGVmaW5lIFJQQ19JU19TT0ZUKHQpCQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1NPRlQpCisjZGVmaW5lIFJQQ19JU19TT0ZUKHQpCQkoKHQpLT50a19mbGFncyAmIChSUENfVEFTS19TT0ZUfFJQQ19UQVNLX1RJTUVPVVQpKQogI2RlZmluZSBSUENfSVNfU09GVENPTk4odCkJKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TT0ZUQ09OTikKKyNkZWZpbmUgUlBDX1dBU19TRU5UKHQpCQkoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX1NFTlQpCiAKICNkZWZpbmUgUlBDX1RBU0tfUlVOTklORwkwCiAjZGVmaW5lIFJQQ19UQVNLX1FVRVVFRAkJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNkZXYuaCBiL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKaW5kZXggZGZiMDc4ZC4uZDM1ZTc4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oCkBAIC0zNCwxMiArMzQsNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJZHJpdmVyczsKIAlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqKmF0dHJzOwogCXN0cnVjdCBrc2V0CQlrc2V0OwotI2lmbmRlZiBDT05GSUdfQVJDSF9OT19TWVNERVZfT1BTCi0JLyogRGVmYXVsdCBvcGVyYXRpb25zIGZvciB0aGVzZSB0eXBlcyBvZiBkZXZpY2VzICovCi0JaW50CSgqc2h1dGRvd24pKHN0cnVjdCBzeXNfZGV2aWNlICopOwotCWludAkoKnN1c3BlbmQpKHN0cnVjdCBzeXNfZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7Ci0JaW50CSgqcmVzdW1lKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKLSNlbmRpZgogfTsKIAogc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgewpAQCAtNzcsMTEgKzcxLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWVudHJ5OwogCWludAkoKmFkZCkoc3RydWN0IHN5c19kZXZpY2UgKik7CiAJaW50CSgqcmVtb3ZlKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKLSNpZm5kZWYgQ09ORklHX0FSQ0hfTk9fU1lTREVWX09QUwotCWludAkoKnNodXRkb3duKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKLQlpbnQJKCpzdXNwZW5kKShzdHJ1Y3Qgc3lzX2RldmljZSAqLCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotCWludAkoKnJlc3VtZSkoc3RydWN0IHN5c19kZXZpY2UgKik7Ci0jZW5kaWYKIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90aW1lLmggYi9pbmNsdWRlL2xpbnV4L3RpbWUuaAppbmRleCA0NTRhMjYyLi5iMzA2MTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RpbWUuaApAQCAtMTI2LDYgKzEyNiw3IEBACiBzdHJ1Y3QgdGltZXNwZWMgZ2V0X21vbm90b25pY19jb2Fyc2Uodm9pZCk7CiB2b2lkIGdldF94dGltZV9hbmRfbW9ub3RvbmljX2FuZF9zbGVlcF9vZmZzZXQoc3RydWN0IHRpbWVzcGVjICp4dGltLAogCQkJCXN0cnVjdCB0aW1lc3BlYyAqd3RvbSwgc3RydWN0IHRpbWVzcGVjICpzbGVlcCk7Cit2b2lkIHRpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUoc3RydWN0IHRpbWVzcGVjICpkZWx0YSk7CiAKICNkZWZpbmUgQ1VSUkVOVF9USU1FCQkoY3VycmVudF9rZXJuZWxfdGltZSgpKQogI2RlZmluZSBDVVJSRU5UX1RJTUVfU0VDCSgoc3RydWN0IHRpbWVzcGVjKSB7IGdldF9zZWNvbmRzKCksIDAgfSkKQEAgLTI5NCw2ICsyOTUsOCBAQAogI2RlZmluZSBDTE9DS19SRUFMVElNRV9DT0FSU0UJCTUKICNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRQkJNgogI2RlZmluZSBDTE9DS19CT09UVElNRQkJCTcKKyNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUVfQUxBUk0JCTgKKyNkZWZpbmUgQ0xPQ0tfQk9PVFRJTUVfQUxBUk0JCTkKIAogLyoKICAqIFRoZSBJRHMgb2YgdmFyaW91cyBoYXJkd2FyZSBjbG9ja3M6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWVycXVldWUuaCBiL2luY2x1ZGUvbGludXgvdGltZXJxdWV1ZS5oCmluZGV4IGE1MjBmZDcuLjUwODg3MjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGltZXJxdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXJxdWV1ZS5oCkBAIC0zOSw3ICszOSw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0aW1lcnF1ZXVlX2luaXQoc3RydWN0IHRpbWVycXVldWVfbm9kZSAqbm9kZSkKIHsKLQlSQl9DTEVBUl9OT0RFKCZub2RlLT5ub2RlKTsKKwlyYl9pbml0X25vZGUoJm5vZGUtPm5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGltZXJxdWV1ZV9pbml0X2hlYWQoc3RydWN0IHRpbWVycXVldWVfaGVhZCAqaGVhZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHJhY2Vwb2ludC5oIGIvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKaW5kZXggOTdjODRhNS4uZDUzMGE0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKKysrIGIvaW5jbHVkZS9saW51eC90cmFjZXBvaW50LmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogc3RydWN0IHRyYWNlcG9pbnQgewogCWNvbnN0IGNoYXIgKm5hbWU7CQkvKiBUcmFjZXBvaW50IG5hbWUgKi8KLQlpbnQgc3RhdGU7CQkJLyogU3RhdGUuICovCisJc3RydWN0IGp1bXBfbGFiZWxfa2V5IGtleTsKIAl2b2lkICgqcmVnZnVuYykodm9pZCk7CiAJdm9pZCAoKnVucmVnZnVuYykodm9pZCk7CiAJc3RydWN0IHRyYWNlcG9pbnRfZnVuYyBfX3JjdSAqZnVuY3M7CkBAIC0xNDYsOSArMTQ2LDcgQEAKIAlleHRlcm4gc3RydWN0IHRyYWNlcG9pbnQgX190cmFjZXBvaW50XyMjbmFtZTsJCQlcCiAJc3RhdGljIGlubGluZSB2b2lkIHRyYWNlXyMjbmFtZShwcm90bykJCQkJXAogCXsJCQkJCQkJCVwKLQkJSlVNUF9MQUJFTCgmX190cmFjZXBvaW50XyMjbmFtZS5zdGF0ZSwgZG9fdHJhY2UpOwlcCi0JCXJldHVybjsJCQkJCQkJXAotZG9fdHJhY2U6CQkJCQkJCQlcCisJCWlmIChzdGF0aWNfYnJhbmNoKCZfX3RyYWNlcG9pbnRfIyNuYW1lLmtleSkpCQlcCiAJCQlfX0RPX1RSQUNFKCZfX3RyYWNlcG9pbnRfIyNuYW1lLAkJXAogCQkJCVRQX1BST1RPKGRhdGFfcHJvdG8pLAkJCVwKIAkJCQlUUF9BUkdTKGRhdGFfYXJncyksCQkJXApAQCAtMTc2LDE0ICsxNzQsMTQgQEAKICAqIHN0cnVjdHVyZXMsIHNvIHdlIGNyZWF0ZSBhbiBhcnJheSBvZiBwb2ludGVycyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgaXRlcmF0aW9uCiAgKiBvbiB0aGUgdHJhY2Vwb2ludHMuCiAgKi8KLSNkZWZpbmUgREVGSU5FX1RSQUNFX0ZOKG5hbWUsIHJlZywgdW5yZWcpCQkJCVwKLQlzdGF0aWMgY29uc3QgY2hhciBfX3Rwc3RydGFiXyMjbmFtZVtdCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3N0cmluZ3MiKSkpID0gI25hbWU7CVwKLQlzdHJ1Y3QgdHJhY2Vwb2ludCBfX3RyYWNlcG9pbnRfIyNuYW1lCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzIikpKSA9CQkJXAotCQl7IF9fdHBzdHJ0YWJfIyNuYW1lLCAwLCByZWcsIHVucmVnLCBOVUxMIH07CQlcCi0Jc3RhdGljIHN0cnVjdCB0cmFjZXBvaW50ICogY29uc3QgX190cmFjZXBvaW50X3B0cl8jI25hbWUgX191c2VkCVwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3B0cnMiKSkpID0JCVwKKyNkZWZpbmUgREVGSU5FX1RSQUNFX0ZOKG5hbWUsIHJlZywgdW5yZWcpCQkJCSBcCisJc3RhdGljIGNvbnN0IGNoYXIgX190cHN0cnRhYl8jI25hbWVbXQkJCQkgXAorCV9fYXR0cmlidXRlX18oKHNlY3Rpb24oIl9fdHJhY2Vwb2ludHNfc3RyaW5ncyIpKSkgPSAjbmFtZTsJIFwKKwlzdHJ1Y3QgdHJhY2Vwb2ludCBfX3RyYWNlcG9pbnRfIyNuYW1lCQkJCSBcCisJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiX190cmFjZXBvaW50cyIpKSkgPQkJCSBcCisJCXsgX190cHN0cnRhYl8jI25hbWUsIEpVTVBfTEFCRUxfSU5JVCwgcmVnLCB1bnJlZywgTlVMTCB9O1wKKwlzdGF0aWMgc3RydWN0IHRyYWNlcG9pbnQgKiBjb25zdCBfX3RyYWNlcG9pbnRfcHRyXyMjbmFtZSBfX3VzZWQJIFwKKwlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX3RyYWNlcG9pbnRzX3B0cnMiKSkpID0JCSBcCiAJCSZfX3RyYWNlcG9pbnRfIyNuYW1lOwogCiAjZGVmaW5lIERFRklORV9UUkFDRShuYW1lKQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3VzYm5ldC5oIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKaW5kZXggM2M3MzI5Yi4uNjA1YjBhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmgKQEAgLTY4LDYgKzY4LDcgQEAKICMJCWRlZmluZSBFVkVOVF9SWF9QQVVTRUQJNQogIwkJZGVmaW5lIEVWRU5UX0RFVl9XQUtJTkcgNgogIwkJZGVmaW5lIEVWRU5UX0RFVl9BU0xFRVAgNworIwkJZGVmaW5lIEVWRU5UX0RFVl9PUEVOCTgKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcl9vZihzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTEwMyw4ICsxMDQsOCBAQAogICogSW5kaWNhdGVzIHRvIHVzYm5ldCwgdGhhdCBVU0IgZHJpdmVyIGFjY3VtdWxhdGVzIG11bHRpcGxlIElQIHBhY2tldHMuCiAgKiBBZmZlY3RzIHN0YXRpc3RpYyAoY291bnRlcnMpIGFuZCBzaG9ydCBwYWNrZXQgaGFuZGxpbmcuCiAgKi8KLSNkZWZpbmUgRkxBR19NVUxUSV9QQUNLRVQJMHgxMDAwCi0jZGVmaW5lIEZMQUdfUlhfQVNTRU1CTEUJMHgyMDAwCS8qIHJ4IHBhY2tldHMgbWF5IHNwYW4gPjEgZnJhbWVzICovCisjZGVmaW5lIEZMQUdfTVVMVElfUEFDS0VUCTB4MjAwMAorI2RlZmluZSBGTEFHX1JYX0FTU0VNQkxFCTB4NDAwMAkvKiByeCBwYWNrZXRzIG1heSBzcGFuID4xIGZyYW1lcyAqLwogCiAJLyogaW5pdCBkZXZpY2UgLi4uIGNhbiBzbGVlcCwgb3IgY2F1c2UgcHJvYmUoKSBmYWlsdXJlICovCiAJaW50CSgqYmluZCkoc3RydWN0IHVzYm5ldCAqLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdjRsMi1tZWRpYWJ1cy5oIGIvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgKaW5kZXggNzA1NGE3YS4uZGU1YzE1OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgKKysrIGIvaW5jbHVkZS9saW51eC92NGwyLW1lZGlhYnVzLmgKQEAgLTQ3LDcgKzQ3LDcgQEAKIAlWNEwyX01CVVNfRk1UX1JHQjU2NV8yWDhfQkUgPSAweDEwMDcsCiAJVjRMMl9NQlVTX0ZNVF9SR0I1NjVfMlg4X0xFID0gMHgxMDA4LAogCi0JLyogWVVWIChpbmNsdWRpbmcgZ3JleSkgLSBuZXh0IGlzIDB4MjAxMyAqLworCS8qIFlVViAoaW5jbHVkaW5nIGdyZXkpIC0gbmV4dCBpcyAweDIwMTQgKi8KIAlWNEwyX01CVVNfRk1UX1k4XzFYOCA9IDB4MjAwMSwKIAlWNEwyX01CVVNfRk1UX1VZVlk4XzFfNVg4ID0gMHgyMDAyLAogCVY0TDJfTUJVU19GTVRfVllVWThfMV81WDggPSAweDIwMDMsCkBAIC02MCw2ICs2MCw3IEBACiAJVjRMMl9NQlVTX0ZNVF9ZMTBfMVgxMCA9IDB4MjAwYSwKIAlWNEwyX01CVVNfRk1UX1lVWVYxMF8yWDEwID0gMHgyMDBiLAogCVY0TDJfTUJVU19GTVRfWVZZVTEwXzJYMTAgPSAweDIwMGMsCisJVjRMMl9NQlVTX0ZNVF9ZMTJfMVgxMiA9IDB4MjAxMywKIAlWNEwyX01CVVNfRk1UX1VZVlk4XzFYMTYgPSAweDIwMGYsCiAJVjRMMl9NQlVTX0ZNVF9WWVVZOF8xWDE2ID0gMHgyMDEwLAogCVY0TDJfTUJVU19GTVRfWVVZVjhfMVgxNiA9IDB4MjAxMSwKQEAgLTY3LDkgKzY4LDExIEBACiAJVjRMMl9NQlVTX0ZNVF9ZVVlWMTBfMVgyMCA9IDB4MjAwZCwKIAlWNEwyX01CVVNfRk1UX1lWWVUxMF8xWDIwID0gMHgyMDBlLAogCi0JLyogQmF5ZXIgLSBuZXh0IGlzIDB4MzAxMyAqLworCS8qIEJheWVyIC0gbmV4dCBpcyAweDMwMTUgKi8KIAlWNEwyX01CVVNfRk1UX1NCR0dSOF8xWDggPSAweDMwMDEsCisJVjRMMl9NQlVTX0ZNVF9TR0JSRzhfMVg4ID0gMHgzMDEzLAogCVY0TDJfTUJVU19GTVRfU0dSQkc4XzFYOCA9IDB4MzAwMiwKKwlWNEwyX01CVVNfRk1UX1NSR0dCOF8xWDggPSAweDMwMTQsCiAJVjRMMl9NQlVTX0ZNVF9TQkdHUjEwX0RQQ004XzFYOCA9IDB4MzAwYiwKIAlWNEwyX01CVVNfRk1UX1NHQlJHMTBfRFBDTThfMVg4ID0gMHgzMDBjLAogCVY0TDJfTUJVU19GTVRfU0dSQkcxMF9EUENNOF8xWDggPSAweDMwMDksCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCBhYTZjMzkzLi5iZTgyYzhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTMwOCw2ICszMDgsNyBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfWTQgICAgICB2NGwyX2ZvdXJjYygnWScsICcwJywgJzQnLCAnICcpIC8qICA0ICBHcmV5c2NhbGUgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNiAgICAgIHY0bDJfZm91cmNjKCdZJywgJzAnLCAnNicsICcgJykgLyogIDYgIEdyZXlzY2FsZSAgICAgKi8KICNkZWZpbmUgVjRMMl9QSVhfRk1UX1kxMCAgICAgdjRsMl9mb3VyY2MoJ1knLCAnMScsICcwJywgJyAnKSAvKiAxMCAgR3JleXNjYWxlICAgICAqLworI2RlZmluZSBWNEwyX1BJWF9GTVRfWTEyICAgICB2NGwyX2ZvdXJjYygnWScsICcxJywgJzInLCAnICcpIC8qIDEyICBHcmV5c2NhbGUgICAgICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZMTYgICAgIHY0bDJfZm91cmNjKCdZJywgJzEnLCAnNicsICcgJykgLyogMTYgIEdyZXlzY2FsZSAgICAgKi8KIAogLyogUGFsZXR0ZSBmb3JtYXRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2aWNlLmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2aWNlLmgKaW5kZXggYmQxMDJjZi4uZDYxZmViZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaApAQCAtMTYzLDcgKzE2Myw3IEBACiAoewkJCQkJCQkJCVwKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKl9fc2Q7CQkJCQlcCiAJX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyX3AodjRsMl9kZXYsIF9fc2QsIGNvbmQsIG8sCVwKLQkJCQkJCWYsIGFyZ3MuLi4pOwkJXAorCQkJCQkJZiAsICMjYXJncyk7CQlcCiB9KQogCiAvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIG1hdGNoaW5nIGdycF9pZCAoaWYgMCwgdGhlbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF9lY24uaCBiL2luY2x1ZGUvbmV0L2luZXRfZWNuLmgKaW5kZXggODhiZGQwMS4uMmZhOGQxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9lY24uaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2Vjbi5oCkBAIC0zOCw5ICszOCwxOSBAQAogCXJldHVybiBvdXRlcjsKIH0KIAotI2RlZmluZQlJTkVUX0VDTl94bWl0KHNrKSBkbyB7IGluZXRfc2soc2spLT50b3MgfD0gSU5FVF9FQ05fRUNUXzA7IH0gd2hpbGUgKDApCi0jZGVmaW5lCUlORVRfRUNOX2RvbnR4bWl0KHNrKSBcCi0JZG8geyBpbmV0X3NrKHNrKS0+dG9zICY9IH5JTkVUX0VDTl9NQVNLOyB9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSB2b2lkIElORVRfRUNOX3htaXQoc3RydWN0IHNvY2sgKnNrKQoreworCWluZXRfc2soc2spLT50b3MgfD0gSU5FVF9FQ05fRUNUXzA7CisJaWYgKGluZXQ2X3NrKHNrKSAhPSBOVUxMKQorCQlpbmV0Nl9zayhzayktPnRjbGFzcyB8PSBJTkVUX0VDTl9FQ1RfMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIElORVRfRUNOX2RvbnR4bWl0KHN0cnVjdCBzb2NrICpzaykKK3sKKwlpbmV0X3NrKHNrKS0+dG9zICY9IH5JTkVUX0VDTl9NQVNLOworCWlmIChpbmV0Nl9zayhzaykgIT0gTlVMTCkKKwkJaW5ldDZfc2soc2spLT50Y2xhc3MgJj0gfklORVRfRUNOX01BU0s7Cit9CiAKICNkZWZpbmUgSVA2X0VDTl9mbG93X2luaXQobGFiZWwpIGRvIHsJCVwKICAgICAgIChsYWJlbCkgJj0gfmh0b25sKElORVRfRUNOX01BU0sgPDwgMjApOwlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcF92cy5oIGIvaW5jbHVkZS9uZXQvaXBfdnMuaAppbmRleCBkNTE2ZjAwLi44NmFlZmVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTc5MSw2ICs3OTEsNyBAQAogLyogSVBWUyBpbiBuZXR3b3JrIG5hbWVzcGFjZSAqLwogc3RydWN0IG5ldG5zX2lwdnMgewogCWludAkJCWdlbjsJCS8qIEdlbmVyYXRpb24gKi8KKwlpbnQJCQllbmFibGU7CQkvKiBlbmFibGUgbGlrZSBuZl9ob29rcyBkbyAqLwogCS8qCiAJICoJSGFzaCB0YWJsZTogZm9yIHJlYWwgc2VydmljZSBsb29rdXBzCiAJICovCkBAIC0xMDg5LDYgKzEwOTAsMjIgQEAKIAlhdG9taWNfaW5jKCZjdGxfY3AtPm5fY29udHJvbCk7CiB9CiAKKy8qCisgKiBJUFZTIG5ldG5zIGluaXQgJiBjbGVhbnVwIGZ1bmN0aW9ucworICovCitleHRlcm4gaW50IF9faXBfdnNfZXN0aW1hdG9yX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiBpbnQgX19pcF92c19jb250cm9sX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiBpbnQgX19pcF92c19wcm90b2NvbF9pbml0KHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gaW50IF9faXBfdnNfYXBwX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiBpbnQgX19pcF92c19jb25uX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiBpbnQgX19pcF92c19zeW5jX2luaXQoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIF9faXBfdnNfY29ubl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX2FwcF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKK2V4dGVybiB2b2lkIF9faXBfdnNfY29udHJvbF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCk7CitleHRlcm4gdm9pZCBfX2lwX3ZzX3N5bmNfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpOworZXh0ZXJuIHZvaWQgX19pcF92c19zZXJ2aWNlX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KTsKIAogLyoKICAqICAgICAgSVBWUyBhcHBsaWNhdGlvbiBmdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19wZHUuaCBiL2luY2x1ZGUvbmV0L2xsY19wZHUuaAppbmRleCA3NWI4ZTI5Li5mNTdlN2Q0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGNfcGR1LmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX3BkdS5oCkBAIC0xOTksNyArMTk5LDcgQEAKIAl1OCBzc2FwOwogCXU4IGN0cmxfMTsKIAl1OCBjdHJsXzI7Ci19OworfSBfX3BhY2tlZDsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV9zbiAqbGxjX3BkdV9zbl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTIxMSw3ICsyMTEsNyBAQAogCXU4IGRzYXA7CiAJdTggc3NhcDsKIAl1OCBjdHJsXzE7Ci19OworfSBfX3BhY2tlZDsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbGxjX3BkdV91biAqbGxjX3BkdV91bl9oZHIoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTM1OSw3ICszNTksNyBAQAogCXU4IGZtdF9pZDsJLyogYWx3YXlzIDB4ODEgZm9yIExMQyAqLwogCXU4IHR5cGU7CS8qIGRpZmZlcmVudCBpZiBOVUxML25vbi1OVUxMIExTQVAgKi8KIAl1OCBydzsJCS8qIHNlbmRlciByZWNlaXZlIHdpbmRvdyAqLwotfTsKK30gX19wYWNrZWQ7CiAKIC8qKgogICoJbGxjX3BkdV9pbml0X2FzX3hpZF9jbWQgLSBzZXRzIGJ5dGVzIDMsIDQgJiA1IG9mIExMQyBoZWFkZXIgYXMgWElECkBAIC00MTUsNyArNDE1LDcgQEAKIAl1OCAgY3Vycl9zc3Y7CQkvKiBjdXJyZW50IHNlbmQgc3RhdGUgdmFyaWFibGUgdmFsICovCiAJdTggIGN1cnJfcnN2OwkJLyogY3VycmVudCByZWNlaXZlIHN0YXRlIHZhcmlhYmxlICovCiAJdTggIGluZF9iaXRzOwkJLyogaW5kaWNhdG9yIGJpdHMgc2V0IHdpdGggbWFjcm8gKi8KLX07Cit9IF9fcGFja2VkOwogCiBleHRlcm4gdm9pZCBsbGNfcGR1X3NldF9jbWRfcnNwKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUpOwogZXh0ZXJuIHZvaWQgbGxjX3BkdV9zZXRfcGZfYml0KHN0cnVjdCBza19idWZmICpza2IsIHU4IGJpdF92YWx1ZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmgKaW5kZXggNmFlNGJjNS4uMjBhZmVhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oCisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtMzI0LDYgKzMyNCw3IEBACiAJaW50CQkJKCp0bXBsX3NvcnQpKHN0cnVjdCB4ZnJtX3RtcGwgKipkc3QsIHN0cnVjdCB4ZnJtX3RtcGwgKipzcmMsIGludCBuKTsKIAlpbnQJCQkoKnN0YXRlX3NvcnQpKHN0cnVjdCB4ZnJtX3N0YXRlICoqZHN0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqKnNyYywgaW50IG4pOwogCWludAkJCSgqb3V0cHV0KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwlpbnQJCQkoKm91dHB1dF9maW5pc2gpKHN0cnVjdCBza19idWZmICpza2IpOwogCWludAkJCSgqZXh0cmFjdF9pbnB1dCkoc3RydWN0IHhmcm1fc3RhdGUgKngsCiAJCQkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJaW50CQkJKCpleHRyYWN0X291dHB1dCkoc3RydWN0IHhmcm1fc3RhdGUgKngsCkBAIC0xNDU0LDYgKzE0NTUsNyBAQAogZXh0ZXJuIGludCB4ZnJtNF9leHRyYWN0X291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm00X3ByZXBhcmVfb3V0cHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTRfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIGludCB4ZnJtNF9vdXRwdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNF90dW5uZWxfcmVnaXN0ZXIoc3RydWN0IHhmcm1fdHVubmVsICpoYW5kbGVyLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogZXh0ZXJuIGludCB4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiBleHRlcm4gaW50IHhmcm02X2V4dHJhY3RfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpOwpAQCAtMTQ3MCw2ICsxNDcyLDcgQEAKIGV4dGVybiBpbnQgeGZybTZfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNl9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm02X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2V4dGVybiBpbnQgeGZybTZfb3V0cHV0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgeGZybTZfZmluZF8xc3RmcmFnb3B0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSB1OCAqKnByZXZoZHIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaXdfY20uaCBiL2luY2x1ZGUvcmRtYS9pd19jbS5oCmluZGV4IGNiYjgyMmUuLjJkMDE5MWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9pd19jbS5oCisrKyBiL2luY2x1ZGUvcmRtYS9pd19jbS5oCkBAIC00NiwxOCArNDYsOSBAQAogCUlXX0NNX0VWRU5UX0NMT1NFCQkgLyogY2xvc2UgY29tcGxldGUgKi8KIH07CiAKLWVudW0gaXdfY21fZXZlbnRfc3RhdHVzIHsKLQlJV19DTV9FVkVOVF9TVEFUVVNfT0sgPSAwLAkgLyogcmVxdWVzdCBzdWNjZXNzZnVsICovCi0JSVdfQ01fRVZFTlRfU1RBVFVTX0FDQ0VQVEVEID0gMCwgLyogY29ubmVjdCByZXF1ZXN0IGFjY2VwdGVkICovCi0JSVdfQ01fRVZFTlRfU1RBVFVTX1JFSkVDVEVELAkgLyogY29ubmVjdCByZXF1ZXN0IHJlamVjdGVkICovCi0JSVdfQ01fRVZFTlRfU1RBVFVTX1RJTUVPVVQsCSAvKiB0aGUgb3BlcmF0aW9uIHRpbWVkIG91dCAqLwotCUlXX0NNX0VWRU5UX1NUQVRVU19SRVNFVCwJIC8qIHJlc2V0IGZyb20gcmVtb3RlIHBlZXIgKi8KLQlJV19DTV9FVkVOVF9TVEFUVVNfRUlOVkFMLAkgLyogYXN5bmNocm9ub3VzIGZhaWx1cmUgZm9yIGJhZCBwYXJtICovCi19OwotCiBzdHJ1Y3QgaXdfY21fZXZlbnQgewogCWVudW0gaXdfY21fZXZlbnRfdHlwZSBldmVudDsKLQllbnVtIGl3X2NtX2V2ZW50X3N0YXR1cyBzdGF0dXM7CisJaW50CQkJIHN0YXR1czsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9jYWxfYWRkcjsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVtb3RlX2FkZHI7CiAJdm9pZCAqcHJpdmF0ZV9kYXRhOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL3JkbWFfY20uaCBiL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmgKaW5kZXggNGZhZTkwMy4uMTY5ZjdhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL3JkbWFfY20uaAorKysgYi9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oCkBAIC0zMjksNCArMzI5LDE0IEBACiAgKi8KIHZvaWQgcmRtYV9zZXRfc2VydmljZV90eXBlKHN0cnVjdCByZG1hX2NtX2lkICppZCwgaW50IHRvcyk7CiAKKy8qKgorICogcmRtYV9zZXRfcmV1c2VhZGRyIC0gQWxsb3cgdGhlIHJldXNlIG9mIGxvY2FsIGFkZHJlc3NlcyB3aGVuIGJpbmRpbmcKKyAqICAgIHRoZSByZG1hX2NtX2lkLgorICogQGlkOiBDb21tdW5pY2F0aW9uIGlkZW50aWZpZXIgdG8gY29uZmlndXJlLgorICogQHJldXNlOiBWYWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSBib3VuZCBhZGRyZXNzIGlzIHJldXNhYmxlLgorICoKKyAqIFJldXNlIG11c3QgYmUgc2V0IGJlZm9yZSBhbiBhZGRyZXNzIGlzIGJvdW5kIHRvIHRoZSBpZC4KKyAqLworaW50IHJkbWFfc2V0X3JldXNlYWRkcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIGludCByZXVzZSk7CisKICNlbmRpZiAvKiBSRE1BX0NNX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9yZG1hX3VzZXJfY20uaCBiL2luY2x1ZGUvcmRtYS9yZG1hX3VzZXJfY20uaAppbmRleCAxZDE2NTAyLi5mYzgyYzE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvcmRtYV91c2VyX2NtLmgKKysrIGIvaW5jbHVkZS9yZG1hL3JkbWFfdXNlcl9jbS5oCkBAIC0yMjEsOCArMjIxLDkgQEAKIAogLyogT3B0aW9uIGRldGFpbHMgKi8KIGVudW0gewotCVJETUFfT1BUSU9OX0lEX1RPUwk9IDAsCi0JUkRNQV9PUFRJT05fSUJfUEFUSAk9IDEKKwlSRE1BX09QVElPTl9JRF9UT1MJID0gMCwKKwlSRE1BX09QVElPTl9JRF9SRVVTRUFERFIgPSAxLAorCVJETUFfT1BUSU9OX0lCX1BBVEgJID0gMQogfTsKIAogc3RydWN0IHJkbWFfdWNtX3NldF9vcHRpb24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfZGV2aWNlLmggYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAppbmRleCAyZDNlYzUwLi5kZDgyZTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaApAQCAtMTY5LDYgKzE2OSw3IEBACiAJCQkJc2Rldl9kZXY7CiAKIAlzdHJ1Y3QgZXhlY3V0ZV93b3JrCWV3OyAvKiB1c2VkIHRvIGdldCBwcm9jZXNzIGNvbnRleHQgb24gcHV0ICovCisJc3RydWN0IHdvcmtfc3RydWN0CXJlcXVldWVfd29yazsKIAogCXN0cnVjdCBzY3NpX2RoX2RhdGEJKnNjc2lfZGhfZGF0YTsKIAllbnVtIHNjc2lfZGV2aWNlX3N0YXRlIHNkZXZfc3RhdGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9nZnBmbGFncy5oIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvZ2ZwZmxhZ3MuaAppbmRleCBlMzYxNWMwLi45ZmUzYTM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9nZnBmbGFncy5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2dmcGZsYWdzLmgKQEAgLTEwLDYgKzEwLDcgQEAKICAqLwogI2RlZmluZSBzaG93X2dmcF9mbGFncyhmbGFncykJCQkJCQlcCiAJKGZsYWdzKSA/IF9fcHJpbnRfZmxhZ3MoZmxhZ3MsICJ8IiwJCQkJXAorCXsodW5zaWduZWQgbG9uZylHRlBfVFJBTlNIVUdFLAkJIkdGUF9UUkFOU0hVR0UifSwJXAogCXsodW5zaWduZWQgbG9uZylHRlBfSElHSFVTRVJfTU9WQUJMRSwJIkdGUF9ISUdIVVNFUl9NT1ZBQkxFIn0sIFwKIAl7KHVuc2lnbmVkIGxvbmcpR0ZQX0hJR0hVU0VSLAkJIkdGUF9ISUdIVVNFUiJ9LAlcCiAJeyh1bnNpZ25lZCBsb25nKUdGUF9VU0VSLAkJIkdGUF9VU0VSIn0sCQlcCkBAIC0zMiw2ICszMyw5IEBACiAJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX0hBUkRXQUxMLAkJIkdGUF9IQVJEV0FMTCJ9LAlcCiAJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX1RISVNOT0RFLAkJIkdGUF9USElTTk9ERSJ9LAlcCiAJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX1JFQ0xBSU1BQkxFLAkiR0ZQX1JFQ0xBSU1BQkxFIn0sCVwKLQl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTU9WQUJMRSwJCSJHRlBfTU9WQUJMRSJ9CQlcCisJeyh1bnNpZ25lZCBsb25nKV9fR0ZQX01PVkFCTEUsCQkiR0ZQX01PVkFCTEUifSwJCVwKKwl7KHVuc2lnbmVkIGxvbmcpX19HRlBfTk9UUkFDSywJCSJHRlBfTk9UUkFDSyJ9LAkJXAorCXsodW5zaWduZWQgbG9uZylfX0dGUF9OT19LU1dBUEQsCSJHRlBfTk9fS1NXQVBEIn0sCVwKKwl7KHVuc2lnbmVkIGxvbmcpX19HRlBfT1RIRVJfTk9ERSwJIkdGUF9PVEhFUl9OT0RFIn0JXAogCSkgOiAiR0ZQX05PV0FJVCIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS94ZW4vZXZlbnRzLmggYi9pbmNsdWRlL3hlbi9ldmVudHMuaAppbmRleCBmMWI4N2FkLi45YWYyMWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL3hlbi9ldmVudHMuaAorKysgYi9pbmNsdWRlL3hlbi9ldmVudHMuaApAQCAtODUsNyArODUsOCBAQAogaW50IHhlbl9hbGxvY2F0ZV9waXJxX21zaShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2MpOwogLyogQmluZCBhbiBQU0kgcGlycSB0byBhbiBpcnEuICovCiBpbnQgeGVuX2JpbmRfcGlycV9tc2lfdG9faXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYywKLQkJCSAgICAgaW50IHBpcnEsIGludCB2ZWN0b3IsIGNvbnN0IGNoYXIgKm5hbWUpOworCQkJICAgICBpbnQgcGlycSwgaW50IHZlY3RvciwgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgZG9taWRfdCBkb21pZCk7CiAjZW5kaWYKIAogLyogRGUtYWxsb2NhdGVzIHRoZSBhYm92ZSBtZW50aW9uZWQgcGh5c2ljYWwgaW50ZXJydXB0LiAqLwpAQCAtOTQsNCArOTUsMTAgQEAKIC8qIFJldHVybiBpcnEgZnJvbSBwaXJxICovCiBpbnQgeGVuX2lycV9mcm9tX3BpcnEodW5zaWduZWQgcGlycSk7CiAKKy8qIFJldHVybiB0aGUgcGlycSBhbGxvY2F0ZWQgdG8gdGhlIGlycS4gKi8KK2ludCB4ZW5fcGlycV9mcm9tX2lycSh1bnNpZ25lZCBpcnEpOworCisvKiBEZXRlcm1pbmUgd2hldGhlciB0byBpZ25vcmUgdGhpcyBJUlEgaWYgaXQgaXMgcGFzc2VkIHRvIGEgZ3Vlc3QuICovCitpbnQgeGVuX3Rlc3RfaXJxX3NoYXJlZChpbnQgaXJxKTsKKwogI2VuZGlmCS8qIF9YRU5fRVZFTlRTX0ggKi8KZGlmZiAtLWdpdCBhL2luaXQvS2NvbmZpZyBiL2luaXQvS2NvbmZpZwppbmRleCA1NjI0MGU3Li5hZjk1OGFkIDEwMDY0NAotLS0gYS9pbml0L0tjb25maWcKKysrIGIvaW5pdC9LY29uZmlnCkBAIC04MjcsNiArODI3LDExIEBACiAJICBkZXNrdG9wIGFwcGxpY2F0aW9ucy4gIFRhc2sgZ3JvdXAgYXV0b2dlbmVyYXRpb24gaXMgY3VycmVudGx5IGJhc2VkCiAJICB1cG9uIHRhc2sgc2Vzc2lvbi4KIAorY29uZmlnIFNDSEVEX1RUV1VfUVVFVUUKKwlib29sCisJZGVwZW5kcyBvbiAhU1BBUkMzMgorCWRlZmF1bHQgeQorCiBjb25maWcgTU1fT1dORVIKIAlib29sCiAKQEAgLTkyNCwxNCArOTI5LDYgQEAKICAgICAgICAgICBlbnZpcm9ubWVudHMgd2hpY2ggY2FuIHRvbGVyYXRlIGEgIm5vbi1zdGFuZGFyZCIga2VybmVsLgogICAgICAgICAgIE9ubHkgdXNlIHRoaXMgaWYgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KIAotY29uZmlnIEVNQkVEREVECi0JYm9vbCAiRW1iZWRkZWQgc3lzdGVtIgotCXNlbGVjdCBFWFBFUlQKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBzaG91bGQgYmUgZW5hYmxlZCBpZiBjb21waWxpbmcgdGhlIGtlcm5lbCBmb3IKLQkgIGFuIGVtYmVkZGVkIHN5c3RlbSBzbyBjZXJ0YWluIGV4cGVydCBvcHRpb25zIGFyZSBhdmFpbGFibGUKLQkgIGZvciBjb25maWd1cmF0aW9uLgotCiBjb25maWcgVUlEMTYKIAlib29sICJFbmFibGUgMTYtYml0IFVJRCBzeXN0ZW0gY2FsbHMiIGlmIEVYUEVSVAogCWRlcGVuZHMgb24gQVJNIHx8IEJMQUNLRklOIHx8IENSSVMgfHwgRlJWIHx8IEg4MzAwIHx8IFg4Nl8zMiB8fCBNNjhLIHx8IChTMzkwICYmICE2NEJJVCkgfHwgU1VQRVJIIHx8IFNQQVJDMzIgfHwgKFNQQVJDNjQgJiYgQ09NUEFUKSB8fCBVTUwgfHwgKFg4Nl82NCAmJiBJQTMyX0VNVUxBVElPTikKQEAgLTExMDQsNiArMTEwMSwxNCBAQAogICAgICAgICAgIGJ5IHNvbWUgaGlnaCBwZXJmb3JtYW5jZSB0aHJlYWRlZCBhcHBsaWNhdGlvbnMuIERpc2FibGluZwogICAgICAgICAgIHRoaXMgb3B0aW9uIHNhdmVzIGFib3V0IDdrLgogCitjb25maWcgRU1CRURERUQKKwlib29sICJFbWJlZGRlZCBzeXN0ZW0iCisJc2VsZWN0IEVYUEVSVAorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHNob3VsZCBiZSBlbmFibGVkIGlmIGNvbXBpbGluZyB0aGUga2VybmVsIGZvcgorCSAgYW4gZW1iZWRkZWQgc3lzdGVtIHNvIGNlcnRhaW4gZXhwZXJ0IG9wdGlvbnMgYXJlIGF2YWlsYWJsZQorCSAgZm9yIGNvbmZpZ3VyYXRpb24uCisKIGNvbmZpZyBIQVZFX1BFUkZfRVZFTlRTCiAJYm9vbAogCWhlbHAKZGlmZiAtLWdpdCBhL2luaXQvbWFpbi5jIGIvaW5pdC9tYWluLmMKaW5kZXggNGE5NDc5ZS4uNDhkZjg4MiAxMDA2NDQKLS0tIGEvaW5pdC9tYWluLmMKKysrIGIvaW5pdC9tYWluLmMKQEAgLTU4MCw4ICs1ODAsOCBAQAogI2VuZGlmCiAJcGFnZV9jZ3JvdXBfaW5pdCgpOwogCWVuYWJsZV9kZWJ1Z19wYWdlYWxsb2MoKTsKLQlrbWVtbGVha19pbml0KCk7CiAJZGVidWdfb2JqZWN0c19tZW1faW5pdCgpOworCWttZW1sZWFrX2luaXQoKTsKIAlzZXR1cF9wZXJfY3B1X3BhZ2VzZXQoKTsKIAludW1hX3BvbGljeV9pbml0KCk7CiAJaWYgKGxhdGVfdGltZV9pbml0KQpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDg1Y2JmYjMuLmU5Y2YxOTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTIxLDcgKzIxLDYgQEAKIENGTEFHU19SRU1PVkVfcnRtdXRleC1kZWJ1Zy5vID0gLXBnCiBDRkxBR1NfUkVNT1ZFX2Nncm91cC1kZWJ1Zy5vID0gLXBnCiBDRkxBR1NfUkVNT1ZFX3NjaGVkX2Nsb2NrLm8gPSAtcGcKLUNGTEFHU19SRU1PVkVfcGVyZl9ldmVudC5vID0gLXBnCiBDRkxBR1NfUkVNT1ZFX2lycV93b3JrLm8gPSAtcGcKIGVuZGlmCiAKQEAgLTEwMyw4ICsxMDIsOSBAQAogb2JqLSQoQ09ORklHX1RSQUNFUE9JTlRTKSArPSB0cmFjZS8KIG9iai0kKENPTkZJR19TTVApICs9IHNjaGVkX2NwdXByaS5vCiBvYmotJChDT05GSUdfSVJRX1dPUkspICs9IGlycV93b3JrLm8KLW9iai0kKENPTkZJR19QRVJGX0VWRU5UUykgKz0gcGVyZl9ldmVudC5vCi1vYmotJChDT05GSUdfSEFWRV9IV19CUkVBS1BPSU5UKSArPSBod19icmVha3BvaW50Lm8KKworb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKSArPSBldmVudHMvCisKIG9iai0kKENPTkZJR19VU0VSX1JFVFVSTl9OT1RJRklFUikgKz0gdXNlci1yZXR1cm4tbm90aWZpZXIubwogb2JqLSQoQ09ORklHX1BBREFUQSkgKz0gcGFkYXRhLm8KIG9iai0kKENPTkZJR19DUkFTSF9EVU1QKSArPSBjcmFzaF9kdW1wLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCmluZGV4IGJmMGM3MzQuLjMyYTgwZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jYXBhYmlsaXR5LmMKKysrIGIva2VybmVsL2NhcGFiaWxpdHkuYwpAQCAtMzk5LDMgKzM5OSwxNSBAQAogCXJldHVybiBuc19jYXBhYmxlKHRhc2tfY3JlZF94eHgodCwgdXNlciktPnVzZXJfbnMsIGNhcCk7CiB9CiBFWFBPUlRfU1lNQk9MKHRhc2tfbnNfY2FwYWJsZSk7CisKKy8qKgorICogbnNvd25fY2FwYWJsZSAtIENoZWNrIHN1cGVyaW9yIGNhcGFiaWxpdHkgdG8gb25lJ3Mgb3duIHVzZXJfbnMKKyAqIEBjYXA6IFRoZSBjYXBhYmlsaXR5IGluIHF1ZXN0aW9uCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGN1cnJlbnQgdGFzayBoYXMgdGhlIGdpdmVuIHN1cGVyaW9yIGNhcGFiaWxpdHkKKyAqIHRhcmdldGVkIGF0IGl0cyBvd24gdXNlciBuYW1lc3BhY2UuCisgKi8KK2Jvb2wgbnNvd25fY2FwYWJsZShpbnQgY2FwKQoreworCXJldHVybiBuc19jYXBhYmxlKGN1cnJlbnRfdXNlcl9ucygpLCBjYXApOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdXNldC5jIGIva2VybmVsL2NwdXNldC5jCmluZGV4IDMzZWVlMTYuLjJiYjhjMmUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHVzZXQuYworKysgYi9rZXJuZWwvY3B1c2V0LmMKQEAgLTExNTksNyArMTE1OSw3IEBACiBzdGF0aWMgaW50IHVwZGF0ZV9yZWxheF9kb21haW5fbGV2ZWwoc3RydWN0IGNwdXNldCAqY3MsIHM2NCB2YWwpCiB7CiAjaWZkZWYgQ09ORklHX1NNUAotCWlmICh2YWwgPCAtMSB8fCB2YWwgPj0gU0RfTFZfTUFYKQorCWlmICh2YWwgPCAtMSB8fCB2YWwgPj0gc2NoZWRfZG9tYWluX2xldmVsX21heCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEva2VybmVsL2NyZWQuYyBiL2tlcm5lbC9jcmVkLmMKaW5kZXggNTU1N2I1NS4uODA5M2MxNiAxMDA2NDQKLS0tIGEva2VybmVsL2NyZWQuYworKysgYi9rZXJuZWwvY3JlZC5jCkBAIC01NCw2ICs1NCw3IEBACiAJLmNhcF9lZmZlY3RpdmUJCT0gQ0FQX0lOSVRfRUZGX1NFVCwKIAkuY2FwX2JzZXQJCT0gQ0FQX0lOSVRfQlNFVCwKIAkudXNlcgkJCT0gSU5JVF9VU0VSLAorCS51c2VyX25zCQk9ICZpbml0X3VzZXJfbnMsCiAJLmdyb3VwX2luZm8JCT0gJmluaXRfZ3JvdXBzLAogI2lmZGVmIENPTkZJR19LRVlTCiAJLnRnY3JlZAkJCT0gJmluaXRfdGdjcmVkLApAQCAtNDEwLDYgKzQxMSwxMSBAQAogCQkJZ290byBlcnJvcl9wdXQ7CiAJfQogCisJLyogY2FjaGUgdXNlcl9ucyBpbiBjcmVkLiAgRG9lc24ndCBuZWVkIGEgcmVmY291bnQgYmVjYXVzZSBpdCB3aWxsCisJICogc3RheSBwaW5uZWQgYnkgY3JlZC0+dXNlcgorCSAqLworCW5ldy0+dXNlcl9ucyA9IG5ldy0+dXNlci0+dXNlcl9uczsKKwogI2lmZGVmIENPTkZJR19LRVlTCiAJLyogbmV3IHRocmVhZHMgZ2V0IHRoZWlyIG93biB0aHJlYWQga2V5cmluZ3MgaWYgdGhlaXIgcGFyZW50IGFscmVhZHkKIAkgKiBoYWQgb25lICovCkBAIC03NDEsMTIgKzc0Nyw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNldF9jcmVhdGVfZmlsZXNfYXMpOwogCi1zdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKmN1cnJlbnRfdXNlcl9ucyh2b2lkKQotewotCXJldHVybiBfY3VycmVudF91c2VyX25zKCk7Ci19Ci1FWFBPUlRfU1lNQk9MKGN1cnJlbnRfdXNlcl9ucyk7Ci0KICNpZmRlZiBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMKIAogYm9vbCBjcmVkc19hcmVfaW52YWxpZChjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvTWFrZWZpbGUgYi9rZXJuZWwvZXZlbnRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjZTIzZDMKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvZXZlbnRzL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAoraWZkZWYgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUgorQ0ZMQUdTX1JFTU9WRV9jb3JlLm8gPSAtcGcKK2VuZGlmCisKK29iai15IDo9IGNvcmUubworb2JqLSQoQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCkgKz0gaHdfYnJlYWtwb2ludC5vCmRpZmYgLS1naXQgYS9rZXJuZWwvcGVyZl9ldmVudC5jIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKc2ltaWxhcml0eSBpbmRleCA5OCUKcmVuYW1lIGZyb20ga2VybmVsL3BlcmZfZXZlbnQuYwpyZW5hbWUgdG8ga2VybmVsL2V2ZW50cy9jb3JlLmMKaW5kZXggOGU4MWE5OC4uMGZjMzRhMyAxMDA2NDQKLS0tIGEva2VybmVsL3BlcmZfZXZlbnQuYworKysgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwpAQCAtMiw4ICsyLDggQEAKICAqIFBlcmZvcm1hbmNlIGV2ZW50cyBjb3JlIGNvZGU6CiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBSZWQgSGF0LCBJbmMuLCBJbmdvIE1vbG5hcgotICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFJlZCBIYXQsIEluYy4sIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDExIFJlZCBIYXQsIEluYy4sIEluZ28gTW9sbmFyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LTIwMTEgUmVkIEhhdCwgSW5jLiwgUGV0ZXIgWmlqbHN0cmEgPHB6aWpsc3RyQHJlZGhhdC5jb20+CiAgKiAgQ29weXJpZ2h0ICCpICAyMDA5IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycC4gPHBhdWx1c0BhdTEuaWJtLmNvbT4KICAqCiAgKiBGb3IgbGljZW5zaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKQEAgLTM5LDEwICszOSwxMCBAQAogI2luY2x1ZGUgPGFzbS9pcnFfcmVncy5oPgogCiBzdHJ1Y3QgcmVtb3RlX2Z1bmN0aW9uX2NhbGwgewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQlpbnQgKCpmdW5jKSh2b2lkICppbmZvKTsKLQl2b2lkICppbmZvOwotCWludCByZXQ7CisJc3RydWN0IHRhc2tfc3RydWN0CSpwOworCWludAkJCSgqZnVuYykodm9pZCAqaW5mbyk7CisJdm9pZAkJCSppbmZvOworCWludAkJCXJldDsKIH07CiAKIHN0YXRpYyB2b2lkIHJlbW90ZV9mdW5jdGlvbih2b2lkICpkYXRhKQpAQCAtNzYsMTAgKzc2LDEwIEBACiB0YXNrX2Z1bmN0aW9uX2NhbGwoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgKCpmdW5jKSAodm9pZCAqaW5mbyksIHZvaWQgKmluZm8pCiB7CiAJc3RydWN0IHJlbW90ZV9mdW5jdGlvbl9jYWxsIGRhdGEgPSB7Ci0JCS5wID0gcCwKLQkJLmZ1bmMgPSBmdW5jLAotCQkuaW5mbyA9IGluZm8sCi0JCS5yZXQgPSAtRVNSQ0gsIC8qIE5vIHN1Y2ggKHJ1bm5pbmcpIHByb2Nlc3MgKi8KKwkJLnAJPSBwLAorCQkuZnVuYwk9IGZ1bmMsCisJCS5pbmZvCT0gaW5mbywKKwkJLnJldAk9IC1FU1JDSCwgLyogTm8gc3VjaCAocnVubmluZykgcHJvY2VzcyAqLwogCX07CiAKIAlpZiAodGFza19jdXJyKHApKQpAQCAtMTAwLDEwICsxMDAsMTAgQEAKIHN0YXRpYyBpbnQgY3B1X2Z1bmN0aW9uX2NhbGwoaW50IGNwdSwgaW50ICgqZnVuYykgKHZvaWQgKmluZm8pLCB2b2lkICppbmZvKQogewogCXN0cnVjdCByZW1vdGVfZnVuY3Rpb25fY2FsbCBkYXRhID0gewotCQkucCA9IE5VTEwsCi0JCS5mdW5jID0gZnVuYywKLQkJLmluZm8gPSBpbmZvLAotCQkucmV0ID0gLUVOWElPLCAvKiBObyBzdWNoIENQVSAqLworCQkucAk9IE5VTEwsCisJCS5mdW5jCT0gZnVuYywKKwkJLmluZm8JPSBpbmZvLAorCQkucmV0CT0gLUVOWElPLCAvKiBObyBzdWNoIENQVSAqLwogCX07CiAKIAlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LCByZW1vdGVfZnVuY3Rpb24sICZkYXRhLCAxKTsKQEAgLTEyNSw3ICsxMjUsNyBAQAogICogcGVyZl9zY2hlZF9ldmVudHMgOiA+MCBldmVudHMgZXhpc3QKICAqIHBlcmZfY2dyb3VwX2V2ZW50czogPjAgcGVyLWNwdSBjZ3JvdXAgZXZlbnRzIGV4aXN0IG9uIHRoaXMgY3B1CiAgKi8KLWF0b21pY190IHBlcmZfc2NoZWRfZXZlbnRzIF9fcmVhZF9tb3N0bHk7CitzdHJ1Y3QganVtcF9sYWJlbF9rZXkgcGVyZl9zY2hlZF9ldmVudHMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShhdG9taWNfdCwgcGVyZl9jZ3JvdXBfZXZlbnRzKTsKIAogc3RhdGljIGF0b21pY190IG5yX21tYXBfZXZlbnRzIF9fcmVhZF9tb3N0bHk7CkBAIC01NDI5LDcgKzU0MjksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLWF0b21pY190IHBlcmZfc3dldmVudF9lbmFibGVkW1BFUkZfQ09VTlRfU1dfTUFYXTsKK3N0cnVjdCBqdW1wX2xhYmVsX2tleSBwZXJmX3N3ZXZlbnRfZW5hYmxlZFtQRVJGX0NPVU5UX1NXX01BWF07CiAKIHN0YXRpYyB2b2lkIHN3X3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCiB7CkBAIC03NDQ1LDExICs3NDQ1LDExIEBACiB9CiAKIHN0cnVjdCBjZ3JvdXBfc3Vic3lzIHBlcmZfc3Vic3lzID0gewotCS5uYW1lID0gInBlcmZfZXZlbnQiLAotCS5zdWJzeXNfaWQgPSBwZXJmX3N1YnN5c19pZCwKLQkuY3JlYXRlID0gcGVyZl9jZ3JvdXBfY3JlYXRlLAotCS5kZXN0cm95ID0gcGVyZl9jZ3JvdXBfZGVzdHJveSwKLQkuZXhpdCA9IHBlcmZfY2dyb3VwX2V4aXQsCi0JLmF0dGFjaCA9IHBlcmZfY2dyb3VwX2F0dGFjaCwKKwkubmFtZQkJPSAicGVyZl9ldmVudCIsCisJLnN1YnN5c19pZAk9IHBlcmZfc3Vic3lzX2lkLAorCS5jcmVhdGUJCT0gcGVyZl9jZ3JvdXBfY3JlYXRlLAorCS5kZXN0cm95CT0gcGVyZl9jZ3JvdXBfZGVzdHJveSwKKwkuZXhpdAkJPSBwZXJmX2Nncm91cF9leGl0LAorCS5hdHRhY2gJCT0gcGVyZl9jZ3JvdXBfYXR0YWNoLAogfTsKICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX1BFUkYgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9od19icmVha3BvaW50LmMgYi9rZXJuZWwvZXZlbnRzL2h3X2JyZWFrcG9pbnQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20ga2VybmVsL2h3X2JyZWFrcG9pbnQuYwpyZW5hbWUgdG8ga2VybmVsL2V2ZW50cy9od19icmVha3BvaW50LmMKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IGY1ZDJmNjMuLjhkZDg3NDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMTAxNiw3ICsxMDE2LDcgQEAKIAkvKgogCSAqIEZJWE1FOiBkbyB0aGF0IG9ubHkgd2hlbiBuZWVkZWQsIHVzaW5nIHNjaGVkX2V4aXQgdHJhY2Vwb2ludAogCSAqLwotCWZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHRzayk7CisJcHRyYWNlX3B1dF9icmVha3BvaW50cyh0c2spOwogCiAJZXhpdF9ub3RpZnkodHNrLCBncm91cF9kZWFkKTsKICNpZmRlZiBDT05GSUdfTlVNQQpkaWZmIC0tZ2l0IGEva2VybmVsL2V4dGFibGUuYyBiL2tlcm5lbC9leHRhYmxlLmMKaW5kZXggN2Y4ZjI2My4uYzJkNjI1ZiAxMDA2NDQKLS0tIGEva2VybmVsL2V4dGFibGUuYworKysgYi9rZXJuZWwvZXh0YWJsZS5jCkBAIC03Miw2ICs3MiwxNCBAQAogCXJldHVybiAwOwogfQogCitpbnQgY29yZV9rZXJuZWxfZGF0YSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaWYgKGFkZHIgPj0gKHVuc2lnbmVkIGxvbmcpX3NkYXRhICYmCisJICAgIGFkZHIgPCAodW5zaWduZWQgbG9uZylfZWRhdGEpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBpbnQgX19rZXJuZWxfdGV4dF9hZGRyZXNzKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlpZiAoY29yZV9rZXJuZWxfdGV4dChhZGRyKSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGU3NTQ4ZGUuLjJiNDRkODIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtMTEwMyw3ICsxMTAzLDYgQEAKIAogCXBvc2l4X2NwdV90aW1lcnNfaW5pdChwKTsKIAotCXAtPmxvY2tfZGVwdGggPSAtMTsJCS8qIC0xID0gbm8gbG9jayAqLwogCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZwLT5zdGFydF90aW1lKTsKIAlwLT5yZWFsX3N0YXJ0X3RpbWUgPSBwLT5zdGFydF90aW1lOwogCW1vbm90b25pY190b19ib290YmFzZWQoJnAtPnJlYWxfc3RhcnRfdGltZSk7CkBAIC0xMTUzLDcgKzExNTIsNyBAQAogI2VuZGlmCiAKIAkvKiBQZXJmb3JtIHNjaGVkdWxlciByZWxhdGVkIHNldHVwLiBBc3NpZ24gdGhpcyB0YXNrIHRvIGEgQ1BVLiAqLwotCXNjaGVkX2ZvcmsocCwgY2xvbmVfZmxhZ3MpOworCXNjaGVkX2ZvcmsocCk7CiAKIAlyZXR2YWwgPSBwZXJmX2V2ZW50X2luaXRfdGFzayhwKTsKIAlpZiAocmV0dmFsKQpAQCAtMTQ2NCw3ICsxNDYzLDcgQEAKIAkJICovCiAJCXAtPmZsYWdzICY9IH5QRl9TVEFSVElORzsKIAotCQl3YWtlX3VwX25ld190YXNrKHAsIGNsb25lX2ZsYWdzKTsKKwkJd2FrZV91cF9uZXdfdGFzayhwKTsKIAogCQl0cmFjZWhvb2tfcmVwb3J0X2Nsb25lX2NvbXBsZXRlKHRyYWNlLCByZWdzLAogCQkJCQkJY2xvbmVfZmxhZ3MsIG5yLCBwKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9mcmVlemVyLmMgYi9rZXJuZWwvZnJlZXplci5jCmluZGV4IDY2ZWNkMmUuLjdiMDFkZTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mcmVlemVyLmMKKysrIGIva2VybmVsL2ZyZWV6ZXIuYwpAQCAtMTcsNyArMTcsNyBAQAogewogCWlmICghdW5saWtlbHkoY3VycmVudC0+ZmxhZ3MgJiBQRl9OT0ZSRUVaRSkpIHsKIAkJY3VycmVudC0+ZmxhZ3MgfD0gUEZfRlJPWkVOOwotCQl3bWIoKTsKKwkJc21wX3dtYigpOwogCX0KIAljbGVhcl9mcmVlemVfZmxhZyhjdXJyZW50KTsKIH0KQEAgLTkzLDcgKzkzLDcgQEAKIAkgKiB0aGUgdGFzayBhcyBmcm96ZW4gYW5kIG5leHQgY2xlYXJzIGl0cyBUSUZfRlJFRVpFLgogCSAqLwogCWlmICghZnJlZXppbmcocCkpIHsKLQkJcm1iKCk7CisJCXNtcF9ybWIoKTsKIAkJaWYgKGZyb3plbihwKSkKIAkJCXJldHVybiBmYWxzZTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2hydGltZXIuYyBiL2tlcm5lbC9ocnRpbWVyLmMKaW5kZXggOTAxNzQ3OC4uZGJiYmY3ZCAxMDA2NDQKLS0tIGEva2VybmVsL2hydGltZXIuYworKysgYi9rZXJuZWwvaHJ0aW1lci5jCkBAIC04MSw3ICs4MSwxMSBAQAogCX0KIH07CiAKLXN0YXRpYyBpbnQgaHJ0aW1lcl9jbG9ja190b19iYXNlX3RhYmxlW01BWF9DTE9DS1NdOworc3RhdGljIGNvbnN0IGludCBocnRpbWVyX2Nsb2NrX3RvX2Jhc2VfdGFibGVbTUFYX0NMT0NLU10gPSB7CisJW0NMT0NLX1JFQUxUSU1FXQk9IEhSVElNRVJfQkFTRV9SRUFMVElNRSwKKwlbQ0xPQ0tfTU9OT1RPTklDXQk9IEhSVElNRVJfQkFTRV9NT05PVE9OSUMsCisJW0NMT0NLX0JPT1RUSU1FXQk9IEhSVElNRVJfQkFTRV9CT09UVElNRSwKK307CiAKIHN0YXRpYyBpbmxpbmUgaW50IGhydGltZXJfY2xvY2tpZF90b19iYXNlKGNsb2NraWRfdCBjbG9ja19pZCkKIHsKQEAgLTE3MjIsMTAgKzE3MjYsNiBAQAogCiB2b2lkIF9faW5pdCBocnRpbWVyc19pbml0KHZvaWQpCiB7Ci0JaHJ0aW1lcl9jbG9ja190b19iYXNlX3RhYmxlW0NMT0NLX1JFQUxUSU1FXSA9IEhSVElNRVJfQkFTRV9SRUFMVElNRTsKLQlocnRpbWVyX2Nsb2NrX3RvX2Jhc2VfdGFibGVbQ0xPQ0tfTU9OT1RPTklDXSA9IEhSVElNRVJfQkFTRV9NT05PVE9OSUM7Ci0JaHJ0aW1lcl9jbG9ja190b19iYXNlX3RhYmxlW0NMT0NLX0JPT1RUSU1FXSA9IEhSVElNRVJfQkFTRV9CT09UVElNRTsKLQogCWhydGltZXJfY3B1X25vdGlmeSgmaHJ0aW1lcnNfbmIsICh1bnNpZ25lZCBsb25nKUNQVV9VUF9QUkVQQVJFLAogCQkJICAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZocnRpbWVyc19uYik7CmRpZmYgLS1naXQgYS9rZXJuZWwvaHVuZ190YXNrLmMgYi9rZXJuZWwvaHVuZ190YXNrLmMKaW5kZXggNTNlYWQxNy4uZWE2NDAxMiAxMDA2NDQKLS0tIGEva2VybmVsL2h1bmdfdGFzay5jCisrKyBiL2tlcm5lbC9odW5nX3Rhc2suYwpAQCAtMzMsNyArMzMsNyBAQAogLyoKICAqIFplcm8gbWVhbnMgaW5maW5pdGUgdGltZW91dCAtIG5vIGNoZWNraW5nIGRvbmU6CiAgKi8KLXVuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseSBzeXNjdGxfaHVuZ190YXNrX3RpbWVvdXRfc2VjcyA9IDEyMDsKK3Vuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseSBzeXNjdGxfaHVuZ190YXNrX3RpbWVvdXRfc2VjcyA9IENPTkZJR19ERUZBVUxUX0hVTkdfVEFTS19USU1FT1VUOwogCiB1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgc3lzY3RsX2h1bmdfdGFza193YXJuaW5ncyA9IDEwOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL0tjb25maWcgYi9rZXJuZWwvaXJxL0tjb25maWcKaW5kZXggYzU3NGY5YS4uZDFkMDUxYjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvS2NvbmZpZworKysgYi9rZXJuZWwvaXJxL0tjb25maWcKQEAgLTQ4LDYgKzQ4LDEwIEBACiBjb25maWcgSVJRX0VER0VfRU9JX0hBTkRMRVIKICAgICAgICBib29sCiAKKyMgR2VuZXJpYyBjb25maWd1cmFibGUgaW50ZXJydXB0IGNoaXAgaW1wbGVtZW50YXRpb24KK2NvbmZpZyBHRU5FUklDX0lSUV9DSElQCisgICAgICAgYm9vbAorCiAjIFN1cHBvcnQgZm9yY2VkIGlycSB0aHJlYWRpbmcKIGNvbmZpZyBJUlFfRk9SQ0VEX1RIUkVBRElORwogICAgICAgIGJvb2wKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvTWFrZWZpbGUgYi9rZXJuZWwvaXJxL01ha2VmaWxlCmluZGV4IDU0MzI5Y2QuLjczMjkwMDUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvTWFrZWZpbGUKKysrIGIva2VybmVsL2lycS9NYWtlZmlsZQpAQCAtMSw1ICsxLDYgQEAKIAogb2JqLXkgOj0gaXJxZGVzYy5vIGhhbmRsZS5vIG1hbmFnZS5vIHNwdXJpb3VzLm8gcmVzZW5kLm8gY2hpcC5vIGR1bW15Y2hpcC5vIGRldnJlcy5vCitvYmotJChDT05GSUdfR0VORVJJQ19JUlFfQ0hJUCkgKz0gZ2VuZXJpYy1jaGlwLm8KIG9iai0kKENPTkZJR19HRU5FUklDX0lSUV9QUk9CRSkgKz0gYXV0b3Byb2JlLm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIG9iai0kKENPTkZJR19HRU5FUklDX1BFTkRJTkdfSVJRKSArPSBtaWdyYXRpb24ubwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCA0YWYxZTJiLi5kNWEzMDA5IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtMzEwLDYgKzMxMCw3IEBACiBvdXRfdW5sb2NrOgogCXJhd19zcGluX3VubG9jaygmZGVzYy0+bG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChoYW5kbGVfc2ltcGxlX2lycSk7CiAKIC8qKgogICoJaGFuZGxlX2xldmVsX2lycSAtIExldmVsIHR5cGUgaXJxIGhhbmRsZXIKQEAgLTU3Myw2ICs1NzQsNyBAQAogCWlmIChoYW5kbGUgIT0gaGFuZGxlX2JhZF9pcnEgJiYgaXNfY2hhaW5lZCkgewogCQlpcnFfc2V0dGluZ3Nfc2V0X25vcHJvYmUoZGVzYyk7CiAJCWlycV9zZXR0aW5nc19zZXRfbm9yZXF1ZXN0KGRlc2MpOworCQlpcnFfc2V0dGluZ3Nfc2V0X25vdGhyZWFkKGRlc2MpOwogCQlpcnFfc3RhcnR1cChkZXNjKTsKIAl9CiBvdXQ6CkBAIC02MTIsNiArNjE0LDcgQEAKIAogCWlycV9wdXRfZGVzY191bmxvY2soZGVzYywgZmxhZ3MpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJxX21vZGlmeV9zdGF0dXMpOwogCiAvKioKICAqCWlycV9jcHVfb25saW5lIC0gSW52b2tlIGFsbCBpcnFfY3B1X29ubGluZSBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2RlYnVnLmggYi9rZXJuZWwvaXJxL2RlYnVnLmgKaW5kZXggMzA2Y2JhMy4uOTdhOGJmYSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9kZWJ1Zy5oCisrKyBiL2tlcm5lbC9pcnEvZGVidWcuaApAQCAtMjcsNiArMjcsNyBAQAogCVAoSVJRX1BFUl9DUFUpOwogCVAoSVJRX05PUFJPQkUpOwogCVAoSVJRX05PUkVRVUVTVCk7CisJUChJUlFfTk9USFJFQUQpOwogCVAoSVJRX05PQVVUT0VOKTsKIAogCVBTKElSUVNfQVVUT0RFVEVDVCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2dlbmVyaWMtY2hpcC5jIGIva2VybmVsL2lycS9nZW5lcmljLWNoaXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWE5ZGI3Ci0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2lycS9nZW5lcmljLWNoaXAuYwpAQCAtMCwwICsxLDM1NCBAQAorLyoKKyAqIExpYnJhcnkgaW1wbGVtZW50aW5nIHRoZSBtb3N0IGNvbW1vbiBpcnEgY2hpcCBjYWxsYmFjayBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIFRob21hcyBHbGVpeG5lcgorICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgorCisjaW5jbHVkZSAiaW50ZXJuYWxzLmgiCisKK3N0YXRpYyBMSVNUX0hFQUQoZ2NfbGlzdCk7CitzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhnY19sb2NrKTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXJxX2NoaXBfcmVncyAqY3VyX3JlZ3Moc3RydWN0IGlycV9kYXRhICpkKQoreworCXJldHVybiAmY29udGFpbmVyX29mKGQtPmNoaXAsIHN0cnVjdCBpcnFfY2hpcF90eXBlLCBjaGlwKS0+cmVnczsKK30KKworLyoqCisgKiBpcnFfZ2Nfbm9vcCAtIE5PT1AgZnVuY3Rpb24KKyAqIEBkOiBpcnFfZGF0YQorICovCit2b2lkIGlycV9nY19ub29wKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKK30KKworLyoqCisgKiBpcnFfZ2NfbWFza19kaXNhYmxlX3JlZyAtIE1hc2sgY2hpcCB2aWEgZGlzYWJsZSByZWdpc3RlcgorICogQGQ6IGlycV9kYXRhCisgKgorICogQ2hpcCBoYXMgc2VwYXJhdGUgZW5hYmxlL2Rpc2FibGUgcmVnaXN0ZXJzIGluc3RlYWQgb2YgYSBzaW5nbGUgbWFzaworICogcmVnaXN0ZXIuCisgKi8KK3ZvaWQgaXJxX2djX21hc2tfZGlzYWJsZV9yZWcoc3RydWN0IGlycV9kYXRhICpkKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYyA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGQpOworCXUzMiBtYXNrID0gMSA8PCAoZC0+aXJxIC0gZ2MtPmlycV9iYXNlKTsKKworCWlycV9nY19sb2NrKGdjKTsKKwlpcnFfcmVnX3dyaXRlbChtYXNrLCBnYy0+cmVnX2Jhc2UgKyBjdXJfcmVncyhkKS0+ZGlzYWJsZSk7CisJZ2MtPm1hc2tfY2FjaGUgJj0gfm1hc2s7CisJaXJxX2djX3VubG9jayhnYyk7Cit9CisKKy8qKgorICogaXJxX2djX21hc2tfc2V0X21hc2tfYml0IC0gTWFzayBjaGlwIHZpYSBzZXR0aW5nIGJpdCBpbiBtYXNrIHJlZ2lzdGVyCisgKiBAZDogaXJxX2RhdGEKKyAqCisgKiBDaGlwIGhhcyBhIHNpbmdsZSBtYXNrIHJlZ2lzdGVyLiBWYWx1ZXMgb2YgdGhpcyByZWdpc3RlciBhcmUgY2FjaGVkCisgKiBhbmQgcHJvdGVjdGVkIGJ5IGdjLT5sb2NrCisgKi8KK3ZvaWQgaXJxX2djX21hc2tfc2V0X2JpdChzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdTMyIG1hc2sgPSAxIDw8IChkLT5pcnEgLSBnYy0+aXJxX2Jhc2UpOworCisJaXJxX2djX2xvY2soZ2MpOworCWdjLT5tYXNrX2NhY2hlIHw9IG1hc2s7CisJaXJxX3JlZ193cml0ZWwoZ2MtPm1hc2tfY2FjaGUsIGdjLT5yZWdfYmFzZSArIGN1cl9yZWdzKGQpLT5tYXNrKTsKKwlpcnFfZ2NfdW5sb2NrKGdjKTsKK30KKworLyoqCisgKiBpcnFfZ2NfbWFza19zZXRfbWFza19iaXQgLSBNYXNrIGNoaXAgdmlhIGNsZWFyaW5nIGJpdCBpbiBtYXNrIHJlZ2lzdGVyCisgKiBAZDogaXJxX2RhdGEKKyAqCisgKiBDaGlwIGhhcyBhIHNpbmdsZSBtYXNrIHJlZ2lzdGVyLiBWYWx1ZXMgb2YgdGhpcyByZWdpc3RlciBhcmUgY2FjaGVkCisgKiBhbmQgcHJvdGVjdGVkIGJ5IGdjLT5sb2NrCisgKi8KK3ZvaWQgaXJxX2djX21hc2tfY2xyX2JpdChzdHJ1Y3QgaXJxX2RhdGEgKmQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdTMyIG1hc2sgPSAxIDw8IChkLT5pcnEgLSBnYy0+aXJxX2Jhc2UpOworCisJaXJxX2djX2xvY2soZ2MpOworCWdjLT5tYXNrX2NhY2hlICY9IH5tYXNrOworCWlycV9yZWdfd3JpdGVsKGdjLT5tYXNrX2NhY2hlLCBnYy0+cmVnX2Jhc2UgKyBjdXJfcmVncyhkKS0+bWFzayk7CisJaXJxX2djX3VubG9jayhnYyk7Cit9CisKKy8qKgorICogaXJxX2djX3VubWFza19lbmFibGVfcmVnIC0gVW5tYXNrIGNoaXAgdmlhIGVuYWJsZSByZWdpc3RlcgorICogQGQ6IGlycV9kYXRhCisgKgorICogQ2hpcCBoYXMgc2VwYXJhdGUgZW5hYmxlL2Rpc2FibGUgcmVnaXN0ZXJzIGluc3RlYWQgb2YgYSBzaW5nbGUgbWFzaworICogcmVnaXN0ZXIuCisgKi8KK3ZvaWQgaXJxX2djX3VubWFza19lbmFibGVfcmVnKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1MzIgbWFzayA9IDEgPDwgKGQtPmlycSAtIGdjLT5pcnFfYmFzZSk7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisJaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3VyX3JlZ3MoZCktPmVuYWJsZSk7CisJZ2MtPm1hc2tfY2FjaGUgfD0gbWFzazsKKwlpcnFfZ2NfdW5sb2NrKGdjKTsKK30KKworLyoqCisgKiBpcnFfZ2NfYWNrIC0gQWNrIHBlbmRpbmcgaW50ZXJydXB0CisgKiBAZDogaXJxX2RhdGEKKyAqLwordm9pZCBpcnFfZ2NfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1MzIgbWFzayA9IDEgPDwgKGQtPmlycSAtIGdjLT5pcnFfYmFzZSk7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisJaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3VyX3JlZ3MoZCktPmFjayk7CisJaXJxX2djX3VubG9jayhnYyk7Cit9CisKKy8qKgorICogaXJxX2djX21hc2tfZGlzYWJsZV9yZWdfYW5kX2Fjay0gTWFzayBhbmQgYWNrIHBlbmRpbmcgaW50ZXJydXB0CisgKiBAZDogaXJxX2RhdGEKKyAqLwordm9pZCBpcnFfZ2NfbWFza19kaXNhYmxlX3JlZ19hbmRfYWNrKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1MzIgbWFzayA9IDEgPDwgKGQtPmlycSAtIGdjLT5pcnFfYmFzZSk7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisJaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3VyX3JlZ3MoZCktPm1hc2spOworCWlycV9yZWdfd3JpdGVsKG1hc2ssIGdjLT5yZWdfYmFzZSArIGN1cl9yZWdzKGQpLT5hY2spOworCWlycV9nY191bmxvY2soZ2MpOworfQorCisvKioKKyAqIGlycV9nY19lb2kgLSBFT0kgaW50ZXJydXB0CisgKiBAZDogaXJxX2RhdGEKKyAqLwordm9pZCBpcnFfZ2NfZW9pKHN0cnVjdCBpcnFfZGF0YSAqZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwl1MzIgbWFzayA9IDEgPDwgKGQtPmlycSAtIGdjLT5pcnFfYmFzZSk7CisKKwlpcnFfZ2NfbG9jayhnYyk7CisJaXJxX3JlZ193cml0ZWwobWFzaywgZ2MtPnJlZ19iYXNlICsgY3VyX3JlZ3MoZCktPmVvaSk7CisJaXJxX2djX3VubG9jayhnYyk7Cit9CisKKy8qKgorICogaXJxX2djX3NldF93YWtlIC0gU2V0L2NsciB3YWtlIGJpdCBmb3IgYW4gaW50ZXJydXB0CisgKiBAZDogaXJxX2RhdGEKKyAqCisgKiBGb3IgY2hpcHMgd2hlcmUgdGhlIHdha2UgZnJvbSBzdXNwZW5kIGZ1bmN0aW9uYWxpdHkgaXMgbm90CisgKiBjb25maWd1cmVkIGluIGEgc2VwYXJhdGUgcmVnaXN0ZXIgYW5kIHRoZSB3YWtldXAgYWN0aXZlIHN0YXRlIGlzCisgKiBqdXN0IHN0b3JlZCBpbiBhIGJpdG1hc2suCisgKi8KK2ludCBpcnFfZ2Nfc2V0X3dha2Uoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgb24pCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7CisJdTMyIG1hc2sgPSAxIDw8IChkLT5pcnEgLSBnYy0+aXJxX2Jhc2UpOworCisJaWYgKCEobWFzayAmIGdjLT53YWtlX2VuYWJsZWQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlycV9nY19sb2NrKGdjKTsKKwlpZiAob24pCisJCWdjLT53YWtlX2FjdGl2ZSB8PSBtYXNrOworCWVsc2UKKwkJZ2MtPndha2VfYWN0aXZlICY9IH5tYXNrOworCWlycV9nY191bmxvY2soZ2MpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGlycV9hbGxvY19nZW5lcmljX2NoaXAgLSBBbGxvY2F0ZSBhIGdlbmVyaWMgY2hpcCBhbmQgaW5pdGlhbGl6ZSBpdAorICogQG5hbWU6CU5hbWUgb2YgdGhlIGlycSBjaGlwCisgKiBAbnVtX2N0OglOdW1iZXIgb2YgaXJxX2NoaXBfdHlwZSBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKyAqIEBpcnFfYmFzZToJSW50ZXJydXB0IGJhc2UgbnIgZm9yIHRoaXMgY2hpcAorICogQHJlZ19iYXNlOglSZWdpc3RlciBiYXNlIGFkZHJlc3MgKHZpcnR1YWwpCisgKiBAaGFuZGxlcjoJRGVmYXVsdCBmbG93IGhhbmRsZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY2hpcAorICoKKyAqIFJldHVybnMgYW4gaW5pdGlhbGl6ZWQgaXJxX2NoaXBfZ2VuZXJpYyBzdHJ1Y3R1cmUuIFRoZSBjaGlwIGRlZmF1bHRzCisgKiB0byB0aGUgcHJpbWFyeSAoaW5kZXggMCkgaXJxX2NoaXBfdHlwZSBhbmQgQGhhbmRsZXIKKyAqLworc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKgoraXJxX2FsbG9jX2dlbmVyaWNfY2hpcChjb25zdCBjaGFyICpuYW1lLCBpbnQgbnVtX2N0LCB1bnNpZ25lZCBpbnQgaXJxX2Jhc2UsCisJCSAgICAgICB2b2lkIF9faW9tZW0gKnJlZ19iYXNlLCBpcnFfZmxvd19oYW5kbGVyX3QgaGFuZGxlcikKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2M7CisJdW5zaWduZWQgbG9uZyBzeiA9IHNpemVvZigqZ2MpICsgbnVtX2N0ICogc2l6ZW9mKHN0cnVjdCBpcnFfY2hpcF90eXBlKTsKKworCWdjID0ga3phbGxvYyhzeiwgR0ZQX0tFUk5FTCk7CisJaWYgKGdjKSB7CisJCXJhd19zcGluX2xvY2tfaW5pdCgmZ2MtPmxvY2spOworCQlnYy0+bnVtX2N0ID0gbnVtX2N0OworCQlnYy0+aXJxX2Jhc2UgPSBpcnFfYmFzZTsKKwkJZ2MtPnJlZ19iYXNlID0gcmVnX2Jhc2U7CisJCWdjLT5jaGlwX3R5cGVzLT5jaGlwLm5hbWUgPSBuYW1lOworCQlnYy0+Y2hpcF90eXBlcy0+aGFuZGxlciA9IGhhbmRsZXI7CisJfQorCXJldHVybiBnYzsKK30KKworLyoKKyAqIFNlcGFyYXRlIGxvY2tkZXAgY2xhc3MgZm9yIGludGVycnVwdCBjaGlwIHdoaWNoIGNhbiBuZXN0IGlycV9kZXNjCisgKiBsb2NrLgorICovCitzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGlycV9uZXN0ZWRfbG9ja19jbGFzczsKKworLyoqCisgKiBpcnFfc2V0dXBfZ2VuZXJpY19jaGlwIC0gU2V0dXAgYSByYW5nZSBvZiBpbnRlcnJ1cHRzIHdpdGggYSBnZW5lcmljIGNoaXAKKyAqIEBnYzoJCUdlbmVyaWMgaXJxIGNoaXAgaG9sZGluZyBhbGwgZGF0YQorICogQG1zazoJQml0bWFzayBob2xkaW5nIHRoZSBpcnFzIHRvIGluaXRpYWxpemUgcmVsYXRpdmUgdG8gZ2MtPmlycV9iYXNlCisgKiBAZmxhZ3M6CUZsYWdzIGZvciBpbml0aWFsaXphdGlvbgorICogQGNscjoJSVJRXyogYml0cyB0byBjbGVhcgorICogQHNldDoJSVJRXyogYml0cyB0byBzZXQKKyAqCisgKiBTZXQgdXAgbWF4LiAzMiBpbnRlcnJ1cHRzIHN0YXJ0aW5nIGZyb20gZ2MtPmlycV9iYXNlLiBOb3RlLCB0aGlzCisgKiBpbml0aWFsaXplcyBhbGwgaW50ZXJydXB0cyB0byB0aGUgcHJpbWFyeSBpcnFfY2hpcF90eXBlIGFuZCBpdHMKKyAqIGFzc29jaWF0ZWQgaGFuZGxlci4KKyAqLwordm9pZCBpcnFfc2V0dXBfZ2VuZXJpY19jaGlwKHN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYywgdTMyIG1zaywKKwkJCSAgICBlbnVtIGlycV9nY19mbGFncyBmbGFncywgdW5zaWduZWQgaW50IGNsciwKKwkJCSAgICB1bnNpZ25lZCBpbnQgc2V0KQoreworCXN0cnVjdCBpcnFfY2hpcF90eXBlICpjdCA9IGdjLT5jaGlwX3R5cGVzOworCXVuc2lnbmVkIGludCBpOworCisJcmF3X3NwaW5fbG9jaygmZ2NfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmZ2MtPmxpc3QsICZnY19saXN0KTsKKwlyYXdfc3Bpbl91bmxvY2soJmdjX2xvY2spOworCisJLyogSW5pdCBtYXNrIGNhY2hlID8gKi8KKwlpZiAoZmxhZ3MgJiBJUlFfR0NfSU5JVF9NQVNLX0NBQ0hFKQorCQlnYy0+bWFza19jYWNoZSA9IGlycV9yZWdfcmVhZGwoZ2MtPnJlZ19iYXNlICsgY3QtPnJlZ3MubWFzayk7CisKKwlmb3IgKGkgPSBnYy0+aXJxX2Jhc2U7IG1zazsgbXNrID4+PSAxLCBpKyspIHsKKwkJaWYgKCFtc2sgJiAweDAxKQorCQkJY29udGludWU7CisKKwkJaWYgKGZsYWdzICYgSVJRX0dDX0lOSVRfTkVTVEVEX0xPQ0spCisJCQlpcnFfc2V0X2xvY2tkZXBfY2xhc3MoaSwgJmlycV9uZXN0ZWRfbG9ja19jbGFzcyk7CisKKwkJaXJxX3NldF9jaGlwX2FuZF9oYW5kbGVyKGksICZjdC0+Y2hpcCwgY3QtPmhhbmRsZXIpOworCQlpcnFfc2V0X2NoaXBfZGF0YShpLCBnYyk7CisJCWlycV9tb2RpZnlfc3RhdHVzKGksIGNsciwgc2V0KTsKKwl9CisJZ2MtPmlycV9jbnQgPSBpIC0gZ2MtPmlycV9iYXNlOworfQorCisvKioKKyAqIGlycV9zZXR1cF9hbHRfY2hpcCAtIFN3aXRjaCB0byBhbHRlcm5hdGl2ZSBjaGlwCisgKiBAZDoJCWlycV9kYXRhIGZvciB0aGlzIGludGVycnVwdAorICogQHR5cGUJRmxvdyB0eXBlIHRvIGJlIGluaXRpYWxpemVkCisgKgorICogT25seSB0byBiZSBjYWxsZWQgZnJvbSBjaGlwLT5pcnFfc2V0X3R5cGUoKSBjYWxsYmFja3MuCisgKi8KK2ludCBpcnFfc2V0dXBfYWx0X2NoaXAoc3RydWN0IGlycV9kYXRhICpkLCB1bnNpZ25lZCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2MgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsKKwlzdHJ1Y3QgaXJxX2NoaXBfdHlwZSAqY3QgPSBnYy0+Y2hpcF90eXBlczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBnYy0+bnVtX2N0OyBpKyssIGN0KyspIHsKKwkJaWYgKGN0LT50eXBlICYgdHlwZSkgeworCQkJZC0+Y2hpcCA9ICZjdC0+Y2hpcDsKKwkJCWlycV9kYXRhX3RvX2Rlc2MoZCktPmhhbmRsZV9pcnEgPSBjdC0+aGFuZGxlcjsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIGlycV9yZW1vdmVfZ2VuZXJpY19jaGlwIC0gUmVtb3ZlIGEgY2hpcAorICogQGdjOgkJR2VuZXJpYyBpcnEgY2hpcCBob2xkaW5nIGFsbCBkYXRhCisgKiBAbXNrOglCaXRtYXNrIGhvbGRpbmcgdGhlIGlycXMgdG8gaW5pdGlhbGl6ZSByZWxhdGl2ZSB0byBnYy0+aXJxX2Jhc2UKKyAqIEBjbHI6CUlSUV8qIGJpdHMgdG8gY2xlYXIKKyAqIEBzZXQ6CUlSUV8qIGJpdHMgdG8gc2V0CisgKgorICogUmVtb3ZlIHVwIHRvIDMyIGludGVycnVwdHMgc3RhcnRpbmcgZnJvbSBnYy0+aXJxX2Jhc2UuCisgKi8KK3ZvaWQgaXJxX3JlbW92ZV9nZW5lcmljX2NoaXAoc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjLCB1MzIgbXNrLAorCQkJICAgICB1bnNpZ25lZCBpbnQgY2xyLCB1bnNpZ25lZCBpbnQgc2V0KQoreworCXVuc2lnbmVkIGludCBpID0gZ2MtPmlycV9iYXNlOworCisJcmF3X3NwaW5fbG9jaygmZ2NfbG9jayk7CisJbGlzdF9kZWwoJmdjLT5saXN0KTsKKwlyYXdfc3Bpbl91bmxvY2soJmdjX2xvY2spOworCisJZm9yICg7IG1zazsgbXNrID4+PSAxLCBpKyspIHsKKwkJaWYgKCFtc2sgJiAweDAxKQorCQkJY29udGludWU7CisKKwkJLyogUmVtb3ZlIGhhbmRsZXIgZmlyc3QuIFRoYXQgd2lsbCBtYXNrIHRoZSBpcnEgbGluZSAqLworCQlpcnFfc2V0X2hhbmRsZXIoaSwgTlVMTCk7CisJCWlycV9zZXRfY2hpcChpLCAmbm9faXJxX2NoaXApOworCQlpcnFfc2V0X2NoaXBfZGF0YShpLCBOVUxMKTsKKwkJaXJxX21vZGlmeV9zdGF0dXMoaSwgY2xyLCBzZXQpOworCX0KK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBpcnFfZ2Nfc3VzcGVuZCh2b2lkKQoreworCXN0cnVjdCBpcnFfY2hpcF9nZW5lcmljICpnYzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZ2MsICZnY19saXN0LCBsaXN0KSB7CisJCXN0cnVjdCBpcnFfY2hpcF90eXBlICpjdCA9IGdjLT5jaGlwX3R5cGVzOworCisJCWlmIChjdC0+Y2hpcC5pcnFfc3VzcGVuZCkKKwkJCWN0LT5jaGlwLmlycV9zdXNwZW5kKGlycV9nZXRfaXJxX2RhdGEoZ2MtPmlycV9iYXNlKSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpcnFfZ2NfcmVzdW1lKHZvaWQpCit7CisJc3RydWN0IGlycV9jaGlwX2dlbmVyaWMgKmdjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShnYywgJmdjX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IGlycV9jaGlwX3R5cGUgKmN0ID0gZ2MtPmNoaXBfdHlwZXM7CisKKwkJaWYgKGN0LT5jaGlwLmlycV9yZXN1bWUpCisJCQljdC0+Y2hpcC5pcnFfcmVzdW1lKGlycV9nZXRfaXJxX2RhdGEoZ2MtPmlycV9iYXNlKSk7CisJfQorfQorI2Vsc2UKKyNkZWZpbmUgaXJxX2djX3N1c3BlbmQgTlVMTAorI2RlZmluZSBpcnFfZ2NfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBpcnFfZ2Nfc2h1dGRvd24odm9pZCkKK3sKKwlzdHJ1Y3QgaXJxX2NoaXBfZ2VuZXJpYyAqZ2M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdjLCAmZ2NfbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgaXJxX2NoaXBfdHlwZSAqY3QgPSBnYy0+Y2hpcF90eXBlczsKKworCQlpZiAoY3QtPmNoaXAuaXJxX3BtX3NodXRkb3duKQorCQkJY3QtPmNoaXAuaXJxX3BtX3NodXRkb3duKGlycV9nZXRfaXJxX2RhdGEoZ2MtPmlycV9iYXNlKSk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHN5c2NvcmVfb3BzIGlycV9nY19zeXNjb3JlX29wcyA9IHsKKwkuc3VzcGVuZCA9IGlycV9nY19zdXNwZW5kLAorCS5yZXN1bWUgPSBpcnFfZ2NfcmVzdW1lLAorCS5zaHV0ZG93biA9IGlycV9nY19zaHV0ZG93biwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlycV9nY19pbml0X29wcyh2b2lkKQoreworCXJlZ2lzdGVyX3N5c2NvcmVfb3BzKCZpcnFfZ2Nfc3lzY29yZV9vcHMpOworCXJldHVybiAwOworfQorZGV2aWNlX2luaXRjYWxsKGlycV9nY19pbml0X29wcyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2lycWRlc2MuYyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCmluZGV4IDJjMDM5YzkuLjg4NmU4MDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaXJxZGVzYy5jCisrKyBiL2tlcm5lbC9pcnEvaXJxZGVzYy5jCkBAIC0yMiw3ICsyMiw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgaXJxX2Rlc2NfbG9ja19jbGFzczsKIAotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChDT05GSUdfR0VORVJJQ19IQVJESVJRUykKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApCiBzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9pcnFfZGVmYXVsdF9hZmZpbml0eSh2b2lkKQogewogCWFsbG9jX2NwdW1hc2tfdmFyKCZpcnFfZGVmYXVsdF9hZmZpbml0eSwgR0ZQX05PV0FJVCk7CkBAIC0yOTAsNiArMjkwLDIyIEBACiAKICNlbmRpZiAvKiAhQ09ORklHX1NQQVJTRV9JUlEgKi8KIAorLyoqCisgKiBnZW5lcmljX2hhbmRsZV9pcnEgLSBJbnZva2UgdGhlIGhhbmRsZXIgZm9yIGEgcGFydGljdWxhciBpcnEKKyAqIEBpcnE6CVRoZSBpcnEgbnVtYmVyIHRvIGhhbmRsZQorICoKKyAqLworaW50IGdlbmVyaWNfaGFuZGxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV90b19kZXNjKGlycSk7CisKKwlpZiAoIWRlc2MpCisJCXJldHVybiAtRUlOVkFMOworCWdlbmVyaWNfaGFuZGxlX2lycV9kZXNjKGlycSwgZGVzYyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChnZW5lcmljX2hhbmRsZV9pcnEpOworCiAvKiBEeW5hbWljIGludGVycnVwdCBoYW5kbGluZyAqLwogCiAvKioKQEAgLTMxMSw2ICszMjcsNyBAQAogCWJpdG1hcF9jbGVhcihhbGxvY2F0ZWRfaXJxcywgZnJvbSwgY250KTsKIAltdXRleF91bmxvY2soJnNwYXJzZV9pcnFfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChpcnFfZnJlZV9kZXNjcyk7CiAKIC8qKgogICogaXJxX2FsbG9jX2Rlc2NzIC0gYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgYSByYW5nZSBvZiBpcnEgZGVzY3JpcHRvcnMKQEAgLTM1MSw2ICszNjgsNyBAQAogCW11dGV4X3VubG9jaygmc3BhcnNlX2lycV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaXJxX2FsbG9jX2Rlc2NzKTsKIAogLyoqCiAgKiBpcnFfcmVzZXJ2ZV9pcnFzIC0gbWFyayBpcnFzIGFsbG9jYXRlZApAQCAtNDMwLDcgKzQ0OCw2IEBACiAJCQkqcGVyX2NwdV9wdHIoZGVzYy0+a3N0YXRfaXJxcywgY3B1KSA6IDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfR0VORVJJQ19IQVJESVJRUwogdW5zaWduZWQgaW50IGtzdGF0X2lycXModW5zaWduZWQgaW50IGlycSkKIHsKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwpAQCAtNDQzLDQgKzQ2MCwzIEBACiAJCXN1bSArPSAqcGVyX2NwdV9wdHIoZGVzYy0+a3N0YXRfaXJxcywgY3B1KTsKIAlyZXR1cm4gc3VtOwogfQotI2VuZGlmIC8qIENPTkZJR19HRU5FUklDX0hBUkRJUlFTICovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL21hbmFnZS5jIGIva2VybmVsL2lycS9tYW5hZ2UuYwppbmRleCAwN2MxNjExLi5mN2NlMDAyIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL21hbmFnZS5jCisrKyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKQEAgLTkwMCw3ICs5MDAsOCBAQAogCQkgKi8KIAkJbmV3LT5oYW5kbGVyID0gaXJxX25lc3RlZF9wcmltYXJ5X2hhbmRsZXI7CiAJfSBlbHNlIHsKLQkJaXJxX3NldHVwX2ZvcmNlZF90aHJlYWRpbmcobmV3KTsKKwkJaWYgKGlycV9zZXR0aW5nc19jYW5fdGhyZWFkKGRlc2MpKQorCQkJaXJxX3NldHVwX2ZvcmNlZF90aHJlYWRpbmcobmV3KTsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9wcm9jLmMgYi9rZXJuZWwvaXJxL3Byb2MuYwppbmRleCBkZDIwMWJkLi44MzQ4OTlmIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Byb2MuYworKysgYi9rZXJuZWwvaXJxL3Byb2MuYwpAQCAtNDE5LDcgKzQxOSw3IEBACiAJfSBlbHNlIHsKIAkJc2VxX3ByaW50ZihwLCAiICU4cyIsICJOb25lIik7CiAJfQotI2lmZGVmIENPTkZJR19HRU5JUkNfSVJRX1NIT1dfTEVWRUwKKyNpZmRlZiBDT05GSUdfR0VORVJJQ19JUlFfU0hPV19MRVZFTAogCXNlcV9wcmludGYocCwgIiAlLThzIiwgaXJxZF9pc19sZXZlbF90eXBlKCZkZXNjLT5pcnFfZGF0YSkgPyAiTGV2ZWwiIDogIkVkZ2UiKTsKICNlbmRpZgogCWlmIChkZXNjLT5uYW1lKQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9zZXR0aW5ncy5oIGIva2VybmVsL2lycS9zZXR0aW5ncy5oCmluZGV4IDBkOTE3MzAuLmYxNjY3ODMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvc2V0dGluZ3MuaAorKysgYi9rZXJuZWwvaXJxL3NldHRpbmdzLmgKQEAgLTgsNiArOCw3IEBACiAJX0lSUV9MRVZFTAkJPSBJUlFfTEVWRUwsCiAJX0lSUV9OT1BST0JFCQk9IElSUV9OT1BST0JFLAogCV9JUlFfTk9SRVFVRVNUCQk9IElSUV9OT1JFUVVFU1QsCisJX0lSUV9OT1RIUkVBRAkJPSBJUlFfTk9USFJFQUQsCiAJX0lSUV9OT0FVVE9FTgkJPSBJUlFfTk9BVVRPRU4sCiAJX0lSUV9NT1ZFX1BDTlRYVAk9IElSUV9NT1ZFX1BDTlRYVCwKIAlfSVJRX05PX0JBTEFOQ0lORwk9IElSUV9OT19CQUxBTkNJTkcsCkBAIC0yMCw2ICsyMSw3IEBACiAjZGVmaW5lIElSUV9MRVZFTAkJR09UX1lPVV9NT1JPTgogI2RlZmluZSBJUlFfTk9QUk9CRQkJR09UX1lPVV9NT1JPTgogI2RlZmluZSBJUlFfTk9SRVFVRVNUCQlHT1RfWU9VX01PUk9OCisjZGVmaW5lIElSUV9OT1RIUkVBRAkJR09UX1lPVV9NT1JPTgogI2RlZmluZSBJUlFfTk9BVVRPRU4JCUdPVF9ZT1VfTU9ST04KICNkZWZpbmUgSVJRX05FU1RFRF9USFJFQUQJR09UX1lPVV9NT1JPTgogI3VuZGVmIElSUUZfTU9ESUZZX01BU0sKQEAgLTk0LDYgKzk2LDIxIEBACiAJZGVzYy0+c3RhdHVzX3VzZV9hY2Nlc3NvcnMgfD0gX0lSUV9OT1JFUVVFU1Q7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBpcnFfc2V0dGluZ3NfY2FuX3RocmVhZChzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJcmV0dXJuICEoZGVzYy0+c3RhdHVzX3VzZV9hY2Nlc3NvcnMgJiBfSVJRX05PVEhSRUFEKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlycV9zZXR0aW5nc19jbHJfbm90aHJlYWQoc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCWRlc2MtPnN0YXR1c191c2VfYWNjZXNzb3JzICY9IH5fSVJRX05PVEhSRUFEOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXJxX3NldHRpbmdzX3NldF9ub3RocmVhZChzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJZGVzYy0+c3RhdHVzX3VzZV9hY2Nlc3NvcnMgfD0gX0lSUV9OT1RIUkVBRDsKK30KKwogc3RhdGljIGlubGluZSBib29sIGlycV9zZXR0aW5nc19jYW5fcHJvYmUoc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCXJldHVybiAhKGRlc2MtPnN0YXR1c191c2VfYWNjZXNzb3JzICYgX0lSUV9OT1BST0JFKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9qdW1wX2xhYmVsLmMgYi9rZXJuZWwvanVtcF9sYWJlbC5jCmluZGV4IDNiNzliZDkuLjc0ZDFjMDkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9qdW1wX2xhYmVsLmMKKysrIGIva2VybmVsL2p1bXBfbGFiZWwuYwpAQCAtMiw0MyArMiwyMyBAQAogICoganVtcCBsYWJlbCBzdXBwb3J0CiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA5IEphc29uIEJhcm9uIDxqYmFyb25AcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBQZXRlciBaaWpsc3RyYSA8cHppamxzdHJAcmVkaGF0LmNvbT4KICAqCiAgKi8KLSNpbmNsdWRlIDxsaW51eC9qdW1wX2xhYmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvanVtcF9sYWJlbC5oPgogCiAjaWZkZWYgSEFWRV9KVU1QX0xBQkVMCiAKLSNkZWZpbmUgSlVNUF9MQUJFTF9IQVNIX0JJVFMgNgotI2RlZmluZSBKVU1QX0xBQkVMX1RBQkxFX1NJWkUgKDEgPDwgSlVNUF9MQUJFTF9IQVNIX0JJVFMpCi1zdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQganVtcF9sYWJlbF90YWJsZVtKVU1QX0xBQkVMX1RBQkxFX1NJWkVdOwotCiAvKiBtdXRleCB0byBwcm90ZWN0IGNvbWluZy9nb2luZyBvZiB0aGUgdGhlIGp1bXBfbGFiZWwgdGFibGUgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgoanVtcF9sYWJlbF9tdXRleCk7CiAKLXN0cnVjdCBqdW1wX2xhYmVsX2VudHJ5IHsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqdGFibGU7Ci0JaW50IG5yX2VudHJpZXM7Ci0JLyogaGFuZyBtb2R1bGVzIG9mZiBoZXJlICovCi0Jc3RydWN0IGhsaXN0X2hlYWQgbW9kdWxlczsKLQl1bnNpZ25lZCBsb25nIGtleTsKLX07Ci0KLXN0cnVjdCBqdW1wX2xhYmVsX21vZHVsZV9lbnRyeSB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgaGxpc3Q7Ci0Jc3RydWN0IGp1bXBfZW50cnkgKnRhYmxlOwotCWludCBucl9lbnRyaWVzOwotCXN0cnVjdCBtb2R1bGUgKm1vZDsKLX07Ci0KIHZvaWQganVtcF9sYWJlbF9sb2NrKHZvaWQpCiB7CiAJbXV0ZXhfbG9jaygmanVtcF9sYWJlbF9tdXRleCk7CkBAIC00OSw2ICsyOSwxMSBAQAogCW11dGV4X3VubG9jaygmanVtcF9sYWJlbF9tdXRleCk7CiB9CiAKK2Jvb2wganVtcF9sYWJlbF9lbmFibGVkKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5KQoreworCXJldHVybiAhIWF0b21pY19yZWFkKCZrZXktPmVuYWJsZWQpOworfQorCiBzdGF0aWMgaW50IGp1bXBfbGFiZWxfY21wKGNvbnN0IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiB7CiAJY29uc3Qgc3RydWN0IGp1bXBfZW50cnkgKmplYSA9IGE7CkBAIC02NCw3ICs0OSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1zb3J0X2p1bXBfbGFiZWxfZW50cmllcyhzdHJ1Y3QganVtcF9lbnRyeSAqc3RhcnQsIHN0cnVjdCBqdW1wX2VudHJ5ICpzdG9wKQoranVtcF9sYWJlbF9zb3J0X2VudHJpZXMoc3RydWN0IGp1bXBfZW50cnkgKnN0YXJ0LCBzdHJ1Y3QganVtcF9lbnRyeSAqc3RvcCkKIHsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAKQEAgLTczLDExOCArNTgsMjUgQEAKIAlzb3J0KHN0YXJ0LCBzaXplLCBzaXplb2Yoc3RydWN0IGp1bXBfZW50cnkpLCBqdW1wX2xhYmVsX2NtcCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSAqZ2V0X2p1bXBfbGFiZWxfZW50cnkoanVtcF9sYWJlbF90IGtleSkKK3N0YXRpYyB2b2lkIGp1bXBfbGFiZWxfdXBkYXRlKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5LCBpbnQgZW5hYmxlKTsKKwordm9pZCBqdW1wX2xhYmVsX2luYyhzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSkKIHsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSAqZTsKLQl1MzIgaGFzaCA9IGpoYXNoKCh2b2lkICopJmtleSwgc2l6ZW9mKGp1bXBfbGFiZWxfdCksIDApOwotCi0JaGVhZCA9ICZqdW1wX2xhYmVsX3RhYmxlW2hhc2ggJiAoSlVNUF9MQUJFTF9UQUJMRV9TSVpFIC0gMSldOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGUsIG5vZGUsIGhlYWQsIGhsaXN0KSB7Ci0JCWlmIChrZXkgPT0gZS0+a2V5KQotCQkJcmV0dXJuIGU7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGp1bXBfbGFiZWxfZW50cnkgKgotYWRkX2p1bXBfbGFiZWxfZW50cnkoanVtcF9sYWJlbF90IGtleSwgaW50IG5yX2VudHJpZXMsIHN0cnVjdCBqdW1wX2VudHJ5ICp0YWJsZSkKLXsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKLQlzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSAqZTsKLQl1MzIgaGFzaDsKLQotCWUgPSBnZXRfanVtcF9sYWJlbF9lbnRyeShrZXkpOwotCWlmIChlKQotCQlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsKLQotCWUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSksIEdGUF9LRVJORUwpOwotCWlmICghZSkKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQloYXNoID0gamhhc2goKHZvaWQgKikma2V5LCBzaXplb2YoanVtcF9sYWJlbF90KSwgMCk7Ci0JaGVhZCA9ICZqdW1wX2xhYmVsX3RhYmxlW2hhc2ggJiAoSlVNUF9MQUJFTF9UQUJMRV9TSVpFIC0gMSldOwotCWUtPmtleSA9IGtleTsKLQllLT50YWJsZSA9IHRhYmxlOwotCWUtPm5yX2VudHJpZXMgPSBucl9lbnRyaWVzOwotCUlOSVRfSExJU1RfSEVBRCgmKGUtPm1vZHVsZXMpKTsKLQlobGlzdF9hZGRfaGVhZCgmZS0+aGxpc3QsIGhlYWQpOwotCXJldHVybiBlOwotfQotCi1zdGF0aWMgaW50Ci1idWlsZF9qdW1wX2xhYmVsX2hhc2h0YWJsZShzdHJ1Y3QganVtcF9lbnRyeSAqc3RhcnQsIHN0cnVjdCBqdW1wX2VudHJ5ICpzdG9wKQotewotCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyLCAqaXRlcl9iZWdpbjsKLQlzdHJ1Y3QganVtcF9sYWJlbF9lbnRyeSAqZW50cnk7Ci0JaW50IGNvdW50OwotCi0Jc29ydF9qdW1wX2xhYmVsX2VudHJpZXMoc3RhcnQsIHN0b3ApOwotCWl0ZXIgPSBzdGFydDsKLQl3aGlsZSAoaXRlciA8IHN0b3ApIHsKLQkJZW50cnkgPSBnZXRfanVtcF9sYWJlbF9lbnRyeShpdGVyLT5rZXkpOwotCQlpZiAoIWVudHJ5KSB7Ci0JCQlpdGVyX2JlZ2luID0gaXRlcjsKLQkJCWNvdW50ID0gMDsKLQkJCXdoaWxlICgoaXRlciA8IHN0b3ApICYmCi0JCQkJKGl0ZXItPmtleSA9PSBpdGVyX2JlZ2luLT5rZXkpKSB7Ci0JCQkJaXRlcisrOwotCQkJCWNvdW50Kys7Ci0JCQl9Ci0JCQllbnRyeSA9IGFkZF9qdW1wX2xhYmVsX2VudHJ5KGl0ZXJfYmVnaW4tPmtleSwKLQkJCQkJCQljb3VudCwgaXRlcl9iZWdpbik7Ci0JCQlpZiAoSVNfRVJSKGVudHJ5KSkKLQkJCQlyZXR1cm4gUFRSX0VSUihlbnRyeSk7Ci0JCSB9IGVsc2UgewotCQkJV0FSTl9PTkNFKDEsIEtFUk5fRVJSICJidWlsZF9qdW1wX2hhc2h0YWJsZTogdW5leHBlY3RlZCBlbnRyeSFcbiIpOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi0vKioqCi0gKiBqdW1wX2xhYmVsX3VwZGF0ZSAtIHVwZGF0ZSBqdW1wIGxhYmVsIHRleHQKLSAqIEBrZXkgLSAga2V5IHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBhIGEganVtcCBsYWJlbAotICogQHR5cGUgLSBlbnVtIHNldCB0byBKVU1QX0xBQkVMX0VOQUJMRSBvciBKVU1QX0xBQkVMX0RJU0FCTEUKLSAqCi0gKiBXaWxsIGVuYWJsZS9kaXNhYmxlIHRoZSBqdW1wIGZvciBqdW1wIGxhYmVsIEBrZXksIGRlcGVuZGluZyBvbiB0aGUKLSAqIHZhbHVlIG9mIEB0eXBlLgotICoKLSAqLwotCi12b2lkIGp1bXBfbGFiZWxfdXBkYXRlKHVuc2lnbmVkIGxvbmcga2V5LCBlbnVtIGp1bXBfbGFiZWxfdHlwZSB0eXBlKQotewotCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyOwotCXN0cnVjdCBqdW1wX2xhYmVsX2VudHJ5ICplbnRyeTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbW9kdWxlX25vZGU7Ci0Jc3RydWN0IGp1bXBfbGFiZWxfbW9kdWxlX2VudHJ5ICplX21vZHVsZTsKLQlpbnQgY291bnQ7CisJaWYgKGF0b21pY19pbmNfbm90X3plcm8oJmtleS0+ZW5hYmxlZCkpCisJCXJldHVybjsKIAogCWp1bXBfbGFiZWxfbG9jaygpOwotCWVudHJ5ID0gZ2V0X2p1bXBfbGFiZWxfZW50cnkoKGp1bXBfbGFiZWxfdClrZXkpOwotCWlmIChlbnRyeSkgewotCQljb3VudCA9IGVudHJ5LT5ucl9lbnRyaWVzOwotCQlpdGVyID0gZW50cnktPnRhYmxlOwotCQl3aGlsZSAoY291bnQtLSkgewotCQkJaWYgKGtlcm5lbF90ZXh0X2FkZHJlc3MoaXRlci0+Y29kZSkpCi0JCQkJYXJjaF9qdW1wX2xhYmVsX3RyYW5zZm9ybShpdGVyLCB0eXBlKTsKLQkJCWl0ZXIrKzsKLQkJfQotCQkvKiBlYW5ibGUvZGlzYWJsZSBqdW1wIGxhYmVscyBpbiBtb2R1bGVzICovCi0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVfbW9kdWxlLCBtb2R1bGVfbm9kZSwgJihlbnRyeS0+bW9kdWxlcyksCi0JCQkJCQkJaGxpc3QpIHsKLQkJCWNvdW50ID0gZV9tb2R1bGUtPm5yX2VudHJpZXM7Ci0JCQlpdGVyID0gZV9tb2R1bGUtPnRhYmxlOwotCQkJd2hpbGUgKGNvdW50LS0pIHsKLQkJCQlpZiAoaXRlci0+a2V5ICYmCi0JCQkJCQlrZXJuZWxfdGV4dF9hZGRyZXNzKGl0ZXItPmNvZGUpKQotCQkJCQlhcmNoX2p1bXBfbGFiZWxfdHJhbnNmb3JtKGl0ZXIsIHR5cGUpOwotCQkJCWl0ZXIrKzsKLQkJCX0KLQkJfQotCX0KKwlpZiAoYXRvbWljX2FkZF9yZXR1cm4oMSwgJmtleS0+ZW5hYmxlZCkgPT0gMSkKKwkJanVtcF9sYWJlbF91cGRhdGUoa2V5LCBKVU1QX0xBQkVMX0VOQUJMRSk7CisJanVtcF9sYWJlbF91bmxvY2soKTsKK30KKwordm9pZCBqdW1wX2xhYmVsX2RlYyhzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKmtleSkKK3sKKwlpZiAoIWF0b21pY19kZWNfYW5kX211dGV4X2xvY2soJmtleS0+ZW5hYmxlZCwgJmp1bXBfbGFiZWxfbXV0ZXgpKQorCQlyZXR1cm47CisKKwlqdW1wX2xhYmVsX3VwZGF0ZShrZXksIEpVTVBfTEFCRUxfRElTQUJMRSk7CiAJanVtcF9sYWJlbF91bmxvY2soKTsKIH0KIApAQCAtMTk3LDQxICs4OSwyNTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIENPTkZJR19NT0RVTEVTCi0KLXN0YXRpYyBpbnQgbW9kdWxlX2NvbmZsaWN0KHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCitzdGF0aWMgaW50IF9fanVtcF9sYWJlbF90ZXh0X3Jlc2VydmVkKHN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0YXJ0LAorCQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdG9wLCB2b2lkICpzdGFydCwgdm9pZCAqZW5kKQogewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZV9uZXh0LCAqbW9kdWxlX25vZGUsICptb2R1bGVfbm9kZV9uZXh0OwotCXN0cnVjdCBqdW1wX2xhYmVsX2VudHJ5ICplOwotCXN0cnVjdCBqdW1wX2xhYmVsX21vZHVsZV9lbnRyeSAqZV9tb2R1bGU7CiAJc3RydWN0IGp1bXBfZW50cnkgKml0ZXI7Ci0JaW50IGksIGNvdW50OwotCWludCBjb25mbGljdCA9IDA7CiAKLQlmb3IgKGkgPSAwOyBpIDwgSlVNUF9MQUJFTF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaGVhZCA9ICZqdW1wX2xhYmVsX3RhYmxlW2ldOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5vZGUsIG5vZGVfbmV4dCwgaGVhZCwgaGxpc3QpIHsKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZV9tb2R1bGUsIG1vZHVsZV9ub2RlLAotCQkJCQkJCW1vZHVsZV9ub2RlX25leHQsCi0JCQkJCQkJJihlLT5tb2R1bGVzKSwgaGxpc3QpIHsKLQkJCQljb3VudCA9IGVfbW9kdWxlLT5ucl9lbnRyaWVzOwotCQkJCWl0ZXIgPSBlX21vZHVsZS0+dGFibGU7Ci0JCQkJd2hpbGUgKGNvdW50LS0pIHsKLQkJCQkJaWYgKGFkZHJfY29uZmxpY3QoaXRlciwgc3RhcnQsIGVuZCkpIHsKLQkJCQkJCWNvbmZsaWN0ID0gMTsKLQkJCQkJCWdvdG8gb3V0OwotCQkJCQl9Ci0JCQkJCWl0ZXIrKzsKLQkJCQl9Ci0JCQl9Ci0JCX0KKwlpdGVyID0gaXRlcl9zdGFydDsKKwl3aGlsZSAoaXRlciA8IGl0ZXJfc3RvcCkgeworCQlpZiAoYWRkcl9jb25mbGljdChpdGVyLCBzdGFydCwgZW5kKSkKKwkJCXJldHVybiAxOworCQlpdGVyKys7CiAJfQotb3V0OgotCXJldHVybiBjb25mbGljdDsKKworCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2p1bXBfbGFiZWxfdXBkYXRlKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5LAorCQlzdHJ1Y3QganVtcF9lbnRyeSAqZW50cnksIGludCBlbmFibGUpCit7CisJZm9yICg7IGVudHJ5LT5rZXkgPT0gKGp1bXBfbGFiZWxfdCkodW5zaWduZWQgbG9uZylrZXk7IGVudHJ5KyspIHsKKwkJLyoKKwkJICogZW50cnktPmNvZGUgc2V0IHRvIDAgaW52YWxpZGF0ZXMgbW9kdWxlIGluaXQgdGV4dCBzZWN0aW9ucworCQkgKiBrZXJuZWxfdGV4dF9hZGRyZXNzKCkgdmVyaWZpZXMgd2UgYXJlIG5vdCBpbiBjb3JlIGtlcm5lbAorCQkgKiBpbml0IGNvZGUsIHNlZSBqdW1wX2xhYmVsX2ludmFsaWRhdGVfbW9kdWxlX2luaXQoKS4KKwkJICovCisJCWlmIChlbnRyeS0+Y29kZSAmJiBrZXJuZWxfdGV4dF9hZGRyZXNzKGVudHJ5LT5jb2RlKSkKKwkJCWFyY2hfanVtcF9sYWJlbF90cmFuc2Zvcm0oZW50cnksIGVuYWJsZSk7CisJfQorfQorCisvKgorICogTm90IGFsbCBhcmNocyBuZWVkIHRoaXMuCisgKi8KK3ZvaWQgX193ZWFrIGFyY2hfanVtcF9sYWJlbF90ZXh0X3Bva2VfZWFybHkoanVtcF9sYWJlbF90IGFkZHIpCit7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGp1bXBfbGFiZWxfaW5pdCh2b2lkKQoreworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0YXJ0ID0gX19zdGFydF9fX2p1bXBfdGFibGU7CisJc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfc3RvcCA9IF9fc3RvcF9fX2p1bXBfdGFibGU7CisJc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkgPSBOVUxMOworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyOworCisJanVtcF9sYWJlbF9sb2NrKCk7CisJanVtcF9sYWJlbF9zb3J0X2VudHJpZXMoaXRlcl9zdGFydCwgaXRlcl9zdG9wKTsKKworCWZvciAoaXRlciA9IGl0ZXJfc3RhcnQ7IGl0ZXIgPCBpdGVyX3N0b3A7IGl0ZXIrKykgeworCQlhcmNoX2p1bXBfbGFiZWxfdGV4dF9wb2tlX2Vhcmx5KGl0ZXItPmNvZGUpOworCQlpZiAoaXRlci0+a2V5ID09IChqdW1wX2xhYmVsX3QpKHVuc2lnbmVkIGxvbmcpa2V5KQorCQkJY29udGludWU7CisKKwkJa2V5ID0gKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqKSh1bnNpZ25lZCBsb25nKWl0ZXItPmtleTsKKwkJYXRvbWljX3NldCgma2V5LT5lbmFibGVkLCAwKTsKKwkJa2V5LT5lbnRyaWVzID0gaXRlcjsKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCQlrZXktPm5leHQgPSBOVUxMOwogI2VuZGlmCisJfQorCWp1bXBfbGFiZWxfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X2luaXRjYWxsKGp1bXBfbGFiZWxfaW5pdCk7CisKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCitzdHJ1Y3QganVtcF9sYWJlbF9tb2QgeworCXN0cnVjdCBqdW1wX2xhYmVsX21vZCAqbmV4dDsKKwlzdHJ1Y3QganVtcF9lbnRyeSAqZW50cmllczsKKwlzdHJ1Y3QgbW9kdWxlICptb2Q7Cit9OworCitzdGF0aWMgaW50IF9fanVtcF9sYWJlbF9tb2RfdGV4dF9yZXNlcnZlZCh2b2lkICpzdGFydCwgdm9pZCAqZW5kKQoreworCXN0cnVjdCBtb2R1bGUgKm1vZDsKKworCW1vZCA9IF9fbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZylzdGFydCk7CisJaWYgKCFtb2QpCisJCXJldHVybiAwOworCisJV0FSTl9PTl9PTkNFKF9fbW9kdWxlX3RleHRfYWRkcmVzcygodW5zaWduZWQgbG9uZyllbmQpICE9IG1vZCk7CisKKwlyZXR1cm4gX19qdW1wX2xhYmVsX3RleHRfcmVzZXJ2ZWQobW9kLT5qdW1wX2VudHJpZXMsCisJCQkJbW9kLT5qdW1wX2VudHJpZXMgKyBtb2QtPm51bV9qdW1wX2VudHJpZXMsCisJCQkJc3RhcnQsIGVuZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fanVtcF9sYWJlbF9tb2RfdXBkYXRlKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBqdW1wX2xhYmVsX21vZCAqbW9kID0ga2V5LT5uZXh0OworCisJd2hpbGUgKG1vZCkgeworCQlfX2p1bXBfbGFiZWxfdXBkYXRlKGtleSwgbW9kLT5lbnRyaWVzLCBlbmFibGUpOworCQltb2QgPSBtb2QtPm5leHQ7CisJfQorfQorCisvKioqCisgKiBhcHBseV9qdW1wX2xhYmVsX25vcHMgLSBwYXRjaCBtb2R1bGUganVtcCBsYWJlbHMgd2l0aCBhcmNoX2dldF9qdW1wX2xhYmVsX25vcCgpCisgKiBAbW9kOiBtb2R1bGUgdG8gcGF0Y2gKKyAqCisgKiBBbGxvdyBmb3IgcnVuLXRpbWUgc2VsZWN0aW9uIG9mIHRoZSBvcHRpbWFsIG5vcHMuIEJlZm9yZSB0aGUgbW9kdWxlCisgKiBsb2FkcyBwYXRjaCB0aGVzZSB3aXRoIGFyY2hfZ2V0X2p1bXBfbGFiZWxfbm9wKCksIHdoaWNoIGlzIHNwZWNpZmllZCBieQorICogdGhlIGFyY2ggc3BlY2lmaWMganVtcCBsYWJlbCBjb2RlLgorICovCit2b2lkIGp1bXBfbGFiZWxfYXBwbHlfbm9wcyhzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfc3RhcnQgPSBtb2QtPmp1bXBfZW50cmllczsKKwlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdG9wID0gaXRlcl9zdGFydCArIG1vZC0+bnVtX2p1bXBfZW50cmllczsKKwlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcjsKKworCS8qIGlmIHRoZSBtb2R1bGUgZG9lc24ndCBoYXZlIGp1bXAgbGFiZWwgZW50cmllcywganVzdCByZXR1cm4gKi8KKwlpZiAoaXRlcl9zdGFydCA9PSBpdGVyX3N0b3ApCisJCXJldHVybjsKKworCWZvciAoaXRlciA9IGl0ZXJfc3RhcnQ7IGl0ZXIgPCBpdGVyX3N0b3A7IGl0ZXIrKykKKwkJYXJjaF9qdW1wX2xhYmVsX3RleHRfcG9rZV9lYXJseShpdGVyLT5jb2RlKTsKK30KKworc3RhdGljIGludCBqdW1wX2xhYmVsX2FkZF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKQoreworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0YXJ0ID0gbW9kLT5qdW1wX2VudHJpZXM7CisJc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfc3RvcCA9IGl0ZXJfc3RhcnQgKyBtb2QtPm51bV9qdW1wX2VudHJpZXM7CisJc3RydWN0IGp1bXBfZW50cnkgKml0ZXI7CisJc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkgPSBOVUxMOworCXN0cnVjdCBqdW1wX2xhYmVsX21vZCAqamxtOworCisJLyogaWYgdGhlIG1vZHVsZSBkb2Vzbid0IGhhdmUganVtcCBsYWJlbCBlbnRyaWVzLCBqdXN0IHJldHVybiAqLworCWlmIChpdGVyX3N0YXJ0ID09IGl0ZXJfc3RvcCkKKwkJcmV0dXJuIDA7CisKKwlqdW1wX2xhYmVsX3NvcnRfZW50cmllcyhpdGVyX3N0YXJ0LCBpdGVyX3N0b3ApOworCisJZm9yIChpdGVyID0gaXRlcl9zdGFydDsgaXRlciA8IGl0ZXJfc3RvcDsgaXRlcisrKSB7CisJCWlmIChpdGVyLT5rZXkgPT0gKGp1bXBfbGFiZWxfdCkodW5zaWduZWQgbG9uZylrZXkpCisJCQljb250aW51ZTsKKworCQlrZXkgPSAoc3RydWN0IGp1bXBfbGFiZWxfa2V5ICopKHVuc2lnbmVkIGxvbmcpaXRlci0+a2V5OworCisJCWlmIChfX21vZHVsZV9hZGRyZXNzKGl0ZXItPmtleSkgPT0gbW9kKSB7CisJCQlhdG9taWNfc2V0KCZrZXktPmVuYWJsZWQsIDApOworCQkJa2V5LT5lbnRyaWVzID0gaXRlcjsKKwkJCWtleS0+bmV4dCA9IE5VTEw7CisJCQljb250aW51ZTsKKwkJfQorCisJCWpsbSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBqdW1wX2xhYmVsX21vZCksIEdGUF9LRVJORUwpOworCQlpZiAoIWpsbSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWpsbS0+bW9kID0gbW9kOworCQlqbG0tPmVudHJpZXMgPSBpdGVyOworCQlqbG0tPm5leHQgPSBrZXktPm5leHQ7CisJCWtleS0+bmV4dCA9IGpsbTsKKworCQlpZiAoanVtcF9sYWJlbF9lbmFibGVkKGtleSkpCisJCQlfX2p1bXBfbGFiZWxfdXBkYXRlKGtleSwgaXRlciwgSlVNUF9MQUJFTF9FTkFCTEUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBqdW1wX2xhYmVsX2RlbF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKQoreworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0YXJ0ID0gbW9kLT5qdW1wX2VudHJpZXM7CisJc3RydWN0IGp1bXBfZW50cnkgKml0ZXJfc3RvcCA9IGl0ZXJfc3RhcnQgKyBtb2QtPm51bV9qdW1wX2VudHJpZXM7CisJc3RydWN0IGp1bXBfZW50cnkgKml0ZXI7CisJc3RydWN0IGp1bXBfbGFiZWxfa2V5ICprZXkgPSBOVUxMOworCXN0cnVjdCBqdW1wX2xhYmVsX21vZCAqamxtLCAqKnByZXY7CisKKwlmb3IgKGl0ZXIgPSBpdGVyX3N0YXJ0OyBpdGVyIDwgaXRlcl9zdG9wOyBpdGVyKyspIHsKKwkJaWYgKGl0ZXItPmtleSA9PSAoanVtcF9sYWJlbF90KSh1bnNpZ25lZCBsb25nKWtleSkKKwkJCWNvbnRpbnVlOworCisJCWtleSA9IChzdHJ1Y3QganVtcF9sYWJlbF9rZXkgKikodW5zaWduZWQgbG9uZylpdGVyLT5rZXk7CisKKwkJaWYgKF9fbW9kdWxlX2FkZHJlc3MoaXRlci0+a2V5KSA9PSBtb2QpCisJCQljb250aW51ZTsKKworCQlwcmV2ID0gJmtleS0+bmV4dDsKKwkJamxtID0ga2V5LT5uZXh0OworCisJCXdoaWxlIChqbG0gJiYgamxtLT5tb2QgIT0gbW9kKSB7CisJCQlwcmV2ID0gJmpsbS0+bmV4dDsKKwkJCWpsbSA9IGpsbS0+bmV4dDsKKwkJfQorCisJCWlmIChqbG0pIHsKKwkJCSpwcmV2ID0gamxtLT5uZXh0OworCQkJa2ZyZWUoamxtKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQganVtcF9sYWJlbF9pbnZhbGlkYXRlX21vZHVsZV9pbml0KHN0cnVjdCBtb2R1bGUgKm1vZCkKK3sKKwlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdGFydCA9IG1vZC0+anVtcF9lbnRyaWVzOworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0b3AgPSBpdGVyX3N0YXJ0ICsgbW9kLT5udW1fanVtcF9lbnRyaWVzOworCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyOworCisJZm9yIChpdGVyID0gaXRlcl9zdGFydDsgaXRlciA8IGl0ZXJfc3RvcDsgaXRlcisrKSB7CisJCWlmICh3aXRoaW5fbW9kdWxlX2luaXQoaXRlci0+Y29kZSwgbW9kKSkKKwkJCWl0ZXItPmNvZGUgPSAwOworCX0KK30KKworc3RhdGljIGludAoranVtcF9sYWJlbF9tb2R1bGVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyB2YWwsCisJCQkgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbW9kdWxlICptb2QgPSBkYXRhOworCWludCByZXQgPSAwOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIE1PRFVMRV9TVEFURV9DT01JTkc6CisJCWp1bXBfbGFiZWxfbG9jaygpOworCQlyZXQgPSBqdW1wX2xhYmVsX2FkZF9tb2R1bGUobW9kKTsKKwkJaWYgKHJldCkKKwkJCWp1bXBfbGFiZWxfZGVsX21vZHVsZShtb2QpOworCQlqdW1wX2xhYmVsX3VubG9jaygpOworCQlicmVhazsKKwljYXNlIE1PRFVMRV9TVEFURV9HT0lORzoKKwkJanVtcF9sYWJlbF9sb2NrKCk7CisJCWp1bXBfbGFiZWxfZGVsX21vZHVsZShtb2QpOworCQlqdW1wX2xhYmVsX3VubG9jaygpOworCQlicmVhazsKKwljYXNlIE1PRFVMRV9TVEFURV9MSVZFOgorCQlqdW1wX2xhYmVsX2xvY2soKTsKKwkJanVtcF9sYWJlbF9pbnZhbGlkYXRlX21vZHVsZV9pbml0KG1vZCk7CisJCWp1bXBfbGFiZWxfdW5sb2NrKCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBub3RpZmllcl9mcm9tX2Vycm5vKHJldCk7Cit9CisKK3N0cnVjdCBub3RpZmllcl9ibG9jayBqdW1wX2xhYmVsX21vZHVsZV9uYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGp1bXBfbGFiZWxfbW9kdWxlX25vdGlmeSwKKwkucHJpb3JpdHkgPSAxLCAvKiBoaWdoZXIgdGhhbiB0cmFjZXBvaW50cyAqLworfTsKKworc3RhdGljIF9faW5pdCBpbnQganVtcF9sYWJlbF9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoJmp1bXBfbGFiZWxfbW9kdWxlX25iKTsKK30KK2Vhcmx5X2luaXRjYWxsKGp1bXBfbGFiZWxfaW5pdF9tb2R1bGUpOworCisjZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KIAogLyoqKgogICoganVtcF9sYWJlbF90ZXh0X3Jlc2VydmVkIC0gY2hlY2sgaWYgYWRkciByYW5nZSBpcyByZXNlcnZlZApAQCAtMjQ4LDIzNyArMzUzLDI5IEBACiAgKi8KIGludCBqdW1wX2xhYmVsX3RleHRfcmVzZXJ2ZWQodm9pZCAqc3RhcnQsIHZvaWQgKmVuZCkKIHsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcjsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdGFydCA9IF9fc3RhcnRfX19qdW1wX3RhYmxlOwotCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0b3AgPSBfX3N0YXJ0X19fanVtcF90YWJsZTsKLQlpbnQgY29uZmxpY3QgPSAwOworCWludCByZXQgPSBfX2p1bXBfbGFiZWxfdGV4dF9yZXNlcnZlZChfX3N0YXJ0X19fanVtcF90YWJsZSwKKwkJCV9fc3RvcF9fX2p1bXBfdGFibGUsIHN0YXJ0LCBlbmQpOwogCi0JaXRlciA9IGl0ZXJfc3RhcnQ7Ci0Jd2hpbGUgKGl0ZXIgPCBpdGVyX3N0b3ApIHsKLQkJaWYgKGFkZHJfY29uZmxpY3QoaXRlciwgc3RhcnQsIGVuZCkpIHsKLQkJCWNvbmZsaWN0ID0gMTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWl0ZXIrKzsKLQl9CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAotCS8qIG5vdyBjaGVjayBtb2R1bGVzICovCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKLQljb25mbGljdCA9IG1vZHVsZV9jb25mbGljdChzdGFydCwgZW5kKTsKKwlyZXQgPSBfX2p1bXBfbGFiZWxfbW9kX3RleHRfcmVzZXJ2ZWQoc3RhcnQsIGVuZCk7CiAjZW5kaWYKLW91dDoKLQlyZXR1cm4gY29uZmxpY3Q7Ci19Ci0KLS8qCi0gKiBOb3QgYWxsIGFyY2hzIG5lZWQgdGhpcy4KLSAqLwotdm9pZCBfX3dlYWsgYXJjaF9qdW1wX2xhYmVsX3RleHRfcG9rZV9lYXJseShqdW1wX2xhYmVsX3QgYWRkcikKLXsKLX0KLQotc3RhdGljIF9faW5pdCBpbnQgaW5pdF9qdW1wX2xhYmVsKHZvaWQpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9zdGFydCA9IF9fc3RhcnRfX19qdW1wX3RhYmxlOwotCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyX3N0b3AgPSBfX3N0b3BfX19qdW1wX3RhYmxlOwotCXN0cnVjdCBqdW1wX2VudHJ5ICppdGVyOwotCi0JanVtcF9sYWJlbF9sb2NrKCk7Ci0JcmV0ID0gYnVpbGRfanVtcF9sYWJlbF9oYXNodGFibGUoX19zdGFydF9fX2p1bXBfdGFibGUsCi0JCQkJCSBfX3N0b3BfX19qdW1wX3RhYmxlKTsKLQlpdGVyID0gaXRlcl9zdGFydDsKLQl3aGlsZSAoaXRlciA8IGl0ZXJfc3RvcCkgewotCQlhcmNoX2p1bXBfbGFiZWxfdGV4dF9wb2tlX2Vhcmx5KGl0ZXItPmNvZGUpOwotCQlpdGVyKys7Ci0JfQotCWp1bXBfbGFiZWxfdW5sb2NrKCk7CiAJcmV0dXJuIHJldDsKIH0KLWVhcmx5X2luaXRjYWxsKGluaXRfanVtcF9sYWJlbCk7CisKK3N0YXRpYyB2b2lkIGp1bXBfbGFiZWxfdXBkYXRlKHN0cnVjdCBqdW1wX2xhYmVsX2tleSAqa2V5LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBqdW1wX2VudHJ5ICplbnRyeSA9IGtleS0+ZW50cmllczsKKworCS8qIGlmIHRoZXJlIGFyZSBubyB1c2VycywgZW50cnkgY2FuIGJlIE5VTEwgKi8KKwlpZiAoZW50cnkpCisJCV9fanVtcF9sYWJlbF91cGRhdGUoa2V5LCBlbnRyeSwgZW5hYmxlKTsKIAogI2lmZGVmIENPTkZJR19NT0RVTEVTCi0KLXN0YXRpYyBzdHJ1Y3QganVtcF9sYWJlbF9tb2R1bGVfZW50cnkgKgotYWRkX2p1bXBfbGFiZWxfbW9kdWxlX2VudHJ5KHN0cnVjdCBqdW1wX2xhYmVsX2VudHJ5ICplbnRyeSwKLQkJCSAgICBzdHJ1Y3QganVtcF9lbnRyeSAqaXRlcl9iZWdpbiwKLQkJCSAgICBpbnQgY291bnQsIHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLQlzdHJ1Y3QganVtcF9sYWJlbF9tb2R1bGVfZW50cnkgKmU7Ci0KLQllID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGp1bXBfbGFiZWxfbW9kdWxlX2VudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQllLT5tb2QgPSBtb2Q7Ci0JZS0+bnJfZW50cmllcyA9IGNvdW50OwotCWUtPnRhYmxlID0gaXRlcl9iZWdpbjsKLQlobGlzdF9hZGRfaGVhZCgmZS0+aGxpc3QsICZlbnRyeS0+bW9kdWxlcyk7Ci0JcmV0dXJuIGU7CisJX19qdW1wX2xhYmVsX21vZF91cGRhdGUoa2V5LCBlbmFibGUpOworI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgYWRkX2p1bXBfbGFiZWxfbW9kdWxlKHN0cnVjdCBtb2R1bGUgKm1vZCkKLXsKLQlzdHJ1Y3QganVtcF9lbnRyeSAqaXRlciwgKml0ZXJfYmVnaW47Ci0Jc3RydWN0IGp1bXBfbGFiZWxfZW50cnkgKmVudHJ5OwotCXN0cnVjdCBqdW1wX2xhYmVsX21vZHVsZV9lbnRyeSAqbW9kdWxlX2VudHJ5OwotCWludCBjb3VudDsKLQotCS8qIGlmIHRoZSBtb2R1bGUgZG9lc24ndCBoYXZlIGp1bXAgbGFiZWwgZW50cmllcywganVzdCByZXR1cm4gKi8KLQlpZiAoIW1vZC0+bnVtX2p1bXBfZW50cmllcykKLQkJcmV0dXJuIDA7Ci0KLQlzb3J0X2p1bXBfbGFiZWxfZW50cmllcyhtb2QtPmp1bXBfZW50cmllcywKLQkJCQltb2QtPmp1bXBfZW50cmllcyArIG1vZC0+bnVtX2p1bXBfZW50cmllcyk7Ci0JaXRlciA9IG1vZC0+anVtcF9lbnRyaWVzOwotCXdoaWxlIChpdGVyIDwgbW9kLT5qdW1wX2VudHJpZXMgKyBtb2QtPm51bV9qdW1wX2VudHJpZXMpIHsKLQkJZW50cnkgPSBnZXRfanVtcF9sYWJlbF9lbnRyeShpdGVyLT5rZXkpOwotCQlpdGVyX2JlZ2luID0gaXRlcjsKLQkJY291bnQgPSAwOwotCQl3aGlsZSAoKGl0ZXIgPCBtb2QtPmp1bXBfZW50cmllcyArIG1vZC0+bnVtX2p1bXBfZW50cmllcykgJiYKLQkJCShpdGVyLT5rZXkgPT0gaXRlcl9iZWdpbi0+a2V5KSkgewotCQkJCWl0ZXIrKzsKLQkJCQljb3VudCsrOwotCQl9Ci0JCWlmICghZW50cnkpIHsKLQkJCWVudHJ5ID0gYWRkX2p1bXBfbGFiZWxfZW50cnkoaXRlcl9iZWdpbi0+a2V5LCAwLCBOVUxMKTsKLQkJCWlmIChJU19FUlIoZW50cnkpKQotCQkJCXJldHVybiBQVFJfRVJSKGVudHJ5KTsKLQkJfQotCQltb2R1bGVfZW50cnkgPSBhZGRfanVtcF9sYWJlbF9tb2R1bGVfZW50cnkoZW50cnksIGl0ZXJfYmVnaW4sCi0JCQkJCQkJICAgY291bnQsIG1vZCk7Ci0JCWlmIChJU19FUlIobW9kdWxlX2VudHJ5KSkKLQkJCXJldHVybiBQVFJfRVJSKG1vZHVsZV9lbnRyeSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCByZW1vdmVfanVtcF9sYWJlbF9tb2R1bGUoc3RydWN0IG1vZHVsZSAqbW9kKQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZV9uZXh0LCAqbW9kdWxlX25vZGUsICptb2R1bGVfbm9kZV9uZXh0OwotCXN0cnVjdCBqdW1wX2xhYmVsX2VudHJ5ICplOwotCXN0cnVjdCBqdW1wX2xhYmVsX21vZHVsZV9lbnRyeSAqZV9tb2R1bGU7Ci0JaW50IGk7Ci0KLQkvKiBpZiB0aGUgbW9kdWxlIGRvZXNuJ3QgaGF2ZSBqdW1wIGxhYmVsIGVudHJpZXMsIGp1c3QgcmV0dXJuICovCi0JaWYgKCFtb2QtPm51bV9qdW1wX2VudHJpZXMpCi0JCXJldHVybjsKLQotCWZvciAoaSA9IDA7IGkgPCBKVU1QX0xBQkVMX1RBQkxFX1NJWkU7IGkrKykgewotCQloZWFkID0gJmp1bXBfbGFiZWxfdGFibGVbaV07Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZSwgbm9kZSwgbm9kZV9uZXh0LCBoZWFkLCBobGlzdCkgewotCQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlX21vZHVsZSwgbW9kdWxlX25vZGUsCi0JCQkJCQkgIG1vZHVsZV9ub2RlX25leHQsCi0JCQkJCQkgICYoZS0+bW9kdWxlcyksIGhsaXN0KSB7Ci0JCQkJaWYgKGVfbW9kdWxlLT5tb2QgPT0gbW9kKSB7Ci0JCQkJCWhsaXN0X2RlbCgmZV9tb2R1bGUtPmhsaXN0KTsKLQkJCQkJa2ZyZWUoZV9tb2R1bGUpOwotCQkJCX0KLQkJCX0KLQkJCWlmIChobGlzdF9lbXB0eSgmZS0+bW9kdWxlcykgJiYgKGUtPm5yX2VudHJpZXMgPT0gMCkpIHsKLQkJCQlobGlzdF9kZWwoJmUtPmhsaXN0KTsKLQkJCQlrZnJlZShlKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQgcmVtb3ZlX2p1bXBfbGFiZWxfbW9kdWxlX2luaXQoc3RydWN0IG1vZHVsZSAqbW9kKQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbm9kZV9uZXh0LCAqbW9kdWxlX25vZGUsICptb2R1bGVfbm9kZV9uZXh0OwotCXN0cnVjdCBqdW1wX2xhYmVsX2VudHJ5ICplOwotCXN0cnVjdCBqdW1wX2xhYmVsX21vZHVsZV9lbnRyeSAqZV9tb2R1bGU7Ci0Jc3RydWN0IGp1bXBfZW50cnkgKml0ZXI7Ci0JaW50IGksIGNvdW50OwotCi0JLyogaWYgdGhlIG1vZHVsZSBkb2Vzbid0IGhhdmUganVtcCBsYWJlbCBlbnRyaWVzLCBqdXN0IHJldHVybiAqLwotCWlmICghbW9kLT5udW1fanVtcF9lbnRyaWVzKQotCQlyZXR1cm47Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSlVNUF9MQUJFTF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaGVhZCA9ICZqdW1wX2xhYmVsX3RhYmxlW2ldOwotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIG5vZGUsIG5vZGVfbmV4dCwgaGVhZCwgaGxpc3QpIHsKLQkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZV9tb2R1bGUsIG1vZHVsZV9ub2RlLAotCQkJCQkJICBtb2R1bGVfbm9kZV9uZXh0LAotCQkJCQkJICAmKGUtPm1vZHVsZXMpLCBobGlzdCkgewotCQkJCWlmIChlX21vZHVsZS0+bW9kICE9IG1vZCkKLQkJCQkJY29udGludWU7Ci0JCQkJY291bnQgPSBlX21vZHVsZS0+bnJfZW50cmllczsKLQkJCQlpdGVyID0gZV9tb2R1bGUtPnRhYmxlOwotCQkJCXdoaWxlIChjb3VudC0tKSB7Ci0JCQkJCWlmICh3aXRoaW5fbW9kdWxlX2luaXQoaXRlci0+Y29kZSwgbW9kKSkKLQkJCQkJCWl0ZXItPmtleSA9IDA7Ci0JCQkJCWl0ZXIrKzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLWp1bXBfbGFiZWxfbW9kdWxlX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgdmFsLAotCQkJIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IG1vZHVsZSAqbW9kID0gZGF0YTsKLQlpbnQgcmV0ID0gMDsKLQotCXN3aXRjaCAodmFsKSB7Ci0JY2FzZSBNT0RVTEVfU1RBVEVfQ09NSU5HOgotCQlqdW1wX2xhYmVsX2xvY2soKTsKLQkJcmV0ID0gYWRkX2p1bXBfbGFiZWxfbW9kdWxlKG1vZCk7Ci0JCWlmIChyZXQpCi0JCQlyZW1vdmVfanVtcF9sYWJlbF9tb2R1bGUobW9kKTsKLQkJanVtcF9sYWJlbF91bmxvY2soKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RVTEVfU1RBVEVfR09JTkc6Ci0JCWp1bXBfbGFiZWxfbG9jaygpOwotCQlyZW1vdmVfanVtcF9sYWJlbF9tb2R1bGUobW9kKTsKLQkJanVtcF9sYWJlbF91bmxvY2soKTsKLQkJYnJlYWs7Ci0JY2FzZSBNT0RVTEVfU1RBVEVfTElWRToKLQkJanVtcF9sYWJlbF9sb2NrKCk7Ci0JCXJlbW92ZV9qdW1wX2xhYmVsX21vZHVsZV9pbml0KG1vZCk7Ci0JCWp1bXBfbGFiZWxfdW5sb2NrKCk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0vKioqCi0gKiBhcHBseV9qdW1wX2xhYmVsX25vcHMgLSBwYXRjaCBtb2R1bGUganVtcCBsYWJlbHMgd2l0aCBhcmNoX2dldF9qdW1wX2xhYmVsX25vcCgpCi0gKiBAbW9kOiBtb2R1bGUgdG8gcGF0Y2gKLSAqCi0gKiBBbGxvdyBmb3IgcnVuLXRpbWUgc2VsZWN0aW9uIG9mIHRoZSBvcHRpbWFsIG5vcHMuIEJlZm9yZSB0aGUgbW9kdWxlCi0gKiBsb2FkcyBwYXRjaCB0aGVzZSB3aXRoIGFyY2hfZ2V0X2p1bXBfbGFiZWxfbm9wKCksIHdoaWNoIGlzIHNwZWNpZmllZCBieQotICogdGhlIGFyY2ggc3BlY2lmaWMganVtcCBsYWJlbCBjb2RlLgotICovCi12b2lkIGp1bXBfbGFiZWxfYXBwbHlfbm9wcyhzdHJ1Y3QgbW9kdWxlICptb2QpCi17Ci0Jc3RydWN0IGp1bXBfZW50cnkgKml0ZXI7Ci0KLQkvKiBpZiB0aGUgbW9kdWxlIGRvZXNuJ3QgaGF2ZSBqdW1wIGxhYmVsIGVudHJpZXMsIGp1c3QgcmV0dXJuICovCi0JaWYgKCFtb2QtPm51bV9qdW1wX2VudHJpZXMpCi0JCXJldHVybjsKLQotCWl0ZXIgPSBtb2QtPmp1bXBfZW50cmllczsKLQl3aGlsZSAoaXRlciA8IG1vZC0+anVtcF9lbnRyaWVzICsgbW9kLT5udW1fanVtcF9lbnRyaWVzKSB7Ci0JCWFyY2hfanVtcF9sYWJlbF90ZXh0X3Bva2VfZWFybHkoaXRlci0+Y29kZSk7Ci0JCWl0ZXIrKzsKLQl9Ci19Ci0KLXN0cnVjdCBub3RpZmllcl9ibG9jayBqdW1wX2xhYmVsX21vZHVsZV9uYiA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGp1bXBfbGFiZWxfbW9kdWxlX25vdGlmeSwKLQkucHJpb3JpdHkgPSAwLAotfTsKLQotc3RhdGljIF9faW5pdCBpbnQgaW5pdF9qdW1wX2xhYmVsX21vZHVsZSh2b2lkKQotewotCXJldHVybiByZWdpc3Rlcl9tb2R1bGVfbm90aWZpZXIoJmp1bXBfbGFiZWxfbW9kdWxlX25iKTsKLX0KLWVhcmx5X2luaXRjYWxsKGluaXRfanVtcF9sYWJlbF9tb2R1bGUpOwotCi0jZW5kaWYgLyogQ09ORklHX01PRFVMRVMgKi8KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IDU1OTM2ZjkuLjhkODE0Y2IgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9rbXNnX2R1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjb3JlX29wcy5oPgogCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTUzMCw4ICsxNTMxLDcgQEAKIAkJaWYgKGVycm9yKQogCQkJZ290byBFbmFibGVfY3B1czsKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQkJLyogU3VzcGVuZCBzeXN0ZW0gZGV2aWNlcyAqLwotCQllcnJvciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfRlJFRVpFKTsKKwkJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBFbmFibGVfaXJxczsKIAl9IGVsc2UKQEAgLTE1NDYsNyArMTU0Niw3IEBACiAKICNpZmRlZiBDT05GSUdfS0VYRUNfSlVNUAogCWlmIChrZXhlY19pbWFnZS0+cHJlc2VydmVfY29udGV4dCkgewotCQlzeXNkZXZfcmVzdW1lKCk7CisJCXN5c2NvcmVfcmVzdW1lKCk7CiAgRW5hYmxlX2lycXM6CiAJCWxvY2FsX2lycV9lbmFibGUoKTsKICBFbmFibGVfY3B1czoKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDljZDA1OTEuLjVhZTBmZjMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMjQ1LDcgKzI0NSw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1BNX1NMRUVQCiAvKgogICogSWYgc2V0LCBjYWxsX3VzZXJtb2RlaGVscGVyX2V4ZWMoKSB3aWxsIGV4aXQgaW1tZWRpYXRlbHkgcmV0dXJuaW5nIC1FQlVTWQogICogKHVzZWQgZm9yIHByZXZlbnRpbmcgdXNlciBsYW5kIHByb2Nlc3NlcyBmcm9tIGJlaW5nIGNyZWF0ZWQgYWZ0ZXIgdGhlIHVzZXIKQEAgLTMwMSw2ICszMDAsMTUgQEAKIAl1c2VybW9kZWhlbHBlcl9kaXNhYmxlZCA9IDA7CiB9CiAKKy8qKgorICogdXNlcm1vZGVoZWxwZXJfaXNfZGlzYWJsZWQgLSBjaGVjayBpZiBuZXcgaGVscGVycyBhcmUgYWxsb3dlZCB0byBiZSBzdGFydGVkCisgKi8KK2Jvb2wgdXNlcm1vZGVoZWxwZXJfaXNfZGlzYWJsZWQodm9pZCkKK3sKKwlyZXR1cm4gdXNlcm1vZGVoZWxwZXJfZGlzYWJsZWQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2VybW9kZWhlbHBlcl9pc19kaXNhYmxlZCk7CisKIHN0YXRpYyB2b2lkIGhlbHBlcl9sb2NrKHZvaWQpCiB7CiAJYXRvbWljX2luYygmcnVubmluZ19oZWxwZXJzKTsKQEAgLTMxMiwxMiArMzIwLDYgQEAKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcnVubmluZ19oZWxwZXJzKSkKIAkJd2FrZV91cCgmcnVubmluZ19oZWxwZXJzX3dhaXRxKTsKIH0KLSNlbHNlIC8qIENPTkZJR19QTV9TTEVFUCAqLwotI2RlZmluZSB1c2VybW9kZWhlbHBlcl9kaXNhYmxlZAkwCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBoZWxwZXJfbG9jayh2b2lkKSB7fQotc3RhdGljIGlubGluZSB2b2lkIGhlbHBlcl91bmxvY2sodm9pZCkge30KLSNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KIAogLyoqCiAgKiBjYWxsX3VzZXJtb2RlaGVscGVyX3NldHVwIC0gcHJlcGFyZSB0byBjYWxsIGEgdXNlcm1vZGUgaGVscGVyCmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCA1M2E2ODk1Li42MzQzN2QwIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTQ5MCw2ICs0OTAsMTggQEAKIAl1c2FnZVtpXSA9ICdcMCc7CiB9CiAKK3N0YXRpYyBpbnQgX19wcmludF9sb2NrX25hbWUoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKQoreworCWNoYXIgc3RyW0tTWU1fTkFNRV9MRU5dOworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwluYW1lID0gY2xhc3MtPm5hbWU7CisJaWYgKCFuYW1lKQorCQluYW1lID0gX19nZXRfa2V5X25hbWUoY2xhc3MtPmtleSwgc3RyKTsKKworCXJldHVybiBwcmludGsoIiVzIiwgbmFtZSk7Cit9CisKIHN0YXRpYyB2b2lkIHByaW50X2xvY2tfbmFtZShzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MpCiB7CiAJY2hhciBzdHJbS1NZTV9OQU1FX0xFTl0sIHVzYWdlW0xPQ0tfVVNBR0VfQ0hBUlNdOwpAQCAtMTA1Myw2ICsxMDY1LDU2IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCitwcmludF9jaXJjdWxhcl9sb2NrX3NjZW5hcmlvKHN0cnVjdCBoZWxkX2xvY2sgKnNyYywKKwkJCSAgICAgc3RydWN0IGhlbGRfbG9jayAqdGd0LAorCQkJICAgICBzdHJ1Y3QgbG9ja19saXN0ICpwcnQpCit7CisJc3RydWN0IGxvY2tfY2xhc3MgKnNvdXJjZSA9IGhsb2NrX2NsYXNzKHNyYyk7CisJc3RydWN0IGxvY2tfY2xhc3MgKnRhcmdldCA9IGhsb2NrX2NsYXNzKHRndCk7CisJc3RydWN0IGxvY2tfY2xhc3MgKnBhcmVudCA9IHBydC0+Y2xhc3M7CisKKwkvKgorCSAqIEEgZGlyZWN0IGxvY2tpbmcgcHJvYmxlbSB3aGVyZSB1bnNhZmVfY2xhc3MgbG9jayBpcyB0YWtlbgorCSAqIGRpcmVjdGx5IGJ5IHNhZmVfY2xhc3MgbG9jaywgdGhlbiBhbGwgd2UgbmVlZCB0byBzaG93CisJICogaXMgdGhlIGRlYWRsb2NrIHNjZW5hcmlvLCBhcyBpdCBpcyBvYnZpb3VzIHRoYXQgdGhlCisJICogdW5zYWZlIGxvY2sgaXMgdGFrZW4gdW5kZXIgdGhlIHNhZmUgbG9jay4KKwkgKgorCSAqIEJ1dCBpZiB0aGVyZSBpcyBhIGNoYWluIGluc3RlYWQsIHdoZXJlIHRoZSBzYWZlIGxvY2sgdGFrZXMKKwkgKiBhbiBpbnRlcm1lZGlhdGUgbG9jayAobWlkZGxlX2NsYXNzKSB3aGVyZSB0aGlzIGxvY2sgaXMKKwkgKiBub3QgdGhlIHNhbWUgYXMgdGhlIHNhZmUgbG9jaywgdGhlbiB0aGUgbG9jayBjaGFpbiBpcworCSAqIHVzZWQgdG8gZGVzY3JpYmUgdGhlIHByb2JsZW0uIE90aGVyd2lzZSB3ZSB3b3VsZCBuZWVkCisJICogdG8gc2hvdyBhIGRpZmZlcmVudCBDUFUgY2FzZSBmb3IgZWFjaCBsaW5rIGluIHRoZSBjaGFpbgorCSAqIGZyb20gdGhlIHNhZmVfY2xhc3MgbG9jayB0byB0aGUgdW5zYWZlX2NsYXNzIGxvY2suCisJICovCisJaWYgKHBhcmVudCAhPSBzb3VyY2UpIHsKKwkJcHJpbnRrKCJDaGFpbiBleGlzdHMgb2Y6XG4gICIpOworCQlfX3ByaW50X2xvY2tfbmFtZShzb3VyY2UpOworCQlwcmludGsoIiAtLT4gIik7CisJCV9fcHJpbnRfbG9ja19uYW1lKHBhcmVudCk7CisJCXByaW50aygiIC0tPiAiKTsKKwkJX19wcmludF9sb2NrX25hbWUodGFyZ2V0KTsKKwkJcHJpbnRrKCJcblxuIik7CisJfQorCisJcHJpbnRrKCIgUG9zc2libGUgdW5zYWZlIGxvY2tpbmcgc2NlbmFyaW86XG5cbiIpOworCXByaW50aygiICAgICAgIENQVTAgICAgICAgICAgICAgICAgICAgIENQVTFcbiIpOworCXByaW50aygiICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS1cbiIpOworCXByaW50aygiICBsb2NrKCIpOworCV9fcHJpbnRfbG9ja19uYW1lKHRhcmdldCk7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZShwYXJlbnQpOworCXByaW50aygiKTtcbiIpOworCXByaW50aygiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2soIik7CisJX19wcmludF9sb2NrX25hbWUodGFyZ2V0KTsKKwlwcmludGsoIik7XG4iKTsKKwlwcmludGsoIiAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZShzb3VyY2UpOworCXByaW50aygiKTtcbiIpOworCXByaW50aygiXG4gKioqIERFQURMT0NLICoqKlxuXG4iKTsKK30KKwogLyoKICAqIFdoZW4gYSBjaXJjdWxhciBkZXBlbmRlbmN5IGlzIGRldGVjdGVkLCBwcmludCB0aGUKICAqIGhlYWRlciBmaXJzdDoKQEAgLTEwOTYsNiArMTE1OCw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyID0gY3VycmVudDsKIAlzdHJ1Y3QgbG9ja19saXN0ICpwYXJlbnQ7CisJc3RydWN0IGxvY2tfbGlzdCAqZmlyc3RfcGFyZW50OwogCWludCBkZXB0aDsKIAogCWlmICghZGVidWdfbG9ja3Nfb2ZmX2dyYXBoX3VubG9jaygpIHx8IGRlYnVnX2xvY2tzX3NpbGVudCkKQEAgLTExMDksNiArMTE3Miw3IEBACiAJcHJpbnRfY2lyY3VsYXJfYnVnX2hlYWRlcih0YXJnZXQsIGRlcHRoLCBjaGVja19zcmMsIGNoZWNrX3RndCk7CiAKIAlwYXJlbnQgPSBnZXRfbG9ja19wYXJlbnQodGFyZ2V0KTsKKwlmaXJzdF9wYXJlbnQgPSBwYXJlbnQ7CiAKIAl3aGlsZSAocGFyZW50KSB7CiAJCXByaW50X2NpcmN1bGFyX2J1Z19lbnRyeShwYXJlbnQsIC0tZGVwdGgpOwpAQCAtMTExNiw2ICsxMTgwLDkgQEAKIAl9CiAKIAlwcmludGsoIlxub3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczpcblxuIik7CisJcHJpbnRfY2lyY3VsYXJfbG9ja19zY2VuYXJpbyhjaGVja19zcmMsIGNoZWNrX3RndCwKKwkJCQkgICAgIGZpcnN0X3BhcmVudCk7CisKIAlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CiAKIAlwcmludGsoIlxuc3RhY2sgYmFja3RyYWNlOlxuIik7CkBAIC0xMzE0LDcgKzEzODEsNyBAQAogCQlwcmludGsoIlxuIik7CiAKIAkJaWYgKGRlcHRoID09IDAgJiYgKGVudHJ5ICE9IHJvb3QpKSB7Ci0JCQlwcmludGsoImxvY2tkZXA6JXMgYmFkIEJGUyBnZW5lcmF0ZWQgdHJlZVxuIiwgX19mdW5jX18pOworCQkJcHJpbnRrKCJsb2NrZGVwOiVzIGJhZCBwYXRoIGZvdW5kIGluIGNoYWluIGdyYXBoXG4iLCBfX2Z1bmNfXyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzI1LDYgKzEzOTIsNjIgQEAKIAlyZXR1cm47CiB9CiAKK3N0YXRpYyB2b2lkCitwcmludF9pcnFfbG9ja19zY2VuYXJpbyhzdHJ1Y3QgbG9ja19saXN0ICpzYWZlX2VudHJ5LAorCQkJc3RydWN0IGxvY2tfbGlzdCAqdW5zYWZlX2VudHJ5LAorCQkJc3RydWN0IGxvY2tfY2xhc3MgKnByZXZfY2xhc3MsCisJCQlzdHJ1Y3QgbG9ja19jbGFzcyAqbmV4dF9jbGFzcykKK3sKKwlzdHJ1Y3QgbG9ja19jbGFzcyAqc2FmZV9jbGFzcyA9IHNhZmVfZW50cnktPmNsYXNzOworCXN0cnVjdCBsb2NrX2NsYXNzICp1bnNhZmVfY2xhc3MgPSB1bnNhZmVfZW50cnktPmNsYXNzOworCXN0cnVjdCBsb2NrX2NsYXNzICptaWRkbGVfY2xhc3MgPSBwcmV2X2NsYXNzOworCisJaWYgKG1pZGRsZV9jbGFzcyA9PSBzYWZlX2NsYXNzKQorCQltaWRkbGVfY2xhc3MgPSBuZXh0X2NsYXNzOworCisJLyoKKwkgKiBBIGRpcmVjdCBsb2NraW5nIHByb2JsZW0gd2hlcmUgdW5zYWZlX2NsYXNzIGxvY2sgaXMgdGFrZW4KKwkgKiBkaXJlY3RseSBieSBzYWZlX2NsYXNzIGxvY2ssIHRoZW4gYWxsIHdlIG5lZWQgdG8gc2hvdworCSAqIGlzIHRoZSBkZWFkbG9jayBzY2VuYXJpbywgYXMgaXQgaXMgb2J2aW91cyB0aGF0IHRoZQorCSAqIHVuc2FmZSBsb2NrIGlzIHRha2VuIHVuZGVyIHRoZSBzYWZlIGxvY2suCisJICoKKwkgKiBCdXQgaWYgdGhlcmUgaXMgYSBjaGFpbiBpbnN0ZWFkLCB3aGVyZSB0aGUgc2FmZSBsb2NrIHRha2VzCisJICogYW4gaW50ZXJtZWRpYXRlIGxvY2sgKG1pZGRsZV9jbGFzcykgd2hlcmUgdGhpcyBsb2NrIGlzCisJICogbm90IHRoZSBzYW1lIGFzIHRoZSBzYWZlIGxvY2ssIHRoZW4gdGhlIGxvY2sgY2hhaW4gaXMKKwkgKiB1c2VkIHRvIGRlc2NyaWJlIHRoZSBwcm9ibGVtLiBPdGhlcndpc2Ugd2Ugd291bGQgbmVlZAorCSAqIHRvIHNob3cgYSBkaWZmZXJlbnQgQ1BVIGNhc2UgZm9yIGVhY2ggbGluayBpbiB0aGUgY2hhaW4KKwkgKiBmcm9tIHRoZSBzYWZlX2NsYXNzIGxvY2sgdG8gdGhlIHVuc2FmZV9jbGFzcyBsb2NrLgorCSAqLworCWlmIChtaWRkbGVfY2xhc3MgIT0gdW5zYWZlX2NsYXNzKSB7CisJCXByaW50aygiQ2hhaW4gZXhpc3RzIG9mOlxuICAiKTsKKwkJX19wcmludF9sb2NrX25hbWUoc2FmZV9jbGFzcyk7CisJCXByaW50aygiIC0tPiAiKTsKKwkJX19wcmludF9sb2NrX25hbWUobWlkZGxlX2NsYXNzKTsKKwkJcHJpbnRrKCIgLS0+ICIpOworCQlfX3ByaW50X2xvY2tfbmFtZSh1bnNhZmVfY2xhc3MpOworCQlwcmludGsoIlxuXG4iKTsKKwl9CisKKwlwcmludGsoIiBQb3NzaWJsZSBpbnRlcnJ1cHQgdW5zYWZlIGxvY2tpbmcgc2NlbmFyaW86XG5cbiIpOworCXByaW50aygiICAgICAgIENQVTAgICAgICAgICAgICAgICAgICAgIENQVTFcbiIpOworCXByaW50aygiICAgICAgIC0tLS0gICAgICAgICAgICAgICAgICAgIC0tLS1cbiIpOworCXByaW50aygiICBsb2NrKCIpOworCV9fcHJpbnRfbG9ja19uYW1lKHVuc2FmZV9jbGFzcyk7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfaXJxX2Rpc2FibGUoKTtcbiIpOworCXByaW50aygiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2soIik7CisJX19wcmludF9sb2NrX25hbWUoc2FmZV9jbGFzcyk7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZShtaWRkbGVfY2xhc3MpOworCXByaW50aygiKTtcbiIpOworCXByaW50aygiICA8SW50ZXJydXB0PlxuIik7CisJcHJpbnRrKCIgICAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZShzYWZlX2NsYXNzKTsKKwlwcmludGsoIik7XG4iKTsKKwlwcmludGsoIlxuICoqKiBERUFETE9DSyAqKipcblxuIik7Cit9CisKIHN0YXRpYyBpbnQKIHByaW50X2JhZF9pcnFfZGVwZW5kZW5jeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsCiAJCQkgc3RydWN0IGxvY2tfbGlzdCAqcHJldl9yb290LApAQCAtMTM3Niw2ICsxNDk5LDkgQEAKIAlwcmludF9zdGFja190cmFjZShmb3J3YXJkc19lbnRyeS0+Y2xhc3MtPnVzYWdlX3RyYWNlcyArIGJpdDIsIDEpOwogCiAJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG5cbiIpOworCXByaW50X2lycV9sb2NrX3NjZW5hcmlvKGJhY2t3YXJkc19lbnRyeSwgZm9yd2FyZHNfZW50cnksCisJCQkJaGxvY2tfY2xhc3MocHJldiksIGhsb2NrX2NsYXNzKG5leHQpKTsKKwogCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKIAogCXByaW50aygiXG50aGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gJXMtaXJxLXNhZmUgbG9jayIsIGlycWNsYXNzKTsKQEAgLTE1MzksNiArMTY2NSwyNiBAQAogCiAjZW5kaWYKIAorc3RhdGljIHZvaWQKK3ByaW50X2RlYWRsb2NrX3NjZW5hcmlvKHN0cnVjdCBoZWxkX2xvY2sgKm54dCwKKwkJCSAgICAgc3RydWN0IGhlbGRfbG9jayAqcHJ2KQoreworCXN0cnVjdCBsb2NrX2NsYXNzICpuZXh0ID0gaGxvY2tfY2xhc3Mobnh0KTsKKwlzdHJ1Y3QgbG9ja19jbGFzcyAqcHJldiA9IGhsb2NrX2NsYXNzKHBydik7CisKKwlwcmludGsoIiBQb3NzaWJsZSB1bnNhZmUgbG9ja2luZyBzY2VuYXJpbzpcblxuIik7CisJcHJpbnRrKCIgICAgICAgQ1BVMFxuIik7CisJcHJpbnRrKCIgICAgICAgLS0tLVxuIik7CisJcHJpbnRrKCIgIGxvY2soIik7CisJX19wcmludF9sb2NrX25hbWUocHJldik7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCIgIGxvY2soIik7CisJX19wcmludF9sb2NrX25hbWUobmV4dCk7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCJcbiAqKiogREVBRExPQ0sgKioqXG5cbiIpOworCXByaW50aygiIE1heSBiZSBkdWUgdG8gbWlzc2luZyBsb2NrIG5lc3Rpbmcgbm90YXRpb25cblxuIik7Cit9CisKIHN0YXRpYyBpbnQKIHByaW50X2RlYWRsb2NrX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnByZXYsCiAJCSAgIHN0cnVjdCBoZWxkX2xvY2sgKm5leHQpCkBAIC0xNTU3LDYgKzE3MDMsNyBAQAogCXByaW50X2xvY2socHJldik7CiAKIAlwcmludGsoIlxub3RoZXIgaW5mbyB0aGF0IG1pZ2h0IGhlbHAgdXMgZGVidWcgdGhpczpcbiIpOworCXByaW50X2RlYWRsb2NrX3NjZW5hcmlvKG5leHQsIHByZXYpOwogCWxvY2tkZXBfcHJpbnRfaGVsZF9sb2NrcyhjdXJyKTsKIAogCXByaW50aygiXG5zdGFjayBiYWNrdHJhY2U6XG4iKTsKQEAgLTE4MjYsNyArMTk3Myw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqaGFzaF9oZWFkID0gY2hhaW5oYXNoZW50cnkoY2hhaW5fa2V5KTsKIAlzdHJ1Y3QgbG9ja19jaGFpbiAqY2hhaW47CiAJc3RydWN0IGhlbGRfbG9jayAqaGxvY2tfY3VyciwgKmhsb2NrX25leHQ7Ci0JaW50IGksIGosIG4sIGNuOworCWludCBpLCBqOwogCiAJaWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oIWlycXNfZGlzYWJsZWQoKSkpCiAJCXJldHVybiAwOwpAQCAtMTg4NiwxNSArMjAzMyw5IEBACiAJfQogCWkrKzsKIAljaGFpbi0+ZGVwdGggPSBjdXJyLT5sb2NrZGVwX2RlcHRoICsgMSAtIGk7Ci0JY24gPSBucl9jaGFpbl9obG9ja3M7Ci0Jd2hpbGUgKGNuICsgY2hhaW4tPmRlcHRoIDw9IE1BWF9MT0NLREVQX0NIQUlOX0hMT0NLUykgewotCQluID0gY21weGNoZygmbnJfY2hhaW5faGxvY2tzLCBjbiwgY24gKyBjaGFpbi0+ZGVwdGgpOwotCQlpZiAobiA9PSBjbikKLQkJCWJyZWFrOwotCQljbiA9IG47Ci0JfQotCWlmIChsaWtlbHkoY24gKyBjaGFpbi0+ZGVwdGggPD0gTUFYX0xPQ0tERVBfQ0hBSU5fSExPQ0tTKSkgewotCQljaGFpbi0+YmFzZSA9IGNuOworCWlmIChsaWtlbHkobnJfY2hhaW5faGxvY2tzICsgY2hhaW4tPmRlcHRoIDw9IE1BWF9MT0NLREVQX0NIQUlOX0hMT0NLUykpIHsKKwkJY2hhaW4tPmJhc2UgPSBucl9jaGFpbl9obG9ja3M7CisJCW5yX2NoYWluX2hsb2NrcyArPSBjaGFpbi0+ZGVwdGg7CiAJCWZvciAoaiA9IDA7IGogPCBjaGFpbi0+ZGVwdGggLSAxOyBqKyssIGkrKykgewogCQkJaW50IGxvY2tfaWQgPSBjdXJyLT5oZWxkX2xvY2tzW2ldLmNsYXNzX2lkeCAtIDE7CiAJCQljaGFpbl9obG9ja3NbY2hhaW4tPmJhc2UgKyBqXSA9IGxvY2tfaWQ7CkBAIC0yMDExLDYgKzIxNTIsMjQgQEAKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZAorcHJpbnRfdXNhZ2VfYnVnX3NjZW5hcmlvKHN0cnVjdCBoZWxkX2xvY2sgKmxvY2spCit7CisJc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gaGxvY2tfY2xhc3MobG9jayk7CisKKwlwcmludGsoIiBQb3NzaWJsZSB1bnNhZmUgbG9ja2luZyBzY2VuYXJpbzpcblxuIik7CisJcHJpbnRrKCIgICAgICAgQ1BVMFxuIik7CisJcHJpbnRrKCIgICAgICAgLS0tLVxuIik7CisJcHJpbnRrKCIgIGxvY2soIik7CisJX19wcmludF9sb2NrX25hbWUoY2xhc3MpOworCXByaW50aygiKTtcbiIpOworCXByaW50aygiICA8SW50ZXJydXB0PlxuIik7CisJcHJpbnRrKCIgICAgbG9jaygiKTsKKwlfX3ByaW50X2xvY2tfbmFtZShjbGFzcyk7CisJcHJpbnRrKCIpO1xuIik7CisJcHJpbnRrKCJcbiAqKiogREVBRExPQ0sgKioqXG5cbiIpOworfQorCiBzdGF0aWMgaW50CiBwcmludF91c2FnZV9idWcoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLAogCQllbnVtIGxvY2tfdXNhZ2VfYml0IHByZXZfYml0LCBlbnVtIGxvY2tfdXNhZ2VfYml0IG5ld19iaXQpCkBAIC0yMDM5LDYgKzIxOTgsOCBAQAogCiAJcHJpbnRfaXJxdHJhY2VfZXZlbnRzKGN1cnIpOwogCXByaW50aygiXG5vdGhlciBpbmZvIHRoYXQgbWlnaHQgaGVscCB1cyBkZWJ1ZyB0aGlzOlxuIik7CisJcHJpbnRfdXNhZ2VfYnVnX3NjZW5hcmlvKHRoaXMpOworCiAJbG9ja2RlcF9wcmludF9oZWxkX2xvY2tzKGN1cnIpOwogCiAJcHJpbnRrKCJcbnN0YWNrIGJhY2t0cmFjZTpcbiIpOwpAQCAtMjA3Myw2ICsyMjM0LDEwIEBACiAJCQlzdHJ1Y3QgaGVsZF9sb2NrICp0aGlzLCBpbnQgZm9yd2FyZHMsCiAJCQljb25zdCBjaGFyICppcnFjbGFzcykKIHsKKwlzdHJ1Y3QgbG9ja19saXN0ICplbnRyeSA9IG90aGVyOworCXN0cnVjdCBsb2NrX2xpc3QgKm1pZGRsZSA9IE5VTEw7CisJaW50IGRlcHRoOworCiAJaWYgKCFkZWJ1Z19sb2Nrc19vZmZfZ3JhcGhfdW5sb2NrKCkgfHwgZGVidWdfbG9ja3Nfc2lsZW50KQogCQlyZXR1cm4gMDsKIApAQCAtMjA5MSw2ICsyMjU2LDI1IEBACiAJcHJpbnRrKCJcblxuYW5kIGludGVycnVwdHMgY291bGQgY3JlYXRlIGludmVyc2UgbG9jayBvcmRlcmluZyBiZXR3ZWVuIHRoZW0uXG5cbiIpOwogCiAJcHJpbnRrKCJcbm90aGVyIGluZm8gdGhhdCBtaWdodCBoZWxwIHVzIGRlYnVnIHRoaXM6XG4iKTsKKworCS8qIEZpbmQgYSBtaWRkbGUgbG9jayAoaWYgb25lIGV4aXN0cykgKi8KKwlkZXB0aCA9IGdldF9sb2NrX2RlcHRoKG90aGVyKTsKKwlkbyB7CisJCWlmIChkZXB0aCA9PSAwICYmIChlbnRyeSAhPSByb290KSkgeworCQkJcHJpbnRrKCJsb2NrZGVwOiVzIGJhZCBwYXRoIGZvdW5kIGluIGNoYWluIGdyYXBoXG4iLCBfX2Z1bmNfXyk7CisJCQlicmVhazsKKwkJfQorCQltaWRkbGUgPSBlbnRyeTsKKwkJZW50cnkgPSBnZXRfbG9ja19wYXJlbnQoZW50cnkpOworCQlkZXB0aC0tOworCX0gd2hpbGUgKGVudHJ5ICYmIGVudHJ5ICE9IHJvb3QgJiYgKGRlcHRoID49IDApKTsKKwlpZiAoZm9yd2FyZHMpCisJCXByaW50X2lycV9sb2NrX3NjZW5hcmlvKHJvb3QsIG90aGVyLAorCQkJbWlkZGxlID8gbWlkZGxlLT5jbGFzcyA6IHJvb3QtPmNsYXNzLCBvdGhlci0+Y2xhc3MpOworCWVsc2UKKwkJcHJpbnRfaXJxX2xvY2tfc2NlbmFyaW8ob3RoZXIsIHJvb3QsCisJCQltaWRkbGUgPyBtaWRkbGUtPmNsYXNzIDogb3RoZXItPmNsYXNzLCByb290LT5jbGFzcyk7CisKIAlsb2NrZGVwX3ByaW50X2hlbGRfbG9ja3MoY3Vycik7CiAKIAlwcmludGsoIlxudGhlIHNob3J0ZXN0IGRlcGVuZGVuY2llcyBiZXR3ZWVuIDJuZCBsb2NrIGFuZCAxc3QgbG9jazpcbiIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IGQ1OTM4YTUuLjIyODc5NzIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTU3LDYgKzU3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgogI2luY2x1ZGUgPGxpbnV4L2p1bXBfbGFiZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KKyNpbmNsdWRlIDxsaW51eC9ic2VhcmNoLmg+CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9tb2R1bGUuaD4KQEAgLTI0MCwyMyArMjQxLDI0IEBACiAJCQkJICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCiAJCQkJICAgYm9vbCAoKmZuKShjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICpzeW1zLAogCQkJCQkgICAgICBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCQkJICAgICAgdW5zaWduZWQgaW50IHN5bW51bSwgdm9pZCAqZGF0YSksCisJCQkJCSAgICAgIHZvaWQgKmRhdGEpLAogCQkJCSAgIHZvaWQgKmRhdGEpCiB7Ci0JdW5zaWduZWQgaW50IGksIGo7CisJdW5zaWduZWQgaW50IGo7CiAKIAlmb3IgKGogPSAwOyBqIDwgYXJyc2l6ZTsgaisrKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBhcnJbal0uc3RvcCAtIGFycltqXS5zdGFydDsgaSsrKQotCQkJaWYgKGZuKCZhcnJbal0sIG93bmVyLCBpLCBkYXRhKSkKLQkJCQlyZXR1cm4gdHJ1ZTsKKwkJaWYgKGZuKCZhcnJbal0sIG93bmVyLCBkYXRhKSkKKwkJCXJldHVybiB0cnVlOwogCX0KIAogCXJldHVybiBmYWxzZTsKIH0KIAogLyogUmV0dXJucyB0cnVlIGFzIHNvb24gYXMgZm4gcmV0dXJucyB0cnVlLCBvdGhlcndpc2UgZmFsc2UuICovCi1ib29sIGVhY2hfc3ltYm9sKGJvb2wgKCpmbikoY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqYXJyLCBzdHJ1Y3QgbW9kdWxlICpvd25lciwKLQkJCSAgICB1bnNpZ25lZCBpbnQgc3ltbnVtLCB2b2lkICpkYXRhKSwgdm9pZCAqZGF0YSkKK2Jvb2wgZWFjaF9zeW1ib2xfc2VjdGlvbihib29sICgqZm4pKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKmFyciwKKwkJCQkgICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCQkJICAgIHZvaWQgKmRhdGEpLAorCQkJIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoIGFycltdID0gewpAQCAtMzA5LDcgKzMxMSw3IEBACiAJfQogCXJldHVybiBmYWxzZTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGVhY2hfc3ltYm9sKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVhY2hfc3ltYm9sX3NlY3Rpb24pOwogCiBzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnIHsKIAkvKiBJbnB1dCAqLwpAQCAtMzIzLDE1ICszMjUsMTIgQEAKIAljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3ltOwogfTsKIAotc3RhdGljIGJvb2wgZmluZF9zeW1ib2xfaW5fc2VjdGlvbihjb25zdCBzdHJ1Y3Qgc3ltc2VhcmNoICpzeW1zLAotCQkJCSAgIHN0cnVjdCBtb2R1bGUgKm93bmVyLAotCQkJCSAgIHVuc2lnbmVkIGludCBzeW1udW0sIHZvaWQgKmRhdGEpCitzdGF0aWMgYm9vbCBjaGVja19zeW1ib2woY29uc3Qgc3RydWN0IHN5bXNlYXJjaCAqc3ltcywKKwkJCQkgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCQkJIHVuc2lnbmVkIGludCBzeW1udW0sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGZpbmRfc3ltYm9sX2FyZyAqZnNhID0gZGF0YTsKIAotCWlmIChzdHJjbXAoc3ltcy0+c3RhcnRbc3ltbnVtXS5uYW1lLCBmc2EtPm5hbWUpICE9IDApCi0JCXJldHVybiBmYWxzZTsKLQogCWlmICghZnNhLT5ncGxvaykgewogCQlpZiAoc3ltcy0+bGljZW5jZSA9PSBHUExfT05MWSkKIAkJCXJldHVybiBmYWxzZTsKQEAgLTM2NSw2ICszNjQsMzAgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorc3RhdGljIGludCBjbXBfbmFtZShjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAqdmIpCit7CisJY29uc3QgY2hhciAqYTsKKwljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqYjsKKwlhID0gdmE7IGIgPSB2YjsKKwlyZXR1cm4gc3RyY21wKGEsIGItPm5hbWUpOworfQorCitzdGF0aWMgYm9vbCBmaW5kX3N5bWJvbF9pbl9zZWN0aW9uKGNvbnN0IHN0cnVjdCBzeW1zZWFyY2ggKnN5bXMsCisJCQkJICAgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCQkJICAgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZmluZF9zeW1ib2xfYXJnICpmc2EgPSBkYXRhOworCXN0cnVjdCBrZXJuZWxfc3ltYm9sICpzeW07CisKKwlzeW0gPSBic2VhcmNoKGZzYS0+bmFtZSwgc3ltcy0+c3RhcnQsIHN5bXMtPnN0b3AgLSBzeW1zLT5zdGFydCwKKwkJCXNpemVvZihzdHJ1Y3Qga2VybmVsX3N5bWJvbCksIGNtcF9uYW1lKTsKKworCWlmIChzeW0gIT0gTlVMTCAmJiBjaGVja19zeW1ib2woc3ltcywgb3duZXIsIHN5bSAtIHN5bXMtPnN0YXJ0LCBkYXRhKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qIEZpbmQgYSBzeW1ib2wgYW5kIHJldHVybiBpdCwgYWxvbmcgd2l0aCwgKG9wdGlvbmFsKSBjcmMgYW5kCiAgKiAob3B0aW9uYWwpIG1vZHVsZSB3aGljaCBvd25zIGl0LiAgTmVlZHMgcHJlZW1wdCBkaXNhYmxlZCBvciBtb2R1bGVfbXV0ZXguICovCiBjb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqZmluZF9zeW1ib2woY29uc3QgY2hhciAqbmFtZSwKQEAgLTM3OSw3ICs0MDIsNyBAQAogCWZzYS5ncGxvayA9IGdwbG9rOwogCWZzYS53YXJuID0gd2FybjsKIAotCWlmIChlYWNoX3N5bWJvbChmaW5kX3N5bWJvbF9pbl9zZWN0aW9uLCAmZnNhKSkgeworCWlmIChlYWNoX3N5bWJvbF9zZWN0aW9uKGZpbmRfc3ltYm9sX2luX3NlY3Rpb24sICZmc2EpKSB7CiAJCWlmIChvd25lcikKIAkJCSpvd25lciA9IGZzYS5vd25lcjsKIAkJaWYgKGNyYykKQEAgLTE2MDcsMjcgKzE2MzAsMjggQEAKIAl9CiB9CiAKLS8qIFNldHRpbmcgbWVtb3J5IGJhY2sgdG8gUlcrTlggYmVmb3JlIHJlbGVhc2luZyBpdCAqLwotdm9pZCB1bnNldF9zZWN0aW9uX3JvX254KHN0cnVjdCBtb2R1bGUgKm1vZCwgdm9pZCAqbW9kdWxlX3JlZ2lvbikKK3N0YXRpYyB2b2lkIHVuc2V0X21vZHVsZV9jb3JlX3JvX254KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKLQl1bnNpZ25lZCBsb25nIHRvdGFsX3BhZ2VzOworCXNldF9wYWdlX2F0dHJpYnV0ZXMobW9kLT5tb2R1bGVfY29yZSArIG1vZC0+Y29yZV90ZXh0X3NpemUsCisJCW1vZC0+bW9kdWxlX2NvcmUgKyBtb2QtPmNvcmVfc2l6ZSwKKwkJc2V0X21lbW9yeV94KTsKKwlzZXRfcGFnZV9hdHRyaWJ1dGVzKG1vZC0+bW9kdWxlX2NvcmUsCisJCW1vZC0+bW9kdWxlX2NvcmUgKyBtb2QtPmNvcmVfcm9fc2l6ZSwKKwkJc2V0X21lbW9yeV9ydyk7Cit9CiAKLQlpZiAobW9kLT5tb2R1bGVfY29yZSA9PSBtb2R1bGVfcmVnaW9uKSB7Ci0JCS8qIFNldCBjb3JlIGFzIE5YK1JXICovCi0JCXRvdGFsX3BhZ2VzID0gTU9EX05VTUJFUl9PRl9QQUdFUyhtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSk7Ci0JCXNldF9tZW1vcnlfbngoKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfY29yZSwgdG90YWxfcGFnZXMpOwotCQlzZXRfbWVtb3J5X3J3KCh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2NvcmUsIHRvdGFsX3BhZ2VzKTsKLQotCX0gZWxzZSBpZiAobW9kLT5tb2R1bGVfaW5pdCA9PSBtb2R1bGVfcmVnaW9uKSB7Ci0JCS8qIFNldCBpbml0IGFzIE5YK1JXICovCi0JCXRvdGFsX3BhZ2VzID0gTU9EX05VTUJFUl9PRl9QQUdFUyhtb2QtPm1vZHVsZV9pbml0LCBtb2QtPmluaXRfc2l6ZSk7Ci0JCXNldF9tZW1vcnlfbngoKHVuc2lnbmVkIGxvbmcpbW9kLT5tb2R1bGVfaW5pdCwgdG90YWxfcGFnZXMpOwotCQlzZXRfbWVtb3J5X3J3KCh1bnNpZ25lZCBsb25nKW1vZC0+bW9kdWxlX2luaXQsIHRvdGFsX3BhZ2VzKTsKLQl9CitzdGF0aWMgdm9pZCB1bnNldF9tb2R1bGVfaW5pdF9yb19ueChzdHJ1Y3QgbW9kdWxlICptb2QpCit7CisJc2V0X3BhZ2VfYXR0cmlidXRlcyhtb2QtPm1vZHVsZV9pbml0ICsgbW9kLT5pbml0X3RleHRfc2l6ZSwKKwkJbW9kLT5tb2R1bGVfaW5pdCArIG1vZC0+aW5pdF9zaXplLAorCQlzZXRfbWVtb3J5X3gpOworCXNldF9wYWdlX2F0dHJpYnV0ZXMobW9kLT5tb2R1bGVfaW5pdCwKKwkJbW9kLT5tb2R1bGVfaW5pdCArIG1vZC0+aW5pdF9yb19zaXplLAorCQlzZXRfbWVtb3J5X3J3KTsKIH0KIAogLyogSXRlcmF0ZSB0aHJvdWdoIGFsbCBtb2R1bGVzIGFuZCBzZXQgZWFjaCBtb2R1bGUncyB0ZXh0IGFzIFJXICovCi12b2lkIHNldF9hbGxfbW9kdWxlc190ZXh0X3J3KCkKK3ZvaWQgc2V0X2FsbF9tb2R1bGVzX3RleHRfcncodm9pZCkKIHsKIAlzdHJ1Y3QgbW9kdWxlICptb2Q7CiAKQEAgLTE2NDgsNyArMTY3Miw3IEBACiB9CiAKIC8qIEl0ZXJhdGUgdGhyb3VnaCBhbGwgbW9kdWxlcyBhbmQgc2V0IGVhY2ggbW9kdWxlJ3MgdGV4dCBhcyBSTyAqLwotdm9pZCBzZXRfYWxsX21vZHVsZXNfdGV4dF9ybygpCit2b2lkIHNldF9hbGxfbW9kdWxlc190ZXh0X3JvKHZvaWQpCiB7CiAJc3RydWN0IG1vZHVsZSAqbW9kOwogCkBAIC0xNjY5LDcgKzE2OTMsOCBAQAogfQogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2VjdGlvbl9yb19ueCh2b2lkICpiYXNlLCB1bnNpZ25lZCBsb25nIHRleHRfc2l6ZSwgdW5zaWduZWQgbG9uZyByb19zaXplLCB1bnNpZ25lZCBsb25nIHRvdGFsX3NpemUpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHVuc2V0X3NlY3Rpb25fcm9fbngoc3RydWN0IG1vZHVsZSAqbW9kLCB2b2lkICptb2R1bGVfcmVnaW9uKSB7IH0KK3N0YXRpYyB2b2lkIHVuc2V0X21vZHVsZV9jb3JlX3JvX254KHN0cnVjdCBtb2R1bGUgKm1vZCkgeyB9CitzdGF0aWMgdm9pZCB1bnNldF9tb2R1bGVfaW5pdF9yb19ueChzdHJ1Y3QgbW9kdWxlICptb2QpIHsgfQogI2VuZGlmCiAKIC8qIEZyZWUgYSBtb2R1bGUsIHJlbW92ZSBmcm9tIGxpc3RzLCBldGMuICovCkBAIC0xNjk2LDcgKzE3MjEsNyBAQAogCWRlc3Ryb3lfcGFyYW1zKG1vZC0+a3AsIG1vZC0+bnVtX2twKTsKIAogCS8qIFRoaXMgbWF5IGJlIE5VTEwsIGJ1dCB0aGF0J3MgT0sgKi8KLQl1bnNldF9zZWN0aW9uX3JvX254KG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CisJdW5zZXRfbW9kdWxlX2luaXRfcm9fbngobW9kKTsKIAltb2R1bGVfZnJlZShtb2QsIG1vZC0+bW9kdWxlX2luaXQpOwogCWtmcmVlKG1vZC0+YXJncyk7CiAJcGVyY3B1X21vZGZyZWUobW9kKTsKQEAgLTE3MDUsNyArMTczMCw3IEBACiAJbG9ja2RlcF9mcmVlX2tleV9yYW5nZShtb2QtPm1vZHVsZV9jb3JlLCBtb2QtPmNvcmVfc2l6ZSk7CiAKIAkvKiBGaW5hbGx5LCBmcmVlIHRoZSBjb3JlIChjb250YWluaW5nIHRoZSBtb2R1bGUgc3RydWN0dXJlKSAqLwotCXVuc2V0X3NlY3Rpb25fcm9fbngobW9kLCBtb2QtPm1vZHVsZV9jb3JlKTsKKwl1bnNldF9tb2R1bGVfY29yZV9yb19ueChtb2QpOwogCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfY29yZSk7CiAKICNpZmRlZiBDT05GSUdfTVBVCkBAIC0yMDMwLDExICsyMDU1LDggQEAKIAljb25zdCBzdHJ1Y3Qga2VybmVsX3N5bWJvbCAqc3RhcnQsCiAJY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKnN0b3ApCiB7Ci0JY29uc3Qgc3RydWN0IGtlcm5lbF9zeW1ib2wgKmtzID0gc3RhcnQ7Ci0JZm9yICg7IGtzIDwgc3RvcDsga3MrKykKLQkJaWYgKHN0cmNtcChrcy0+bmFtZSwgbmFtZSkgPT0gMCkKLQkJCXJldHVybiBrczsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gYnNlYXJjaChuYW1lLCBzdGFydCwgc3RvcCAtIHN0YXJ0LAorCQkJc2l6ZW9mKHN0cnVjdCBrZXJuZWxfc3ltYm9sKSwgY21wX25hbWUpOwogfQogCiBzdGF0aWMgaW50IGlzX2V4cG9ydGVkKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgdmFsdWUsCkBAIC0yOTMxLDEwICsyOTUzLDExIEBACiAJbW9kLT5zeW10YWIgPSBtb2QtPmNvcmVfc3ltdGFiOwogCW1vZC0+c3RydGFiID0gbW9kLT5jb3JlX3N0cnRhYjsKICNlbmRpZgotCXVuc2V0X3NlY3Rpb25fcm9fbngobW9kLCBtb2QtPm1vZHVsZV9pbml0KTsKKwl1bnNldF9tb2R1bGVfaW5pdF9yb19ueChtb2QpOwogCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CiAJbW9kLT5tb2R1bGVfaW5pdCA9IE5VTEw7CiAJbW9kLT5pbml0X3NpemUgPSAwOworCW1vZC0+aW5pdF9yb19zaXplID0gMDsKIAltb2QtPmluaXRfdGV4dF9zaXplID0gMDsKIAltdXRleF91bmxvY2soJm1vZHVsZV9tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5jIGIva2VybmVsL211dGV4LWRlYnVnLmMKaW5kZXggZWM4MTVhOS4uNzNkYTgzYSAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LWRlYnVnLmMKKysrIGIva2VybmVsL211dGV4LWRlYnVnLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAkJcmV0dXJuOwogCiAJREVCVUdfTE9DS1NfV0FSTl9PTihsb2NrLT5tYWdpYyAhPSBsb2NrKTsKLQlERUJVR19MT0NLU19XQVJOX09OKGxvY2stPm93bmVyICE9IGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CisJREVCVUdfTE9DS1NfV0FSTl9PTihsb2NrLT5vd25lciAhPSBjdXJyZW50KTsKIAlERUJVR19MT0NLU19XQVJOX09OKCFsb2NrLT53YWl0X2xpc3QucHJldiAmJiAhbG9jay0+d2FpdF9saXN0Lm5leHQpOwogCW11dGV4X2NsZWFyX293bmVyKGxvY2spOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LWRlYnVnLmggYi9rZXJuZWwvbXV0ZXgtZGVidWcuaAppbmRleCA1N2Q1MjdhLi4wNzk5ZmQzIDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXgtZGVidWcuaAorKysgYi9rZXJuZWwvbXV0ZXgtZGVidWcuaApAQCAtMjksNyArMjksNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXV0ZXhfc2V0X293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKIHsKLQlsb2NrLT5vd25lciA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwlsb2NrLT5vd25lciA9IGN1cnJlbnQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtdXRleF9jbGVhcl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXguYyBiL2tlcm5lbC9tdXRleC5jCmluZGV4IGM0MTk1ZmEuLjJjOTM4ZTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC5jCisrKyBiL2tlcm5lbC9tdXRleC5jCkBAIC0xNjAsMTQgKzE2MCw3IEBACiAJICovCiAKIAlmb3IgKDs7KSB7Ci0JCXN0cnVjdCB0aHJlYWRfaW5mbyAqb3duZXI7Ci0KLQkJLyoKLQkJICogSWYgd2Ugb3duIHRoZSBCS0wsIHRoZW4gZG9uJ3Qgc3Bpbi4gVGhlIG93bmVyIG9mCi0JCSAqIHRoZSBtdXRleCBtaWdodCBiZSB3YWl0aW5nIG9uIHVzIHRvIHJlbGVhc2UgdGhlIEJLTC4KLQkJICovCi0JCWlmICh1bmxpa2VseShjdXJyZW50LT5sb2NrX2RlcHRoID49IDApKQotCQkJYnJlYWs7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXI7CiAKIAkJLyoKIAkJICogSWYgdGhlcmUncyBhbiBvd25lciwgd2FpdCBmb3IgaXQgdG8gZWl0aGVyCmRpZmYgLS1naXQgYS9rZXJuZWwvbXV0ZXguaCBiL2tlcm5lbC9tdXRleC5oCmluZGV4IDY3NTc4Y2EuLjQxMTVmYmYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tdXRleC5oCisrKyBiL2tlcm5lbC9tdXRleC5oCkBAIC0xOSw3ICsxOSw3IEBACiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGlubGluZSB2b2lkIG11dGV4X3NldF9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCiB7Ci0JbG9jay0+b3duZXIgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CisJbG9jay0+b3duZXIgPSBjdXJyZW50OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXV0ZXhfY2xlYXJfb3duZXIoc3RydWN0IG11dGV4ICpsb2NrKQpkaWZmIC0tZ2l0IGEva2VybmVsL3BhcmFtcy5jIGIva2VybmVsL3BhcmFtcy5jCmluZGV4IDdhYjM4OGEuLmVkNzJlMTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTI5NywyMSArMjk3LDE1IEBACiBpbnQgcGFyYW1fc2V0X2Jvb2woY29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKIHsKIAlib29sIHY7CisJaW50IHJldDsKIAogCS8qIE5vIGVxdWFscyBtZWFucyAic2V0Ii4uLiAqLwogCWlmICghdmFsKSB2YWwgPSAiMSI7CiAKIAkvKiBPbmUgb2YgPVt5WW5OMDFdICovCi0Jc3dpdGNoICh2YWxbMF0pIHsKLQljYXNlICd5JzogY2FzZSAnWSc6IGNhc2UgJzEnOgotCQl2ID0gdHJ1ZTsKLQkJYnJlYWs7Ci0JY2FzZSAnbic6IGNhc2UgJ04nOiBjYXNlICcwJzoKLQkJdiA9IGZhbHNlOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJcmV0ID0gc3RydG9ib29sKHZhbCwgJnYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CiAKIAlpZiAoa3AtPmZsYWdzICYgS1BBUkFNX0lTQk9PTCkKIAkJKihib29sICopa3AtPmFyZyA9IHY7CkBAIC04MjEsMTUgKzgxNSwxOCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCB2YXR0ci0+dmVyc2lvbik7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgbW9kdWxlX3ZlcnNpb25fYXR0cmlidXRlIF9fc3RhcnRfX19tb2R2ZXJbXSwgX19zdG9wX19fbW9kdmVyW107CitleHRlcm4gY29uc3Qgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSAqX19zdGFydF9fX21vZHZlcltdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgKl9fc3RvcF9fX21vZHZlcltdOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgdmVyc2lvbl9zeXNmc19idWlsdGluKHZvaWQpCiB7Ci0JY29uc3Qgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSAqdmF0dHI7CisJY29uc3Qgc3RydWN0IG1vZHVsZV92ZXJzaW9uX2F0dHJpYnV0ZSAqKnA7CiAJc3RydWN0IG1vZHVsZV9rb2JqZWN0ICptazsKIAlpbnQgZXJyOwogCi0JZm9yICh2YXR0ciA9IF9fc3RhcnRfX19tb2R2ZXI7IHZhdHRyIDwgX19zdG9wX19fbW9kdmVyOyB2YXR0cisrKSB7CisJZm9yIChwID0gX19zdGFydF9fX21vZHZlcjsgcCA8IF9fc3RvcF9fX21vZHZlcjsgcCsrKSB7CisJCWNvbnN0IHN0cnVjdCBtb2R1bGVfdmVyc2lvbl9hdHRyaWJ1dGUgKnZhdHRyID0gKnA7CisKIAkJbWsgPSBsb2NhdGVfbW9kdWxlX2tvYmplY3QodmF0dHItPm1vZHVsZV9uYW1lKTsKIAkJaWYgKG1rKSB7CiAJCQllcnIgPSBzeXNmc19jcmVhdGVfZmlsZSgmbWstPmtvYmosICZ2YXR0ci0+bWF0dHIuYXR0cik7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGlkLmMgYi9rZXJuZWwvcGlkLmMKaW5kZXggMDJmMjIxMi4uNTdhODM0NiAxMDA2NDQKLS0tIGEva2VybmVsL3BpZC5jCisrKyBiL2tlcm5lbC9waWQuYwpAQCAtMjE3LDExICsyMTcsMTQgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBuZXh0X3BpZG1hcChzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqcGlkX25zLCBpbnQgbGFzdCkKK2ludCBuZXh0X3BpZG1hcChzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqcGlkX25zLCB1bnNpZ25lZCBpbnQgbGFzdCkKIHsKIAlpbnQgb2Zmc2V0OwogCXN0cnVjdCBwaWRtYXAgKm1hcCwgKmVuZDsKIAorCWlmIChsYXN0ID49IFBJRF9NQVhfTElNSVQpCisJCXJldHVybiAtMTsKKwogCW9mZnNldCA9IChsYXN0ICsgMSkgJiBCSVRTX1BFUl9QQUdFX01BU0s7CiAJbWFwID0gJnBpZF9ucy0+cGlkbWFwWyhsYXN0ICsgMSkvQklUU19QRVJfUEFHRV07CiAJZW5kID0gJnBpZF9ucy0+cGlkbWFwW1BJRE1BUF9FTlRSSUVTXTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9LY29uZmlnIGIva2VybmVsL3Bvd2VyL0tjb25maWcKaW5kZXggNmRlOWE4Zi4uODdmNGQyNCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL0tjb25maWcKKysrIGIva2VybmVsL3Bvd2VyL0tjb25maWcKQEAgLTEyNSwxMiArMTI1LDYgQEAKIAljb2RlLiBUaGlzIGlzIGhlbHBmdWwgd2hlbiBkZWJ1Z2dpbmcgYW5kIHJlcG9ydGluZyBQTSBidWdzLCBsaWtlCiAJc3VzcGVuZCBzdXBwb3J0LgogCi1jb25maWcgUE1fVkVSQk9TRQotCWJvb2wgIlZlcmJvc2UgUG93ZXIgTWFuYWdlbWVudCBkZWJ1Z2dpbmciCi0JZGVwZW5kcyBvbiBQTV9ERUJVRwotCS0tLWhlbHAtLS0KLQlUaGlzIG9wdGlvbiBlbmFibGVzIHZlcmJvc2UgbWVzc2FnZXMgZnJvbSB0aGUgUG93ZXIgTWFuYWdlbWVudCBjb2RlLgotCiBjb25maWcgUE1fQURWQU5DRURfREVCVUcKIAlib29sICJFeHRyYSBQTSBhdHRyaWJ1dGVzIGluIHN5c2ZzIGZvciBsb3ctbGV2ZWwgZGVidWdnaW5nL3Rlc3RpbmciCiAJZGVwZW5kcyBvbiBQTV9ERUJVRwpAQCAtMjI5LDMgKzIyMyw3IEBACiAJICByZXByZXNlbnRpbmcgaW5kaXZpZHVhbCB2b2x0YWdlIGRvbWFpbnMgYW5kIHByb3ZpZGVzIFNPQwogCSAgaW1wbGVtZW50YXRpb25zIGEgcmVhZHkgdG8gdXNlIGZyYW1ld29yayB0byBtYW5hZ2UgT1BQcy4KIAkgIEZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIDxmaWxlOkRvY3VtZW50YXRpb24vcG93ZXIvb3BwLnR4dD4KKworY29uZmlnIFBNX1JVTlRJTUVfQ0xLCisJZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gUE1fUlVOVElNRSAmJiBIQVZFX0NMSwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCmluZGV4IGFlYWJkMjYuLmY5YmVjNTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYworKysgYi9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKQEAgLTI3Miw5ICsyNzIsNyBAQAogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCWVycm9yID0gc3lzZGV2X3N1c3BlbmQoUE1TR19GUkVFWkUpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzY29yZV9zdXNwZW5kKCk7CisJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQTTogU29tZSBzeXN0ZW0gZGV2aWNlcyBmYWlsZWQgdG8gcG93ZXIgZG93biwgIgogCQkJImFib3J0aW5nIGhpYmVybmF0aW9uXG4iKTsKQEAgLTI5OSw3ICsyOTcsNiBAQAogCiAgUG93ZXJfdXA6CiAJc3lzY29yZV9yZXN1bWUoKTsKLQlzeXNkZXZfcmVzdW1lKCk7CiAJLyogTk9URTogIGRwbV9yZXN1bWVfbm9pcnEoKSBpcyBqdXN0IGEgcmVzdW1lKCkgZm9yIGRldmljZXMKIAkgKiB0aGF0IHN1c3BlbmRlZCB3aXRoIGlycXMgb2ZmIC4uLiBubyBvdmVyYWxsIHBvd2VydXAuCiAJICovCkBAIC0zMzAsMjAgKzMyNywyNSBAQAogCiBpbnQgaGliZXJuYXRpb25fc25hcHNob3QoaW50IHBsYXRmb3JtX21vZGUpCiB7CisJcG1fbWVzc2FnZV90IG1zZyA9IFBNU0dfUkVDT1ZFUjsKIAlpbnQgZXJyb3I7CiAKIAllcnJvciA9IHBsYXRmb3JtX2JlZ2luKHBsYXRmb3JtX21vZGUpOwogCWlmIChlcnJvcikKIAkJZ290byBDbG9zZTsKIAorCWVycm9yID0gZHBtX3ByZXBhcmUoUE1TR19GUkVFWkUpOworCWlmIChlcnJvcikKKwkJZ290byBDb21wbGV0ZV9kZXZpY2VzOworCiAJLyogUHJlYWxsb2NhdGUgaW1hZ2UgbWVtb3J5IGJlZm9yZSBzaHV0dGluZyBkb3duIGRldmljZXMuICovCiAJZXJyb3IgPSBoaWJlcm5hdGVfcHJlYWxsb2NhdGVfbWVtb3J5KCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIENsb3NlOworCQlnb3RvIENvbXBsZXRlX2RldmljZXM7CiAKIAlzdXNwZW5kX2NvbnNvbGUoKTsKIAlwbV9yZXN0cmljdF9nZnBfbWFzaygpOwotCWVycm9yID0gZHBtX3N1c3BlbmRfc3RhcnQoUE1TR19GUkVFWkUpOworCWVycm9yID0gZHBtX3N1c3BlbmQoUE1TR19GUkVFWkUpOwogCWlmIChlcnJvcikKIAkJZ290byBSZWNvdmVyX3BsYXRmb3JtOwogCkBAIC0zNjEsMTMgKzM2MywxNyBAQAogCWlmIChlcnJvciB8fCAhaW5fc3VzcGVuZCkKIAkJc3dzdXNwX2ZyZWUoKTsKIAotCWRwbV9yZXN1bWVfZW5kKGluX3N1c3BlbmQgPwotCQkoZXJyb3IgPyBQTVNHX1JFQ09WRVIgOiBQTVNHX1RIQVcpIDogUE1TR19SRVNUT1JFKTsKKwltc2cgPSBpbl9zdXNwZW5kID8gKGVycm9yID8gUE1TR19SRUNPVkVSIDogUE1TR19USEFXKSA6IFBNU0dfUkVTVE9SRTsKKwlkcG1fcmVzdW1lKG1zZyk7CiAKIAlpZiAoZXJyb3IgfHwgIWluX3N1c3BlbmQpCiAJCXBtX3Jlc3RvcmVfZ2ZwX21hc2soKTsKIAogCXJlc3VtZV9jb25zb2xlKCk7CisKKyBDb21wbGV0ZV9kZXZpY2VzOgorCWRwbV9jb21wbGV0ZShtc2cpOworCiAgQ2xvc2U6CiAJcGxhdGZvcm1fZW5kKHBsYXRmb3JtX21vZGUpOwogCXJldHVybiBlcnJvcjsKQEAgLTQwNiw5ICs0MTIsNyBAQAogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAotCWVycm9yID0gc3lzZGV2X3N1c3BlbmQoUE1TR19RVUlFU0NFKTsKLQlpZiAoIWVycm9yKQotCQllcnJvciA9IHN5c2NvcmVfc3VzcGVuZCgpOworCWVycm9yID0gc3lzY29yZV9zdXNwZW5kKCk7CiAJaWYgKGVycm9yKQogCQlnb3RvIEVuYWJsZV9pcnFzOwogCkBAIC00MzYsNyArNDQwLDYgQEAKIAl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiAKIAlzeXNjb3JlX3Jlc3VtZSgpOwotCXN5c2Rldl9yZXN1bWUoKTsKIAogIEVuYWJsZV9pcnFzOgogCWxvY2FsX2lycV9lbmFibGUoKTsKQEAgLTUyMiw3ICs1MjUsNiBAQAogCQlnb3RvIFBsYXRmb3JtX2ZpbmlzaDsKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0Jc3lzZGV2X3N1c3BlbmQoUE1TR19ISUJFUk5BVEUpOwogCXN5c2NvcmVfc3VzcGVuZCgpOwogCWlmIChwbV93YWtldXBfcGVuZGluZygpKSB7CiAJCWVycm9yID0gLUVBR0FJTjsKQEAgLTUzNSw3ICs1MzcsNiBAQAogCiAgUG93ZXJfdXA6CiAJc3lzY29yZV9yZXN1bWUoKTsKLQlzeXNkZXZfcmVzdW1lKCk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCWVuYWJsZV9ub25ib290X2NwdXMoKTsKIApAQCAtOTc2LDEwICs5NzcsMzMgQEAKIAogcG93ZXJfYXR0cihpbWFnZV9zaXplKTsKIAorc3RhdGljIHNzaXplX3QgcmVzZXJ2ZWRfc2l6ZV9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCByZXNlcnZlZF9zaXplKTsKK30KKworc3RhdGljIHNzaXplX3QgcmVzZXJ2ZWRfc2l6ZV9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbikKK3sKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVsdSIsICZzaXplKSA9PSAxKSB7CisJCXJlc2VydmVkX3NpemUgPSBzaXplOworCQlyZXR1cm4gbjsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworcG93ZXJfYXR0cihyZXNlcnZlZF9zaXplKTsKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKiBnW10gPSB7CiAJJmRpc2tfYXR0ci5hdHRyLAogCSZyZXN1bWVfYXR0ci5hdHRyLAogCSZpbWFnZV9zaXplX2F0dHIuYXR0ciwKKwkmcmVzZXJ2ZWRfc2l6ZV9hdHRyLmF0dHIsCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IGRlOWFlZjguLjI5ODFhZjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMzM3LDYgKzMzNyw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJaGliZXJuYXRlX2ltYWdlX3NpemVfaW5pdCgpOworCWhpYmVybmF0ZV9yZXNlcnZlZF9zaXplX2luaXQoKTsKIAlwb3dlcl9rb2JqID0ga29iamVjdF9jcmVhdGVfYW5kX2FkZCgicG93ZXIiLCBOVUxMKTsKIAlpZiAoIXBvd2VyX2tvYmopCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3Bvd2VyLmggYi9rZXJuZWwvcG93ZXIvcG93ZXIuaAppbmRleCAwMzYzNGJlLi45YTAwYTBhIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcG93ZXIuaAorKysgYi9rZXJuZWwvcG93ZXIvcG93ZXIuaApAQCAtMTUsNiArMTUsNyBAQAogCiAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCiAvKiBrZXJuZWwvcG93ZXIvc25hcHNob3QuYyAqLworZXh0ZXJuIHZvaWQgX19pbml0IGhpYmVybmF0ZV9yZXNlcnZlZF9zaXplX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgaGliZXJuYXRlX2ltYWdlX3NpemVfaW5pdCh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19BUkNIX0hJQkVSTkFUSU9OX0hFQURFUgpAQCAtNTUsNiArNTYsNyBAQAogCiAjZWxzZSAvKiAhQ09ORklHX0hJQkVSTkFUSU9OICovCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBoaWJlcm5hdGVfcmVzZXJ2ZWRfc2l6ZV9pbml0KHZvaWQpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgaGliZXJuYXRlX2ltYWdlX3NpemVfaW5pdCh2b2lkKSB7fQogI2VuZGlmIC8qICFDT05GSUdfSElCRVJOQVRJT04gKi8KIApAQCAtNzIsNiArNzQsOCBAQAogCiAvKiBQcmVmZXJyZWQgaW1hZ2Ugc2l6ZSBpbiBieXRlcyAoZGVmYXVsdCA1MDAgTUIpICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplOworLyogU2l6ZSBvZiBtZW1vcnkgcmVzZXJ2ZWQgZm9yIGRyaXZlcnMgKGRlZmF1bHQgU1BBUkVfUEFHRVMgeCBQQUdFX1NJWkUpICovCitleHRlcm4gdW5zaWduZWQgbG9uZyByZXNlcnZlZF9zaXplOwogZXh0ZXJuIGludCBpbl9zdXNwZW5kOwogZXh0ZXJuIGRldl90IHN3c3VzcF9yZXN1bWVfZGV2aWNlOwogZXh0ZXJuIHNlY3Rvcl90IHN3c3VzcF9yZXN1bWVfYmxvY2s7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvc25hcHNob3QuYyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCmluZGV4IGNhMGFhY2MuLmFjZTU1ODggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCisrKyBiL2tlcm5lbC9wb3dlci9zbmFwc2hvdC5jCkBAIC00MSwxNiArNDEsMjggQEAKIHN0YXRpYyB2b2lkIHN3c3VzcF91bnNldF9wYWdlX2ZvcmJpZGRlbihzdHJ1Y3QgcGFnZSAqKTsKIAogLyoKKyAqIE51bWJlciBvZiBieXRlcyB0byByZXNlcnZlIGZvciBtZW1vcnkgYWxsb2NhdGlvbnMgbWFkZSBieSBkZXZpY2UgZHJpdmVycworICogZnJvbSB0aGVpciAtPmZyZWV6ZSgpIGFuZCAtPmZyZWV6ZV9ub2lycSgpIGNhbGxiYWNrcyBzbyB0aGF0IHRoZXkgZG9uJ3QKKyAqIGNhdXNlIGltYWdlIGNyZWF0aW9uIHRvIGZhaWwgKHR1bmFibGUgdmlhIC9zeXMvcG93ZXIvcmVzZXJ2ZWRfc2l6ZSkuCisgKi8KK3Vuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfc2l6ZTsKKwordm9pZCBfX2luaXQgaGliZXJuYXRlX3Jlc2VydmVkX3NpemVfaW5pdCh2b2lkKQoreworCXJlc2VydmVkX3NpemUgPSBTUEFSRV9QQUdFUyAqIFBBR0VfU0laRTsKK30KKworLyoKICAqIFByZWZlcnJlZCBpbWFnZSBzaXplIGluIGJ5dGVzICh0dW5hYmxlIHZpYSAvc3lzL3Bvd2VyL2ltYWdlX3NpemUpLgotICogV2hlbiBpdCBpcyBzZXQgdG8gTiwgdGhlIGltYWdlIGNyZWF0aW5nIGNvZGUgd2lsbCBkbyBpdHMgYmVzdCB0bwotICogZW5zdXJlIHRoZSBpbWFnZSBzaXplIHdpbGwgbm90IGV4Y2VlZCBOIGJ5dGVzLCBidXQgaWYgdGhhdCBpcwotICogaW1wb3NzaWJsZSwgaXQgd2lsbCB0cnkgdG8gY3JlYXRlIHRoZSBzbWFsbGVzdCBpbWFnZSBwb3NzaWJsZS4KKyAqIFdoZW4gaXQgaXMgc2V0IHRvIE4sIHN3c3VzcCB3aWxsIGRvIGl0cyBiZXN0IHRvIGVuc3VyZSB0aGUgaW1hZ2UKKyAqIHNpemUgd2lsbCBub3QgZXhjZWVkIE4gYnl0ZXMsIGJ1dCBpZiB0aGF0IGlzIGltcG9zc2libGUsIGl0IHdpbGwKKyAqIHRyeSB0byBjcmVhdGUgdGhlIHNtYWxsZXN0IGltYWdlIHBvc3NpYmxlLgogICovCiB1bnNpZ25lZCBsb25nIGltYWdlX3NpemU7CiAKIHZvaWQgX19pbml0IGhpYmVybmF0ZV9pbWFnZV9zaXplX2luaXQodm9pZCkKIHsKLQlpbWFnZV9zaXplID0gKHRvdGFscmFtX3BhZ2VzIC8gMykgKiBQQUdFX1NJWkU7CisJaW1hZ2Vfc2l6ZSA9ICgodG90YWxyYW1fcGFnZXMgKiAyKSAvIDUpICogUEFHRV9TSVpFOwogfQogCiAvKiBMaXN0IG9mIFBCRXMgbmVlZGVkIGZvciByZXN0b3JpbmcgdGhlIHBhZ2VzIHRoYXQgd2VyZSBhbGxvY2F0ZWQgYmVmb3JlCkBAIC0xMjYzLDExICsxMjc1LDEzIEBACiAgKiBmcmFtZSBpbiB1c2UuICBXZSBhbHNvIG5lZWQgYSBudW1iZXIgb2YgcGFnZSBmcmFtZXMgdG8gYmUgZnJlZSBkdXJpbmcKICAqIGhpYmVybmF0aW9uIGZvciBhbGxvY2F0aW9ucyBtYWRlIHdoaWxlIHNhdmluZyB0aGUgaW1hZ2UgYW5kIGZvciBkZXZpY2UKICAqIGRyaXZlcnMsIGluIGNhc2UgdGhleSBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmcm9tIHRoZWlyIGhpYmVybmF0aW9uCi0gKiBjYWxsYmFja3MgKHRoZXNlIHR3byBudW1iZXJzIGFyZSBnaXZlbiBieSBQQUdFU19GT1JfSU8gYW5kIFNQQVJFX1BBR0VTLAotICogcmVzcGVjdGl2ZWx5LCBib3RoIG9mIHdoaWNoIGFyZSByb3VnaCBlc3RpbWF0ZXMpLiAgVG8gbWFrZSB0aGlzIGhhcHBlbiwgd2UKLSAqIGNvbXB1dGUgdGhlIHRvdGFsIG51bWJlciBvZiBhdmFpbGFibGUgcGFnZSBmcmFtZXMgYW5kIGFsbG9jYXRlIGF0IGxlYXN0CisgKiBjYWxsYmFja3MgKHRoZXNlIHR3byBudW1iZXJzIGFyZSBnaXZlbiBieSBQQUdFU19GT1JfSU8gKHdoaWNoIGlzIGEgcm91Z2gKKyAqIGVzdGltYXRlKSBhbmQgcmVzZXJ2ZXJkX3NpemUgZGl2aWRlZCBieSBQQUdFX1NJWkUgKHdoaWNoIGlzIHR1bmFibGUgdGhyb3VnaAorICogL3N5cy9wb3dlci9yZXNlcnZlZF9zaXplLCByZXNwZWN0aXZlbHkpLiAgVG8gbWFrZSB0aGlzIGhhcHBlbiwgd2UgY29tcHV0ZSB0aGUKKyAqIHRvdGFsIG51bWJlciBvZiBhdmFpbGFibGUgcGFnZSBmcmFtZXMgYW5kIGFsbG9jYXRlIGF0IGxlYXN0CiAgKgotICogKFtwYWdlIGZyYW1lcyB0b3RhbF0gKyBQQUdFU19GT1JfSU8gKyBbbWV0YWRhdGEgcGFnZXNdKSAvIDIgKyAyICogU1BBUkVfUEFHRVMKKyAqIChbcGFnZSBmcmFtZXMgdG90YWxdICsgUEFHRVNfRk9SX0lPICsgW21ldGFkYXRhIHBhZ2VzXSkgLyAyCisgKiAgKyAyICogRElWX1JPVU5EX1VQKHJlc2VydmVkX3NpemUsIFBBR0VfU0laRSkKICAqCiAgKiBvZiB0aGVtLCB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgbWF4aW11bSBzaXplIG9mIGEgaGliZXJuYXRpb24gaW1hZ2UuCiAgKgpAQCAtMTMyMiw3ICsxMzM2LDggQEAKIAljb3VudCAtPSB0b3RhbHJlc2VydmVfcGFnZXM7CiAKIAkvKiBDb21wdXRlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzYXZlYWJsZSBwYWdlcyB0byBsZWF2ZSBpbiBtZW1vcnkuICovCi0JbWF4X3NpemUgPSAoY291bnQgLSAoc2l6ZSArIFBBR0VTX0ZPUl9JTykpIC8gMiAtIDIgKiBTUEFSRV9QQUdFUzsKKwltYXhfc2l6ZSA9IChjb3VudCAtIChzaXplICsgUEFHRVNfRk9SX0lPKSkgLyAyCisJCQktIDIgKiBESVZfUk9VTkRfVVAocmVzZXJ2ZWRfc2l6ZSwgUEFHRV9TSVpFKTsKIAkvKiBDb21wdXRlIHRoZSBkZXNpcmVkIG51bWJlciBvZiBpbWFnZSBwYWdlcyBzcGVjaWZpZWQgYnkgaW1hZ2Vfc2l6ZS4gKi8KIAlzaXplID0gRElWX1JPVU5EX1VQKGltYWdlX3NpemUsIFBBR0VfU0laRSk7CiAJaWYgKHNpemUgPiBtYXhfc2l6ZSkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCmluZGV4IDI4MTRjMzIuLjFjNDFiYTIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKKysrIGIva2VybmVsL3Bvd2VyL3N1c3BlbmQuYwpAQCAtMTYzLDE2ICsxNjMsMTMgQEAKIAlhcmNoX3N1c3BlbmRfZGlzYWJsZV9pcnFzKCk7CiAJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOwogCi0JZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwotCWlmICghZXJyb3IpCi0JCWVycm9yID0gc3lzY29yZV9zdXNwZW5kKCk7CisJZXJyb3IgPSBzeXNjb3JlX3N1c3BlbmQoKTsKIAlpZiAoIWVycm9yKSB7CiAJCWlmICghKHN1c3BlbmRfdGVzdChURVNUX0NPUkUpIHx8IHBtX3dha2V1cF9wZW5kaW5nKCkpKSB7CiAJCQllcnJvciA9IHN1c3BlbmRfb3BzLT5lbnRlcihzdGF0ZSk7CiAJCQlldmVudHNfY2hlY2tfZW5hYmxlZCA9IGZhbHNlOwogCQl9CiAJCXN5c2NvcmVfcmVzdW1lKCk7Ci0JCXN5c2Rldl9yZXN1bWUoKTsKIAl9CiAKIAlhcmNoX3N1c3BlbmRfZW5hYmxlX2lycXMoKTsKQEAgLTIxMyw3ICsyMTAsNiBAQAogCQkJZ290byBDbG9zZTsKIAl9CiAJc3VzcGVuZF9jb25zb2xlKCk7Ci0JcG1fcmVzdHJpY3RfZ2ZwX21hc2soKTsKIAlzdXNwZW5kX3Rlc3Rfc3RhcnQoKTsKIAllcnJvciA9IGRwbV9zdXNwZW5kX3N0YXJ0KFBNU0dfU1VTUEVORCk7CiAJaWYgKGVycm9yKSB7CkBAIC0yMjQsMTMgKzIyMCwxMiBAQAogCWlmIChzdXNwZW5kX3Rlc3QoVEVTVF9ERVZJQ0VTKSkKIAkJZ290byBSZWNvdmVyX3BsYXRmb3JtOwogCi0Jc3VzcGVuZF9lbnRlcihzdGF0ZSk7CisJZXJyb3IgPSBzdXNwZW5kX2VudGVyKHN0YXRlKTsKIAogIFJlc3VtZV9kZXZpY2VzOgogCXN1c3BlbmRfdGVzdF9zdGFydCgpOwogCWRwbV9yZXN1bWVfZW5kKFBNU0dfUkVTVU1FKTsKIAlzdXNwZW5kX3Rlc3RfZmluaXNoKCJyZXN1bWUgZGV2aWNlcyIpOwotCXBtX3Jlc3RvcmVfZ2ZwX21hc2soKTsKIAlyZXN1bWVfY29uc29sZSgpOwogIENsb3NlOgogCWlmIChzdXNwZW5kX29wcy0+ZW5kKQpAQCAtMjkxLDcgKzI4Niw5IEBACiAJCWdvdG8gRmluaXNoOwogCiAJcHJfZGVidWcoIlBNOiBFbnRlcmluZyAlcyBzbGVlcFxuIiwgcG1fc3RhdGVzW3N0YXRlXSk7CisJcG1fcmVzdHJpY3RfZ2ZwX21hc2soKTsKIAllcnJvciA9IHN1c3BlbmRfZGV2aWNlc19hbmRfZW50ZXIoc3RhdGUpOworCXBtX3Jlc3RvcmVfZ2ZwX21hc2soKTsKIAogIEZpbmlzaDoKIAlwcl9kZWJ1ZygiUE06IEZpbmlzaGluZyB3YWtldXAuXG4iKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci91c2VyLmMgYi9rZXJuZWwvcG93ZXIvdXNlci5jCmluZGV4IGMzNmMzYjkuLjdkMDJkMzMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci91c2VyLmMKKysrIGIva2VybmVsL3Bvd2VyL3VzZXIuYwpAQCAtMTM1LDggKzEzNSwxMCBAQAogCWZyZWVfYmFzaWNfbWVtb3J5X2JpdG1hcHMoKTsKIAlkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWZyZWVfYWxsX3N3YXBfcGFnZXMoZGF0YS0+c3dhcCk7Ci0JaWYgKGRhdGEtPmZyb3plbikKKwlpZiAoZGF0YS0+ZnJvemVuKSB7CisJCXBtX3Jlc3RvcmVfZ2ZwX21hc2soKTsKIAkJdGhhd19wcm9jZXNzZXMoKTsKKwl9CiAJcG1fbm90aWZpZXJfY2FsbF9jaGFpbihkYXRhLT5tb2RlID09IE9fUkRPTkxZID8KIAkJCVBNX1BPU1RfSElCRVJOQVRJT04gOiBQTV9QT1NUX1JFU1RPUkUpOwogCWF0b21pY19pbmMoJnNuYXBzaG90X2RldmljZV9hdmFpbGFibGUpOwpAQCAtMzc5LDYgKzM4MSw3IEBACiAJCSAqIFBNX0hJQkVSTkFUSU9OX1BSRVBBUkUKIAkJICovCiAJCWVycm9yID0gc3VzcGVuZF9kZXZpY2VzX2FuZF9lbnRlcihQTV9TVVNQRU5EX01FTSk7CisJCWRhdGEtPnJlYWR5ID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIFNOQVBTSE9UX1BMQVRGT1JNX1NVUFBPUlQ6CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMGZjMWVlZC4uZGM3YWI2NSAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3NldC5oPgorI2luY2x1ZGUgPGxpbnV4L2h3X2JyZWFrcG9pbnQuaD4KIAogCiAvKgpAQCAtODc5LDMgKzg4MCwxOSBAQAogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYJLyogQ09ORklHX0NPTVBBVCAqLworCisjaWZkZWYgQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVAoraW50IHB0cmFjZV9nZXRfYnJlYWtwb2ludHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKGF0b21pY19pbmNfbm90X3plcm8oJnRzay0+cHRyYWNlX2JwX3JlZmNudCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIC0xOworfQorCit2b2lkIHB0cmFjZV9wdXRfYnJlYWtwb2ludHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnRzay0+cHRyYWNlX2JwX3JlZmNudCkpCisJCWZsdXNoX3B0cmFjZV9od19icmVha3BvaW50KHRzayk7Cit9CisjZW5kaWYgLyogQ09ORklHX0hBVkVfSFdfQlJFQUtQT0lOVCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCAzMTJmOGI5Li5jNjJhY2Y0IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAjZW5kaWYKIAogLyoKLSAqIHNjaGVkX2RvbWFpbnNfbXV0ZXggc2VyaWFsaXplcyBjYWxscyB0byBhcmNoX2luaXRfc2NoZWRfZG9tYWlucywKKyAqIHNjaGVkX2RvbWFpbnNfbXV0ZXggc2VyaWFsaXplcyBjYWxscyB0byBpbml0X3NjaGVkX2RvbWFpbnMsCiAgKiBkZXRhY2hfZGVzdHJveV9kb21haW5zIGFuZCBwYXJ0aXRpb25fc2NoZWRfZG9tYWlucy4KICAqLwogc3RhdGljIERFRklORV9NVVRFWChzY2hlZF9kb21haW5zX211dGV4KTsKQEAgLTMxMiw2ICszMTIsOSBAQAogCiAJdTY0IGV4ZWNfY2xvY2s7CiAJdTY0IG1pbl92cnVudGltZTsKKyNpZm5kZWYgQ09ORklHXzY0QklUCisJdTY0IG1pbl92cnVudGltZV9jb3B5OworI2VuZGlmCiAKIAlzdHJ1Y3QgcmJfcm9vdCB0YXNrc190aW1lbGluZTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmJfbGVmdG1vc3Q7CkBAIC0zMjUsNyArMzI4LDkgQEAKIAkgKi8KIAlzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpjdXJyLCAqbmV4dCwgKmxhc3QsICpza2lwOwogCisjaWZkZWYJQ09ORklHX1NDSEVEX0RFQlVHCiAJdW5zaWduZWQgaW50IG5yX3NwcmVhZF9vdmVyOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCXN0cnVjdCBycSAqcnE7CS8qIGNwdSBydW5xdWV1ZSB0byB3aGljaCB0aGlzIGNmc19ycSBpcyBhdHRhY2hlZCAqLwpAQCAtNDE3LDYgKzQyMiw3IEBACiAgKi8KIHN0cnVjdCByb290X2RvbWFpbiB7CiAJYXRvbWljX3QgcmVmY291bnQ7CisJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAljcHVtYXNrX3Zhcl90IHNwYW47CiAJY3B1bWFza192YXJfdCBvbmxpbmU7CiAKQEAgLTQ2MCw3ICs0NjYsNyBAQAogCXU2NCBub2h6X3N0YW1wOwogCXVuc2lnbmVkIGNoYXIgbm9oel9iYWxhbmNlX2tpY2s7CiAjZW5kaWYKLQl1bnNpZ25lZCBpbnQgc2tpcF9jbG9ja191cGRhdGU7CisJaW50IHNraXBfY2xvY2tfdXBkYXRlOwogCiAJLyogY2FwdHVyZSBsb2FkIGZyb20gKmFsbCogdGFza3Mgb24gdGhpcyBjcHU6ICovCiAJc3RydWN0IGxvYWRfd2VpZ2h0IGxvYWQ7CkBAIC01NTMsNiArNTU5LDEwIEBACiAJdW5zaWduZWQgaW50IHR0d3VfY291bnQ7CiAJdW5zaWduZWQgaW50IHR0d3VfbG9jYWw7CiAjZW5kaWYKKworI2lmZGVmIENPTkZJR19TTVAKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKndha2VfbGlzdDsKKyNlbmRpZgogfTsKIAogc3RhdGljIERFRklORV9QRVJfQ1BVX1NIQVJFRF9BTElHTkVEKHN0cnVjdCBycSwgcnVucXVldWVzKTsKQEAgLTU3MSw3ICs1ODEsNyBAQAogCiAjZGVmaW5lIHJjdV9kZXJlZmVyZW5jZV9jaGVja19zY2hlZF9kb21haW4ocCkgXAogCXJjdV9kZXJlZmVyZW5jZV9jaGVjaygocCksIFwKLQkJCSAgICAgIHJjdV9yZWFkX2xvY2tfc2NoZWRfaGVsZCgpIHx8IFwKKwkJCSAgICAgIHJjdV9yZWFkX2xvY2tfaGVsZCgpIHx8IFwKIAkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmc2NoZWRfZG9tYWluc19tdXRleCkpCiAKIC8qCkBAIC01OTYsNyArNjA2LDcgQEAKICAqIFJldHVybiB0aGUgZ3JvdXAgdG8gd2hpY2ggdGhpcyB0YXNrcyBiZWxvbmdzLgogICoKICAqIFdlIHVzZSB0YXNrX3N1YnN5c19zdGF0ZV9jaGVjaygpIGFuZCBleHRlbmQgdGhlIFJDVSB2ZXJpZmljYXRpb24KLSAqIHdpdGggbG9ja2RlcF9pc19oZWxkKCZ0YXNrX3JxKHApLT5sb2NrKSBiZWNhdXNlIGNwdV9jZ3JvdXBfYXR0YWNoKCkKKyAqIHdpdGggbG9ja2RlcF9pc19oZWxkKCZwLT5waV9sb2NrKSBiZWNhdXNlIGNwdV9jZ3JvdXBfYXR0YWNoKCkKICAqIGhvbGRzIHRoYXQgbG9jayBmb3IgZWFjaCB0YXNrIGl0IG1vdmVzIGludG8gdGhlIGNncm91cC4gVGhlcmVmb3JlCiAgKiBieSBob2xkaW5nIHRoYXQgbG9jaywgd2UgcGluIHRoZSB0YXNrIHRvIHRoZSBjdXJyZW50IGNncm91cC4KICAqLwpAQCAtNjA2LDcgKzYxNiw3IEBACiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIAogCWNzcyA9IHRhc2tfc3Vic3lzX3N0YXRlX2NoZWNrKHAsIGNwdV9jZ3JvdXBfc3Vic3lzX2lkLAotCQkJbG9ja2RlcF9pc19oZWxkKCZ0YXNrX3JxKHApLT5sb2NrKSk7CisJCQlsb2NrZGVwX2lzX2hlbGQoJnAtPnBpX2xvY2spKTsKIAl0ZyA9IGNvbnRhaW5lcl9vZihjc3MsIHN0cnVjdCB0YXNrX2dyb3VwLCBjc3MpOwogCiAJcmV0dXJuIGF1dG9ncm91cF90YXNrX2dyb3VwKHAsIHRnKTsKQEAgLTY0Miw3ICs2NTIsNyBAQAogewogCXM2NCBkZWx0YTsKIAotCWlmIChycS0+c2tpcF9jbG9ja191cGRhdGUpCisJaWYgKHJxLT5za2lwX2Nsb2NrX3VwZGF0ZSA+IDApCiAJCXJldHVybjsKIAogCWRlbHRhID0gc2NoZWRfY2xvY2tfY3B1KGNwdV9vZihycSkpIC0gcnEtPmNsb2NrOwpAQCAtODM4LDE4ICs4NDgsMzkgQEAKIAlyZXR1cm4gcnEtPmN1cnIgPT0gcDsKIH0KIAotI2lmbmRlZiBfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTVwogc3RhdGljIGlubGluZSBpbnQgdGFza19ydW5uaW5nKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKKyNpZmRlZiBDT05GSUdfU01QCisJcmV0dXJuIHAtPm9uX2NwdTsKKyNlbHNlCiAJcmV0dXJuIHRhc2tfY3VycmVudChycSwgcCk7CisjZW5kaWYKIH0KIAorI2lmbmRlZiBfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTVwogc3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfbG9ja19zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogeworI2lmZGVmIENPTkZJR19TTVAKKwkvKgorCSAqIFdlIGNhbiBvcHRpbWlzZSB0aGlzIG91dCBjb21wbGV0ZWx5IGZvciAhU01QLCBiZWNhdXNlIHRoZQorCSAqIFNNUCByZWJhbGFuY2luZyBmcm9tIGludGVycnVwdCBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhcmVzCisJICogaGVyZS4KKwkgKi8KKwluZXh0LT5vbl9jcHUgPSAxOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaW5pc2hfbG9ja19zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KQogeworI2lmZGVmIENPTkZJR19TTVAKKwkvKgorCSAqIEFmdGVyIC0+b25fY3B1IGlzIGNsZWFyZWQsIHRoZSB0YXNrIGNhbiBiZSBtb3ZlZCB0byBhIGRpZmZlcmVudCBDUFUuCisJICogV2UgbXVzdCBlbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbiB1bnRpbCB0aGUgc3dpdGNoIGlzIGNvbXBsZXRlbHkKKwkgKiBmaW5pc2hlZC4KKwkgKi8KKwlzbXBfd21iKCk7CisJcHJldi0+b25fY3B1ID0gMDsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19ERUJVR19TUElOTE9DSwogCS8qIHRoaXMgaXMgYSB2YWxpZCBjYXNlIHdoZW4gYW5vdGhlciB0YXNrIHJlbGVhc2VzIHRoZSBzcGlubG9jayAqLwogCXJxLT5sb2NrLm93bmVyID0gY3VycmVudDsKQEAgLTg2NSwxNSArODk2LDYgQEAKIH0KIAogI2Vsc2UgLyogX19BUkNIX1dBTlRfVU5MT0NLRURfQ1RYU1cgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHRhc2tfcnVubmluZyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXJldHVybiBwLT5vbmNwdTsKLSNlbHNlCi0JcmV0dXJuIHRhc2tfY3VycmVudChycSwgcCk7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfbG9ja19zd2l0Y2goc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KQogewogI2lmZGVmIENPTkZJR19TTVAKQEAgLTg4Miw3ICs5MDQsNyBAQAogCSAqIFNNUCByZWJhbGFuY2luZyBmcm9tIGludGVycnVwdCBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhcmVzCiAJICogaGVyZS4KIAkgKi8KLQluZXh0LT5vbmNwdSA9IDE7CisJbmV4dC0+b25fY3B1ID0gMTsKICNlbmRpZgogI2lmZGVmIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cKIAlyYXdfc3Bpbl91bmxvY2tfaXJxKCZycS0+bG9jayk7CkBAIC04OTUsMTIgKzkxNywxMiBAQAogewogI2lmZGVmIENPTkZJR19TTVAKIAkvKgotCSAqIEFmdGVyIC0+b25jcHUgaXMgY2xlYXJlZCwgdGhlIHRhc2sgY2FuIGJlIG1vdmVkIHRvIGEgZGlmZmVyZW50IENQVS4KKwkgKiBBZnRlciAtPm9uX2NwdSBpcyBjbGVhcmVkLCB0aGUgdGFzayBjYW4gYmUgbW92ZWQgdG8gYSBkaWZmZXJlbnQgQ1BVLgogCSAqIFdlIG11c3QgZW5zdXJlIHRoaXMgZG9lc24ndCBoYXBwZW4gdW50aWwgdGhlIHN3aXRjaCBpcyBjb21wbGV0ZWx5CiAJICogZmluaXNoZWQuCiAJICovCiAJc21wX3dtYigpOwotCXByZXYtPm9uY3B1ID0gMDsKKwlwcmV2LT5vbl9jcHUgPSAwOwogI2VuZGlmCiAjaWZuZGVmIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC05MDksMjMgKzkzMSwxNSBAQAogI2VuZGlmIC8qIF9fQVJDSF9XQU5UX1VOTE9DS0VEX0NUWFNXICovCiAKIC8qCi0gKiBDaGVjayB3aGV0aGVyIHRoZSB0YXNrIGlzIHdha2luZywgd2UgdXNlIHRoaXMgdG8gc3luY2hyb25pemUgLT5jcHVzX2FsbG93ZWQKLSAqIGFnYWluc3QgdHR3dSgpLgotICovCi1zdGF0aWMgaW5saW5lIGludCB0YXNrX2lzX3dha2luZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCi17Ci0JcmV0dXJuIHVubGlrZWx5KHAtPnN0YXRlID09IFRBU0tfV0FLSU5HKTsKLX0KLQotLyoKLSAqIF9fdGFza19ycV9sb2NrIC0gbG9jayB0aGUgcnVucXVldWUgYSBnaXZlbiB0YXNrIHJlc2lkZXMgb24uCi0gKiBNdXN0IGJlIGNhbGxlZCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICogX190YXNrX3JxX2xvY2sgLSBsb2NrIHRoZSBycSBAcCByZXNpZGVzIG9uLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBycSAqX190YXNrX3JxX2xvY2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQogCV9fYWNxdWlyZXMocnEtPmxvY2spCiB7CiAJc3RydWN0IHJxICpycTsKIAorCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnAtPnBpX2xvY2spOworCiAJZm9yICg7OykgewogCQlycSA9IHRhc2tfcnEocCk7CiAJCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKQEAgLTkzNiwyMiArOTUwLDIyIEBACiB9CiAKIC8qCi0gKiB0YXNrX3JxX2xvY2sgLSBsb2NrIHRoZSBydW5xdWV1ZSBhIGdpdmVuIHRhc2sgcmVzaWRlcyBvbiBhbmQgZGlzYWJsZQotICogaW50ZXJydXB0cy4gTm90ZSB0aGUgb3JkZXJpbmc6IHdlIGNhbiBzYWZlbHkgbG9va3VwIHRoZSB0YXNrX3JxIHdpdGhvdXQKLSAqIGV4cGxpY2l0bHkgZGlzYWJsaW5nIHByZWVtcHRpb24uCisgKiB0YXNrX3JxX2xvY2sgLSBsb2NrIHAtPnBpX2xvY2sgYW5kIGxvY2sgdGhlIHJxIEBwIHJlc2lkZXMgb24uCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcnEgKnRhc2tfcnFfbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorCV9fYWNxdWlyZXMocC0+cGlfbG9jaykKIAlfX2FjcXVpcmVzKHJxLT5sb2NrKQogewogCXN0cnVjdCBycSAqcnE7CiAKIAlmb3IgKDs7KSB7Ci0JCWxvY2FsX2lycV9zYXZlKCpmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcC0+cGlfbG9jaywgKmZsYWdzKTsKIAkJcnEgPSB0YXNrX3JxKHApOwogCQlyYXdfc3Bpbl9sb2NrKCZycS0+bG9jayk7CiAJCWlmIChsaWtlbHkocnEgPT0gdGFza19ycShwKSkpCiAJCQlyZXR1cm4gcnE7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgKmZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZycS0+bG9jayk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5waV9sb2NrLCAqZmxhZ3MpOwogCX0KIH0KIApAQCAtOTYxLDEwICs5NzUsMTMgQEAKIAlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHRhc2tfcnFfdW5sb2NrKHN0cnVjdCBycSAqcnEsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQorc3RhdGljIGlubGluZSB2b2lkCit0YXNrX3JxX3VubG9jayhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQogCV9fcmVsZWFzZXMocnEtPmxvY2spCisJX19yZWxlYXNlcyhwLT5waV9sb2NrKQogewotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgKmZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+cGlfbG9jaywgKmZsYWdzKTsKIH0KIAogLyoKQEAgLTExOTMsMTEgKzEyMTAsMTcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewotCQlmb3JfZWFjaF9jcHUoaSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKQotCQkJaWYgKCFpZGxlX2NwdShpKSkKLQkJCQlyZXR1cm4gaTsKKwkJZm9yX2VhY2hfY3B1KGksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkgeworCQkJaWYgKCFpZGxlX2NwdShpKSkgeworCQkJCWNwdSA9IGk7CisJCQkJZ290byB1bmxvY2s7CisJCQl9CisJCX0KIAl9Cit1bmxvY2s6CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIGNwdTsKIH0KIC8qCkBAIC0xMzA3LDE1ICsxMzMwLDE1IEBACiB7CiAJdTY0IHRtcDsKIAorCXRtcCA9ICh1NjQpZGVsdGFfZXhlYyAqIHdlaWdodDsKKwogCWlmICghbHctPmludl93ZWlnaHQpIHsKIAkJaWYgKEJJVFNfUEVSX0xPTkcgPiAzMiAmJiB1bmxpa2VseShsdy0+d2VpZ2h0ID49IFdNVUxUX0NPTlNUKSkKIAkJCWx3LT5pbnZfd2VpZ2h0ID0gMTsKIAkJZWxzZQotCQkJbHctPmludl93ZWlnaHQgPSAxICsgKFdNVUxUX0NPTlNULWx3LT53ZWlnaHQvMikKLQkJCQkvIChsdy0+d2VpZ2h0KzEpOworCQkJbHctPmludl93ZWlnaHQgPSBXTVVMVF9DT05TVCAvIGx3LT53ZWlnaHQ7CiAJfQogCi0JdG1wID0gKHU2NClkZWx0YV9leGVjICogd2VpZ2h0OwogCS8qCiAJICogQ2hlY2sgd2hldGhlciB3ZSdkIG92ZXJmbG93IHRoZSA2NC1iaXQgbXVsdGlwbGljYXRpb246CiAJICovCkBAIC0xNzczLDcgKzE3OTYsNiBAQAogCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJc2NoZWRfaW5mb19xdWV1ZWQocCk7CiAJcC0+c2NoZWRfY2xhc3MtPmVucXVldWVfdGFzayhycSwgcCwgZmxhZ3MpOwotCXAtPnNlLm9uX3JxID0gMTsKIH0KIAogc3RhdGljIHZvaWQgZGVxdWV1ZV90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGZsYWdzKQpAQCAtMTc4MSw3ICsxODAzLDYgQEAKIAl1cGRhdGVfcnFfY2xvY2socnEpOwogCXNjaGVkX2luZm9fZGVxdWV1ZWQocCk7CiAJcC0+c2NoZWRfY2xhc3MtPmRlcXVldWVfdGFzayhycSwgcCwgZmxhZ3MpOwotCXAtPnNlLm9uX3JxID0gMDsKIH0KIAogLyoKQEAgLTIxMTYsNyArMjEzNyw3IEBACiAJICogQSBxdWV1ZSBldmVudCBoYXMgb2NjdXJyZWQsIGFuZCB3ZSdyZSBnb2luZyB0byBzY2hlZHVsZS4gIEluCiAJICogdGhpcyBjYXNlLCB3ZSBjYW4gc2F2ZSBhIHVzZWxlc3MgYmFjayB0byBiYWNrIGNsb2NrIHVwZGF0ZS4KIAkgKi8KLQlpZiAocnEtPmN1cnItPnNlLm9uX3JxICYmIHRlc3RfdHNrX25lZWRfcmVzY2hlZChycS0+Y3VycikpCisJaWYgKHJxLT5jdXJyLT5vbl9ycSAmJiB0ZXN0X3Rza19uZWVkX3Jlc2NoZWQocnEtPmN1cnIpKQogCQlycS0+c2tpcF9jbG9ja191cGRhdGUgPSAxOwogfQogCkBAIC0yMTYyLDYgKzIxODMsMTEgQEAKIAkgKi8KIAlXQVJOX09OX09OQ0UocC0+c3RhdGUgIT0gVEFTS19SVU5OSU5HICYmIHAtPnN0YXRlICE9IFRBU0tfV0FLSU5HICYmCiAJCQkhKHRhc2tfdGhyZWFkX2luZm8ocCktPnByZWVtcHRfY291bnQgJiBQUkVFTVBUX0FDVElWRSkpOworCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwlXQVJOX09OX09OQ0UoZGVidWdfbG9ja3MgJiYgIShsb2NrZGVwX2lzX2hlbGQoJnAtPnBpX2xvY2spIHx8CisJCQkJICAgICAgbG9ja2RlcF9pc19oZWxkKCZ0YXNrX3JxKHApLT5sb2NrKSkpOworI2VuZGlmCiAjZW5kaWYKIAogCXRyYWNlX3NjaGVkX21pZ3JhdGVfdGFzayhwLCBuZXdfY3B1KTsKQEAgLTIxODIsMTkgKzIyMDgsNiBAQAogc3RhdGljIGludCBtaWdyYXRpb25fY3B1X3N0b3Aodm9pZCAqZGF0YSk7CiAKIC8qCi0gKiBUaGUgdGFzaydzIHJ1bnF1ZXVlIGxvY2sgbXVzdCBiZSBoZWxkLgotICogUmV0dXJucyB0cnVlIGlmIHlvdSBoYXZlIHRvIHdhaXQgZm9yIG1pZ3JhdGlvbiB0aHJlYWQuCi0gKi8KLXN0YXRpYyBib29sIG1pZ3JhdGVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEpCi17Ci0JLyoKLQkgKiBJZiB0aGUgdGFzayBpcyBub3Qgb24gYSBydW5xdWV1ZSAoYW5kIG5vdCBydW5uaW5nKSwgdGhlbgotCSAqIHRoZSBuZXh0IHdha2UtdXAgd2lsbCBwcm9wZXJseSBwbGFjZSB0aGUgdGFzay4KLQkgKi8KLQlyZXR1cm4gcC0+c2Uub25fcnEgfHwgdGFza19ydW5uaW5nKHJxLCBwKTsKLX0KLQotLyoKICAqIHdhaXRfdGFza19pbmFjdGl2ZSAtIHdhaXQgZm9yIGEgdGhyZWFkIHRvIHVuc2NoZWR1bGUuCiAgKgogICogSWYgQG1hdGNoX3N0YXRlIGlzIG5vbnplcm8sIGl0J3MgdGhlIEBwLT5zdGF0ZSB2YWx1ZSBqdXN0IGNoZWNrZWQgYW5kCkBAIC0yMjUxLDExICsyMjY0LDExIEBACiAJCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJCXRyYWNlX3NjaGVkX3dhaXRfdGFzayhwKTsKIAkJcnVubmluZyA9IHRhc2tfcnVubmluZyhycSwgcCk7Ci0JCW9uX3JxID0gcC0+c2Uub25fcnE7CisJCW9uX3JxID0gcC0+b25fcnE7CiAJCW5jc3cgPSAwOwogCQlpZiAoIW1hdGNoX3N0YXRlIHx8IHAtPnN0YXRlID09IG1hdGNoX3N0YXRlKQogCQkJbmNzdyA9IHAtPm52Y3N3IHwgTE9OR19NSU47IC8qIHNldHMgTVNCICovCi0JCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCQl0YXNrX3JxX3VubG9jayhycSwgcCwgJmZsYWdzKTsKIAogCQkvKgogCQkgKiBJZiBpdCBjaGFuZ2VkIGZyb20gdGhlIGV4cGVjdGVkIHN0YXRlLCBiYWlsIG91dCBub3cuCkBAIC0yMzMwLDcgKzIzNDMsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogLyoKLSAqIC0+Y3B1c19hbGxvd2VkIGlzIHByb3RlY3RlZCBieSBlaXRoZXIgVEFTS19XQUtJTkcgb3IgcnEtPmxvY2sgaGVsZC4KKyAqIC0+Y3B1c19hbGxvd2VkIGlzIHByb3RlY3RlZCBieSBib3RoIHJxLT5sb2NrIGFuZCBwLT5waV9sb2NrCiAgKi8KIHN0YXRpYyBpbnQgc2VsZWN0X2ZhbGxiYWNrX3JxKGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKQEAgLTIzNjMsMTIgKzIzNzYsMTIgQEAKIH0KIAogLyoKLSAqIFRoZSBjYWxsZXIgKGZvcmssIHdha2V1cCkgb3ducyBUQVNLX1dBS0lORywgLT5jcHVzX2FsbG93ZWQgaXMgc3RhYmxlLgorICogVGhlIGNhbGxlciAoZm9yaywgd2FrZXVwKSBvd25zIHAtPnBpX2xvY2ssIC0+Y3B1c19hbGxvd2VkIGlzIHN0YWJsZS4KICAqLwogc3RhdGljIGlubGluZQotaW50IHNlbGVjdF90YXNrX3JxKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWdzLCBpbnQgd2FrZV9mbGFncykKK2ludCBzZWxlY3RfdGFza19ycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzZF9mbGFncywgaW50IHdha2VfZmxhZ3MpCiB7Ci0JaW50IGNwdSA9IHAtPnNjaGVkX2NsYXNzLT5zZWxlY3RfdGFza19ycShycSwgcCwgc2RfZmxhZ3MsIHdha2VfZmxhZ3MpOworCWludCBjcHUgPSBwLT5zY2hlZF9jbGFzcy0+c2VsZWN0X3Rhc2tfcnEocCwgc2RfZmxhZ3MsIHdha2VfZmxhZ3MpOwogCiAJLyoKIAkgKiBJbiBvcmRlciBub3QgdG8gY2FsbCBzZXRfdGFza19jcHUoKSBvbiBhIGJsb2NraW5nIHRhc2sgd2UgbmVlZApAQCAtMjM5NCwyNyArMjQwNyw2MiBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0dHd1X2FjdGl2YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHJxICpycSwKLQkJCQkgYm9vbCBpc19zeW5jLCBib29sIGlzX21pZ3JhdGUsIGJvb2wgaXNfbG9jYWwsCi0JCQkJIHVuc2lnbmVkIGxvbmcgZW5fZmxhZ3MpCitzdGF0aWMgdm9pZAordHR3dV9zdGF0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSwgaW50IHdha2VfZmxhZ3MpCiB7Ci0Jc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHMpOwotCWlmIChpc19zeW5jKQotCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19zeW5jKTsKLQlpZiAoaXNfbWlncmF0ZSkKLQkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbWlncmF0ZSk7Ci0JaWYgKGlzX2xvY2FsKQotCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19sb2NhbCk7Ci0JZWxzZQotCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19yZW1vdGUpOworI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCisJc3RydWN0IHJxICpycSA9IHRoaXNfcnEoKTsKIAotCWFjdGl2YXRlX3Rhc2socnEsIHAsIGVuX2ZsYWdzKTsKKyNpZmRlZiBDT05GSUdfU01QCisJaW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCisJaWYgKGNwdSA9PSB0aGlzX2NwdSkgeworCQlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2xvY2FsKTsKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfbG9jYWwpOworCX0gZWxzZSB7CisJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCisJCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzX3JlbW90ZSk7CisJCXJjdV9yZWFkX2xvY2soKTsKKwkJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgeworCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBzY2hlZF9kb21haW5fc3BhbihzZCkpKSB7CisJCQkJc2NoZWRzdGF0X2luYyhzZCwgdHR3dV93YWtlX3JlbW90ZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJfQorI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KKworCXNjaGVkc3RhdF9pbmMocnEsIHR0d3VfY291bnQpOworCXNjaGVkc3RhdF9pbmMocCwgc2Uuc3RhdGlzdGljcy5ucl93YWtldXBzKTsKKworCWlmICh3YWtlX2ZsYWdzICYgV0ZfU1lOQykKKwkJc2NoZWRzdGF0X2luYyhwLCBzZS5zdGF0aXN0aWNzLm5yX3dha2V1cHNfc3luYyk7CisKKwlpZiAoY3B1ICE9IHRhc2tfY3B1KHApKQorCQlzY2hlZHN0YXRfaW5jKHAsIHNlLnN0YXRpc3RpY3MubnJfd2FrZXVwc19taWdyYXRlKTsKKworI2VuZGlmIC8qIENPTkZJR19TQ0hFRFNUQVRTICovCiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0dHd1X3Bvc3RfYWN0aXZhdGlvbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBycSAqcnEsCi0JCQkJCWludCB3YWtlX2ZsYWdzLCBib29sIHN1Y2Nlc3MpCitzdGF0aWMgdm9pZCB0dHd1X2FjdGl2YXRlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGVuX2ZsYWdzKQogewotCXRyYWNlX3NjaGVkX3dha2V1cChwLCBzdWNjZXNzKTsKKwlhY3RpdmF0ZV90YXNrKHJxLCBwLCBlbl9mbGFncyk7CisJcC0+b25fcnEgPSAxOworCisJLyogaWYgYSB3b3JrZXIgaXMgd2FraW5nIHVwLCBub3RpZnkgd29ya3F1ZXVlICovCisJaWYgKHAtPmZsYWdzICYgUEZfV1FfV09SS0VSKQorCQl3cV93b3JrZXJfd2FraW5nX3VwKHAsIGNwdV9vZihycSkpOworfQorCisvKgorICogTWFyayB0aGUgdGFzayBydW5uYWJsZSBhbmQgcGVyZm9ybSB3YWtldXAtcHJlZW1wdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3R0d3VfZG9fd2FrZXVwKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHdha2VfZmxhZ3MpCit7CisJdHJhY2Vfc2NoZWRfd2FrZXVwKHAsIHRydWUpOwogCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgd2FrZV9mbGFncyk7CiAKIAlwLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKQEAgLTI0MzMsOSArMjQ4MSw5OSBAQAogCQlycS0+aWRsZV9zdGFtcCA9IDA7CiAJfQogI2VuZGlmCi0JLyogaWYgYSB3b3JrZXIgaXMgd2FraW5nIHVwLCBub3RpZnkgd29ya3F1ZXVlICovCi0JaWYgKChwLT5mbGFncyAmIFBGX1dRX1dPUktFUikgJiYgc3VjY2VzcykKLQkJd3Ffd29ya2VyX3dha2luZ191cChwLCBjcHVfb2YocnEpKTsKK30KKworc3RhdGljIHZvaWQKK3R0d3VfZG9fYWN0aXZhdGUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgd2FrZV9mbGFncykKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaWYgKHAtPnNjaGVkX2NvbnRyaWJ1dGVzX3RvX2xvYWQpCisJCXJxLT5ucl91bmludGVycnVwdGlibGUtLTsKKyNlbmRpZgorCisJdHR3dV9hY3RpdmF0ZShycSwgcCwgRU5RVUVVRV9XQUtFVVAgfCBFTlFVRVVFX1dBS0lORyk7CisJdHR3dV9kb193YWtldXAocnEsIHAsIHdha2VfZmxhZ3MpOworfQorCisvKgorICogQ2FsbGVkIGluIGNhc2UgdGhlIHRhc2sgQHAgaXNuJ3QgZnVsbHkgZGVzY2hlZHVsZWQgZnJvbSBpdHMgcnVucXVldWUsCisgKiBpbiB0aGlzIGNhc2Ugd2UgbXVzdCBkbyBhIHJlbW90ZSB3YWtldXAuIEl0cyBhICdsaWdodCcgd2FrZXVwIHRob3VnaCwKKyAqIHNpbmNlIGFsbCB3ZSBuZWVkIHRvIGRvIGlzIGZsaXAgcC0+c3RhdGUgdG8gVEFTS19SVU5OSU5HLCBzaW5jZQorICogdGhlIHRhc2sgaXMgc3RpbGwgLT5vbl9ycS4KKyAqLworc3RhdGljIGludCB0dHd1X3JlbW90ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCB3YWtlX2ZsYWdzKQoreworCXN0cnVjdCBycSAqcnE7CisJaW50IHJldCA9IDA7CisKKwlycSA9IF9fdGFza19ycV9sb2NrKHApOworCWlmIChwLT5vbl9ycSkgeworCQl0dHd1X2RvX3dha2V1cChycSwgcCwgd2FrZV9mbGFncyk7CisJCXJldCA9IDE7CisJfQorCV9fdGFza19ycV91bmxvY2socnEpOworCisJcmV0dXJuIHJldDsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB2b2lkIHNjaGVkX3R0d3VfcGVuZGluZyh2b2lkKQoreworCXN0cnVjdCBycSAqcnEgPSB0aGlzX3JxKCk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpsaXN0ID0geGNoZygmcnEtPndha2VfbGlzdCwgTlVMTCk7CisKKwlpZiAoIWxpc3QpCisJCXJldHVybjsKKworCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKKworCXdoaWxlIChsaXN0KSB7CisJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCA9IGxpc3Q7CisJCWxpc3QgPSBsaXN0LT53YWtlX2VudHJ5OworCQl0dHd1X2RvX2FjdGl2YXRlKHJxLCBwLCAwKTsKKwl9CisKKwlyYXdfc3Bpbl91bmxvY2soJnJxLT5sb2NrKTsKK30KKwordm9pZCBzY2hlZHVsZXJfaXBpKHZvaWQpCit7CisJc2NoZWRfdHR3dV9wZW5kaW5nKCk7Cit9CisKK3N0YXRpYyB2b2lkIHR0d3VfcXVldWVfcmVtb3RlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CisJc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0ID0gcnEtPndha2VfbGlzdDsKKworCWZvciAoOzspIHsKKwkJc3RydWN0IHRhc2tfc3RydWN0ICpvbGQgPSBuZXh0OworCisJCXAtPndha2VfZW50cnkgPSBuZXh0OworCQluZXh0ID0gY21weGNoZygmcnEtPndha2VfbGlzdCwgb2xkLCBwKTsKKwkJaWYgKG5leHQgPT0gb2xkKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFuZXh0KQorCQlzbXBfc2VuZF9yZXNjaGVkdWxlKGNwdSk7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgdHR3dV9xdWV1ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBjcHUpCit7CisJc3RydWN0IHJxICpycSA9IGNwdV9ycShjcHUpOworCisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiBkZWZpbmVkKENPTkZJR19TQ0hFRF9UVFdVX1FVRVVFKQorCWlmIChzY2hlZF9mZWF0KFRUV1VfUVVFVUUpICYmIGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpIHsKKwkJdHR3dV9xdWV1ZV9yZW1vdGUocCwgY3B1KTsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCisJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOworCXR0d3VfZG9fYWN0aXZhdGUocnEsIHAsIDApOworCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwogfQogCiAvKioKQEAgLTI0NTMsOTIgKzI1OTEsNjQgQEAKICAqIFJldHVybnMgJXRydWUgaWYgQHAgd2FzIHdva2VuIHVwLCAlZmFsc2UgaWYgaXQgd2FzIGFscmVhZHkgcnVubmluZwogICogb3IgQHN0YXRlIGRpZG4ndCBtYXRjaCBAcCdzIHN0YXRlLgogICovCi1zdGF0aWMgaW50IHRyeV90b193YWtlX3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IHN0YXRlLAotCQkJICBpbnQgd2FrZV9mbGFncykKK3N0YXRpYyBpbnQKK3RyeV90b193YWtlX3VwKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgaW50IHN0YXRlLCBpbnQgd2FrZV9mbGFncykKIHsKLQlpbnQgY3B1LCBvcmlnX2NwdSwgdGhpc19jcHUsIHN1Y2Nlc3MgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBlbl9mbGFncyA9IEVOUVVFVUVfV0FLRVVQOwotCXN0cnVjdCBycSAqcnE7Ci0KLQl0aGlzX2NwdSA9IGdldF9jcHUoKTsKKwlpbnQgY3B1LCBzdWNjZXNzID0gMDsKIAogCXNtcF93bWIoKTsKLQlycSA9IHRhc2tfcnFfbG9jayhwLCAmZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcC0+cGlfbG9jaywgZmxhZ3MpOwogCWlmICghKHAtPnN0YXRlICYgc3RhdGUpKQogCQlnb3RvIG91dDsKIAotCWlmIChwLT5zZS5vbl9ycSkKLQkJZ290byBvdXRfcnVubmluZzsKLQorCXN1Y2Nlc3MgPSAxOyAvKiB3ZSdyZSBnb2luZyB0byBjaGFuZ2UgLT5zdGF0ZSAqLwogCWNwdSA9IHRhc2tfY3B1KHApOwotCW9yaWdfY3B1ID0gY3B1OworCisJaWYgKHAtPm9uX3JxICYmIHR0d3VfcmVtb3RlKHAsIHdha2VfZmxhZ3MpKQorCQlnb3RvIHN0YXQ7CiAKICNpZmRlZiBDT05GSUdfU01QCi0JaWYgKHVubGlrZWx5KHRhc2tfcnVubmluZyhycSwgcCkpKQotCQlnb3RvIG91dF9hY3RpdmF0ZTsKLQogCS8qCi0JICogSW4gb3JkZXIgdG8gaGFuZGxlIGNvbmN1cnJlbnQgd2FrZXVwcyBhbmQgcmVsZWFzZSB0aGUgcnEtPmxvY2sKLQkgKiB3ZSBwdXQgdGhlIHRhc2sgaW4gVEFTS19XQUtJTkcgc3RhdGUuCi0JICoKLQkgKiBGaXJzdCBmaXggdXAgdGhlIG5yX3VuaW50ZXJydXB0aWJsZSBjb3VudDoKKwkgKiBJZiB0aGUgb3duaW5nIChyZW1vdGUpIGNwdSBpcyBzdGlsbCBpbiB0aGUgbWlkZGxlIG9mIHNjaGVkdWxlKCkgd2l0aAorCSAqIHRoaXMgdGFzayBhcyBwcmV2LCB3YWl0IHVudGlsIGl0cyBkb25lIHJlZmVyZW5jaW5nIHRoZSB0YXNrLgogCSAqLwotCWlmICh0YXNrX2NvbnRyaWJ1dGVzX3RvX2xvYWQocCkpIHsKLQkJaWYgKGxpa2VseShjcHVfb25saW5lKG9yaWdfY3B1KSkpCi0JCQlycS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07Ci0JCWVsc2UKLQkJCXRoaXNfcnEoKS0+bnJfdW5pbnRlcnJ1cHRpYmxlLS07CisJd2hpbGUgKHAtPm9uX2NwdSkgeworI2lmZGVmIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cKKwkJLyoKKwkJICogSWYgY2FsbGVkIGZyb20gaW50ZXJydXB0IGNvbnRleHQgd2UgY291bGQgaGF2ZSBsYW5kZWQgaW4gdGhlCisJCSAqIG1pZGRsZSBvZiBzY2hlZHVsZSgpLCBpbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkIHRha2UgY2FyZSBub3QKKwkJICogdG8gc3BpbiBvbiAtPm9uX2NwdSBpZiBwIGlzIGN1cnJlbnQsIHNpbmNlIHRoYXQgd291bGQKKwkJICogZGVhZGxvY2suCisJCSAqLworCQlpZiAocCA9PSBjdXJyZW50KSB7CisJCQl0dHd1X3F1ZXVlKHAsIGNwdSk7CisJCQlnb3RvIHN0YXQ7CisJCX0KKyNlbmRpZgorCQljcHVfcmVsYXgoKTsKIAl9CisJLyoKKwkgKiBQYWlycyB3aXRoIHRoZSBzbXBfd21iKCkgaW4gZmluaXNoX2xvY2tfc3dpdGNoKCkuCisJICovCisJc21wX3JtYigpOworCisJcC0+c2NoZWRfY29udHJpYnV0ZXNfdG9fbG9hZCA9ICEhdGFza19jb250cmlidXRlc190b19sb2FkKHApOwogCXAtPnN0YXRlID0gVEFTS19XQUtJTkc7CiAKLQlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FraW5nKSB7Ci0JCXAtPnNjaGVkX2NsYXNzLT50YXNrX3dha2luZyhycSwgcCk7Ci0JCWVuX2ZsYWdzIHw9IEVOUVVFVUVfV0FLSU5HOwotCX0KKwlpZiAocC0+c2NoZWRfY2xhc3MtPnRhc2tfd2FraW5nKQorCQlwLT5zY2hlZF9jbGFzcy0+dGFza193YWtpbmcocCk7CiAKLQljcHUgPSBzZWxlY3RfdGFza19ycShycSwgcCwgU0RfQkFMQU5DRV9XQUtFLCB3YWtlX2ZsYWdzKTsKLQlpZiAoY3B1ICE9IG9yaWdfY3B1KQorCWNwdSA9IHNlbGVjdF90YXNrX3JxKHAsIFNEX0JBTEFOQ0VfV0FLRSwgd2FrZV9mbGFncyk7CisJaWYgKHRhc2tfY3B1KHApICE9IGNwdSkKIAkJc2V0X3Rhc2tfY3B1KHAsIGNwdSk7Ci0JX190YXNrX3JxX3VubG9jayhycSk7Ci0KLQlycSA9IGNwdV9ycShjcHUpOwotCXJhd19zcGluX2xvY2soJnJxLT5sb2NrKTsKLQotCS8qCi0JICogV2UgbWlncmF0ZWQgdGhlIHRhc2sgd2l0aG91dCBob2xkaW5nIGVpdGhlciBycS0+bG9jaywgaG93ZXZlcgotCSAqIHNpbmNlIHRoZSB0YXNrIGlzIG5vdCBvbiB0aGUgdGFzayBsaXN0IGl0c2VsZiwgbm9ib2R5IGVsc2UKLQkgKiB3aWxsIHRyeSBhbmQgbWlncmF0ZSB0aGUgdGFzaywgaGVuY2UgdGhlIHJxIHNob3VsZCBtYXRjaCB0aGUKLQkgKiBjcHUgd2UganVzdCBtb3ZlZCBpdCB0by4KLQkgKi8KLQlXQVJOX09OKHRhc2tfY3B1KHApICE9IGNwdSk7Ci0JV0FSTl9PTihwLT5zdGF0ZSAhPSBUQVNLX1dBS0lORyk7Ci0KLSNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwotCXNjaGVkc3RhdF9pbmMocnEsIHR0d3VfY291bnQpOwotCWlmIChjcHUgPT0gdGhpc19jcHUpCi0JCXNjaGVkc3RhdF9pbmMocnEsIHR0d3VfbG9jYWwpOwotCWVsc2UgewotCQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZDsKLQkJZm9yX2VhY2hfZG9tYWluKHRoaXNfY3B1LCBzZCkgewotCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCBzY2hlZF9kb21haW5fc3BhbihzZCkpKSB7Ci0JCQkJc2NoZWRzdGF0X2luYyhzZCwgdHR3dV93YWtlX3JlbW90ZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYgLyogQ09ORklHX1NDSEVEU1RBVFMgKi8KLQotb3V0X2FjdGl2YXRlOgogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KLQl0dHd1X2FjdGl2YXRlKHAsIHJxLCB3YWtlX2ZsYWdzICYgV0ZfU1lOQywgb3JpZ19jcHUgIT0gY3B1LAotCQkgICAgICBjcHUgPT0gdGhpc19jcHUsIGVuX2ZsYWdzKTsKLQlzdWNjZXNzID0gMTsKLW91dF9ydW5uaW5nOgotCXR0d3VfcG9zdF9hY3RpdmF0aW9uKHAsIHJxLCB3YWtlX2ZsYWdzLCBzdWNjZXNzKTsKKworCXR0d3VfcXVldWUocCwgY3B1KTsKK3N0YXQ6CisJdHR3dV9zdGF0KHAsIGNwdSwgd2FrZV9mbGFncyk7CiBvdXQ6Ci0JdGFza19ycV91bmxvY2socnEsICZmbGFncyk7Ci0JcHV0X2NwdSgpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5waV9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gc3VjY2VzczsKIH0KQEAgLTI1NDcsMzEgKzI2NTcsMzQgQEAKICAqIHRyeV90b193YWtlX3VwX2xvY2FsIC0gdHJ5IHRvIHdha2UgdXAgYSBsb2NhbCB0YXNrIHdpdGggcnEgbG9jayBoZWxkCiAgKiBAcDogdGhlIHRocmVhZCB0byBiZSBhd2FrZW5lZAogICoKLSAqIFB1dCBAcCBvbiB0aGUgcnVuLXF1ZXVlIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuICBUaGUgY2FsbGVyIG11c3QKKyAqIFB1dCBAcCBvbiB0aGUgcnVuLXF1ZXVlIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuIFRoZSBjYWxsZXIgbXVzdAogICogZW5zdXJlIHRoYXQgdGhpc19ycSgpIGlzIGxvY2tlZCwgQHAgaXMgYm91bmQgdG8gdGhpc19ycSgpIGFuZCBub3QKLSAqIHRoZSBjdXJyZW50IHRhc2suICB0aGlzX3JxKCkgc3RheXMgbG9ja2VkIG92ZXIgaW52b2NhdGlvbi4KKyAqIHRoZSBjdXJyZW50IHRhc2suCiAgKi8KIHN0YXRpYyB2b2lkIHRyeV90b193YWtlX3VwX2xvY2FsKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAlzdHJ1Y3QgcnEgKnJxID0gdGFza19ycShwKTsKLQlib29sIHN1Y2Nlc3MgPSBmYWxzZTsKIAogCUJVR19PTihycSAhPSB0aGlzX3JxKCkpOwogCUJVR19PTihwID09IGN1cnJlbnQpOwogCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnJxLT5sb2NrKTsKIAotCWlmICghKHAtPnN0YXRlICYgVEFTS19OT1JNQUwpKQotCQlyZXR1cm47Ci0KLQlpZiAoIXAtPnNlLm9uX3JxKSB7Ci0JCWlmIChsaWtlbHkoIXRhc2tfcnVubmluZyhycSwgcCkpKSB7Ci0JCQlzY2hlZHN0YXRfaW5jKHJxLCB0dHd1X2NvdW50KTsKLQkJCXNjaGVkc3RhdF9pbmMocnEsIHR0d3VfbG9jYWwpOwotCQl9Ci0JCXR0d3VfYWN0aXZhdGUocCwgcnEsIGZhbHNlLCBmYWxzZSwgdHJ1ZSwgRU5RVUVVRV9XQUtFVVApOwotCQlzdWNjZXNzID0gdHJ1ZTsKKwlpZiAoIXJhd19zcGluX3RyeWxvY2soJnAtPnBpX2xvY2spKSB7CisJCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZwLT5waV9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmcnEtPmxvY2spOwogCX0KLQl0dHd1X3Bvc3RfYWN0aXZhdGlvbihwLCBycSwgMCwgc3VjY2Vzcyk7CisKKwlpZiAoIShwLT5zdGF0ZSAmIFRBU0tfTk9STUFMKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoIXAtPm9uX3JxKQorCQl0dHd1X2FjdGl2YXRlKHJxLCBwLCBFTlFVRVVFX1dBS0VVUCk7CisKKwl0dHd1X2RvX3dha2V1cChycSwgcCwgMCk7CisJdHR3dV9zdGF0KHAsIHNtcF9wcm9jZXNzb3JfaWQoKSwgMCk7CitvdXQ6CisJcmF3X3NwaW5fdW5sb2NrKCZwLT5waV9sb2NrKTsKIH0KIAogLyoqCkBAIC0yNjA0LDE5ICsyNzE3LDIxIEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fc2NoZWRfZm9yayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CisJcC0+b25fcnEJCQk9IDA7CisKKwlwLT5zZS5vbl9ycQkJCT0gMDsKIAlwLT5zZS5leGVjX3N0YXJ0CQk9IDA7CiAJcC0+c2Uuc3VtX2V4ZWNfcnVudGltZQkJPSAwOwogCXAtPnNlLnByZXZfc3VtX2V4ZWNfcnVudGltZQk9IDA7CiAJcC0+c2UubnJfbWlncmF0aW9ucwkJPSAwOwogCXAtPnNlLnZydW50aW1lCQkJPSAwOworCUlOSVRfTElTVF9IRUFEKCZwLT5zZS5ncm91cF9ub2RlKTsKIAogI2lmZGVmIENPTkZJR19TQ0hFRFNUQVRTCiAJbWVtc2V0KCZwLT5zZS5zdGF0aXN0aWNzLCAwLCBzaXplb2YocC0+c2Uuc3RhdGlzdGljcykpOwogI2VuZGlmCiAKIAlJTklUX0xJU1RfSEVBRCgmcC0+cnQucnVuX2xpc3QpOwotCXAtPnNlLm9uX3JxID0gMDsKLQlJTklUX0xJU1RfSEVBRCgmcC0+c2UuZ3JvdXBfbm9kZSk7CiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVF9OT1RJRklFUlMKIAlJTklUX0hMSVNUX0hFQUQoJnAtPnByZWVtcHRfbm90aWZpZXJzKTsKQEAgLTI2MjYsOCArMjc0MSw5IEBACiAvKgogICogZm9yaygpL2Nsb25lKCktdGltZSBzZXR1cDoKICAqLwotdm9pZCBzY2hlZF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IGNsb25lX2ZsYWdzKQordm9pZCBzY2hlZF9mb3JrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjcHUgPSBnZXRfY3B1KCk7CiAKIAlfX3NjaGVkX2ZvcmsocCk7CkBAIC0yNjc4LDE2ICsyNzk0LDE2IEBACiAJICoKIAkgKiBTaWxlbmNlIFBST1ZFX1JDVS4KIAkgKi8KLQlyY3VfcmVhZF9sb2NrKCk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwLT5waV9sb2NrLCBmbGFncyk7CiAJc2V0X3Rhc2tfY3B1KHAsIGNwdSk7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnBpX2xvY2ssIGZsYWdzKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX1NDSEVEU1RBVFMpIHx8IGRlZmluZWQoQ09ORklHX1RBU0tfREVMQVlfQUNDVCkKIAlpZiAobGlrZWx5KHNjaGVkX2luZm9fb24oKSkpCiAJCW1lbXNldCgmcC0+c2NoZWRfaW5mbywgMCwgc2l6ZW9mKHAtPnNjaGVkX2luZm8pKTsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgZGVmaW5lZChfX0FSQ0hfV0FOVF9VTkxPQ0tFRF9DVFhTVykKLQlwLT5vbmNwdSA9IDA7CisjaWYgZGVmaW5lZChDT05GSUdfU01QKQorCXAtPm9uX2NwdSA9IDA7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogCS8qIFdhbnQgdG8gc3RhcnQgd2l0aCBrZXJuZWwgcHJlZW1wdGlvbiBkaXNhYmxlZC4gKi8KQEAgLTI3MDcsNDEgKzI4MjMsMzEgQEAKICAqIHRoYXQgbXVzdCBiZSBkb25lIGZvciBldmVyeSBuZXdseSBjcmVhdGVkIGNvbnRleHQsIHRoZW4gcHV0cyB0aGUgdGFzawogICogb24gdGhlIHJ1bnF1ZXVlIGFuZCB3YWtlcyBpdC4KICAqLwotdm9pZCB3YWtlX3VwX25ld190YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgdW5zaWduZWQgbG9uZyBjbG9uZV9mbGFncykKK3ZvaWQgd2FrZV91cF9uZXdfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcnEgKnJxOwotCWludCBjcHUgX19tYXliZV91bnVzZWQgPSBnZXRfY3B1KCk7CiAKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnBpX2xvY2ssIGZsYWdzKTsKICNpZmRlZiBDT05GSUdfU01QCi0JcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKLQlwLT5zdGF0ZSA9IFRBU0tfV0FLSU5HOwotCiAJLyoKIAkgKiBGb3JrIGJhbGFuY2luZywgZG8gaXQgaGVyZSBhbmQgbm90IGVhcmxpZXIgYmVjYXVzZToKIAkgKiAgLSBjcHVzX2FsbG93ZWQgY2FuIGNoYW5nZSBpbiB0aGUgZm9yayBwYXRoCiAJICogIC0gYW55IHByZXZpb3VzbHkgc2VsZWN0ZWQgY3B1IG1pZ2h0IGRpc2FwcGVhciB0aHJvdWdoIGhvdHBsdWcKLQkgKgotCSAqIFdlIHNldCBUQVNLX1dBS0lORyBzbyB0aGF0IHNlbGVjdF90YXNrX3JxKCkgY2FuIGRyb3AgcnEtPmxvY2sKLQkgKiB3aXRob3V0IHBlb3BsZSBwb2tpbmcgYXQgLT5jcHVzX2FsbG93ZWQuCiAJICovCi0JY3B1ID0gc2VsZWN0X3Rhc2tfcnEocnEsIHAsIFNEX0JBTEFOQ0VfRk9SSywgMCk7Ci0Jc2V0X3Rhc2tfY3B1KHAsIGNwdSk7Ci0KLQlwLT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKLQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwlzZXRfdGFza19jcHUocCwgc2VsZWN0X3Rhc2tfcnEocCwgU0RfQkFMQU5DRV9GT1JLLCAwKSk7CiAjZW5kaWYKIAotCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisJcnEgPSBfX3Rhc2tfcnFfbG9jayhwKTsKIAlhY3RpdmF0ZV90YXNrKHJxLCBwLCAwKTsKLQl0cmFjZV9zY2hlZF93YWtldXBfbmV3KHAsIDEpOworCXAtPm9uX3JxID0gMTsKKwl0cmFjZV9zY2hlZF93YWtldXBfbmV3KHAsIHRydWUpOwogCWNoZWNrX3ByZWVtcHRfY3VycihycSwgcCwgV0ZfRk9SSyk7CiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChwLT5zY2hlZF9jbGFzcy0+dGFza193b2tlbikKIAkJcC0+c2NoZWRfY2xhc3MtPnRhc2tfd29rZW4ocnEsIHApOwogI2VuZGlmCi0JdGFza19ycV91bmxvY2socnEsICZmbGFncyk7Ci0JcHV0X2NwdSgpOworCXRhc2tfcnFfdW5sb2NrKHJxLCBwLCAmZmxhZ3MpOwogfQogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFRfTk9USUZJRVJTCkBAIC0zNDUwLDI3ICszNTU2LDIyIEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwID0gY3VycmVudDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBycSAqcnE7CiAJaW50IGRlc3RfY3B1OwogCi0JcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKLQlkZXN0X2NwdSA9IHAtPnNjaGVkX2NsYXNzLT5zZWxlY3RfdGFza19ycShycSwgcCwgU0RfQkFMQU5DRV9FWEVDLCAwKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnAtPnBpX2xvY2ssIGZsYWdzKTsKKwlkZXN0X2NwdSA9IHAtPnNjaGVkX2NsYXNzLT5zZWxlY3RfdGFza19ycShwLCBTRF9CQUxBTkNFX0VYRUMsIDApOwogCWlmIChkZXN0X2NwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCiAJCWdvdG8gdW5sb2NrOwogCi0JLyoKLQkgKiBzZWxlY3RfdGFza19ycSgpIGNhbiByYWNlIGFnYWluc3QgLT5jcHVzX2FsbG93ZWQKLQkgKi8KLQlpZiAoY3B1bWFza190ZXN0X2NwdShkZXN0X2NwdSwgJnAtPmNwdXNfYWxsb3dlZCkgJiYKLQkgICAgbGlrZWx5KGNwdV9hY3RpdmUoZGVzdF9jcHUpKSAmJiBtaWdyYXRlX3Rhc2socCwgcnEpKSB7CisJaWYgKGxpa2VseShjcHVfYWN0aXZlKGRlc3RfY3B1KSkpIHsKIAkJc3RydWN0IG1pZ3JhdGlvbl9hcmcgYXJnID0geyBwLCBkZXN0X2NwdSB9OwogCi0JCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwotCQlzdG9wX29uZV9jcHUoY3B1X29mKHJxKSwgbWlncmF0aW9uX2NwdV9zdG9wLCAmYXJnKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnBpX2xvY2ssIGZsYWdzKTsKKwkJc3RvcF9vbmVfY3B1KHRhc2tfY3B1KHApLCBtaWdyYXRpb25fY3B1X3N0b3AsICZhcmcpOwogCQlyZXR1cm47CiAJfQogdW5sb2NrOgotCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5waV9sb2NrLCBmbGFncyk7CiB9CiAKICNlbmRpZgpAQCAtMzUwNyw3ICszNjA4LDcgQEAKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJbnMgPSBkb190YXNrX2RlbHRhX2V4ZWMocCwgcnEpOwotCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCXRhc2tfcnFfdW5sb2NrKHJxLCBwLCAmZmxhZ3MpOwogCiAJcmV0dXJuIG5zOwogfQpAQCAtMzUyNSw3ICszNjI2LDcgQEAKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJbnMgPSBwLT5zZS5zdW1fZXhlY19ydW50aW1lICsgZG9fdGFza19kZWx0YV9leGVjKHAsIHJxKTsKLQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwl0YXNrX3JxX3VubG9jayhycSwgcCwgJmZsYWdzKTsKIAogCXJldHVybiBuczsKIH0KQEAgLTM1NDksNyArMzY1MCw3IEBACiAJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKIAl0aHJlYWRfZ3JvdXBfY3B1dGltZShwLCAmdG90YWxzKTsKIAlucyA9IHRvdGFscy5zdW1fZXhlY19ydW50aW1lICsgZG9fdGFza19kZWx0YV9leGVjKHAsIHJxKTsKLQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwl0YXNrX3JxX3VubG9jayhycSwgcCwgJmZsYWdzKTsKIAogCXJldHVybiBuczsKIH0KQEAgLTM5MDMsOSArNDAwNCw2IEBACiAvKgogICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCBieSB0aGUgdGltZXIgY29kZSwgd2l0aCBIWiBmcmVxdWVuY3kuCiAgKiBXZSBjYWxsIGl0IHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KLSAqCi0gKiBJdCBhbHNvIGdldHMgY2FsbGVkIGJ5IHRoZSBmb3JrIGNvZGUsIHdoZW4gY2hhbmdpbmcgdGhlIHBhcmVudCdzCi0gKiB0aW1lc2xpY2VzLgogICovCiB2b2lkIHNjaGVkdWxlcl90aWNrKHZvaWQpCiB7CkBAIC00MDI1LDE3ICs0MTIzLDExIEBACiAJcHJvZmlsZV9oaXQoU0NIRURfUFJPRklMSU5HLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogCiAJc2NoZWRzdGF0X2luYyh0aGlzX3JxKCksIHNjaGVkX2NvdW50KTsKLSNpZmRlZiBDT05GSUdfU0NIRURTVEFUUwotCWlmICh1bmxpa2VseShwcmV2LT5sb2NrX2RlcHRoID49IDApKSB7Ci0JCXNjaGVkc3RhdF9pbmModGhpc19ycSgpLCBycV9zY2hlZF9pbmZvLmJrbF9jb3VudCk7Ci0JCXNjaGVkc3RhdF9pbmMocHJldiwgc2NoZWRfaW5mby5ia2xfY291bnQpOwotCX0KLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBwdXRfcHJldl90YXNrKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcHJldikKIHsKLQlpZiAocHJldi0+c2Uub25fcnEpCisJaWYgKHByZXYtPm9uX3JxIHx8IHJxLT5za2lwX2Nsb2NrX3VwZGF0ZSA8IDApCiAJCXVwZGF0ZV9ycV9jbG9jayhycSk7CiAJcHJldi0+c2NoZWRfY2xhc3MtPnB1dF9wcmV2X3Rhc2socnEsIHByZXYpOwogfQpAQCAtNDA5NywxMSArNDE4OSwxMyBAQAogCQlpZiAodW5saWtlbHkoc2lnbmFsX3BlbmRpbmdfc3RhdGUocHJldi0+c3RhdGUsIHByZXYpKSkgewogCQkJcHJldi0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJCX0gZWxzZSB7CisJCQlkZWFjdGl2YXRlX3Rhc2socnEsIHByZXYsIERFUVVFVUVfU0xFRVApOworCQkJcHJldi0+b25fcnEgPSAwOworCiAJCQkvKgotCQkJICogSWYgYSB3b3JrZXIgaXMgZ29pbmcgdG8gc2xlZXAsIG5vdGlmeSBhbmQKLQkJCSAqIGFzayB3b3JrcXVldWUgd2hldGhlciBpdCB3YW50cyB0byB3YWtlIHVwIGEKLQkJCSAqIHRhc2sgdG8gbWFpbnRhaW4gY29uY3VycmVuY3kuICBJZiBzbywgd2FrZQotCQkJICogdXAgdGhlIHRhc2suCisJCQkgKiBJZiBhIHdvcmtlciB3ZW50IHRvIHNsZWVwLCBub3RpZnkgYW5kIGFzayB3b3JrcXVldWUKKwkJCSAqIHdoZXRoZXIgaXQgd2FudHMgdG8gd2FrZSB1cCBhIHRhc2sgdG8gbWFpbnRhaW4KKwkJCSAqIGNvbmN1cnJlbmN5LgogCQkJICovCiAJCQlpZiAocHJldi0+ZmxhZ3MgJiBQRl9XUV9XT1JLRVIpIHsKIAkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvX3dha2V1cDsKQEAgLTQxMTAsMTEgKzQyMDQsMTAgQEAKIAkJCQlpZiAodG9fd2FrZXVwKQogCQkJCQl0cnlfdG9fd2FrZV91cF9sb2NhbCh0b193YWtldXApOwogCQkJfQotCQkJZGVhY3RpdmF0ZV90YXNrKHJxLCBwcmV2LCBERVFVRVVFX1NMRUVQKTsKIAogCQkJLyoKLQkJCSAqIElmIHdlIGFyZSBnb2luZyB0byBzbGVlcCBhbmQgd2UgaGF2ZSBwbHVnZ2VkIElPIHF1ZXVlZCwgbWFrZQotCQkJICogc3VyZSB0byBzdWJtaXQgaXQgdG8gYXZvaWQgZGVhZGxvY2tzLgorCQkJICogSWYgd2UgYXJlIGdvaW5nIHRvIHNsZWVwIGFuZCB3ZSBoYXZlIHBsdWdnZWQgSU8KKwkJCSAqIHF1ZXVlZCwgbWFrZSBzdXJlIHRvIHN1Ym1pdCBpdCB0byBhdm9pZCBkZWFkbG9ja3MuCiAJCQkgKi8KIAkJCWlmIChibGtfbmVlZHNfZmx1c2hfcGx1ZyhwcmV2KSkgewogCQkJCXJhd19zcGluX3VubG9jaygmcnEtPmxvY2spOwpAQCAtNDE2MSw3MCArNDI1NCw1MyBAQAogRVhQT1JUX1NZTUJPTChzY2hlZHVsZSk7CiAKICNpZmRlZiBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUgorCitzdGF0aWMgaW5saW5lIGJvb2wgb3duZXJfcnVubmluZyhzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIpCit7CisJYm9vbCByZXQgPSBmYWxzZTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAobG9jay0+b3duZXIgIT0gb3duZXIpCisJCWdvdG8gZmFpbDsKKworCS8qCisJICogRW5zdXJlIHdlIGVtaXQgdGhlIG93bmVyLT5vbl9jcHUsIGRlcmVmZXJlbmNlIF9hZnRlcl8gY2hlY2tpbmcKKwkgKiBsb2NrLT5vd25lciBzdGlsbCBtYXRjaGVzIG93bmVyLCBpZiB0aGF0IGZhaWxzLCBvd25lciBtaWdodAorCSAqIHBvaW50IHRvIGZyZWUoKWQgbWVtb3J5LCBpZiBpdCBzdGlsbCBtYXRjaGVzLCB0aGUgcmN1X3JlYWRfbG9jaygpCisJICogZW5zdXJlcyB0aGUgbWVtb3J5IHN0YXlzIHZhbGlkLgorCSAqLworCWJhcnJpZXIoKTsKKworCXJldCA9IG93bmVyLT5vbl9jcHU7CitmYWlsOgorCXJjdV9yZWFkX3VubG9jaygpOworCisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIExvb2sgb3V0ISAib3duZXIiIGlzIGFuIGVudGlyZWx5IHNwZWN1bGF0aXZlIHBvaW50ZXIKICAqIGFjY2VzcyBhbmQgbm90IHJlbGlhYmxlLgogICovCi1pbnQgbXV0ZXhfc3Bpbl9vbl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0aHJlYWRfaW5mbyAqb3duZXIpCitpbnQgbXV0ZXhfc3Bpbl9vbl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0YXNrX3N0cnVjdCAqb3duZXIpCiB7Ci0JdW5zaWduZWQgaW50IGNwdTsKLQlzdHJ1Y3QgcnEgKnJxOwotCiAJaWYgKCFzY2hlZF9mZWF0KE9XTkVSX1NQSU4pKQogCQlyZXR1cm4gMDsKIAotI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKLQkvKgotCSAqIE5lZWQgdG8gYWNjZXNzIHRoZSBjcHUgZmllbGQga25vd2luZyB0aGF0Ci0JICogREVCVUdfUEFHRUFMTE9DIGNvdWxkIGhhdmUgdW5tYXBwZWQgaXQgaWYKLQkgKiB0aGUgbXV0ZXggb3duZXIganVzdCByZWxlYXNlZCBpdCBhbmQgZXhpdGVkLgotCSAqLwotCWlmIChwcm9iZV9rZXJuZWxfYWRkcmVzcygmb3duZXItPmNwdSwgY3B1KSkKLQkJcmV0dXJuIDA7Ci0jZWxzZQotCWNwdSA9IG93bmVyLT5jcHU7Ci0jZW5kaWYKLQotCS8qCi0JICogRXZlbiBpZiB0aGUgYWNjZXNzIHN1Y2NlZWRlZCAobGlrZWx5IGNhc2UpLAotCSAqIHRoZSBjcHUgZmllbGQgbWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KLQkgKi8KLQlpZiAoY3B1ID49IG5yX2NwdW1hc2tfYml0cykKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB3ZSBjYW4gZG8gYQotCSAqIGdldF9jcHUoKSBhbmQgdGhhdCB3ZSBoYXZlIHRoZSBwZXJjcHUgYXJlYS4KLQkgKi8KLQlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKLQkJcmV0dXJuIDA7Ci0KLQlycSA9IGNwdV9ycShjcHUpOwotCi0JZm9yICg7OykgewotCQkvKgotCQkgKiBPd25lciBjaGFuZ2VkLCBicmVhayB0byByZS1hc3Nlc3Mgc3RhdGUuCi0JCSAqLwotCQlpZiAobG9jay0+b3duZXIgIT0gb3duZXIpIHsKLQkJCS8qCi0JCQkgKiBJZiB0aGUgbG9jayBoYXMgc3dpdGNoZWQgdG8gYSBkaWZmZXJlbnQgb3duZXIsCi0JCQkgKiB3ZSBsaWtlbHkgaGF2ZSBoZWF2eSBjb250ZW50aW9uLiBSZXR1cm4gMCB0byBxdWl0Ci0JCQkgKiBvcHRpbWlzdGljIHNwaW5uaW5nIGFuZCBub3QgY29udGVuZCBmdXJ0aGVyOgotCQkJICovCi0JCQlpZiAobG9jay0+b3duZXIpCi0JCQkJcmV0dXJuIDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIElzIHRoYXQgb3duZXIgcmVhbGx5IHJ1bm5pbmcgb24gdGhhdCBjcHU/Ci0JCSAqLwotCQlpZiAodGFza190aHJlYWRfaW5mbyhycS0+Y3VycikgIT0gb3duZXIgfHwgbmVlZF9yZXNjaGVkKCkpCisJd2hpbGUgKG93bmVyX3J1bm5pbmcobG9jaywgb3duZXIpKSB7CisJCWlmIChuZWVkX3Jlc2NoZWQoKSkKIAkJCXJldHVybiAwOwogCiAJCWFyY2hfbXV0ZXhfY3B1X3JlbGF4KCk7CiAJfQogCisJLyoKKwkgKiBJZiB0aGUgb3duZXIgY2hhbmdlZCB0byBhbm90aGVyIHRhc2sgdGhlcmUgaXMgbGlrZWx5CisJICogaGVhdnkgY29udGVudGlvbiwgc3RvcCBzcGlubmluZy4KKwkgKi8KKwlpZiAobG9jay0+b3duZXIpCisJCXJldHVybiAwOworCiAJcmV0dXJuIDE7CiB9CiAjZW5kaWYKQEAgLTQ2ODQsMTkgKzQ3NjAsMTggQEAKICAqLwogdm9pZCBydF9tdXRleF9zZXRwcmlvKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHByaW8pCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb2xkcHJpbywgb25fcnEsIHJ1bm5pbmc7CiAJc3RydWN0IHJxICpycTsKIAljb25zdCBzdHJ1Y3Qgc2NoZWRfY2xhc3MgKnByZXZfY2xhc3M7CiAKIAlCVUdfT04ocHJpbyA8IDAgfHwgcHJpbyA+IE1BWF9QUklPKTsKIAotCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisJcnEgPSBfX3Rhc2tfcnFfbG9jayhwKTsKIAogCXRyYWNlX3NjaGVkX3BpX3NldHByaW8ocCwgcHJpbyk7CiAJb2xkcHJpbyA9IHAtPnByaW87CiAJcHJldl9jbGFzcyA9IHAtPnNjaGVkX2NsYXNzOwotCW9uX3JxID0gcC0+c2Uub25fcnE7CisJb25fcnEgPSBwLT5vbl9ycTsKIAlydW5uaW5nID0gdGFza19jdXJyZW50KHJxLCBwKTsKIAlpZiAob25fcnEpCiAJCWRlcXVldWVfdGFzayhycSwgcCwgMCk7CkBAIC00NzE2LDcgKzQ3OTEsNyBAQAogCQllbnF1ZXVlX3Rhc2socnEsIHAsIG9sZHByaW8gPCBwcmlvID8gRU5RVUVVRV9IRUFEIDogMCk7CiAKIAljaGVja19jbGFzc19jaGFuZ2VkKHJxLCBwLCBwcmV2X2NsYXNzLCBvbGRwcmlvKTsKLQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKIH0KIAogI2VuZGlmCkBAIC00NzQ0LDcgKzQ4MTksNyBAQAogCQlwLT5zdGF0aWNfcHJpbyA9IE5JQ0VfVE9fUFJJTyhuaWNlKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlvbl9ycSA9IHAtPnNlLm9uX3JxOworCW9uX3JxID0gcC0+b25fcnE7CiAJaWYgKG9uX3JxKQogCQlkZXF1ZXVlX3Rhc2socnEsIHAsIDApOwogCkBAIC00NzY0LDcgKzQ4MzksNyBAQAogCQkJcmVzY2hlZF90YXNrKHJxLT5jdXJyKTsKIAl9CiBvdXRfdW5sb2NrOgotCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCXRhc2tfcnFfdW5sb2NrKHJxLCBwLCAmZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChzZXRfdXNlcl9uaWNlKTsKIApAQCAtNDg3OCw4ICs0OTUzLDYgQEAKIHN0YXRpYyB2b2lkCiBfX3NldHNjaGVkdWxlcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwb2xpY3ksIGludCBwcmlvKQogewotCUJVR19PTihwLT5zZS5vbl9ycSk7Ci0KIAlwLT5wb2xpY3kgPSBwb2xpY3k7CiAJcC0+cnRfcHJpb3JpdHkgPSBwcmlvOwogCXAtPm5vcm1hbF9wcmlvID0gbm9ybWFsX3ByaW8ocCk7CkBAIC00OTk0LDIwICs1MDY3LDE3IEBACiAJLyoKIAkgKiBtYWtlIHN1cmUgbm8gUEktd2FpdGVycyBhcnJpdmUgKG9yIGxlYXZlKSB3aGlsZSB3ZSBhcmUKIAkgKiBjaGFuZ2luZyB0aGUgcHJpb3JpdHkgb2YgdGhlIHRhc2s6Ci0JICovCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwLT5waV9sb2NrLCBmbGFncyk7Ci0JLyoKKwkgKgogCSAqIFRvIGJlIGFibGUgdG8gY2hhbmdlIHAtPnBvbGljeSBzYWZlbHksIHRoZSBhcHByb3ByaWF0ZQogCSAqIHJ1bnF1ZXVlIGxvY2sgbXVzdCBiZSBoZWxkLgogCSAqLwotCXJxID0gX190YXNrX3JxX2xvY2socCk7CisJcnEgPSB0YXNrX3JxX2xvY2socCwgJmZsYWdzKTsKIAogCS8qCiAJICogQ2hhbmdpbmcgdGhlIHBvbGljeSBvZiB0aGUgc3RvcCB0aHJlYWRzIGl0cyBhIHZlcnkgYmFkIGlkZWEKIAkgKi8KIAlpZiAocCA9PSBycS0+c3RvcCkgewotCQlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKLQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnAtPnBpX2xvY2ssIGZsYWdzKTsKKwkJdGFza19ycV91bmxvY2socnEsIHAsICZmbGFncyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTAzMSw4ICs1MTAxLDcgQEAKIAkJaWYgKHJ0X2JhbmR3aWR0aF9lbmFibGVkKCkgJiYgcnRfcG9saWN5KHBvbGljeSkgJiYKIAkJCQl0YXNrX2dyb3VwKHApLT5ydF9iYW5kd2lkdGgucnRfcnVudGltZSA9PSAwICYmCiAJCQkJIXRhc2tfZ3JvdXBfaXNfYXV0b2dyb3VwKHRhc2tfZ3JvdXAocCkpKSB7Ci0JCQlfX3Rhc2tfcnFfdW5sb2NrKHJxKTsKLQkJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5waV9sb2NrLCBmbGFncyk7CisJCQl0YXNrX3JxX3VubG9jayhycSwgcCwgJmZsYWdzKTsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KIAl9CkBAIC01MDQxLDExICs1MTEwLDEwIEBACiAJLyogcmVjaGVjayBwb2xpY3kgbm93IHdpdGggcnEgbG9jayBoZWxkICovCiAJaWYgKHVubGlrZWx5KG9sZHBvbGljeSAhPSAtMSAmJiBvbGRwb2xpY3kgIT0gcC0+cG9saWN5KSkgewogCQlwb2xpY3kgPSBvbGRwb2xpY3kgPSAtMTsKLQkJX190YXNrX3JxX3VubG9jayhycSk7Ci0JCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5waV9sb2NrLCBmbGFncyk7CisJCXRhc2tfcnFfdW5sb2NrKHJxLCBwLCAmZmxhZ3MpOwogCQlnb3RvIHJlY2hlY2s7CiAJfQotCW9uX3JxID0gcC0+c2Uub25fcnE7CisJb25fcnEgPSBwLT5vbl9ycTsKIAlydW5uaW5nID0gdGFza19jdXJyZW50KHJxLCBwKTsKIAlpZiAob25fcnEpCiAJCWRlYWN0aXZhdGVfdGFzayhycSwgcCwgMCk7CkBAIC01MDY0LDggKzUxMzIsNyBAQAogCQlhY3RpdmF0ZV90YXNrKHJxLCBwLCAwKTsKIAogCWNoZWNrX2NsYXNzX2NoYW5nZWQocnEsIHAsIHByZXZfY2xhc3MsIG9sZHByaW8pOwotCV9fdGFza19ycV91bmxvY2socnEpOwotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5waV9sb2NrLCBmbGFncyk7CisJdGFza19ycV91bmxvY2socnEsIHAsICZmbGFncyk7CiAKIAlydF9tdXRleF9hZGp1c3RfcGkocCk7CiAKQEAgLTUzMTYsNyArNTM4Myw2IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IHJxICpycTsKIAlpbnQgcmV0dmFsOwogCiAJZ2V0X29ubGluZV9jcHVzKCk7CkBAIC01MzMxLDkgKzUzOTcsOSBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwLT5waV9sb2NrLCBmbGFncyk7CiAJY3B1bWFza19hbmQobWFzaywgJnAtPmNwdXNfYWxsb3dlZCwgY3B1X29ubGluZV9tYXNrKTsKLQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+cGlfbG9jaywgZmxhZ3MpOwogCiBvdXRfdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtNTY1OCw3ICs1NzI0LDcgQEAKIAogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7CiAJdGltZV9zbGljZSA9IHAtPnNjaGVkX2NsYXNzLT5nZXRfcnJfaW50ZXJ2YWwocnEsIHApOwotCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCXRhc2tfcnFfdW5sb2NrKHJxLCBwLCAmZmxhZ3MpOwogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAJamlmZmllc190b190aW1lc3BlYyh0aW1lX3NsaWNlLCAmdCk7CkBAIC01Nzc2LDE3ICs1ODQyLDE0IEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlycS0+Y3VyciA9IHJxLT5pZGxlID0gaWRsZTsKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoX19BUkNIX1dBTlRfVU5MT0NLRURfQ1RYU1cpCi0JaWRsZS0+b25jcHUgPSAxOworI2lmIGRlZmluZWQoQ09ORklHX1NNUCkKKwlpZGxlLT5vbl9jcHUgPSAxOwogI2VuZGlmCiAJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBTZXQgdGhlIHByZWVtcHQgY291bnQgX291dHNpZGVfIHRoZSBzcGlubG9ja3MhICovCi0jaWYgZGVmaW5lZChDT05GSUdfUFJFRU1QVCkKLQl0YXNrX3RocmVhZF9pbmZvKGlkbGUpLT5wcmVlbXB0X2NvdW50ID0gKGlkbGUtPmxvY2tfZGVwdGggPj0gMCk7Ci0jZWxzZQogCXRhc2tfdGhyZWFkX2luZm8oaWRsZSktPnByZWVtcHRfY291bnQgPSAwOwotI2VuZGlmCisKIAkvKgogCSAqIFRoZSBpZGxlIHRhc2tzIGhhdmUgdGhlaXIgb3duLCBzaW1wbGUgc2NoZWR1bGluZyBjbGFzczoKIAkgKi8KQEAgLTU4ODEsMjYgKzU5NDQsMTcgQEAKIAl1bnNpZ25lZCBpbnQgZGVzdF9jcHU7CiAJaW50IHJldCA9IDA7CiAKLQkvKgotCSAqIFNlcmlhbGl6ZSBhZ2FpbnN0IFRBU0tfV0FLSU5HIHNvIHRoYXQgdHR3dSgpIGFuZCB3dW50KCkgY2FuCi0JICogZHJvcCB0aGUgcnEtPmxvY2sgYW5kIHN0aWxsIHJlbHkgb24gLT5jcHVzX2FsbG93ZWQuCi0JICovCi1hZ2FpbjoKLQl3aGlsZSAodGFza19pc193YWtpbmcocCkpCi0JCWNwdV9yZWxheCgpOwogCXJxID0gdGFza19ycV9sb2NrKHAsICZmbGFncyk7Ci0JaWYgKHRhc2tfaXNfd2FraW5nKHApKSB7Ci0JCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOwotCQlnb3RvIGFnYWluOwotCX0KKworCWlmIChjcHVtYXNrX2VxdWFsKCZwLT5jcHVzX2FsbG93ZWQsIG5ld19tYXNrKSkKKwkJZ290byBvdXQ7CiAKIAlpZiAoIWNwdW1hc2tfaW50ZXJzZWN0cyhuZXdfbWFzaywgY3B1X2FjdGl2ZV9tYXNrKSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodW5saWtlbHkoKHAtPmZsYWdzICYgUEZfVEhSRUFEX0JPVU5EKSAmJiBwICE9IGN1cnJlbnQgJiYKLQkJICAgICAhY3B1bWFza19lcXVhbCgmcC0+Y3B1c19hbGxvd2VkLCBuZXdfbWFzaykpKSB7CisJaWYgKHVubGlrZWx5KChwLT5mbGFncyAmIFBGX1RIUkVBRF9CT1VORCkgJiYgcCAhPSBjdXJyZW50KSkgewogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC01OTE3LDE2ICs1OTcxLDE2IEBACiAJCWdvdG8gb3V0OwogCiAJZGVzdF9jcHUgPSBjcHVtYXNrX2FueV9hbmQoY3B1X2FjdGl2ZV9tYXNrLCBuZXdfbWFzayk7Ci0JaWYgKG1pZ3JhdGVfdGFzayhwLCBycSkpIHsKKwlpZiAocC0+b25fcnEpIHsKIAkJc3RydWN0IG1pZ3JhdGlvbl9hcmcgYXJnID0geyBwLCBkZXN0X2NwdSB9OwogCQkvKiBOZWVkIGhlbHAgZnJvbSBtaWdyYXRpb24gdGhyZWFkOiBkcm9wIGxvY2sgYW5kIHdhaXQuICovCi0JCXRhc2tfcnFfdW5sb2NrKHJxLCAmZmxhZ3MpOworCQl0YXNrX3JxX3VubG9jayhycSwgcCwgJmZsYWdzKTsKIAkJc3RvcF9vbmVfY3B1KGNwdV9vZihycSksIG1pZ3JhdGlvbl9jcHVfc3RvcCwgJmFyZyk7CiAJCXRsYl9taWdyYXRlX2ZpbmlzaChwLT5tbSk7CiAJCXJldHVybiAwOwogCX0KIG91dDoKLQl0YXNrX3JxX3VubG9jayhycSwgJmZsYWdzKTsKKwl0YXNrX3JxX3VubG9jayhycSwgcCwgJmZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC01OTU0LDYgKzYwMDgsNyBAQAogCXJxX3NyYyA9IGNwdV9ycShzcmNfY3B1KTsKIAlycV9kZXN0ID0gY3B1X3JxKGRlc3RfY3B1KTsKIAorCXJhd19zcGluX2xvY2soJnAtPnBpX2xvY2spOwogCWRvdWJsZV9ycV9sb2NrKHJxX3NyYywgcnFfZGVzdCk7CiAJLyogQWxyZWFkeSBtb3ZlZC4gKi8KIAlpZiAodGFza19jcHUocCkgIT0gc3JjX2NwdSkKQEAgLTU5NjYsNyArNjAyMSw3IEBACiAJICogSWYgd2UncmUgbm90IG9uIGEgcnEsIHRoZSBuZXh0IHdha2UtdXAgd2lsbCBlbnN1cmUgd2UncmUKIAkgKiBwbGFjZWQgcHJvcGVybHkuCiAJICovCi0JaWYgKHAtPnNlLm9uX3JxKSB7CisJaWYgKHAtPm9uX3JxKSB7CiAJCWRlYWN0aXZhdGVfdGFzayhycV9zcmMsIHAsIDApOwogCQlzZXRfdGFza19jcHUocCwgZGVzdF9jcHUpOwogCQlhY3RpdmF0ZV90YXNrKHJxX2Rlc3QsIHAsIDApOwpAQCAtNTk3Niw2ICs2MDMxLDcgQEAKIAlyZXQgPSAxOwogZmFpbDoKIAlkb3VibGVfcnFfdW5sb2NrKHJxX3NyYywgcnFfZGVzdCk7CisJcmF3X3NwaW5fdW5sb2NrKCZwLT5waV9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC02MzE2LDYgKzYzNzIsNyBAQAogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJY2FzZSBDUFVfRFlJTkc6CisJCXNjaGVkX3R0d3VfcGVuZGluZygpOwogCQkvKiBVcGRhdGUgb3VyIHJvb3QtZG9tYWluICovCiAJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAkJaWYgKHJxLT5yZCkgewpAQCAtNjM5NCw2ICs2NDUxLDggQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIAorc3RhdGljIGNwdW1hc2tfdmFyX3Qgc2NoZWRfZG9tYWluc190bXBtYXNrOyAvKiBzY2hlZF9kb21haW5zX211dGV4ICovCisKICNpZmRlZiBDT05GSUdfU0NIRURfREVCVUcKIAogc3RhdGljIF9fcmVhZF9tb3N0bHkgaW50IHNjaGVkX2RvbWFpbl9kZWJ1Z19lbmFibGVkOwpAQCAtNjQ4OSw3ICs2NTQ4LDYgQEAKIAogc3RhdGljIHZvaWQgc2NoZWRfZG9tYWluX2RlYnVnKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBpbnQgY3B1KQogewotCWNwdW1hc2tfdmFyX3QgZ3JvdXBtYXNrOwogCWludCBsZXZlbCA9IDA7CiAKIAlpZiAoIXNjaGVkX2RvbWFpbl9kZWJ1Z19lbmFibGVkKQpAQCAtNjUwMiwyMCArNjU2MCwxNCBAQAogCiAJcHJpbnRrKEtFUk5fREVCVUcgIkNQVSVkIGF0dGFjaGluZyBzY2hlZC1kb21haW46XG4iLCBjcHUpOwogCi0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmZ3JvdXBtYXNrLCBHRlBfS0VSTkVMKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiQ2Fubm90IGxvYWQtYmFsYW5jZSAob3V0IG9mIG1lbW9yeSlcbiIpOwotCQlyZXR1cm47Ci0JfQotCiAJZm9yICg7OykgewotCQlpZiAoc2NoZWRfZG9tYWluX2RlYnVnX29uZShzZCwgY3B1LCBsZXZlbCwgZ3JvdXBtYXNrKSkKKwkJaWYgKHNjaGVkX2RvbWFpbl9kZWJ1Z19vbmUoc2QsIGNwdSwgbGV2ZWwsIHNjaGVkX2RvbWFpbnNfdG1wbWFzaykpCiAJCQlicmVhazsKIAkJbGV2ZWwrKzsKIAkJc2QgPSBzZC0+cGFyZW50OwogCQlpZiAoIXNkKQogCQkJYnJlYWs7CiAJfQotCWZyZWVfY3B1bWFza192YXIoZ3JvdXBtYXNrKTsKIH0KICNlbHNlIC8qICFDT05GSUdfU0NIRURfREVCVUcgKi8KICMgZGVmaW5lIHNjaGVkX2RvbWFpbl9kZWJ1ZyhzZCwgY3B1KSBkbyB7IH0gd2hpbGUgKDApCkBAIC02NTcyLDEyICs2NjI0LDExIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfcm9vdGRvbWFpbihzdHJ1Y3Qgcm9vdF9kb21haW4gKnJkKQorc3RhdGljIHZvaWQgZnJlZV9yb290ZG9tYWluKHN0cnVjdCByY3VfaGVhZCAqcmN1KQogewotCXN5bmNocm9uaXplX3NjaGVkKCk7CisJc3RydWN0IHJvb3RfZG9tYWluICpyZCA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCByb290X2RvbWFpbiwgcmN1KTsKIAogCWNwdXByaV9jbGVhbnVwKCZyZC0+Y3B1cHJpKTsKLQogCWZyZWVfY3B1bWFza192YXIocmQtPnJ0b19tYXNrKTsKIAlmcmVlX2NwdW1hc2tfdmFyKHJkLT5vbmxpbmUpOwogCWZyZWVfY3B1bWFza192YXIocmQtPnNwYW4pOwpAQCAtNjYxOCw3ICs2NjY5LDcgQEAKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChvbGRfcmQpCi0JCWZyZWVfcm9vdGRvbWFpbihvbGRfcmQpOworCQljYWxsX3JjdV9zY2hlZCgmb2xkX3JkLT5yY3UsIGZyZWVfcm9vdGRvbWFpbik7CiB9CiAKIHN0YXRpYyBpbnQgaW5pdF9yb290ZG9tYWluKHN0cnVjdCByb290X2RvbWFpbiAqcmQpCkBAIC02NjY5LDYgKzY3MjAsMjUgQEAKIAlyZXR1cm4gcmQ7CiB9CiAKK3N0YXRpYyB2b2lkIGZyZWVfc2NoZWRfZG9tYWluKHN0cnVjdCByY3VfaGVhZCAqcmN1KQoreworCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gY29udGFpbmVyX29mKHJjdSwgc3RydWN0IHNjaGVkX2RvbWFpbiwgcmN1KTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmc2QtPmdyb3Vwcy0+cmVmKSkKKwkJa2ZyZWUoc2QtPmdyb3Vwcyk7CisJa2ZyZWUoc2QpOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X3NjaGVkX2RvbWFpbihzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCwgaW50IGNwdSkKK3sKKwljYWxsX3JjdSgmc2QtPnJjdSwgZnJlZV9zY2hlZF9kb21haW4pOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X3NjaGVkX2RvbWFpbnMoc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGludCBjcHUpCit7CisJZm9yICg7IHNkOyBzZCA9IHNkLT5wYXJlbnQpCisJCWRlc3Ryb3lfc2NoZWRfZG9tYWluKHNkLCBjcHUpOworfQorCiAvKgogICogQXR0YWNoIHRoZSBkb21haW4gJ3NkJyB0byAnY3B1JyBhcyBpdHMgYmFzZSBkb21haW4uIENhbGxlcnMgbXVzdAogICogaG9sZCB0aGUgaG90cGx1ZyBsb2NrLgpAQCAtNjY3OSw5ICs2NzQ5LDYgQEAKIAlzdHJ1Y3QgcnEgKnJxID0gY3B1X3JxKGNwdSk7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqdG1wOwogCi0JZm9yICh0bXAgPSBzZDsgdG1wOyB0bXAgPSB0bXAtPnBhcmVudCkKLQkJdG1wLT5zcGFuX3dlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHRtcCkpOwotCiAJLyogUmVtb3ZlIHRoZSBzY2hlZCBkb21haW5zIHdoaWNoIGRvIG5vdCBjb250cmlidXRlIHRvIHNjaGVkdWxpbmcuICovCiAJZm9yICh0bXAgPSBzZDsgdG1wOyApIHsKIAkJc3RydWN0IHNjaGVkX2RvbWFpbiAqcGFyZW50ID0gdG1wLT5wYXJlbnQ7CkBAIC02NjkyLDEyICs2NzU5LDE1IEBACiAJCQl0bXAtPnBhcmVudCA9IHBhcmVudC0+cGFyZW50OwogCQkJaWYgKHBhcmVudC0+cGFyZW50KQogCQkJCXBhcmVudC0+cGFyZW50LT5jaGlsZCA9IHRtcDsKKwkJCWRlc3Ryb3lfc2NoZWRfZG9tYWluKHBhcmVudCwgY3B1KTsKIAkJfSBlbHNlCiAJCQl0bXAgPSB0bXAtPnBhcmVudDsKIAl9CiAKIAlpZiAoc2QgJiYgc2RfZGVnZW5lcmF0ZShzZCkpIHsKKwkJdG1wID0gc2Q7CiAJCXNkID0gc2QtPnBhcmVudDsKKwkJZGVzdHJveV9zY2hlZF9kb21haW4odG1wLCBjcHUpOwogCQlpZiAoc2QpCiAJCQlzZC0+Y2hpbGQgPSBOVUxMOwogCX0KQEAgLTY3MDUsNyArNjc3NSw5IEBACiAJc2NoZWRfZG9tYWluX2RlYnVnKHNkLCBjcHUpOwogCiAJcnFfYXR0YWNoX3Jvb3QocnEsIHJkKTsKKwl0bXAgPSBycS0+c2Q7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKHJxLT5zZCwgc2QpOworCWRlc3Ryb3lfc2NoZWRfZG9tYWlucyh0bXAsIGNwdSk7CiB9CiAKIC8qIGNwdXMgd2l0aCBpc29sYXRlZCBkb21haW5zICovCkBAIC02NzIxLDU2ICs2NzkzLDYgQEAKIAogX19zZXR1cCgiaXNvbGNwdXM9IiwgaXNvbGF0ZWRfY3B1X3NldHVwKTsKIAotLyoKLSAqIGluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzIHRha2VzIHRoZSBjcHVtYXNrIHdlIHdpc2ggdG8gc3BhbiwgYW5kIGEgcG9pbnRlcgotICogdG8gYSBmdW5jdGlvbiB3aGljaCBpZGVudGlmaWVzIHdoYXQgZ3JvdXAoYWxvbmcgd2l0aCBzY2hlZCBncm91cCkgYSBDUFUKLSAqIGJlbG9uZ3MgdG8uIFRoZSByZXR1cm4gdmFsdWUgb2YgZ3JvdXBfZm4gbXVzdCBiZSBhID49IDAgYW5kIDwgbnJfY3B1X2lkcwotICogKGR1ZSB0byB0aGUgZmFjdCB0aGF0IHdlIGtlZXAgdHJhY2sgb2YgZ3JvdXBzIGNvdmVyZWQgd2l0aCBhIHN0cnVjdCBjcHVtYXNrKS4KLSAqCi0gKiBpbml0X3NjaGVkX2J1aWxkX2dyb3VwcyB3aWxsIGJ1aWxkIGEgY2lyY3VsYXIgbGlua2VkIGxpc3Qgb2YgdGhlIGdyb3VwcwotICogY292ZXJlZCBieSB0aGUgZ2l2ZW4gc3BhbiwgYW5kIHdpbGwgc2V0IGVhY2ggZ3JvdXAncyAtPmNwdW1hc2sgY29ycmVjdGx5LAotICogYW5kIC0+Y3B1X3Bvd2VyIHRvIDAuCi0gKi8KLXN0YXRpYyB2b2lkCi1pbml0X3NjaGVkX2J1aWxkX2dyb3Vwcyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqc3BhbiwKLQkJCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLAotCQkJaW50ICgqZ3JvdXBfZm4pKGludCBjcHUsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLAotCQkJCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZywKLQkJCQkJc3RydWN0IGNwdW1hc2sgKnRtcG1hc2spLAotCQkJc3RydWN0IGNwdW1hc2sgKmNvdmVyZWQsIHN0cnVjdCBjcHVtYXNrICp0bXBtYXNrKQotewotCXN0cnVjdCBzY2hlZF9ncm91cCAqZmlyc3QgPSBOVUxMLCAqbGFzdCA9IE5VTEw7Ci0JaW50IGk7Ci0KLQljcHVtYXNrX2NsZWFyKGNvdmVyZWQpOwotCi0JZm9yX2VhY2hfY3B1KGksIHNwYW4pIHsKLQkJc3RydWN0IHNjaGVkX2dyb3VwICpzZzsKLQkJaW50IGdyb3VwID0gZ3JvdXBfZm4oaSwgY3B1X21hcCwgJnNnLCB0bXBtYXNrKTsKLQkJaW50IGo7Ci0KLQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgY292ZXJlZCkpCi0JCQljb250aW51ZTsKLQotCQljcHVtYXNrX2NsZWFyKHNjaGVkX2dyb3VwX2NwdXMoc2cpKTsKLQkJc2ctPmNwdV9wb3dlciA9IDA7Ci0KLQkJZm9yX2VhY2hfY3B1KGosIHNwYW4pIHsKLQkJCWlmIChncm91cF9mbihqLCBjcHVfbWFwLCBOVUxMLCB0bXBtYXNrKSAhPSBncm91cCkKLQkJCQljb250aW51ZTsKLQotCQkJY3B1bWFza19zZXRfY3B1KGosIGNvdmVyZWQpOwotCQkJY3B1bWFza19zZXRfY3B1KGosIHNjaGVkX2dyb3VwX2NwdXMoc2cpKTsKLQkJfQotCQlpZiAoIWZpcnN0KQotCQkJZmlyc3QgPSBzZzsKLQkJaWYgKGxhc3QpCi0JCQlsYXN0LT5uZXh0ID0gc2c7Ci0JCWxhc3QgPSBzZzsKLQl9Ci0JbGFzdC0+bmV4dCA9IGZpcnN0OwotfQotCiAjZGVmaW5lIFNEX05PREVTX1BFUl9ET01BSU4gMTYKIAogI2lmZGVmIENPTkZJR19OVU1BCkBAIC02Nzg3LDcgKzY4MDksNyBAQAogICovCiBzdGF0aWMgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZXMpCiB7Ci0JaW50IGksIG4sIHZhbCwgbWluX3ZhbCwgYmVzdF9ub2RlID0gMDsKKwlpbnQgaSwgbiwgdmFsLCBtaW5fdmFsLCBiZXN0X25vZGUgPSAtMTsKIAogCW1pbl92YWwgPSBJTlRfTUFYOwogCkBAIC02ODExLDcgKzY4MzMsOCBAQAogCQl9CiAJfQogCi0Jbm9kZV9zZXQoYmVzdF9ub2RlLCAqdXNlZF9ub2Rlcyk7CisJaWYgKGJlc3Rfbm9kZSAhPSAtMSkKKwkJbm9kZV9zZXQoYmVzdF9ub2RlLCAqdXNlZF9ub2Rlcyk7CiAJcmV0dXJuIGJlc3Rfbm9kZTsKIH0KIApAQCAtNjgzNywzMTUgKzY4NjAsMTMwIEBACiAKIAlmb3IgKGkgPSAxOyBpIDwgU0RfTk9ERVNfUEVSX0RPTUFJTjsgaSsrKSB7CiAJCWludCBuZXh0X25vZGUgPSBmaW5kX25leHRfYmVzdF9ub2RlKG5vZGUsICZ1c2VkX25vZGVzKTsKLQorCQlpZiAobmV4dF9ub2RlIDwgMCkKKwkJCWJyZWFrOwogCQljcHVtYXNrX29yKHNwYW4sIHNwYW4sIGNwdW1hc2tfb2Zfbm9kZShuZXh0X25vZGUpKTsKIAl9CiB9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X25vZGVfbWFzayhpbnQgY3B1KQoreworCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJnNjaGVkX2RvbWFpbnNfbXV0ZXgpOworCisJc2NoZWRfZG9tYWluX25vZGVfc3BhbihjcHVfdG9fbm9kZShjcHUpLCBzY2hlZF9kb21haW5zX3RtcG1hc2spOworCisJcmV0dXJuIHNjaGVkX2RvbWFpbnNfdG1wbWFzazsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfYWxsbm9kZXNfbWFzayhpbnQgY3B1KQoreworCXJldHVybiBjcHVfcG9zc2libGVfbWFzazsKK30KICNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9jcHVfbWFzayhpbnQgY3B1KQoreworCXJldHVybiBjcHVtYXNrX29mX25vZGUoY3B1X3RvX25vZGUoY3B1KSk7Cit9CisKIGludCBzY2hlZF9zbXRfcG93ZXJfc2F2aW5ncyA9IDAsIHNjaGVkX21jX3Bvd2VyX3NhdmluZ3MgPSAwOwogCi0vKgotICogVGhlIGNwdXMgbWFzayBpbiBzY2hlZF9ncm91cCBhbmQgc2NoZWRfZG9tYWluIGhhbmdzIG9mZiB0aGUgZW5kLgotICoKLSAqICggU2VlIHRoZSB0aGUgY29tbWVudHMgaW4gaW5jbHVkZS9saW51eC9zY2hlZC5oOnN0cnVjdCBzY2hlZF9ncm91cAotICogICBhbmQgc3RydWN0IHNjaGVkX2RvbWFpbi4gKQotICovCi1zdHJ1Y3Qgc3RhdGljX3NjaGVkX2dyb3VwIHsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgc2c7Ci0JREVDTEFSRV9CSVRNQVAoY3B1cywgQ09ORklHX05SX0NQVVMpOwotfTsKLQotc3RydWN0IHN0YXRpY19zY2hlZF9kb21haW4gewotCXN0cnVjdCBzY2hlZF9kb21haW4gc2Q7Ci0JREVDTEFSRV9CSVRNQVAoc3BhbiwgQ09ORklHX05SX0NQVVMpOworc3RydWN0IHNkX2RhdGEgeworCXN0cnVjdCBzY2hlZF9kb21haW4gKipfX3BlcmNwdSBzZDsKKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipfX3BlcmNwdSBzZzsKIH07CiAKIHN0cnVjdCBzX2RhdGEgewotI2lmZGVmIENPTkZJR19OVU1BCi0JaW50CQkJc2RfYWxsbm9kZXM7Ci0JY3B1bWFza192YXJfdAkJZG9tYWluc3BhbjsKLQljcHVtYXNrX3Zhcl90CQljb3ZlcmVkOwotCWNwdW1hc2tfdmFyX3QJCW5vdGNvdmVyZWQ7Ci0jZW5kaWYKLQljcHVtYXNrX3Zhcl90CQlub2RlbWFzazsKLQljcHVtYXNrX3Zhcl90CQl0aGlzX3NpYmxpbmdfbWFwOwotCWNwdW1hc2tfdmFyX3QJCXRoaXNfY29yZV9tYXA7Ci0JY3B1bWFza192YXJfdAkJdGhpc19ib29rX21hcDsKLQljcHVtYXNrX3Zhcl90CQlzZW5kX2NvdmVyZWQ7Ci0JY3B1bWFza192YXJfdAkJdG1wbWFzazsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAJKipzY2hlZF9ncm91cF9ub2RlczsKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICoqIF9fcGVyY3B1IHNkOwogCXN0cnVjdCByb290X2RvbWFpbgkqcmQ7CiB9OwogCiBlbnVtIHNfYWxsb2MgewotCXNhX3NjaGVkX2dyb3VwcyA9IDAsCiAJc2Ffcm9vdGRvbWFpbiwKLQlzYV90bXBtYXNrLAotCXNhX3NlbmRfY292ZXJlZCwKLQlzYV90aGlzX2Jvb2tfbWFwLAotCXNhX3RoaXNfY29yZV9tYXAsCi0Jc2FfdGhpc19zaWJsaW5nX21hcCwKLQlzYV9ub2RlbWFzaywKLQlzYV9zY2hlZF9ncm91cF9ub2RlcywKLSNpZmRlZiBDT05GSUdfTlVNQQotCXNhX25vdGNvdmVyZWQsCi0Jc2FfY292ZXJlZCwKLQlzYV9kb21haW5zcGFuLAotI2VuZGlmCisJc2Ffc2QsCisJc2Ffc2Rfc3RvcmFnZSwKIAlzYV9ub25lLAogfTsKIAotLyoKLSAqIFNNVCBzY2hlZC1kb21haW5zOgotICovCi0jaWZkZWYgQ09ORklHX1NDSEVEX1NNVAotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzdGF0aWNfc2NoZWRfZG9tYWluLCBjcHVfZG9tYWlucyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBzKTsKK3N0cnVjdCBzY2hlZF9kb21haW5fdG9wb2xvZ3lfbGV2ZWw7CiAKLXN0YXRpYyBpbnQKLWNwdV90b19jcHVfZ3JvdXAoaW50IGNwdSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCi0JCSBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZywgc3RydWN0IGNwdW1hc2sgKnVudXNlZCkKK3R5cGVkZWYgc3RydWN0IHNjaGVkX2RvbWFpbiAqKCpzY2hlZF9kb21haW5faW5pdF9mKShzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICp0bCwgaW50IGNwdSk7Cit0eXBlZGVmIGNvbnN0IHN0cnVjdCBjcHVtYXNrICooKnNjaGVkX2RvbWFpbl9tYXNrX2YpKGludCBjcHUpOworCitzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsIHsKKwlzY2hlZF9kb21haW5faW5pdF9mIGluaXQ7CisJc2NoZWRfZG9tYWluX21hc2tfZiBtYXNrOworCXN0cnVjdCBzZF9kYXRhICAgICAgZGF0YTsKK307CisKKy8qCisgKiBBc3N1bWVzIHRoZSBzY2hlZF9kb21haW4gdHJlZSBpcyBmdWxseSBjb25zdHJ1Y3RlZAorICovCitzdGF0aWMgaW50IGdldF9ncm91cChpbnQgY3B1LCBzdHJ1Y3Qgc2RfZGF0YSAqc2RkLCBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZykKIHsKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9ICpwZXJfY3B1X3B0cihzZGQtPnNkLCBjcHUpOworCXN0cnVjdCBzY2hlZF9kb21haW4gKmNoaWxkID0gc2QtPmNoaWxkOworCisJaWYgKGNoaWxkKQorCQljcHUgPSBjcHVtYXNrX2ZpcnN0KHNjaGVkX2RvbWFpbl9zcGFuKGNoaWxkKSk7CisKIAlpZiAoc2cpCi0JCSpzZyA9ICZwZXJfY3B1KHNjaGVkX2dyb3VwcywgY3B1KS5zZzsKKwkJKnNnID0gKnBlcl9jcHVfcHRyKHNkZC0+c2csIGNwdSk7CisKIAlyZXR1cm4gY3B1OwogfQotI2VuZGlmIC8qIENPTkZJR19TQ0hFRF9TTVQgKi8KIAogLyoKLSAqIG11bHRpLWNvcmUgc2NoZWQtZG9tYWluczoKKyAqIGJ1aWxkX3NjaGVkX2dyb3VwcyB0YWtlcyB0aGUgY3B1bWFzayB3ZSB3aXNoIHRvIHNwYW4sIGFuZCBhIHBvaW50ZXIKKyAqIHRvIGEgZnVuY3Rpb24gd2hpY2ggaWRlbnRpZmllcyB3aGF0IGdyb3VwKGFsb25nIHdpdGggc2NoZWQgZ3JvdXApIGEgQ1BVCisgKiBiZWxvbmdzIHRvLiBUaGUgcmV0dXJuIHZhbHVlIG9mIGdyb3VwX2ZuIG11c3QgYmUgYSA+PSAwIGFuZCA8IG5yX2NwdV9pZHMKKyAqIChkdWUgdG8gdGhlIGZhY3QgdGhhdCB3ZSBrZWVwIHRyYWNrIG9mIGdyb3VwcyBjb3ZlcmVkIHdpdGggYSBzdHJ1Y3QgY3B1bWFzaykuCisgKgorICogYnVpbGRfc2NoZWRfZ3JvdXBzIHdpbGwgYnVpbGQgYSBjaXJjdWxhciBsaW5rZWQgbGlzdCBvZiB0aGUgZ3JvdXBzCisgKiBjb3ZlcmVkIGJ5IHRoZSBnaXZlbiBzcGFuLCBhbmQgd2lsbCBzZXQgZWFjaCBncm91cCdzIC0+Y3B1bWFzayBjb3JyZWN0bHksCisgKiBhbmQgLT5jcHVfcG93ZXIgdG8gMC4KICAqLwotI2lmZGVmIENPTkZJR19TQ0hFRF9NQwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzdGF0aWNfc2NoZWRfZG9tYWluLCBjb3JlX2RvbWFpbnMpOwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzdGF0aWNfc2NoZWRfZ3JvdXAsIHNjaGVkX2dyb3VwX2NvcmUpOwotCi1zdGF0aWMgaW50Ci1jcHVfdG9fY29yZV9ncm91cChpbnQgY3B1LCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKLQkJICBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZywgc3RydWN0IGNwdW1hc2sgKm1hc2spCitzdGF0aWMgdm9pZAorYnVpbGRfc2NoZWRfZ3JvdXBzKHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQogewotCWludCBncm91cDsKLSNpZmRlZiBDT05GSUdfU0NIRURfU01UCi0JY3B1bWFza19hbmQobWFzaywgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soY3B1KSwgY3B1X21hcCk7Ci0JZ3JvdXAgPSBjcHVtYXNrX2ZpcnN0KG1hc2spOwotI2Vsc2UKLQlncm91cCA9IGNwdTsKLSNlbmRpZgotCWlmIChzZykKLQkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBfY29yZSwgZ3JvdXApLnNnOwotCXJldHVybiBncm91cDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU0NIRURfTUMgKi8KKwlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKmZpcnN0ID0gTlVMTCwgKmxhc3QgPSBOVUxMOworCXN0cnVjdCBzZF9kYXRhICpzZGQgPSBzZC0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgY3B1bWFzayAqc3BhbiA9IHNjaGVkX2RvbWFpbl9zcGFuKHNkKTsKKwlzdHJ1Y3QgY3B1bWFzayAqY292ZXJlZDsKKwlpbnQgaTsKIAotLyoKLSAqIGJvb2sgc2NoZWQtZG9tYWluczoKLSAqLwotI2lmZGVmIENPTkZJR19TQ0hFRF9CT09LCi1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9kb21haW4sIGJvb2tfZG9tYWlucyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHN0YXRpY19zY2hlZF9ncm91cCwgc2NoZWRfZ3JvdXBfYm9vayk7CisJbG9ja2RlcF9hc3NlcnRfaGVsZCgmc2NoZWRfZG9tYWluc19tdXRleCk7CisJY292ZXJlZCA9IHNjaGVkX2RvbWFpbnNfdG1wbWFzazsKIAotc3RhdGljIGludAotY3B1X3RvX2Jvb2tfZ3JvdXAoaW50IGNwdSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCi0JCSAgc3RydWN0IHNjaGVkX2dyb3VwICoqc2csIHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCWludCBncm91cCA9IGNwdTsKLSNpZmRlZiBDT05GSUdfU0NIRURfTUMKLQljcHVtYXNrX2FuZChtYXNrLCBjcHVfY29yZWdyb3VwX21hc2soY3B1KSwgY3B1X21hcCk7Ci0JZ3JvdXAgPSBjcHVtYXNrX2ZpcnN0KG1hc2spOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQotCWNwdW1hc2tfYW5kKG1hc2ssIHRvcG9sb2d5X3RocmVhZF9jcHVtYXNrKGNwdSksIGNwdV9tYXApOwotCWdyb3VwID0gY3B1bWFza19maXJzdChtYXNrKTsKLSNlbmRpZgotCWlmIChzZykKLQkJKnNnID0gJnBlcl9jcHUoc2NoZWRfZ3JvdXBfYm9vaywgZ3JvdXApLnNnOwotCXJldHVybiBncm91cDsKLX0KLSNlbmRpZiAvKiBDT05GSUdfU0NIRURfQk9PSyAqLworCWNwdW1hc2tfY2xlYXIoY292ZXJlZCk7CiAKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3RhdGljX3NjaGVkX2RvbWFpbiwgcGh5c19kb21haW5zKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3RhdGljX3NjaGVkX2dyb3VwLCBzY2hlZF9ncm91cF9waHlzKTsKKwlmb3JfZWFjaF9jcHUoaSwgc3BhbikgeworCQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnOworCQlpbnQgZ3JvdXAgPSBnZXRfZ3JvdXAoaSwgc2RkLCAmc2cpOworCQlpbnQgajsKIAotc3RhdGljIGludAotY3B1X3RvX3BoeXNfZ3JvdXAoaW50IGNwdSwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCi0JCSAgc3RydWN0IHNjaGVkX2dyb3VwICoqc2csIHN0cnVjdCBjcHVtYXNrICptYXNrKQotewotCWludCBncm91cDsKLSNpZmRlZiBDT05GSUdfU0NIRURfQk9PSwotCWNwdW1hc2tfYW5kKG1hc2ssIGNwdV9ib29rX21hc2soY3B1KSwgY3B1X21hcCk7Ci0JZ3JvdXAgPSBjcHVtYXNrX2ZpcnN0KG1hc2spOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpCi0JY3B1bWFza19hbmQobWFzaywgY3B1X2NvcmVncm91cF9tYXNrKGNwdSksIGNwdV9tYXApOwotCWdyb3VwID0gY3B1bWFza19maXJzdChtYXNrKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLQljcHVtYXNrX2FuZChtYXNrLCB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhjcHUpLCBjcHVfbWFwKTsKLQlncm91cCA9IGNwdW1hc2tfZmlyc3QobWFzayk7Ci0jZWxzZQotCWdyb3VwID0gY3B1OwotI2VuZGlmCi0JaWYgKHNnKQotCQkqc2cgPSAmcGVyX2NwdShzY2hlZF9ncm91cF9waHlzLCBncm91cCkuc2c7Ci0JcmV0dXJuIGdyb3VwOwotfQotCi0jaWZkZWYgQ09ORklHX05VTUEKLS8qCi0gKiBUaGUgaW5pdF9zY2hlZF9idWlsZF9ncm91cHMgY2FuJ3QgaGFuZGxlIHdoYXQgd2Ugd2FudCB0byBkbyB3aXRoIG5vZGUKLSAqIGdyb3Vwcywgc28gcm9sbCBvdXIgb3duLiBOb3cgZWFjaCBub2RlIGhhcyBpdHMgb3duIGxpc3Qgb2YgZ3JvdXBzIHdoaWNoCi0gKiBnZXRzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZC4KLSAqLwotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzdGF0aWNfc2NoZWRfZG9tYWluLCBub2RlX2RvbWFpbnMpOwotc3RhdGljIHN0cnVjdCBzY2hlZF9ncm91cCAqKipzY2hlZF9ncm91cF9ub2Rlc19ieWNwdTsKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBzdGF0aWNfc2NoZWRfZG9tYWluLCBhbGxub2Rlc19kb21haW5zKTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgc3RhdGljX3NjaGVkX2dyb3VwLCBzY2hlZF9ncm91cF9hbGxub2Rlcyk7Ci0KLXN0YXRpYyBpbnQgY3B1X3RvX2FsbG5vZGVzX2dyb3VwKGludCBjcHUsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLAotCQkJCSBzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKipzZywKLQkJCQkgc3RydWN0IGNwdW1hc2sgKm5vZGVtYXNrKQotewotCWludCBncm91cDsKLQotCWNwdW1hc2tfYW5kKG5vZGVtYXNrLCBjcHVtYXNrX29mX25vZGUoY3B1X3RvX25vZGUoY3B1KSksIGNwdV9tYXApOwotCWdyb3VwID0gY3B1bWFza19maXJzdChub2RlbWFzayk7Ci0KLQlpZiAoc2cpCi0JCSpzZyA9ICZwZXJfY3B1KHNjaGVkX2dyb3VwX2FsbG5vZGVzLCBncm91cCkuc2c7Ci0JcmV0dXJuIGdyb3VwOwotfQotCi1zdGF0aWMgdm9pZCBpbml0X251bWFfc2NoZWRfZ3JvdXBzX3Bvd2VyKHN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXBfaGVhZCkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKnNnID0gZ3JvdXBfaGVhZDsKLQlpbnQgajsKLQotCWlmICghc2cpCi0JCXJldHVybjsKLQlkbyB7Ci0JCWZvcl9lYWNoX2NwdShqLCBzY2hlZF9ncm91cF9jcHVzKHNnKSkgewotCQkJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0KLQkJCXNkID0gJnBlcl9jcHUocGh5c19kb21haW5zLCBqKS5zZDsKLQkJCWlmIChqICE9IGdyb3VwX2ZpcnN0X2NwdShzZC0+Z3JvdXBzKSkgewotCQkJCS8qCi0JCQkJICogT25seSBhZGQgInBvd2VyIiBvbmNlIGZvciBlYWNoCi0JCQkJICogcGh5c2ljYWwgcGFja2FnZS4KLQkJCQkgKi8KLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJc2ctPmNwdV9wb3dlciArPSBzZC0+Z3JvdXBzLT5jcHVfcG93ZXI7Ci0JCX0KLQkJc2cgPSBzZy0+bmV4dDsKLQl9IHdoaWxlIChzZyAhPSBncm91cF9oZWFkKTsKLX0KLQotc3RhdGljIGludCBidWlsZF9udW1hX3NjaGVkX2dyb3VwcyhzdHJ1Y3Qgc19kYXRhICpkLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLCBpbnQgbnVtKQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqc2csICpwcmV2OwotCWludCBuLCBqOwotCi0JY3B1bWFza19jbGVhcihkLT5jb3ZlcmVkKTsKLQljcHVtYXNrX2FuZChkLT5ub2RlbWFzaywgY3B1bWFza19vZl9ub2RlKG51bSksIGNwdV9tYXApOwotCWlmIChjcHVtYXNrX2VtcHR5KGQtPm5vZGVtYXNrKSkgewotCQlkLT5zY2hlZF9ncm91cF9ub2Rlc1tudW1dID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc2NoZWRfZG9tYWluX25vZGVfc3BhbihudW0sIGQtPmRvbWFpbnNwYW4pOwotCWNwdW1hc2tfYW5kKGQtPmRvbWFpbnNwYW4sIGQtPmRvbWFpbnNwYW4sIGNwdV9tYXApOwotCi0Jc2cgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBzY2hlZF9ncm91cCkgKyBjcHVtYXNrX3NpemUoKSwKLQkJCSAgR0ZQX0tFUk5FTCwgbnVtKTsKLQlpZiAoIXNnKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbiBub3QgYWxsb2MgZG9tYWluIGdyb3VwIGZvciBub2RlICVkXG4iLAotCQkgICAgICAgbnVtKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWQtPnNjaGVkX2dyb3VwX25vZGVzW251bV0gPSBzZzsKLQotCWZvcl9lYWNoX2NwdShqLCBkLT5ub2RlbWFzaykgewotCQlzZCA9ICZwZXJfY3B1KG5vZGVfZG9tYWlucywgaikuc2Q7Ci0JCXNkLT5ncm91cHMgPSBzZzsKLQl9Ci0KLQlzZy0+Y3B1X3Bvd2VyID0gMDsKLQljcHVtYXNrX2NvcHkoc2NoZWRfZ3JvdXBfY3B1cyhzZyksIGQtPm5vZGVtYXNrKTsKLQlzZy0+bmV4dCA9IHNnOwotCWNwdW1hc2tfb3IoZC0+Y292ZXJlZCwgZC0+Y292ZXJlZCwgZC0+bm9kZW1hc2spOwotCi0JcHJldiA9IHNnOwotCWZvciAoaiA9IDA7IGogPCBucl9ub2RlX2lkczsgaisrKSB7Ci0JCW4gPSAobnVtICsgaikgJSBucl9ub2RlX2lkczsKLQkJY3B1bWFza19jb21wbGVtZW50KGQtPm5vdGNvdmVyZWQsIGQtPmNvdmVyZWQpOwotCQljcHVtYXNrX2FuZChkLT50bXBtYXNrLCBkLT5ub3Rjb3ZlcmVkLCBjcHVfbWFwKTsKLQkJY3B1bWFza19hbmQoZC0+dG1wbWFzaywgZC0+dG1wbWFzaywgZC0+ZG9tYWluc3Bhbik7Ci0JCWlmIChjcHVtYXNrX2VtcHR5KGQtPnRtcG1hc2spKQotCQkJYnJlYWs7Ci0JCWNwdW1hc2tfYW5kKGQtPnRtcG1hc2ssIGQtPnRtcG1hc2ssIGNwdW1hc2tfb2Zfbm9kZShuKSk7Ci0JCWlmIChjcHVtYXNrX2VtcHR5KGQtPnRtcG1hc2spKQorCQlpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjb3ZlcmVkKSkKIAkJCWNvbnRpbnVlOwotCQlzZyA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHNjaGVkX2dyb3VwKSArIGNwdW1hc2tfc2l6ZSgpLAotCQkJCSAgR0ZQX0tFUk5FTCwgbnVtKTsKLQkJaWYgKCFzZykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgICAgICJDYW4gbm90IGFsbG9jIGRvbWFpbiBncm91cCBmb3Igbm9kZSAlZFxuIiwgaik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQorCisJCWNwdW1hc2tfY2xlYXIoc2NoZWRfZ3JvdXBfY3B1cyhzZykpOwogCQlzZy0+Y3B1X3Bvd2VyID0gMDsKLQkJY3B1bWFza19jb3B5KHNjaGVkX2dyb3VwX2NwdXMoc2cpLCBkLT50bXBtYXNrKTsKLQkJc2ctPm5leHQgPSBwcmV2LT5uZXh0OwotCQljcHVtYXNrX29yKGQtPmNvdmVyZWQsIGQtPmNvdmVyZWQsIGQtPnRtcG1hc2spOwotCQlwcmV2LT5uZXh0ID0gc2c7Ci0JCXByZXYgPSBzZzsKLQl9Ci1vdXQ6Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX05VTUEgKi8KIAotI2lmZGVmIENPTkZJR19OVU1BCi0vKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHZhcmlvdXMgc2NoZWRfZ3JvdXAgc3RydWN0dXJlcyAqLwotc3RhdGljIHZvaWQgZnJlZV9zY2hlZF9ncm91cHMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCi0JCQkgICAgICBzdHJ1Y3QgY3B1bWFzayAqbm9kZW1hc2spCi17Ci0JaW50IGNwdSwgaTsKLQotCWZvcl9lYWNoX2NwdShjcHUsIGNwdV9tYXApIHsKLQkJc3RydWN0IHNjaGVkX2dyb3VwICoqc2NoZWRfZ3JvdXBfbm9kZXMKLQkJCT0gc2NoZWRfZ3JvdXBfbm9kZXNfYnljcHVbY3B1XTsKLQotCQlpZiAoIXNjaGVkX2dyb3VwX25vZGVzKQotCQkJY29udGludWU7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG5yX25vZGVfaWRzOyBpKyspIHsKLQkJCXN0cnVjdCBzY2hlZF9ncm91cCAqb2xkc2csICpzZyA9IHNjaGVkX2dyb3VwX25vZGVzW2ldOwotCi0JCQljcHVtYXNrX2FuZChub2RlbWFzaywgY3B1bWFza19vZl9ub2RlKGkpLCBjcHVfbWFwKTsKLQkJCWlmIChjcHVtYXNrX2VtcHR5KG5vZGVtYXNrKSkKKwkJZm9yX2VhY2hfY3B1KGosIHNwYW4pIHsKKwkJCWlmIChnZXRfZ3JvdXAoaiwgc2RkLCBOVUxMKSAhPSBncm91cCkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKHNnID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0JCQlzZyA9IHNnLT5uZXh0OwotbmV4dF9zZzoKLQkJCW9sZHNnID0gc2c7Ci0JCQlzZyA9IHNnLT5uZXh0OwotCQkJa2ZyZWUob2xkc2cpOwotCQkJaWYgKG9sZHNnICE9IHNjaGVkX2dyb3VwX25vZGVzW2ldKQotCQkJCWdvdG8gbmV4dF9zZzsKKwkJCWNwdW1hc2tfc2V0X2NwdShqLCBjb3ZlcmVkKTsKKwkJCWNwdW1hc2tfc2V0X2NwdShqLCBzY2hlZF9ncm91cF9jcHVzKHNnKSk7CiAJCX0KLQkJa2ZyZWUoc2NoZWRfZ3JvdXBfbm9kZXMpOwotCQlzY2hlZF9ncm91cF9ub2Rlc19ieWNwdVtjcHVdID0gTlVMTDsKKworCQlpZiAoIWZpcnN0KQorCQkJZmlyc3QgPSBzZzsKKwkJaWYgKGxhc3QpCisJCQlsYXN0LT5uZXh0ID0gc2c7CisJCWxhc3QgPSBzZzsKIAl9CisJbGFzdC0+bmV4dCA9IGZpcnN0OwogfQotI2Vsc2UgLyogIUNPTkZJR19OVU1BICovCi1zdGF0aWMgdm9pZCBmcmVlX3NjaGVkX2dyb3Vwcyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKLQkJCSAgICAgIHN0cnVjdCBjcHVtYXNrICpub2RlbWFzaykKLXsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwogCiAvKgogICogSW5pdGlhbGl6ZSBzY2hlZCBncm91cHMgY3B1X3Bvd2VyLgpAQCAtNzE1OSwxMSArNjk5Nyw2IEBACiAgKi8KIHN0YXRpYyB2b2lkIGluaXRfc2NoZWRfZ3JvdXBzX3Bvd2VyKGludCBjcHUsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQogewotCXN0cnVjdCBzY2hlZF9kb21haW4gKmNoaWxkOwotCXN0cnVjdCBzY2hlZF9ncm91cCAqZ3JvdXA7Ci0JbG9uZyBwb3dlcjsKLQlpbnQgd2VpZ2h0OwotCiAJV0FSTl9PTighc2QgfHwgIXNkLT5ncm91cHMpOwogCiAJaWYgKGNwdSAhPSBncm91cF9maXJzdF9jcHUoc2QtPmdyb3VwcykpCkBAIC03MTcxLDM2ICs3MDA0LDcgQEAKIAogCXNkLT5ncm91cHMtPmdyb3VwX3dlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2dyb3VwX2NwdXMoc2QtPmdyb3VwcykpOwogCi0JY2hpbGQgPSBzZC0+Y2hpbGQ7Ci0KLQlzZC0+Z3JvdXBzLT5jcHVfcG93ZXIgPSAwOwotCi0JaWYgKCFjaGlsZCkgewotCQlwb3dlciA9IFNDSEVEX0xPQURfU0NBTEU7Ci0JCXdlaWdodCA9IGNwdW1hc2tfd2VpZ2h0KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSk7Ci0JCS8qCi0JCSAqIFNNVCBzaWJsaW5ncyBzaGFyZSB0aGUgcG93ZXIgb2YgYSBzaW5nbGUgY29yZS4KLQkJICogVXN1YWxseSBtdWx0aXBsZSB0aHJlYWRzIGdldCBhIGJldHRlciB5aWVsZCBvdXQgb2YKLQkJICogdGhhdCBvbmUgY29yZSB0aGFuIGEgc2luZ2xlIHRocmVhZCB3b3VsZCBoYXZlLAotCQkgKiByZWZsZWN0IHRoYXQgaW4gc2QtPnNtdF9nYWluLgotCQkgKi8KLQkJaWYgKChzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9DUFVQT1dFUikgJiYgd2VpZ2h0ID4gMSkgewotCQkJcG93ZXIgKj0gc2QtPnNtdF9nYWluOwotCQkJcG93ZXIgLz0gd2VpZ2h0OwotCQkJcG93ZXIgPj49IFNDSEVEX0xPQURfU0hJRlQ7Ci0JCX0KLQkJc2QtPmdyb3Vwcy0+Y3B1X3Bvd2VyICs9IHBvd2VyOwotCQlyZXR1cm47Ci0JfQotCi0JLyoKLQkgKiBBZGQgY3B1X3Bvd2VyIG9mIGVhY2ggY2hpbGQgZ3JvdXAgdG8gdGhpcyBncm91cHMgY3B1X3Bvd2VyLgotCSAqLwotCWdyb3VwID0gY2hpbGQtPmdyb3VwczsKLQlkbyB7Ci0JCXNkLT5ncm91cHMtPmNwdV9wb3dlciArPSBncm91cC0+Y3B1X3Bvd2VyOwotCQlncm91cCA9IGdyb3VwLT5uZXh0OwotCX0gd2hpbGUgKGdyb3VwICE9IGNoaWxkLT5ncm91cHMpOworCXVwZGF0ZV9ncm91cF9wb3dlcihzZCwgY3B1KTsKIH0KIAogLyoKQEAgLTcyMTQsMTUgKzcwMTgsMTUgQEAKICMgZGVmaW5lIFNEX0lOSVRfTkFNRShzZCwgdHlwZSkJCWRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lCVNEX0lOSVQoc2QsIHR5cGUpCXNkX2luaXRfIyN0eXBlKHNkKQotCi0jZGVmaW5lIFNEX0lOSVRfRlVOQyh0eXBlKQlcCi1zdGF0aWMgbm9pbmxpbmUgdm9pZCBzZF9pbml0XyMjdHlwZShzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCkJXAotewkJCQkJCQkJXAotCW1lbXNldChzZCwgMCwgc2l6ZW9mKCpzZCkpOwkJCQlcCi0JKnNkID0gU0RfIyN0eXBlIyNfSU5JVDsJCQkJCVwKLQlzZC0+bGV2ZWwgPSBTRF9MVl8jI3R5cGU7CQkJCVwKLQlTRF9JTklUX05BTUUoc2QsIHR5cGUpOwkJCQkJXAorI2RlZmluZSBTRF9JTklUX0ZVTkModHlwZSkJCQkJCQlcCitzdGF0aWMgbm9pbmxpbmUgc3RydWN0IHNjaGVkX2RvbWFpbiAqCQkJCQlcCitzZF9pbml0XyMjdHlwZShzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICp0bCwgaW50IGNwdSkgCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSAqcGVyX2NwdV9wdHIodGwtPmRhdGEuc2QsIGNwdSk7CVwKKwkqc2QgPSBTRF8jI3R5cGUjI19JTklUOwkJCQkJCVwKKwlTRF9JTklUX05BTUUoc2QsIHR5cGUpOwkJCQkJCVwKKwlzZC0+cHJpdmF0ZSA9ICZ0bC0+ZGF0YTsJCQkJCVwKKwlyZXR1cm4gc2Q7CQkJCQkJCVwKIH0KIAogU0RfSU5JVF9GVU5DKENQVSkKQEAgLTcyNDEsMTMgKzcwNDUsMTQgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50IGRlZmF1bHRfcmVsYXhfZG9tYWluX2xldmVsID0gLTE7CitpbnQgc2NoZWRfZG9tYWluX2xldmVsX21heDsKIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfcmVsYXhfZG9tYWluX2xldmVsKGNoYXIgKnN0cikKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAogCXZhbCA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgTlVMTCwgMCk7Ci0JaWYgKHZhbCA8IFNEX0xWX01BWCkKKwlpZiAodmFsIDwgc2NoZWRfZG9tYWluX2xldmVsX21heCkKIAkJZGVmYXVsdF9yZWxheF9kb21haW5fbGV2ZWwgPSB2YWw7CiAKIAlyZXR1cm4gMTsKQEAgLTcyNzUsMzcgKzcwODAsMjAgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIF9fc2R0X2ZyZWUoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXApOworc3RhdGljIGludCBfX3NkdF9hbGxvYyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCk7CisKIHN0YXRpYyB2b2lkIF9fZnJlZV9kb21haW5fYWxsb2NzKHN0cnVjdCBzX2RhdGEgKmQsIGVudW0gc19hbGxvYyB3aGF0LAogCQkJCSBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCkKIHsKIAlzd2l0Y2ggKHdoYXQpIHsKLQljYXNlIHNhX3NjaGVkX2dyb3VwczoKLQkJZnJlZV9zY2hlZF9ncm91cHMoY3B1X21hcCwgZC0+dG1wbWFzayk7IC8qIGZhbGwgdGhyb3VnaCAqLwotCQlkLT5zY2hlZF9ncm91cF9ub2RlcyA9IE5VTEw7CiAJY2FzZSBzYV9yb290ZG9tYWluOgotCQlmcmVlX3Jvb3Rkb21haW4oZC0+cmQpOyAvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIHNhX3RtcG1hc2s6Ci0JCWZyZWVfY3B1bWFza192YXIoZC0+dG1wbWFzayk7IC8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2Ugc2Ffc2VuZF9jb3ZlcmVkOgotCQlmcmVlX2NwdW1hc2tfdmFyKGQtPnNlbmRfY292ZXJlZCk7IC8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2Ugc2FfdGhpc19ib29rX21hcDoKLQkJZnJlZV9jcHVtYXNrX3ZhcihkLT50aGlzX2Jvb2tfbWFwKTsgLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBzYV90aGlzX2NvcmVfbWFwOgotCQlmcmVlX2NwdW1hc2tfdmFyKGQtPnRoaXNfY29yZV9tYXApOyAvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIHNhX3RoaXNfc2libGluZ19tYXA6Ci0JCWZyZWVfY3B1bWFza192YXIoZC0+dGhpc19zaWJsaW5nX21hcCk7IC8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2Ugc2Ffbm9kZW1hc2s6Ci0JCWZyZWVfY3B1bWFza192YXIoZC0+bm9kZW1hc2spOyAvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIHNhX3NjaGVkX2dyb3VwX25vZGVzOgotI2lmZGVmIENPTkZJR19OVU1BCi0JCWtmcmVlKGQtPnNjaGVkX2dyb3VwX25vZGVzKTsgLyogZmFsbCB0aHJvdWdoICovCi0JY2FzZSBzYV9ub3Rjb3ZlcmVkOgotCQlmcmVlX2NwdW1hc2tfdmFyKGQtPm5vdGNvdmVyZWQpOyAvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIHNhX2NvdmVyZWQ6Ci0JCWZyZWVfY3B1bWFza192YXIoZC0+Y292ZXJlZCk7IC8qIGZhbGwgdGhyb3VnaCAqLwotCWNhc2Ugc2FfZG9tYWluc3BhbjoKLQkJZnJlZV9jcHVtYXNrX3ZhcihkLT5kb21haW5zcGFuKTsgLyogZmFsbCB0aHJvdWdoICovCi0jZW5kaWYKKwkJaWYgKCFhdG9taWNfcmVhZCgmZC0+cmQtPnJlZmNvdW50KSkKKwkJCWZyZWVfcm9vdGRvbWFpbigmZC0+cmQtPnJjdSk7IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2Ugc2Ffc2Q6CisJCWZyZWVfcGVyY3B1KGQtPnNkKTsgLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBzYV9zZF9zdG9yYWdlOgorCQlfX3NkdF9mcmVlKGNwdV9tYXApOyAvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIHNhX25vbmU6CiAJCWJyZWFrOwogCX0KQEAgLTczMTQsMzA4ICs3MTAyLDIxMiBAQAogc3RhdGljIGVudW0gc19hbGxvYyBfX3Zpc2l0X2RvbWFpbl9hbGxvY2F0aW9uX2hlbGwoc3RydWN0IHNfZGF0YSAqZCwKIAkJCQkJCSAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKQogewotI2lmZGVmIENPTkZJR19OVU1BCi0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmZC0+ZG9tYWluc3BhbiwgR0ZQX0tFUk5FTCkpCi0JCXJldHVybiBzYV9ub25lOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPmNvdmVyZWQsIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gc2FfZG9tYWluc3BhbjsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZkLT5ub3Rjb3ZlcmVkLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIHNhX2NvdmVyZWQ7Ci0JLyogQWxsb2NhdGUgdGhlIHBlci1ub2RlIGxpc3Qgb2Ygc2NoZWQgZ3JvdXBzICovCi0JZC0+c2NoZWRfZ3JvdXBfbm9kZXMgPSBrY2FsbG9jKG5yX25vZGVfaWRzLAotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc2NoZWRfZ3JvdXAgKiksIEdGUF9LRVJORUwpOwotCWlmICghZC0+c2NoZWRfZ3JvdXBfbm9kZXMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuIG5vdCBhbGxvYyBzY2hlZCBncm91cCBub2RlIGxpc3RcbiIpOwotCQlyZXR1cm4gc2Ffbm90Y292ZXJlZDsKLQl9Ci0Jc2NoZWRfZ3JvdXBfbm9kZXNfYnljcHVbY3B1bWFza19maXJzdChjcHVfbWFwKV0gPSBkLT5zY2hlZF9ncm91cF9ub2RlczsKLSNlbmRpZgotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPm5vZGVtYXNrLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIHNhX3NjaGVkX2dyb3VwX25vZGVzOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPnRoaXNfc2libGluZ19tYXAsIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gc2Ffbm9kZW1hc2s7Ci0JaWYgKCFhbGxvY19jcHVtYXNrX3ZhcigmZC0+dGhpc19jb3JlX21hcCwgR0ZQX0tFUk5FTCkpCi0JCXJldHVybiBzYV90aGlzX3NpYmxpbmdfbWFwOwotCWlmICghYWxsb2NfY3B1bWFza192YXIoJmQtPnRoaXNfYm9va19tYXAsIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gc2FfdGhpc19jb3JlX21hcDsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZkLT5zZW5kX2NvdmVyZWQsIEdGUF9LRVJORUwpKQotCQlyZXR1cm4gc2FfdGhpc19ib29rX21hcDsKLQlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZkLT50bXBtYXNrLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIHNhX3NlbmRfY292ZXJlZDsKKwltZW1zZXQoZCwgMCwgc2l6ZW9mKCpkKSk7CisKKwlpZiAoX19zZHRfYWxsb2MoY3B1X21hcCkpCisJCXJldHVybiBzYV9zZF9zdG9yYWdlOworCWQtPnNkID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzY2hlZF9kb21haW4gKik7CisJaWYgKCFkLT5zZCkKKwkJcmV0dXJuIHNhX3NkX3N0b3JhZ2U7CiAJZC0+cmQgPSBhbGxvY19yb290ZG9tYWluKCk7Ci0JaWYgKCFkLT5yZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW5ub3QgYWxsb2Mgcm9vdCBkb21haW5cbiIpOwotCQlyZXR1cm4gc2FfdG1wbWFzazsKLQl9CisJaWYgKCFkLT5yZCkKKwkJcmV0dXJuIHNhX3NkOwogCXJldHVybiBzYV9yb290ZG9tYWluOwogfQogCi1zdGF0aWMgc3RydWN0IHNjaGVkX2RvbWFpbiAqX19idWlsZF9udW1hX3NjaGVkX2RvbWFpbnMoc3RydWN0IHNfZGF0YSAqZCwKLQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwgc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICphdHRyLCBpbnQgaSkKKy8qCisgKiBOVUxMIHRoZSBzZF9kYXRhIGVsZW1lbnRzIHdlJ3ZlIHVzZWQgdG8gYnVpbGQgdGhlIHNjaGVkX2RvbWFpbiBhbmQKKyAqIHNjaGVkX2dyb3VwIHN0cnVjdHVyZSBzbyB0aGF0IHRoZSBzdWJzZXF1ZW50IF9fZnJlZV9kb21haW5fYWxsb2NzKCkKKyAqIHdpbGwgbm90IGZyZWUgdGhlIGRhdGEgd2UncmUgdXNpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGNsYWltX2FsbG9jYXRpb25zKGludCBjcHUsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkKQogewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gTlVMTDsKLSNpZmRlZiBDT05GSUdfTlVNQQotCXN0cnVjdCBzY2hlZF9kb21haW4gKnBhcmVudDsKKwlzdHJ1Y3Qgc2RfZGF0YSAqc2RkID0gc2QtPnByaXZhdGU7CisJc3RydWN0IHNjaGVkX2dyb3VwICpzZyA9IHNkLT5ncm91cHM7CiAKLQlkLT5zZF9hbGxub2RlcyA9IDA7Ci0JaWYgKGNwdW1hc2tfd2VpZ2h0KGNwdV9tYXApID4KLQkgICAgU0RfTk9ERVNfUEVSX0RPTUFJTiAqIGNwdW1hc2tfd2VpZ2h0KGQtPm5vZGVtYXNrKSkgewotCQlzZCA9ICZwZXJfY3B1KGFsbG5vZGVzX2RvbWFpbnMsIGkpLnNkOwotCQlTRF9JTklUKHNkLCBBTExOT0RFUyk7Ci0JCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKLQkJY3B1bWFza19jb3B5KHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwgY3B1X21hcCk7Ci0JCWNwdV90b19hbGxub2Rlc19ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgZC0+dG1wbWFzayk7Ci0JCWQtPnNkX2FsbG5vZGVzID0gMTsKKwlXQVJOX09OX09OQ0UoKnBlcl9jcHVfcHRyKHNkZC0+c2QsIGNwdSkgIT0gc2QpOworCSpwZXJfY3B1X3B0cihzZGQtPnNkLCBjcHUpID0gTlVMTDsKKworCWlmIChjcHUgPT0gY3B1bWFza19maXJzdChzY2hlZF9ncm91cF9jcHVzKHNnKSkpIHsKKwkJV0FSTl9PTl9PTkNFKCpwZXJfY3B1X3B0cihzZGQtPnNnLCBjcHUpICE9IHNnKTsKKwkJKnBlcl9jcHVfcHRyKHNkZC0+c2csIGNwdSkgPSBOVUxMOwogCX0KLQlwYXJlbnQgPSBzZDsKLQotCXNkID0gJnBlcl9jcHUobm9kZV9kb21haW5zLCBpKS5zZDsKLQlTRF9JTklUKHNkLCBOT0RFKTsKLQlzZXRfZG9tYWluX2F0dHJpYnV0ZShzZCwgYXR0cik7Ci0Jc2NoZWRfZG9tYWluX25vZGVfc3BhbihjcHVfdG9fbm9kZShpKSwgc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKLQlzZC0+cGFyZW50ID0gcGFyZW50OwotCWlmIChwYXJlbnQpCi0JCXBhcmVudC0+Y2hpbGQgPSBzZDsKLQljcHVtYXNrX2FuZChzY2hlZF9kb21haW5fc3BhbihzZCksIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSwgY3B1X21hcCk7Ci0jZW5kaWYKLQlyZXR1cm4gc2Q7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpfX2J1aWxkX2NwdV9zY2hlZF9kb21haW4oc3RydWN0IHNfZGF0YSAqZCwKLQljb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwgc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICphdHRyLAotCXN0cnVjdCBzY2hlZF9kb21haW4gKnBhcmVudCwgaW50IGkpCi17Ci0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7Ci0Jc2QgPSAmcGVyX2NwdShwaHlzX2RvbWFpbnMsIGkpLnNkOwotCVNEX0lOSVQoc2QsIENQVSk7Ci0Jc2V0X2RvbWFpbl9hdHRyaWJ1dGUoc2QsIGF0dHIpOwotCWNwdW1hc2tfY29weShzY2hlZF9kb21haW5fc3BhbihzZCksIGQtPm5vZGVtYXNrKTsKLQlzZC0+cGFyZW50ID0gcGFyZW50OwotCWlmIChwYXJlbnQpCi0JCXBhcmVudC0+Y2hpbGQgPSBzZDsKLQljcHVfdG9fcGh5c19ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgZC0+dG1wbWFzayk7Ci0JcmV0dXJuIHNkOwotfQotCi1zdGF0aWMgc3RydWN0IHNjaGVkX2RvbWFpbiAqX19idWlsZF9ib29rX3NjaGVkX2RvbWFpbihzdHJ1Y3Qgc19kYXRhICpkLAotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHIsCi0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqcGFyZW50LCBpbnQgaSkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IHBhcmVudDsKLSNpZmRlZiBDT05GSUdfU0NIRURfQk9PSwotCXNkID0gJnBlcl9jcHUoYm9va19kb21haW5zLCBpKS5zZDsKLQlTRF9JTklUKHNkLCBCT09LKTsKLQlzZXRfZG9tYWluX2F0dHJpYnV0ZShzZCwgYXR0cik7Ci0JY3B1bWFza19hbmQoc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBjcHVfbWFwLCBjcHVfYm9va19tYXNrKGkpKTsKLQlzZC0+cGFyZW50ID0gcGFyZW50OwotCXBhcmVudC0+Y2hpbGQgPSBzZDsKLQljcHVfdG9fYm9va19ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgZC0+dG1wbWFzayk7Ci0jZW5kaWYKLQlyZXR1cm4gc2Q7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2NoZWRfZG9tYWluICpfX2J1aWxkX21jX3NjaGVkX2RvbWFpbihzdHJ1Y3Qgc19kYXRhICpkLAotCWNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLCBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHIsCi0Jc3RydWN0IHNjaGVkX2RvbWFpbiAqcGFyZW50LCBpbnQgaSkKLXsKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpzZCA9IHBhcmVudDsKLSNpZmRlZiBDT05GSUdfU0NIRURfTUMKLQlzZCA9ICZwZXJfY3B1KGNvcmVfZG9tYWlucywgaSkuc2Q7Ci0JU0RfSU5JVChzZCwgTUMpOwotCXNldF9kb21haW5fYXR0cmlidXRlKHNkLCBhdHRyKTsKLQljcHVtYXNrX2FuZChzY2hlZF9kb21haW5fc3BhbihzZCksIGNwdV9tYXAsIGNwdV9jb3JlZ3JvdXBfbWFzayhpKSk7Ci0Jc2QtPnBhcmVudCA9IHBhcmVudDsKLQlwYXJlbnQtPmNoaWxkID0gc2Q7Ci0JY3B1X3RvX2NvcmVfZ3JvdXAoaSwgY3B1X21hcCwgJnNkLT5ncm91cHMsIGQtPnRtcG1hc2spOwotI2VuZGlmCi0JcmV0dXJuIHNkOwotfQotCi1zdGF0aWMgc3RydWN0IHNjaGVkX2RvbWFpbiAqX19idWlsZF9zbXRfc2NoZWRfZG9tYWluKHN0cnVjdCBzX2RhdGEgKmQsCi0JY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsIHN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0ciwKLQlzdHJ1Y3Qgc2NoZWRfZG9tYWluICpwYXJlbnQsIGludCBpKQotewotCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkID0gcGFyZW50OwogI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKLQlzZCA9ICZwZXJfY3B1KGNwdV9kb21haW5zLCBpKS5zZDsKLQlTRF9JTklUKHNkLCBTSUJMSU5HKTsKLQlzZXRfZG9tYWluX2F0dHJpYnV0ZShzZCwgYXR0cik7Ci0JY3B1bWFza19hbmQoc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBjcHVfbWFwLCB0b3BvbG9neV90aHJlYWRfY3B1bWFzayhpKSk7Ci0Jc2QtPnBhcmVudCA9IHBhcmVudDsKLQlwYXJlbnQtPmNoaWxkID0gc2Q7Ci0JY3B1X3RvX2NwdV9ncm91cChpLCBjcHVfbWFwLCAmc2QtPmdyb3VwcywgZC0+dG1wbWFzayk7Ci0jZW5kaWYKLQlyZXR1cm4gc2Q7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1aWxkX3NjaGVkX2dyb3VwcyhzdHJ1Y3Qgc19kYXRhICpkLCBlbnVtIHNjaGVkX2RvbWFpbl9sZXZlbCBsLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLCBpbnQgY3B1KQorc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfc210X21hc2soaW50IGNwdSkKIHsKLQlzd2l0Y2ggKGwpIHsKKwlyZXR1cm4gdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soY3B1KTsKK30KKyNlbmRpZgorCisvKgorICogVG9wb2xvZ3kgbGlzdCwgYm90dG9tLXVwLgorICovCitzdGF0aWMgc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCBkZWZhdWx0X3RvcG9sb2d5W10gPSB7CiAjaWZkZWYgQ09ORklHX1NDSEVEX1NNVAotCWNhc2UgU0RfTFZfU0lCTElORzogLyogc2V0IHVwIENQVSAoc2libGluZykgZ3JvdXBzICovCi0JCWNwdW1hc2tfYW5kKGQtPnRoaXNfc2libGluZ19tYXAsIGNwdV9tYXAsCi0JCQkgICAgdG9wb2xvZ3lfdGhyZWFkX2NwdW1hc2soY3B1KSk7Ci0JCWlmIChjcHUgPT0gY3B1bWFza19maXJzdChkLT50aGlzX3NpYmxpbmdfbWFwKSkKLQkJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKGQtPnRoaXNfc2libGluZ19tYXAsIGNwdV9tYXAsCi0JCQkJCQkmY3B1X3RvX2NwdV9ncm91cCwKLQkJCQkJCWQtPnNlbmRfY292ZXJlZCwgZC0+dG1wbWFzayk7Ci0JCWJyZWFrOworCXsgc2RfaW5pdF9TSUJMSU5HLCBjcHVfc210X21hc2ssIH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU0NIRURfTUMKLQljYXNlIFNEX0xWX01DOiAvKiBzZXQgdXAgbXVsdGktY29yZSBncm91cHMgKi8KLQkJY3B1bWFza19hbmQoZC0+dGhpc19jb3JlX21hcCwgY3B1X21hcCwgY3B1X2NvcmVncm91cF9tYXNrKGNwdSkpOwotCQlpZiAoY3B1ID09IGNwdW1hc2tfZmlyc3QoZC0+dGhpc19jb3JlX21hcCkpCi0JCQlpbml0X3NjaGVkX2J1aWxkX2dyb3VwcyhkLT50aGlzX2NvcmVfbWFwLCBjcHVfbWFwLAotCQkJCQkJJmNwdV90b19jb3JlX2dyb3VwLAotCQkJCQkJZC0+c2VuZF9jb3ZlcmVkLCBkLT50bXBtYXNrKTsKLQkJYnJlYWs7CisJeyBzZF9pbml0X01DLCBjcHVfY29yZWdyb3VwX21hc2ssIH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfU0NIRURfQk9PSwotCWNhc2UgU0RfTFZfQk9PSzogLyogc2V0IHVwIGJvb2sgZ3JvdXBzICovCi0JCWNwdW1hc2tfYW5kKGQtPnRoaXNfYm9va19tYXAsIGNwdV9tYXAsIGNwdV9ib29rX21hc2soY3B1KSk7Ci0JCWlmIChjcHUgPT0gY3B1bWFza19maXJzdChkLT50aGlzX2Jvb2tfbWFwKSkKLQkJCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKGQtPnRoaXNfYm9va19tYXAsIGNwdV9tYXAsCi0JCQkJCQkmY3B1X3RvX2Jvb2tfZ3JvdXAsCi0JCQkJCQlkLT5zZW5kX2NvdmVyZWQsIGQtPnRtcG1hc2spOwotCQlicmVhazsKKwl7IHNkX2luaXRfQk9PSywgY3B1X2Jvb2tfbWFzaywgfSwKICNlbmRpZgotCWNhc2UgU0RfTFZfQ1BVOiAvKiBzZXQgdXAgcGh5c2ljYWwgZ3JvdXBzICovCi0JCWNwdW1hc2tfYW5kKGQtPm5vZGVtYXNrLCBjcHVtYXNrX29mX25vZGUoY3B1KSwgY3B1X21hcCk7Ci0JCWlmICghY3B1bWFza19lbXB0eShkLT5ub2RlbWFzaykpCi0JCQlpbml0X3NjaGVkX2J1aWxkX2dyb3VwcyhkLT5ub2RlbWFzaywgY3B1X21hcCwKLQkJCQkJCSZjcHVfdG9fcGh5c19ncm91cCwKLQkJCQkJCWQtPnNlbmRfY292ZXJlZCwgZC0+dG1wbWFzayk7Ci0JCWJyZWFrOworCXsgc2RfaW5pdF9DUFUsIGNwdV9jcHVfbWFzaywgfSwKICNpZmRlZiBDT05GSUdfTlVNQQotCWNhc2UgU0RfTFZfQUxMTk9ERVM6Ci0JCWluaXRfc2NoZWRfYnVpbGRfZ3JvdXBzKGNwdV9tYXAsIGNwdV9tYXAsICZjcHVfdG9fYWxsbm9kZXNfZ3JvdXAsCi0JCQkJCWQtPnNlbmRfY292ZXJlZCwgZC0+dG1wbWFzayk7Ci0JCWJyZWFrOworCXsgc2RfaW5pdF9OT0RFLCBjcHVfbm9kZV9tYXNrLCB9LAorCXsgc2RfaW5pdF9BTExOT0RFUywgY3B1X2FsbG5vZGVzX21hc2ssIH0sCiAjZW5kaWYKLQlkZWZhdWx0OgotCQlicmVhazsKKwl7IE5VTEwsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCAqc2NoZWRfZG9tYWluX3RvcG9sb2d5ID0gZGVmYXVsdF90b3BvbG9neTsKKworc3RhdGljIGludCBfX3NkdF9hbGxvYyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICp0bDsKKwlpbnQgajsKKworCWZvciAodGwgPSBzY2hlZF9kb21haW5fdG9wb2xvZ3k7IHRsLT5pbml0OyB0bCsrKSB7CisJCXN0cnVjdCBzZF9kYXRhICpzZGQgPSAmdGwtPmRhdGE7CisKKwkJc2RkLT5zZCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3Qgc2NoZWRfZG9tYWluICopOworCQlpZiAoIXNkZC0+c2QpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlzZGQtPnNnID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBzY2hlZF9ncm91cCAqKTsKKwkJaWYgKCFzZGQtPnNnKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZm9yX2VhY2hfY3B1KGosIGNwdV9tYXApIHsKKwkJCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOworCQkJc3RydWN0IHNjaGVkX2dyb3VwICpzZzsKKworCQkgICAgICAgCXNkID0ga3phbGxvY19ub2RlKHNpemVvZihzdHJ1Y3Qgc2NoZWRfZG9tYWluKSArIGNwdW1hc2tfc2l6ZSgpLAorCQkJCQlHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShqKSk7CisJCQlpZiAoIXNkKQorCQkJCXJldHVybiAtRU5PTUVNOworCisJCQkqcGVyX2NwdV9wdHIoc2RkLT5zZCwgaikgPSBzZDsKKworCQkJc2cgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBzY2hlZF9ncm91cCkgKyBjcHVtYXNrX3NpemUoKSwKKwkJCQkJR0ZQX0tFUk5FTCwgY3B1X3RvX25vZGUoaikpOworCQkJaWYgKCFzZykKKwkJCQlyZXR1cm4gLUVOT01FTTsKKworCQkJKnBlcl9jcHVfcHRyKHNkZC0+c2csIGopID0gc2c7CisJCX0KIAl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19zZHRfZnJlZShjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCkKK3sKKwlzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICp0bDsKKwlpbnQgajsKKworCWZvciAodGwgPSBzY2hlZF9kb21haW5fdG9wb2xvZ3k7IHRsLT5pbml0OyB0bCsrKSB7CisJCXN0cnVjdCBzZF9kYXRhICpzZGQgPSAmdGwtPmRhdGE7CisKKwkJZm9yX2VhY2hfY3B1KGosIGNwdV9tYXApIHsKKwkJCWtmcmVlKCpwZXJfY3B1X3B0cihzZGQtPnNkLCBqKSk7CisJCQlrZnJlZSgqcGVyX2NwdV9wdHIoc2RkLT5zZywgaikpOworCQl9CisJCWZyZWVfcGVyY3B1KHNkZC0+c2QpOworCQlmcmVlX3BlcmNwdShzZGQtPnNnKTsKKwl9Cit9CisKK3N0cnVjdCBzY2hlZF9kb21haW4gKmJ1aWxkX3NjaGVkX2RvbWFpbihzdHJ1Y3Qgc2NoZWRfZG9tYWluX3RvcG9sb2d5X2xldmVsICp0bCwKKwkJc3RydWN0IHNfZGF0YSAqZCwgY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCisJCXN0cnVjdCBzY2hlZF9kb21haW5fYXR0ciAqYXR0ciwgc3RydWN0IHNjaGVkX2RvbWFpbiAqY2hpbGQsCisJCWludCBjcHUpCit7CisJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QgPSB0bC0+aW5pdCh0bCwgY3B1KTsKKwlpZiAoIXNkKQorCQlyZXR1cm4gY2hpbGQ7CisKKwlzZXRfZG9tYWluX2F0dHJpYnV0ZShzZCwgYXR0cik7CisJY3B1bWFza19hbmQoc2NoZWRfZG9tYWluX3NwYW4oc2QpLCBjcHVfbWFwLCB0bC0+bWFzayhjcHUpKTsKKwlpZiAoY2hpbGQpIHsKKwkJc2QtPmxldmVsID0gY2hpbGQtPmxldmVsICsgMTsKKwkJc2NoZWRfZG9tYWluX2xldmVsX21heCA9IG1heChzY2hlZF9kb21haW5fbGV2ZWxfbWF4LCBzZC0+bGV2ZWwpOworCQljaGlsZC0+cGFyZW50ID0gc2Q7CisJfQorCXNkLT5jaGlsZCA9IGNoaWxkOworCisJcmV0dXJuIHNkOwogfQogCiAvKgogICogQnVpbGQgc2NoZWQgZG9tYWlucyBmb3IgYSBnaXZlbiBzZXQgb2YgY3B1cyBhbmQgYXR0YWNoIHRoZSBzY2hlZCBkb21haW5zCiAgKiB0byB0aGUgaW5kaXZpZHVhbCBjcHVzCiAgKi8KLXN0YXRpYyBpbnQgX19idWlsZF9zY2hlZF9kb21haW5zKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwLAotCQkJCSBzdHJ1Y3Qgc2NoZWRfZG9tYWluX2F0dHIgKmF0dHIpCitzdGF0aWMgaW50IGJ1aWxkX3NjaGVkX2RvbWFpbnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXAsCisJCQkgICAgICAgc3RydWN0IHNjaGVkX2RvbWFpbl9hdHRyICphdHRyKQogewogCWVudW0gc19hbGxvYyBhbGxvY19zdGF0ZSA9IHNhX25vbmU7Ci0Jc3RydWN0IHNfZGF0YSBkOwogCXN0cnVjdCBzY2hlZF9kb21haW4gKnNkOwotCWludCBpOwotI2lmZGVmIENPTkZJR19OVU1BCi0JZC5zZF9hbGxub2RlcyA9IDA7Ci0jZW5kaWYKKwlzdHJ1Y3Qgc19kYXRhIGQ7CisJaW50IGksIHJldCA9IC1FTk9NRU07CiAKIAlhbGxvY19zdGF0ZSA9IF9fdmlzaXRfZG9tYWluX2FsbG9jYXRpb25faGVsbCgmZCwgY3B1X21hcCk7CiAJaWYgKGFsbG9jX3N0YXRlICE9IHNhX3Jvb3Rkb21haW4pCiAJCWdvdG8gZXJyb3I7Ci0JYWxsb2Nfc3RhdGUgPSBzYV9zY2hlZF9ncm91cHM7CiAKLQkvKgotCSAqIFNldCB1cCBkb21haW5zIGZvciBjcHVzIHNwZWNpZmllZCBieSB0aGUgY3B1X21hcC4KLQkgKi8KKwkvKiBTZXQgdXAgZG9tYWlucyBmb3IgY3B1cyBzcGVjaWZpZWQgYnkgdGhlIGNwdV9tYXAuICovCiAJZm9yX2VhY2hfY3B1KGksIGNwdV9tYXApIHsKLQkJY3B1bWFza19hbmQoZC5ub2RlbWFzaywgY3B1bWFza19vZl9ub2RlKGNwdV90b19ub2RlKGkpKSwKLQkJCSAgICBjcHVfbWFwKTsKKwkJc3RydWN0IHNjaGVkX2RvbWFpbl90b3BvbG9neV9sZXZlbCAqdGw7CiAKLQkJc2QgPSBfX2J1aWxkX251bWFfc2NoZWRfZG9tYWlucygmZCwgY3B1X21hcCwgYXR0ciwgaSk7Ci0JCXNkID0gX19idWlsZF9jcHVfc2NoZWRfZG9tYWluKCZkLCBjcHVfbWFwLCBhdHRyLCBzZCwgaSk7Ci0JCXNkID0gX19idWlsZF9ib29rX3NjaGVkX2RvbWFpbigmZCwgY3B1X21hcCwgYXR0ciwgc2QsIGkpOwotCQlzZCA9IF9fYnVpbGRfbWNfc2NoZWRfZG9tYWluKCZkLCBjcHVfbWFwLCBhdHRyLCBzZCwgaSk7Ci0JCXNkID0gX19idWlsZF9zbXRfc2NoZWRfZG9tYWluKCZkLCBjcHVfbWFwLCBhdHRyLCBzZCwgaSk7CisJCXNkID0gTlVMTDsKKwkJZm9yICh0bCA9IHNjaGVkX2RvbWFpbl90b3BvbG9neTsgdGwtPmluaXQ7IHRsKyspCisJCQlzZCA9IGJ1aWxkX3NjaGVkX2RvbWFpbih0bCwgJmQsIGNwdV9tYXAsIGF0dHIsIHNkLCBpKTsKKworCQl3aGlsZSAoc2QtPmNoaWxkKQorCQkJc2QgPSBzZC0+Y2hpbGQ7CisKKwkJKnBlcl9jcHVfcHRyKGQuc2QsIGkpID0gc2Q7CiAJfQogCisJLyogQnVpbGQgdGhlIGdyb3VwcyBmb3IgdGhlIGRvbWFpbnMgKi8KIAlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewotCQlidWlsZF9zY2hlZF9ncm91cHMoJmQsIFNEX0xWX1NJQkxJTkcsIGNwdV9tYXAsIGkpOwotCQlidWlsZF9zY2hlZF9ncm91cHMoJmQsIFNEX0xWX0JPT0ssIGNwdV9tYXAsIGkpOwotCQlidWlsZF9zY2hlZF9ncm91cHMoJmQsIFNEX0xWX01DLCBjcHVfbWFwLCBpKTsKKwkJZm9yIChzZCA9ICpwZXJfY3B1X3B0cihkLnNkLCBpKTsgc2Q7IHNkID0gc2QtPnBhcmVudCkgeworCQkJc2QtPnNwYW5fd2VpZ2h0ID0gY3B1bWFza193ZWlnaHQoc2NoZWRfZG9tYWluX3NwYW4oc2QpKTsKKwkJCWdldF9ncm91cChpLCBzZC0+cHJpdmF0ZSwgJnNkLT5ncm91cHMpOworCQkJYXRvbWljX2luYygmc2QtPmdyb3Vwcy0+cmVmKTsKKworCQkJaWYgKGkgIT0gY3B1bWFza19maXJzdChzY2hlZF9kb21haW5fc3BhbihzZCkpKQorCQkJCWNvbnRpbnVlOworCisJCQlidWlsZF9zY2hlZF9ncm91cHMoc2QpOworCQl9CiAJfQogCi0JLyogU2V0IHVwIHBoeXNpY2FsIGdyb3VwcyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9ub2RlX2lkczsgaSsrKQotCQlidWlsZF9zY2hlZF9ncm91cHMoJmQsIFNEX0xWX0NQVSwgY3B1X21hcCwgaSk7Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotCS8qIFNldCB1cCBub2RlIGdyb3VwcyAqLwotCWlmIChkLnNkX2FsbG5vZGVzKQotCQlidWlsZF9zY2hlZF9ncm91cHMoJmQsIFNEX0xWX0FMTE5PREVTLCBjcHVfbWFwLCAwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBucl9ub2RlX2lkczsgaSsrKQotCQlpZiAoYnVpbGRfbnVtYV9zY2hlZF9ncm91cHMoJmQsIGNwdV9tYXAsIGkpKQotCQkJZ290byBlcnJvcjsKLSNlbmRpZgotCiAJLyogQ2FsY3VsYXRlIENQVSBwb3dlciBmb3IgcGh5c2ljYWwgcGFja2FnZXMgYW5kIG5vZGVzICovCi0jaWZkZWYgQ09ORklHX1NDSEVEX1NNVAotCWZvcl9lYWNoX2NwdShpLCBjcHVfbWFwKSB7Ci0JCXNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpLnNkOwotCQlpbml0X3NjaGVkX2dyb3Vwc19wb3dlcihpLCBzZCk7Ci0JfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NDSEVEX01DCi0JZm9yX2VhY2hfY3B1KGksIGNwdV9tYXApIHsKLQkJc2QgPSAmcGVyX2NwdShjb3JlX2RvbWFpbnMsIGkpLnNkOwotCQlpbml0X3NjaGVkX2dyb3Vwc19wb3dlcihpLCBzZCk7Ci0JfQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NDSEVEX0JPT0sKLQlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewotCQlzZCA9ICZwZXJfY3B1KGJvb2tfZG9tYWlucywgaSkuc2Q7Ci0JCWluaXRfc2NoZWRfZ3JvdXBzX3Bvd2VyKGksIHNkKTsKLQl9Ci0jZW5kaWYKKwlmb3IgKGkgPSBucl9jcHVtYXNrX2JpdHMtMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdV9tYXApKQorCQkJY29udGludWU7CiAKLQlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkgewotCQlzZCA9ICZwZXJfY3B1KHBoeXNfZG9tYWlucywgaSkuc2Q7Ci0JCWluaXRfc2NoZWRfZ3JvdXBzX3Bvd2VyKGksIHNkKTsKKwkJZm9yIChzZCA9ICpwZXJfY3B1X3B0cihkLnNkLCBpKTsgc2Q7IHNkID0gc2QtPnBhcmVudCkgeworCQkJY2xhaW1fYWxsb2NhdGlvbnMoaSwgc2QpOworCQkJaW5pdF9zY2hlZF9ncm91cHNfcG93ZXIoaSwgc2QpOworCQl9CiAJfQogCi0jaWZkZWYgQ09ORklHX05VTUEKLQlmb3IgKGkgPSAwOyBpIDwgbnJfbm9kZV9pZHM7IGkrKykKLQkJaW5pdF9udW1hX3NjaGVkX2dyb3Vwc19wb3dlcihkLnNjaGVkX2dyb3VwX25vZGVzW2ldKTsKLQotCWlmIChkLnNkX2FsbG5vZGVzKSB7Ci0JCXN0cnVjdCBzY2hlZF9ncm91cCAqc2c7Ci0KLQkJY3B1X3RvX2FsbG5vZGVzX2dyb3VwKGNwdW1hc2tfZmlyc3QoY3B1X21hcCksIGNwdV9tYXAsICZzZywKLQkJCQkJCQkJZC50bXBtYXNrKTsKLQkJaW5pdF9udW1hX3NjaGVkX2dyb3Vwc19wb3dlcihzZyk7Ci0JfQotI2VuZGlmCi0KIAkvKiBBdHRhY2ggdGhlIGRvbWFpbnMgKi8KKwlyY3VfcmVhZF9sb2NrKCk7CiAJZm9yX2VhY2hfY3B1KGksIGNwdV9tYXApIHsKLSNpZmRlZiBDT05GSUdfU0NIRURfU01UCi0JCXNkID0gJnBlcl9jcHUoY3B1X2RvbWFpbnMsIGkpLnNkOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpCi0JCXNkID0gJnBlcl9jcHUoY29yZV9kb21haW5zLCBpKS5zZDsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NDSEVEX0JPT0spCi0JCXNkID0gJnBlcl9jcHUoYm9va19kb21haW5zLCBpKS5zZDsKLSNlbHNlCi0JCXNkID0gJnBlcl9jcHUocGh5c19kb21haW5zLCBpKS5zZDsKLSNlbmRpZgorCQlzZCA9ICpwZXJfY3B1X3B0cihkLnNkLCBpKTsKIAkJY3B1X2F0dGFjaF9kb21haW4oc2QsIGQucmQsIGkpOwogCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKIAotCWQuc2NoZWRfZ3JvdXBfbm9kZXMgPSBOVUxMOyAvKiBkb24ndCBmcmVlIHRoaXMgd2Ugc3RpbGwgbmVlZCBpdCAqLwotCV9fZnJlZV9kb21haW5fYWxsb2NzKCZkLCBzYV90bXBtYXNrLCBjcHVfbWFwKTsKLQlyZXR1cm4gMDsKLQorCXJldCA9IDA7CiBlcnJvcjoKIAlfX2ZyZWVfZG9tYWluX2FsbG9jcygmZCwgYWxsb2Nfc3RhdGUsIGNwdV9tYXApOwotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgaW50IGJ1aWxkX3NjaGVkX2RvbWFpbnMoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdV9tYXApCi17Ci0JcmV0dXJuIF9fYnVpbGRfc2NoZWRfZG9tYWlucyhjcHVfbWFwLCBOVUxMKTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgY3B1bWFza192YXJfdCAqZG9tc19jdXI7CS8qIGN1cnJlbnQgc2NoZWQgZG9tYWlucyAqLwpAQCAtNzY3MCw3ICs3MzYyLDcgQEAKICAqIEZvciBub3cgdGhpcyBqdXN0IGV4Y2x1ZGVzIGlzb2xhdGVkIGNwdXMsIGJ1dCBjb3VsZCBiZSB1c2VkIHRvCiAgKiBleGNsdWRlIG90aGVyIHNwZWNpYWwgY2FzZXMgaW4gdGhlIGZ1dHVyZS4KICAqLwotc3RhdGljIGludCBhcmNoX2luaXRfc2NoZWRfZG9tYWlucyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCkKK3N0YXRpYyBpbnQgaW5pdF9zY2hlZF9kb21haW5zKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVfbWFwKQogewogCWludCBlcnI7CiAKQEAgLTc2ODEsMzIgKzczNzMsMjQgQEAKIAkJZG9tc19jdXIgPSAmZmFsbGJhY2tfZG9tczsKIAljcHVtYXNrX2FuZG5vdChkb21zX2N1clswXSwgY3B1X21hcCwgY3B1X2lzb2xhdGVkX21hcCk7CiAJZGF0dHJfY3VyID0gTlVMTDsKLQllcnIgPSBidWlsZF9zY2hlZF9kb21haW5zKGRvbXNfY3VyWzBdKTsKKwllcnIgPSBidWlsZF9zY2hlZF9kb21haW5zKGRvbXNfY3VyWzBdLCBOVUxMKTsKIAlyZWdpc3Rlcl9zY2hlZF9kb21haW5fc3lzY3RsKCk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBhcmNoX2Rlc3Ryb3lfc2NoZWRfZG9tYWlucyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCwKLQkJCQkgICAgICAgc3RydWN0IGNwdW1hc2sgKnRtcG1hc2spCi17Ci0JZnJlZV9zY2hlZF9ncm91cHMoY3B1X21hcCwgdG1wbWFzayk7Ci19Ci0KIC8qCiAgKiBEZXRhY2ggc2NoZWQgZG9tYWlucyBmcm9tIGEgZ3JvdXAgb2YgY3B1cyBzcGVjaWZpZWQgaW4gY3B1X21hcAogICogVGhlc2UgY3B1cyB3aWxsIG5vdyBiZSBhdHRhY2hlZCB0byB0aGUgTlVMTCBkb21haW4KICAqLwogc3RhdGljIHZvaWQgZGV0YWNoX2Rlc3Ryb3lfZG9tYWlucyhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqY3B1X21hcCkKIHsKLQkvKiBTYXZlIGJlY2F1c2UgaG90cGx1ZyBsb2NrIGhlbGQuICovCi0Jc3RhdGljIERFQ0xBUkVfQklUTUFQKHRtcG1hc2ssIENPTkZJR19OUl9DUFVTKTsKIAlpbnQgaTsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9jcHUoaSwgY3B1X21hcCkKIAkJY3B1X2F0dGFjaF9kb21haW4oTlVMTCwgJmRlZl9yb290X2RvbWFpbiwgaSk7Ci0Jc3luY2hyb25pemVfc2NoZWQoKTsKLQlhcmNoX2Rlc3Ryb3lfc2NoZWRfZG9tYWlucyhjcHVfbWFwLCB0b19jcHVtYXNrKHRtcG1hc2spKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogLyogaGFuZGxlIG51bGwgYXMgImRlZmF1bHQiICovCkBAIC03Nzk1LDggKzc0NzksNyBAQAogCQkJCWdvdG8gbWF0Y2gyOwogCQl9CiAJCS8qIG5vIG1hdGNoIC0gYWRkIGEgbmV3IGRvbXNfbmV3ICovCi0JCV9fYnVpbGRfc2NoZWRfZG9tYWlucyhkb21zX25ld1tpXSwKLQkJCQkJZGF0dHJfbmV3ID8gZGF0dHJfbmV3ICsgaSA6IE5VTEwpOworCQlidWlsZF9zY2hlZF9kb21haW5zKGRvbXNfbmV3W2ldLCBkYXR0cl9uZXcgPyBkYXR0cl9uZXcgKyBpIDogTlVMTCk7CiBtYXRjaDI6CiAJCTsKIAl9CkBAIC03ODE1LDcgKzc0OTgsNyBAQAogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKLXN0YXRpYyB2b2lkIGFyY2hfcmVpbml0X3NjaGVkX2RvbWFpbnModm9pZCkKK3N0YXRpYyB2b2lkIHJlaW5pdF9zY2hlZF9kb21haW5zKHZvaWQpCiB7CiAJZ2V0X29ubGluZV9jcHVzKCk7CiAKQEAgLTc4NDgsNyArNzUzMSw3IEBACiAJZWxzZQogCQlzY2hlZF9tY19wb3dlcl9zYXZpbmdzID0gbGV2ZWw7CiAKLQlhcmNoX3JlaW5pdF9zY2hlZF9kb21haW5zKCk7CisJcmVpbml0X3NjaGVkX2RvbWFpbnMoKTsKIAogCXJldHVybiBjb3VudDsKIH0KQEAgLTc5NjcsMTQgKzc2NTAsOSBAQAogCWFsbG9jX2NwdW1hc2tfdmFyKCZub25faXNvbGF0ZWRfY3B1cywgR0ZQX0tFUk5FTCk7CiAJYWxsb2NfY3B1bWFza192YXIoJmZhbGxiYWNrX2RvbXMsIEdGUF9LRVJORUwpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTlVNQSkKLQlzY2hlZF9ncm91cF9ub2Rlc19ieWNwdSA9IGt6YWxsb2MobnJfY3B1X2lkcyAqIHNpemVvZih2b2lkICoqKSwKLQkJCQkJCQkJR0ZQX0tFUk5FTCk7Ci0JQlVHX09OKHNjaGVkX2dyb3VwX25vZGVzX2J5Y3B1ID09IE5VTEwpOwotI2VuZGlmCiAJZ2V0X29ubGluZV9jcHVzKCk7CiAJbXV0ZXhfbG9jaygmc2NoZWRfZG9tYWluc19tdXRleCk7Ci0JYXJjaF9pbml0X3NjaGVkX2RvbWFpbnMoY3B1X2FjdGl2ZV9tYXNrKTsKKwlpbml0X3NjaGVkX2RvbWFpbnMoY3B1X2FjdGl2ZV9tYXNrKTsKIAljcHVtYXNrX2FuZG5vdChub25faXNvbGF0ZWRfY3B1cywgY3B1X3Bvc3NpYmxlX21hc2ssIGNwdV9pc29sYXRlZF9tYXApOwogCWlmIChjcHVtYXNrX2VtcHR5KG5vbl9pc29sYXRlZF9jcHVzKSkKIAkJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbm9uX2lzb2xhdGVkX2NwdXMpOwpAQCAtODI4MSw2ICs3OTU5LDcgQEAKIAkvKiBBbGxvY2F0ZSB0aGUgbm9oel9jcHVfbWFzayBpZiBDT05GSUdfQ1BVTUFTS19PRkZTVEFDSyAqLwogCXphbGxvY19jcHVtYXNrX3Zhcigmbm9oel9jcHVfbWFzaywgR0ZQX05PV0FJVCk7CiAjaWZkZWYgQ09ORklHX1NNUAorCXphbGxvY19jcHVtYXNrX3Zhcigmc2NoZWRfZG9tYWluc190bXBtYXNrLCBHRlBfTk9XQUlUKTsKICNpZmRlZiBDT05GSUdfTk9fSFoKIAl6YWxsb2NfY3B1bWFza192YXIoJm5vaHouaWRsZV9jcHVzX21hc2ssIEdGUF9OT1dBSVQpOwogCWFsbG9jX2NwdW1hc2tfdmFyKCZub2h6LmdycF9pZGxlX21hc2ssIEdGUF9OT1dBSVQpOwpAQCAtODM0MCw3ICs4MDE5LDcgQEAKIAlpbnQgb2xkX3ByaW8gPSBwLT5wcmlvOwogCWludCBvbl9ycTsKIAotCW9uX3JxID0gcC0+c2Uub25fcnE7CisJb25fcnEgPSBwLT5vbl9ycTsKIAlpZiAob25fcnEpCiAJCWRlYWN0aXZhdGVfdGFzayhycSwgcCwgMCk7CiAJX19zZXRzY2hlZHVsZXIocnEsIHAsIFNDSEVEX05PUk1BTCwgMCk7CkBAIC04NTUzLDcgKzgyMzIsNiBAQAogewogCXN0cnVjdCBydF9ycSAqcnRfcnE7CiAJc3RydWN0IHNjaGVkX3J0X2VudGl0eSAqcnRfc2U7Ci0Jc3RydWN0IHJxICpycTsKIAlpbnQgaTsKIAogCXRnLT5ydF9ycSA9IGt6YWxsb2Moc2l6ZW9mKHJ0X3JxKSAqIG5yX2NwdV9pZHMsIEdGUF9LRVJORUwpOwpAQCAtODU2Nyw4ICs4MjQ1LDYgQEAKIAkJCWt0aW1lX3RvX25zKGRlZl9ydF9iYW5kd2lkdGgucnRfcGVyaW9kKSwgMCk7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkgewotCQlycSA9IGNwdV9ycShpKTsKLQogCQlydF9ycSA9IGt6YWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IHJ0X3JxKSwKIAkJCQkgICAgIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGkpKTsKIAkJaWYgKCFydF9ycSkKQEAgLTg2ODMsNyArODM1OSw3IEBACiAJcnEgPSB0YXNrX3JxX2xvY2sodHNrLCAmZmxhZ3MpOwogCiAJcnVubmluZyA9IHRhc2tfY3VycmVudChycSwgdHNrKTsKLQlvbl9ycSA9IHRzay0+c2Uub25fcnE7CisJb25fcnEgPSB0c2stPm9uX3JxOwogCiAJaWYgKG9uX3JxKQogCQlkZXF1ZXVlX3Rhc2socnEsIHRzaywgMCk7CkBAIC04NzAyLDcgKzgzNzgsNyBAQAogCWlmIChvbl9ycSkKIAkJZW5xdWV1ZV90YXNrKHJxLCB0c2ssIDApOwogCi0JdGFza19ycV91bmxvY2socnEsICZmbGFncyk7CisJdGFza19ycV91bmxvY2socnEsIHRzaywgJmZsYWdzKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfQ0dST1VQX1NDSEVEICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9kZWJ1Zy5jIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKaW5kZXggN2JhY2Q4My4uYTY3MTBhMSAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2RlYnVnLmMKKysrIGIva2VybmVsL3NjaGVkX2RlYnVnLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCXJlYWRfbG9ja19pcnFzYXZlKCZ0YXNrbGlzdF9sb2NrLCBmbGFncyk7CiAKIAlkb19lYWNoX3RocmVhZChnLCBwKSB7Ci0JCWlmICghcC0+c2Uub25fcnEgfHwgdGFza19jcHUocCkgIT0gcnFfY3B1KQorCQlpZiAoIXAtPm9uX3JxIHx8IHRhc2tfY3B1KHApICE9IHJxX2NwdSkKIAkJCWNvbnRpbnVlOwogCiAJCXByaW50X3Rhc2sobSwgcnEsIHApOwpAQCAtMjk2LDkgKzI5Niw2IEBACiAJUCh0dHd1X2NvdW50KTsKIAlQKHR0d3VfbG9jYWwpOwogCi0JU0VRX3ByaW50ZihtLCAiICAuJS0zMHM6ICVkXG4iLCAiYmtsX2NvdW50IiwKLQkJCQlycS0+cnFfc2NoZWRfaW5mby5ia2xfY291bnQpOwotCiAjdW5kZWYgUAogI3VuZGVmIFA2NAogI2VuZGlmCkBAIC00NDEsNyArNDM4LDYgQEAKIAlQKHNlLnN0YXRpc3RpY3Mud2FpdF9jb3VudCk7CiAJUE4oc2Uuc3RhdGlzdGljcy5pb3dhaXRfc3VtKTsKIAlQKHNlLnN0YXRpc3RpY3MuaW93YWl0X2NvdW50KTsKLQlQKHNjaGVkX2luZm8uYmtsX2NvdW50KTsKIAlQKHNlLm5yX21pZ3JhdGlvbnMpOwogCVAoc2Uuc3RhdGlzdGljcy5ucl9taWdyYXRpb25zX2NvbGQpOwogCVAoc2Uuc3RhdGlzdGljcy5ucl9mYWlsZWRfbWlncmF0aW9uc19hZmZpbmUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZhaXIuYyBiL2tlcm5lbC9zY2hlZF9mYWlyLmMKaW5kZXggNmZhODMzYS4uMzdmMjI2MiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZhaXIuYworKysgYi9rZXJuZWwvc2NoZWRfZmFpci5jCkBAIC0zNTgsNiArMzU4LDEwIEBACiAJfQogCiAJY2ZzX3JxLT5taW5fdnJ1bnRpbWUgPSBtYXhfdnJ1bnRpbWUoY2ZzX3JxLT5taW5fdnJ1bnRpbWUsIHZydW50aW1lKTsKKyNpZm5kZWYgQ09ORklHXzY0QklUCisJc21wX3dtYigpOworCWNmc19ycS0+bWluX3ZydW50aW1lX2NvcHkgPSBjZnNfcnEtPm1pbl92cnVudGltZTsKKyNlbmRpZgogfQogCiAvKgpAQCAtMTM0MCw2ICsxMzQ0LDggQEAKIAlocnRpY2tfdXBkYXRlKHJxKTsKIH0KIAorc3RhdGljIHZvaWQgc2V0X25leHRfYnVkZHkoc3RydWN0IHNjaGVkX2VudGl0eSAqc2UpOworCiAvKgogICogVGhlIGRlcXVldWVfdGFzayBtZXRob2QgaXMgY2FsbGVkIGJlZm9yZSBucl9ydW5uaW5nIGlzCiAgKiBkZWNyZWFzZWQuIFdlIHJlbW92ZSB0aGUgdGFzayBmcm9tIHRoZSByYnRyZWUgYW5kCkBAIC0xMzQ5LDE0ICsxMzU1LDIyIEBACiB7CiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxOwogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJnAtPnNlOworCWludCB0YXNrX3NsZWVwID0gZmxhZ3MgJiBERVFVRVVFX1NMRUVQOwogCiAJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKSB7CiAJCWNmc19ycSA9IGNmc19ycV9vZihzZSk7CiAJCWRlcXVldWVfZW50aXR5KGNmc19ycSwgc2UsIGZsYWdzKTsKIAogCQkvKiBEb24ndCBkZXF1ZXVlIHBhcmVudCBpZiBpdCBoYXMgb3RoZXIgZW50aXRpZXMgYmVzaWRlcyB1cyAqLwotCQlpZiAoY2ZzX3JxLT5sb2FkLndlaWdodCkKKwkJaWYgKGNmc19ycS0+bG9hZC53ZWlnaHQpIHsKKwkJCS8qCisJCQkgKiBCaWFzIHBpY2tfbmV4dCB0byBwaWNrIGEgdGFzayBmcm9tIHRoaXMgY2ZzX3JxLCBhcworCQkJICogcCBpcyBzbGVlcGluZyB3aGVuIGl0IGlzIHdpdGhpbiBpdHMgc2NoZWRfc2xpY2UuCisJCQkgKi8KKwkJCWlmICh0YXNrX3NsZWVwICYmIHBhcmVudF9lbnRpdHkoc2UpKQorCQkJCXNldF9uZXh0X2J1ZGR5KHBhcmVudF9lbnRpdHkoc2UpKTsKIAkJCWJyZWFrOworCQl9CiAJCWZsYWdzIHw9IERFUVVFVUVfU0xFRVA7CiAJfQogCkBAIC0xMzcyLDEyICsxMzg2LDI1IEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAKLXN0YXRpYyB2b2lkIHRhc2tfd2FraW5nX2ZhaXIoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQorc3RhdGljIHZvaWQgdGFza193YWtpbmdfZmFpcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7CiAJc3RydWN0IHNjaGVkX2VudGl0eSAqc2UgPSAmcC0+c2U7CiAJc3RydWN0IGNmc19ycSAqY2ZzX3JxID0gY2ZzX3JxX29mKHNlKTsKKwl1NjQgbWluX3ZydW50aW1lOwogCi0Jc2UtPnZydW50aW1lIC09IGNmc19ycS0+bWluX3ZydW50aW1lOworI2lmbmRlZiBDT05GSUdfNjRCSVQKKwl1NjQgbWluX3ZydW50aW1lX2NvcHk7CisKKwlkbyB7CisJCW1pbl92cnVudGltZV9jb3B5ID0gY2ZzX3JxLT5taW5fdnJ1bnRpbWVfY29weTsKKwkJc21wX3JtYigpOworCQltaW5fdnJ1bnRpbWUgPSBjZnNfcnEtPm1pbl92cnVudGltZTsKKwl9IHdoaWxlIChtaW5fdnJ1bnRpbWUgIT0gbWluX3ZydW50aW1lX2NvcHkpOworI2Vsc2UKKwltaW5fdnJ1bnRpbWUgPSBjZnNfcnEtPm1pbl92cnVudGltZTsKKyNlbmRpZgorCisJc2UtPnZydW50aW1lIC09IG1pbl92cnVudGltZTsKIH0KIAogI2lmZGVmIENPTkZJR19GQUlSX0dST1VQX1NDSEVECkBAIC0xNjIyLDYgKzE2NDksNyBAQAogCS8qCiAJICogT3RoZXJ3aXNlLCBpdGVyYXRlIHRoZSBkb21haW5zIGFuZCBmaW5kIGFuIGVsZWdpYmxlIGlkbGUgY3B1LgogCSAqLworCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9kb21haW4odGFyZ2V0LCBzZCkgewogCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9TSEFSRV9QS0dfUkVTT1VSQ0VTKSkKIAkJCWJyZWFrOwpAQCAtMTY0MSw2ICsxNjY5LDcgQEAKIAkJICAgIGNwdW1hc2tfdGVzdF9jcHUocHJldl9jcHUsIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkpCiAJCQlicmVhazsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm4gdGFyZ2V0OwogfQpAQCAtMTY1Nyw3ICsxNjg2LDcgQEAKICAqIHByZWVtcHQgbXVzdCBiZSBkaXNhYmxlZC4KICAqLwogc3RhdGljIGludAotc2VsZWN0X3Rhc2tfcnFfZmFpcihzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzZF9mbGFnLCBpbnQgd2FrZV9mbGFncykKK3NlbGVjdF90YXNrX3JxX2ZhaXIoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2RfZmxhZywgaW50IHdha2VfZmxhZ3MpCiB7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqdG1wLCAqYWZmaW5lX3NkID0gTlVMTCwgKnNkID0gTlVMTDsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwpAQCAtMTY3Myw2ICsxNzAyLDcgQEAKIAkJbmV3X2NwdSA9IHByZXZfY3B1OwogCX0KIAorCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9kb21haW4oY3B1LCB0bXApIHsKIAkJaWYgKCEodG1wLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkpCiAJCQljb250aW51ZTsKQEAgLTE3MjMsOSArMTc1MywxMCBAQAogCiAJaWYgKGFmZmluZV9zZCkgewogCQlpZiAoY3B1ID09IHByZXZfY3B1IHx8IHdha2VfYWZmaW5lKGFmZmluZV9zZCwgcCwgc3luYykpCi0JCQlyZXR1cm4gc2VsZWN0X2lkbGVfc2libGluZyhwLCBjcHUpOwotCQllbHNlCi0JCQlyZXR1cm4gc2VsZWN0X2lkbGVfc2libGluZyhwLCBwcmV2X2NwdSk7CisJCQlwcmV2X2NwdSA9IGNwdTsKKworCQluZXdfY3B1ID0gc2VsZWN0X2lkbGVfc2libGluZyhwLCBwcmV2X2NwdSk7CisJCWdvdG8gdW5sb2NrOwogCX0KIAogCXdoaWxlIChzZCkgewpAQCAtMTc2Niw2ICsxNzk3LDggQEAKIAkJfQogCQkvKiB3aGlsZSBsb29wIHdpbGwgYnJlYWsgaGVyZSBpZiBzZCA9PSBOVUxMICovCiAJfQordW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIG5ld19jcHU7CiB9CkBAIC0xNzg5LDEwICsxODIyLDcgQEAKIAkgKiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBidWRkaWVzIHdoZW4gdGhlIGxlZnRtb3N0CiAJICogdGFzayBpcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0aGUgYnVkZHkuCiAJICovCi0JaWYgKHVubGlrZWx5KHNlLT5sb2FkLndlaWdodCAhPSBOSUNFXzBfTE9BRCkpCi0JCWdyYW4gPSBjYWxjX2RlbHRhX2ZhaXIoZ3Jhbiwgc2UpOwotCi0JcmV0dXJuIGdyYW47CisJcmV0dXJuIGNhbGNfZGVsdGFfZmFpcihncmFuLCBzZSk7CiB9CiAKIC8qCkBAIC0xODI2LDI2ICsxODU2LDI2IEBACiAKIHN0YXRpYyB2b2lkIHNldF9sYXN0X2J1ZGR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewotCWlmIChsaWtlbHkodGFza19vZihzZSktPnBvbGljeSAhPSBTQ0hFRF9JRExFKSkgewotCQlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpCi0JCQljZnNfcnFfb2Yoc2UpLT5sYXN0ID0gc2U7Ci0JfQorCWlmIChlbnRpdHlfaXNfdGFzayhzZSkgJiYgdW5saWtlbHkodGFza19vZihzZSktPnBvbGljeSA9PSBTQ0hFRF9JRExFKSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKQorCQljZnNfcnFfb2Yoc2UpLT5sYXN0ID0gc2U7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9uZXh0X2J1ZGR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewotCWlmIChsaWtlbHkodGFza19vZihzZSktPnBvbGljeSAhPSBTQ0hFRF9JRExFKSkgewotCQlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpCi0JCQljZnNfcnFfb2Yoc2UpLT5uZXh0ID0gc2U7Ci0JfQorCWlmIChlbnRpdHlfaXNfdGFzayhzZSkgJiYgdW5saWtlbHkodGFza19vZihzZSktPnBvbGljeSA9PSBTQ0hFRF9JRExFKSkKKwkJcmV0dXJuOworCisJZm9yX2VhY2hfc2NoZWRfZW50aXR5KHNlKQorCQljZnNfcnFfb2Yoc2UpLT5uZXh0ID0gc2U7CiB9CiAKIHN0YXRpYyB2b2lkIHNldF9za2lwX2J1ZGR5KHN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlKQogewotCWlmIChsaWtlbHkodGFza19vZihzZSktPnBvbGljeSAhPSBTQ0hFRF9JRExFKSkgewotCQlmb3JfZWFjaF9zY2hlZF9lbnRpdHkoc2UpCi0JCQljZnNfcnFfb2Yoc2UpLT5za2lwID0gc2U7Ci0JfQorCWZvcl9lYWNoX3NjaGVkX2VudGl0eShzZSkKKwkJY2ZzX3JxX29mKHNlKS0+c2tpcCA9IHNlOwogfQogCiAvKgpAQCAtMTg1NywxMiArMTg4NywxNSBAQAogCXN0cnVjdCBzY2hlZF9lbnRpdHkgKnNlID0gJmN1cnItPnNlLCAqcHNlID0gJnAtPnNlOwogCXN0cnVjdCBjZnNfcnEgKmNmc19ycSA9IHRhc2tfY2ZzX3JxKGN1cnIpOwogCWludCBzY2FsZSA9IGNmc19ycS0+bnJfcnVubmluZyA+PSBzY2hlZF9ucl9sYXRlbmN5OworCWludCBuZXh0X2J1ZGR5X21hcmtlZCA9IDA7CiAKIAlpZiAodW5saWtlbHkoc2UgPT0gcHNlKSkKIAkJcmV0dXJuOwogCi0JaWYgKHNjaGVkX2ZlYXQoTkVYVF9CVUREWSkgJiYgc2NhbGUgJiYgISh3YWtlX2ZsYWdzICYgV0ZfRk9SSykpCisJaWYgKHNjaGVkX2ZlYXQoTkVYVF9CVUREWSkgJiYgc2NhbGUgJiYgISh3YWtlX2ZsYWdzICYgV0ZfRk9SSykpIHsKIAkJc2V0X25leHRfYnVkZHkocHNlKTsKKwkJbmV4dF9idWRkeV9tYXJrZWQgPSAxOworCX0KIAogCS8qCiAJICogV2UgY2FuIGNvbWUgaGVyZSB3aXRoIFRJRl9ORUVEX1JFU0NIRUQgYWxyZWFkeSBzZXQgZnJvbSBuZXcgdGFzawpAQCAtMTg5MCw4ICsxOTIzLDE1IEBACiAJdXBkYXRlX2N1cnIoY2ZzX3JxKTsKIAlmaW5kX21hdGNoaW5nX3NlKCZzZSwgJnBzZSk7CiAJQlVHX09OKCFwc2UpOwotCWlmICh3YWtldXBfcHJlZW1wdF9lbnRpdHkoc2UsIHBzZSkgPT0gMSkKKwlpZiAod2FrZXVwX3ByZWVtcHRfZW50aXR5KHNlLCBwc2UpID09IDEpIHsKKwkJLyoKKwkJICogQmlhcyBwaWNrX25leHQgdG8gcGljayB0aGUgc2NoZWQgZW50aXR5IHRoYXQgaXMKKwkJICogdHJpZ2dlcmluZyB0aGlzIHByZWVtcHRpb24uCisJCSAqLworCQlpZiAoIW5leHRfYnVkZHlfbWFya2VkKQorCQkJc2V0X25leHRfYnVkZHkocHNlKTsKIAkJZ290byBwcmVlbXB0OworCX0KIAogCXJldHVybjsKIApAQCAtMjEwMiw3ICsyMTQyLDcgQEAKIGJhbGFuY2VfdGFza3Moc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKIAkgICAgICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLAogCSAgICAgIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLCBpbnQgKmFsbF9waW5uZWQsCi0JICAgICAgaW50ICp0aGlzX2Jlc3RfcHJpbywgc3RydWN0IGNmc19ycSAqYnVzaWVzdF9jZnNfcnEpCisJICAgICAgc3RydWN0IGNmc19ycSAqYnVzaWVzdF9jZnNfcnEpCiB7CiAJaW50IGxvb3BzID0gMCwgcHVsbGVkID0gMDsKIAlsb25nIHJlbV9sb2FkX21vdmUgPSBtYXhfbG9hZF9tb3ZlOwpAQCAtMjE0MCw5ICsyMTgwLDYgQEAKIAkJICovCiAJCWlmIChyZW1fbG9hZF9tb3ZlIDw9IDApCiAJCQlicmVhazsKLQotCQlpZiAocC0+cHJpbyA8ICp0aGlzX2Jlc3RfcHJpbykKLQkJCSp0aGlzX2Jlc3RfcHJpbyA9IHAtPnByaW87CiAJfQogb3V0OgogCS8qCkBAIC0yMjAyLDcgKzIyMzksNyBAQAogbG9hZF9iYWxhbmNlX2ZhaXIoc3RydWN0IHJxICp0aGlzX3JxLCBpbnQgdGhpc19jcHUsIHN0cnVjdCBycSAqYnVzaWVzdCwKIAkJICB1bnNpZ25lZCBsb25nIG1heF9sb2FkX21vdmUsCiAJCSAgc3RydWN0IHNjaGVkX2RvbWFpbiAqc2QsIGVudW0gY3B1X2lkbGVfdHlwZSBpZGxlLAotCQkgIGludCAqYWxsX3Bpbm5lZCwgaW50ICp0aGlzX2Jlc3RfcHJpbykKKwkJICBpbnQgKmFsbF9waW5uZWQpCiB7CiAJbG9uZyByZW1fbG9hZF9tb3ZlID0gbWF4X2xvYWRfbW92ZTsKIAlpbnQgYnVzaWVzdF9jcHUgPSBjcHVfb2YoYnVzaWVzdCk7CkBAIC0yMjI3LDcgKzIyNjQsNyBAQAogCQlyZW1fbG9hZCA9IGRpdl91NjQocmVtX2xvYWQsIGJ1c2llc3RfaF9sb2FkICsgMSk7CiAKIAkJbW92ZWRfbG9hZCA9IGJhbGFuY2VfdGFza3ModGhpc19ycSwgdGhpc19jcHUsIGJ1c2llc3QsCi0JCQkJcmVtX2xvYWQsIHNkLCBpZGxlLCBhbGxfcGlubmVkLCB0aGlzX2Jlc3RfcHJpbywKKwkJCQlyZW1fbG9hZCwgc2QsIGlkbGUsIGFsbF9waW5uZWQsCiAJCQkJYnVzaWVzdF9jZnNfcnEpOwogCiAJCWlmICghbW92ZWRfbG9hZCkKQEAgLTIyNTMsMTEgKzIyOTAsMTEgQEAKIGxvYWRfYmFsYW5jZV9mYWlyKHN0cnVjdCBycSAqdGhpc19ycSwgaW50IHRoaXNfY3B1LCBzdHJ1Y3QgcnEgKmJ1c2llc3QsCiAJCSAgdW5zaWduZWQgbG9uZyBtYXhfbG9hZF9tb3ZlLAogCQkgIHN0cnVjdCBzY2hlZF9kb21haW4gKnNkLCBlbnVtIGNwdV9pZGxlX3R5cGUgaWRsZSwKLQkJICBpbnQgKmFsbF9waW5uZWQsIGludCAqdGhpc19iZXN0X3ByaW8pCisJCSAgaW50ICphbGxfcGlubmVkKQogewogCXJldHVybiBiYWxhbmNlX3Rhc2tzKHRoaXNfcnEsIHRoaXNfY3B1LCBidXNpZXN0LAogCQkJbWF4X2xvYWRfbW92ZSwgc2QsIGlkbGUsIGFsbF9waW5uZWQsCi0JCQl0aGlzX2Jlc3RfcHJpbywgJmJ1c2llc3QtPmNmcyk7CisJCQkmYnVzaWVzdC0+Y2ZzKTsKIH0KICNlbmRpZgogCkBAIC0yMjc0LDEyICsyMzExLDExIEBACiAJCSAgICAgIGludCAqYWxsX3Bpbm5lZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRvdGFsX2xvYWRfbW92ZWQgPSAwLCBsb2FkX21vdmVkOwotCWludCB0aGlzX2Jlc3RfcHJpbyA9IHRoaXNfcnEtPmN1cnItPnByaW87CiAKIAlkbyB7CiAJCWxvYWRfbW92ZWQgPSBsb2FkX2JhbGFuY2VfZmFpcih0aGlzX3JxLCB0aGlzX2NwdSwgYnVzaWVzdCwKIAkJCQltYXhfbG9hZF9tb3ZlIC0gdG90YWxfbG9hZF9tb3ZlZCwKLQkJCQlzZCwgaWRsZSwgYWxsX3Bpbm5lZCwgJnRoaXNfYmVzdF9wcmlvKTsKKwkJCQlzZCwgaWRsZSwgYWxsX3Bpbm5lZCk7CiAKIAkJdG90YWxfbG9hZF9tb3ZlZCArPSBsb2FkX21vdmVkOwogCkBAIC0yNjQ4LDcgKzI2ODQsNyBAQAogCS8qCiAJICogT25seSBzaWJsaW5ncyBjYW4gaGF2ZSBzaWduaWZpY2FudGx5IGxlc3MgdGhhbiBTQ0hFRF9MT0FEX1NDQUxFCiAJICovCi0JaWYgKHNkLT5sZXZlbCAhPSBTRF9MVl9TSUJMSU5HKQorCWlmICghKHNkLT5mbGFncyAmIFNEX1NIQVJFX0NQVVBPV0VSKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtMzQ2NSw2ICszNTAxLDcgQEAKIAlyYXdfc3Bpbl91bmxvY2soJnRoaXNfcnEtPmxvY2spOwogCiAJdXBkYXRlX3NoYXJlcyh0aGlzX2NwdSk7CisJcmN1X3JlYWRfbG9jaygpOwogCWZvcl9lYWNoX2RvbWFpbih0aGlzX2NwdSwgc2QpIHsKIAkJdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKIAkJaW50IGJhbGFuY2UgPSAxOwpAQCAtMzQ4Niw2ICszNTIzLDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmF3X3NwaW5fbG9jaygmdGhpc19ycS0+bG9jayk7CiAKQEAgLTM1MzQsNiArMzU3Miw3IEBACiAJZG91YmxlX2xvY2tfYmFsYW5jZShidXNpZXN0X3JxLCB0YXJnZXRfcnEpOwogCiAJLyogU2VhcmNoIGZvciBhbiBzZCBzcGFubmluZyB1cyBhbmQgdGhlIHRhcmdldCBDUFUuICovCisJcmN1X3JlYWRfbG9jaygpOwogCWZvcl9lYWNoX2RvbWFpbih0YXJnZXRfY3B1LCBzZCkgewogCQlpZiAoKHNkLT5mbGFncyAmIFNEX0xPQURfQkFMQU5DRSkgJiYKIAkJICAgIGNwdW1hc2tfdGVzdF9jcHUoYnVzaWVzdF9jcHUsIHNjaGVkX2RvbWFpbl9zcGFuKHNkKSkpCkBAIC0zNTQ5LDYgKzM1ODgsNyBAQAogCQllbHNlCiAJCQlzY2hlZHN0YXRfaW5jKHNkLCBhbGJfZmFpbGVkKTsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJZG91YmxlX3VubG9ja19iYWxhbmNlKGJ1c2llc3RfcnEsIHRhcmdldF9ycSk7CiBvdXRfdW5sb2NrOgogCWJ1c2llc3RfcnEtPmFjdGl2ZV9iYWxhbmNlID0gMDsKQEAgLTM2NzUsNiArMzcxNSw3IEBACiB7CiAJc3RydWN0IHNjaGVkX2RvbWFpbiAqc2Q7CiAJc3RydWN0IHNjaGVkX2dyb3VwICppbGJfZ3JvdXA7CisJaW50IGlsYiA9IG5yX2NwdV9pZHM7CiAKIAkvKgogCSAqIEhhdmUgaWRsZSBsb2FkIGJhbGFuY2VyIHNlbGVjdGlvbiBmcm9tIHNlbWktaWRsZSBwYWNrYWdlcyBvbmx5CkBAIC0zNjkwLDIwICszNzMxLDI1IEBACiAJaWYgKGNwdW1hc2tfd2VpZ2h0KG5vaHouaWRsZV9jcHVzX21hc2spIDwgMikKIAkJZ290byBvdXRfZG9uZTsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9mbGFnX2RvbWFpbihjcHUsIHNkLCBTRF9QT1dFUlNBVklOR1NfQkFMQU5DRSkgewogCQlpbGJfZ3JvdXAgPSBzZC0+Z3JvdXBzOwogCiAJCWRvIHsKLQkJCWlmIChpc19zZW1pX2lkbGVfZ3JvdXAoaWxiX2dyb3VwKSkKLQkJCQlyZXR1cm4gY3B1bWFza19maXJzdChub2h6LmdycF9pZGxlX21hc2spOworCQkJaWYgKGlzX3NlbWlfaWRsZV9ncm91cChpbGJfZ3JvdXApKSB7CisJCQkJaWxiID0gY3B1bWFza19maXJzdChub2h6LmdycF9pZGxlX21hc2spOworCQkJCWdvdG8gdW5sb2NrOworCQkJfQogCiAJCQlpbGJfZ3JvdXAgPSBpbGJfZ3JvdXAtPm5leHQ7CiAKIAkJfSB3aGlsZSAoaWxiX2dyb3VwICE9IHNkLT5ncm91cHMpOwogCX0KK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogb3V0X2RvbmU6Ci0JcmV0dXJuIG5yX2NwdV9pZHM7CisJcmV0dXJuIGlsYjsKIH0KICNlbHNlIC8qICAoQ09ORklHX1NDSEVEX01DIHx8IENPTkZJR19TQ0hFRF9TTVQpICovCiBzdGF0aWMgaW5saW5lIGludCBmaW5kX25ld19pbGIoaW50IGNhbGxfY3B1KQpAQCAtMzg0OCw2ICszODk0LDcgQEAKIAogCXVwZGF0ZV9zaGFyZXMoY3B1KTsKIAorCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfZWFjaF9kb21haW4oY3B1LCBzZCkgewogCQlpZiAoIShzZC0+ZmxhZ3MgJiBTRF9MT0FEX0JBTEFOQ0UpKQogCQkJY29udGludWU7CkBAIC0zODkzLDYgKzM5NDAsNyBAQAogCQlpZiAoIWJhbGFuY2UpCiAJCQlicmVhazsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKgogCSAqIG5leHRfYmFsYW5jZSB3aWxsIGJlIHVwZGF0ZWQgb25seSB3aGVuIHRoZXJlIGlzIGEgbmVlZC4KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9mZWF0dXJlcy5oIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKaW5kZXggNjhlNjlhYy4uYmU0MGY3MyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKKysrIGIva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmgKQEAgLTY0LDMgKzY0LDkgQEAKICAqIERlY3JlbWVudCBDUFUgcG93ZXIgYmFzZWQgb24gaXJxIGFjdGl2aXR5CiAgKi8KIFNDSEVEX0ZFQVQoTk9OSVJRX1BPV0VSLCAxKQorCisvKgorICogUXVldWUgcmVtb3RlIHdha2V1cHMgb24gdGhlIHRhcmdldCBDUFUgYW5kIHByb2Nlc3MgdGhlbQorICogdXNpbmcgdGhlIHNjaGVkdWxlciBJUEkuIFJlZHVjZXMgcnEtPmxvY2sgY29udGVudGlvbi9ib3VuY2VzLgorICovCitTQ0hFRF9GRUFUKFRUV1VfUVVFVUUsIDEpCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfaWRsZXRhc2suYyBiL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jCmluZGV4IGE3NzZhNjMuLjBhNTE4ODIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jCisrKyBiL2tlcm5lbC9zY2hlZF9pZGxldGFzay5jCkBAIC03LDcgKzcsNyBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogc3RhdGljIGludAotc2VsZWN0X3Rhc2tfcnFfaWRsZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBzZF9mbGFnLCBpbnQgZmxhZ3MpCitzZWxlY3RfdGFza19ycV9pZGxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWcsIGludCBmbGFncykKIHsKIAlyZXR1cm4gdGFza19jcHUocCk7IC8qIElETEUgdGFza3MgYXMgbmV2ZXIgbWlncmF0ZWQgKi8KIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggZTdjZWJkYy4uNjRiMmEzNyAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTE4Myw2ICsxODMsMTQgQEAKIAlyZXR1cm4ga3RpbWVfdG9fbnMocnRfcnEtPnRnLT5ydF9iYW5kd2lkdGgucnRfcGVyaW9kKTsKIH0KIAordHlwZWRlZiBzdHJ1Y3QgdGFza19ncm91cCAqcnRfcnFfaXRlcl90OworCisjZGVmaW5lIGZvcl9lYWNoX3J0X3JxKHJ0X3JxLCBpdGVyLCBycSkgXAorCWZvciAoaXRlciA9IGxpc3RfZW50cnlfcmN1KHRhc2tfZ3JvdXBzLm5leHQsIHR5cGVvZigqaXRlciksIGxpc3QpOyBcCisJICAgICAoJml0ZXItPmxpc3QgIT0gJnRhc2tfZ3JvdXBzKSAmJiBcCisJICAgICAocnRfcnEgPSBpdGVyLT5ydF9ycVtjcHVfb2YocnEpXSk7IFwKKwkgICAgIGl0ZXIgPSBsaXN0X2VudHJ5X3JjdShpdGVyLT5saXN0Lm5leHQsIHR5cGVvZigqaXRlciksIGxpc3QpKQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbGlzdF9hZGRfbGVhZl9ydF9ycShzdHJ1Y3QgcnRfcnEgKnJ0X3JxKQogewogCWxpc3RfYWRkX3JjdSgmcnRfcnEtPmxlYWZfcnRfcnFfbGlzdCwKQEAgLTI4OCw2ICsyOTYsMTEgQEAKIAlyZXR1cm4ga3RpbWVfdG9fbnMoZGVmX3J0X2JhbmR3aWR0aC5ydF9wZXJpb2QpOwogfQogCit0eXBlZGVmIHN0cnVjdCBydF9ycSAqcnRfcnFfaXRlcl90OworCisjZGVmaW5lIGZvcl9lYWNoX3J0X3JxKHJ0X3JxLCBpdGVyLCBycSkgXAorCWZvciAoKHZvaWQpIGl0ZXIsIHJ0X3JxID0gJnJxLT5ydDsgcnRfcnE7IHJ0X3JxID0gTlVMTCkKKwogc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkX2xlYWZfcnRfcnEoc3RydWN0IHJ0X3JxICpydF9ycSkKIHsKIH0KQEAgLTQwMiwxMiArNDE1LDEzIEBACiBzdGF0aWMgdm9pZCBfX2Rpc2FibGVfcnVudGltZShzdHJ1Y3QgcnEgKnJxKQogewogCXN0cnVjdCByb290X2RvbWFpbiAqcmQgPSBycS0+cmQ7CisJcnRfcnFfaXRlcl90IGl0ZXI7CiAJc3RydWN0IHJ0X3JxICpydF9ycTsKIAogCWlmICh1bmxpa2VseSghc2NoZWR1bGVyX3J1bm5pbmcpKQogCQlyZXR1cm47CiAKLQlmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBycSkgeworCWZvcl9lYWNoX3J0X3JxKHJ0X3JxLCBpdGVyLCBycSkgewogCQlzdHJ1Y3QgcnRfYmFuZHdpZHRoICpydF9iID0gc2NoZWRfcnRfYmFuZHdpZHRoKHJ0X3JxKTsKIAkJczY0IHdhbnQ7CiAJCWludCBpOwpAQCAtNDg3LDYgKzUwMSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZW5hYmxlX3J1bnRpbWUoc3RydWN0IHJxICpycSkKIHsKKwlydF9ycV9pdGVyX3QgaXRlcjsKIAlzdHJ1Y3QgcnRfcnEgKnJ0X3JxOwogCiAJaWYgKHVubGlrZWx5KCFzY2hlZHVsZXJfcnVubmluZykpCkBAIC00OTUsNyArNTEwLDcgQEAKIAkvKgogCSAqIFJlc2V0IGVhY2ggcnVucXVldWUncyBiYW5kd2lkdGggc2V0dGluZ3MKIAkgKi8KLQlmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBycSkgeworCWZvcl9lYWNoX3J0X3JxKHJ0X3JxLCBpdGVyLCBycSkgewogCQlzdHJ1Y3QgcnRfYmFuZHdpZHRoICpydF9iID0gc2NoZWRfcnRfYmFuZHdpZHRoKHJ0X3JxKTsKIAogCQlyYXdfc3Bpbl9sb2NrKCZydF9iLT5ydF9ydW50aW1lX2xvY2spOwpAQCAtNTYyLDYgKzU3NywxMyBAQAogCQkJaWYgKHJ0X3JxLT5ydF90aHJvdHRsZWQgJiYgcnRfcnEtPnJ0X3RpbWUgPCBydW50aW1lKSB7CiAJCQkJcnRfcnEtPnJ0X3Rocm90dGxlZCA9IDA7CiAJCQkJZW5xdWV1ZSA9IDE7CisKKwkJCQkvKgorCQkJCSAqIEZvcmNlIGEgY2xvY2sgdXBkYXRlIGlmIHRoZSBDUFUgd2FzIGlkbGUsCisJCQkJICogbGVzdCB3YWtldXAgLT4gdW50aHJvdHRsZSB0aW1lIGFjY3VtdWxhdGUuCisJCQkJICovCisJCQkJaWYgKHJ0X3JxLT5ydF9ucl9ydW5uaW5nICYmIHJxLT5jdXJyID09IHJxLT5pZGxlKQorCQkJCQlycS0+c2tpcF9jbG9ja191cGRhdGUgPSAtMTsKIAkJCX0KIAkJCWlmIChydF9ycS0+cnRfdGltZSB8fCBydF9ycS0+cnRfbnJfcnVubmluZykKIAkJCQlpZGxlID0gMDsKQEAgLTk3NywxMyArOTk5LDIzIEBACiBzdGF0aWMgaW50IGZpbmRfbG93ZXN0X3JxKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7CiAKIHN0YXRpYyBpbnQKLXNlbGVjdF90YXNrX3JxX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWcsIGludCBmbGFncykKK3NlbGVjdF90YXNrX3JxX3J0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHNkX2ZsYWcsIGludCBmbGFncykKIHsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnI7CisJc3RydWN0IHJxICpycTsKKwlpbnQgY3B1OworCiAJaWYgKHNkX2ZsYWcgIT0gU0RfQkFMQU5DRV9XQUtFKQogCQlyZXR1cm4gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCisJY3B1ID0gdGFza19jcHUocCk7CisJcnEgPSBjcHVfcnEoY3B1KTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwljdXJyID0gQUNDRVNTX09OQ0UocnEtPmN1cnIpOyAvKiB1bmxvY2tlZCBhY2Nlc3MgKi8KKwogCS8qCi0JICogSWYgdGhlIGN1cnJlbnQgdGFzayBpcyBhbiBSVCB0YXNrLCB0aGVuCisJICogSWYgdGhlIGN1cnJlbnQgdGFzayBvbiBAcCdzIHJ1bnF1ZXVlIGlzIGFuIFJUIHRhc2ssIHRoZW4KIAkgKiB0cnkgdG8gc2VlIGlmIHdlIGNhbiB3YWtlIHRoaXMgUlQgdGFzayB1cCBvbiBhbm90aGVyCiAJICogcnVucXVldWUuIE90aGVyd2lzZSBzaW1wbHkgc3RhcnQgdGhpcyBSVCB0YXNrCiAJICogb24gaXRzIGN1cnJlbnQgcnVucXVldWUuCkBAIC05OTcsMjEgKzEwMjksMjUgQEAKIAkgKiBsb2NrPwogCSAqCiAJICogRm9yIGVxdWFsIHByaW8gdGFza3MsIHdlIGp1c3QgbGV0IHRoZSBzY2hlZHVsZXIgc29ydCBpdCBvdXQuCi0JICovCi0JaWYgKHVubGlrZWx5KHJ0X3Rhc2socnEtPmN1cnIpKSAmJgotCSAgICAocnEtPmN1cnItPnJ0Lm5yX2NwdXNfYWxsb3dlZCA8IDIgfHwKLQkgICAgIHJxLT5jdXJyLT5wcmlvIDwgcC0+cHJpbykgJiYKLQkgICAgKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpKSB7Ci0JCWludCBjcHUgPSBmaW5kX2xvd2VzdF9ycShwKTsKLQotCQlyZXR1cm4gKGNwdSA9PSAtMSkgPyB0YXNrX2NwdShwKSA6IGNwdTsKLQl9Ci0KLQkvKgorCSAqCiAJICogT3RoZXJ3aXNlLCBqdXN0IGxldCBpdCByaWRlIG9uIHRoZSBhZmZpbmVkIFJRIGFuZCB0aGUKIAkgKiBwb3N0LXNjaGVkdWxlIHJvdXRlciB3aWxsIHB1c2ggdGhlIHByZWVtcHRlZCB0YXNrIGF3YXkKKwkgKgorCSAqIFRoaXMgdGVzdCBpcyBvcHRpbWlzdGljLCBpZiB3ZSBnZXQgaXQgd3JvbmcgdGhlIGxvYWQtYmFsYW5jZXIKKwkgKiB3aWxsIGhhdmUgdG8gc29ydCBpdCBvdXQuCiAJICovCi0JcmV0dXJuIHRhc2tfY3B1KHApOworCWlmIChjdXJyICYmIHVubGlrZWx5KHJ0X3Rhc2soY3VycikpICYmCisJICAgIChjdXJyLT5ydC5ucl9jcHVzX2FsbG93ZWQgPCAyIHx8CisJICAgICBjdXJyLT5wcmlvIDwgcC0+cHJpbykgJiYKKwkgICAgKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA+IDEpKSB7CisJCWludCB0YXJnZXQgPSBmaW5kX2xvd2VzdF9ycShwKTsKKworCQlpZiAodGFyZ2V0ICE9IC0xKQorCQkJY3B1ID0gdGFyZ2V0OworCX0KKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBjcHU7CiB9CiAKIHN0YXRpYyB2b2lkIGNoZWNrX3ByZWVtcHRfZXF1YWxfcHJpbyhzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCkBAIC0xMTM2LDcgKzExNzIsNyBAQAogCSAqIFRoZSBwcmV2aW91cyB0YXNrIG5lZWRzIHRvIGJlIG1hZGUgZWxpZ2libGUgZm9yIHB1c2hpbmcKIAkgKiBpZiBpdCBpcyBzdGlsbCBhY3RpdmUKIAkgKi8KLQlpZiAocC0+c2Uub25fcnEgJiYgcC0+cnQubnJfY3B1c19hbGxvd2VkID4gMSkKKwlpZiAob25fcnRfcnEoJnAtPnJ0KSAmJiBwLT5ydC5ucl9jcHVzX2FsbG93ZWQgPiAxKQogCQllbnF1ZXVlX3B1c2hhYmxlX3Rhc2socnEsIHApOwogfQogCkBAIC0xMjg3LDcgKzEzMjMsNyBAQAogCQkJCSAgICAgIWNwdW1hc2tfdGVzdF9jcHUobG93ZXN0X3JxLT5jcHUsCiAJCQkJCQkgICAgICAgJnRhc2stPmNwdXNfYWxsb3dlZCkgfHwKIAkJCQkgICAgIHRhc2tfcnVubmluZyhycSwgdGFzaykgfHwKLQkJCQkgICAgICF0YXNrLT5zZS5vbl9ycSkpIHsKKwkJCQkgICAgICF0YXNrLT5vbl9ycSkpIHsKIAogCQkJCXJhd19zcGluX3VubG9jaygmbG93ZXN0X3JxLT5sb2NrKTsKIAkJCQlsb3dlc3RfcnEgPSBOVUxMOwpAQCAtMTMyMSw3ICsxMzU3LDcgQEAKIAlCVUdfT04odGFza19jdXJyZW50KHJxLCBwKSk7CiAJQlVHX09OKHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCA8PSAxKTsKIAotCUJVR19PTighcC0+c2Uub25fcnEpOworCUJVR19PTighcC0+b25fcnEpOwogCUJVR19PTighcnRfdGFzayhwKSk7CiAKIAlyZXR1cm4gcDsKQEAgLTE0NjcsNyArMTUwMyw3IEBACiAJCSAqLwogCQlpZiAocCAmJiAocC0+cHJpbyA8IHRoaXNfcnEtPnJ0LmhpZ2hlc3RfcHJpby5jdXJyKSkgewogCQkJV0FSTl9PTihwID09IHNyY19ycS0+Y3Vycik7Ci0JCQlXQVJOX09OKCFwLT5zZS5vbl9ycSk7CisJCQlXQVJOX09OKCFwLT5vbl9ycSk7CiAKIAkJCS8qCiAJCQkgKiBUaGVyZSdzIGEgY2hhbmNlIHRoYXQgcCBpcyBoaWdoZXIgaW4gcHJpb3JpdHkKQEAgLTE1MzgsNyArMTU3NCw3IEBACiAJICogVXBkYXRlIHRoZSBtaWdyYXRpb24gc3RhdHVzIG9mIHRoZSBSUSBpZiB3ZSBoYXZlIGFuIFJUIHRhc2sKIAkgKiB3aGljaCBpcyBydW5uaW5nIEFORCBjaGFuZ2luZyBpdHMgd2VpZ2h0IHZhbHVlLgogCSAqLwotCWlmIChwLT5zZS5vbl9ycSAmJiAod2VpZ2h0ICE9IHAtPnJ0Lm5yX2NwdXNfYWxsb3dlZCkpIHsKKwlpZiAocC0+b25fcnEgJiYgKHdlaWdodCAhPSBwLT5ydC5ucl9jcHVzX2FsbG93ZWQpKSB7CiAJCXN0cnVjdCBycSAqcnEgPSB0YXNrX3JxKHApOwogCiAJCWlmICghdGFza19jdXJyZW50KHJxLCBwKSkgewpAQCAtMTYwOCw3ICsxNjQ0LDcgQEAKIAkgKiB3ZSBtYXkgbmVlZCB0byBoYW5kbGUgdGhlIHB1bGxpbmcgb2YgUlQgdGFza3MKIAkgKiBub3cuCiAJICovCi0JaWYgKHAtPnNlLm9uX3JxICYmICFycS0+cnQucnRfbnJfcnVubmluZykKKwlpZiAocC0+b25fcnEgJiYgIXJxLT5ydC5ydF9ucl9ydW5uaW5nKQogCQlwdWxsX3J0X3Rhc2socnEpOwogfQogCkBAIC0xNjM4LDcgKzE2NzQsNyBAQAogCSAqIElmIHRoYXQgY3VycmVudCBydW5uaW5nIHRhc2sgaXMgYWxzbyBhbiBSVCB0YXNrCiAJICogdGhlbiBzZWUgaWYgd2UgY2FuIG1vdmUgdG8gYW5vdGhlciBydW4gcXVldWUuCiAJICovCi0JaWYgKHAtPnNlLm9uX3JxICYmIHJxLT5jdXJyICE9IHApIHsKKwlpZiAocC0+b25fcnEgJiYgcnEtPmN1cnIgIT0gcCkgewogI2lmZGVmIENPTkZJR19TTVAKIAkJaWYgKHJxLT5ydC5vdmVybG9hZGVkICYmIHB1c2hfcnRfdGFzayhycSkgJiYKIAkJICAgIC8qIERvbid0IHJlc2NoZWQgaWYgd2UgY2hhbmdlZCBydW5xdWV1ZXMgKi8KQEAgLTE2NTcsNyArMTY5Myw3IEBACiBzdGF0aWMgdm9pZAogcHJpb19jaGFuZ2VkX3J0KHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG9sZHByaW8pCiB7Ci0JaWYgKCFwLT5zZS5vbl9ycSkKKwlpZiAoIXAtPm9uX3JxKQogCQlyZXR1cm47CiAKIAlpZiAocnEtPmN1cnIgPT0gcCkgewpAQCAtMTc5NiwxMCArMTgzMiwxMSBAQAogCiBzdGF0aWMgdm9pZCBwcmludF9ydF9zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGludCBjcHUpCiB7CisJcnRfcnFfaXRlcl90IGl0ZXI7CiAJc3RydWN0IHJ0X3JxICpydF9ycTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlmb3JfZWFjaF9sZWFmX3J0X3JxKHJ0X3JxLCBjcHVfcnEoY3B1KSkKKwlmb3JfZWFjaF9ydF9ycShydF9ycSwgaXRlciwgY3B1X3JxKGNwdSkpCiAJCXByaW50X3J0X3JxKG0sIGNwdSwgcnRfcnEpOwogCXJjdV9yZWFkX3VubG9jaygpOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX3N0b3B0YXNrLmMgYi9rZXJuZWwvc2NoZWRfc3RvcHRhc2suYwppbmRleCAxYmEyYmQ0Li42ZjQzNzYzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfc3RvcHRhc2suYworKysgYi9rZXJuZWwvc2NoZWRfc3RvcHRhc2suYwpAQCAtOSw4ICs5LDcgQEAKIAogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyBpbnQKLXNlbGVjdF90YXNrX3JxX3N0b3Aoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwLAotCQkgICAgaW50IHNkX2ZsYWcsIGludCBmbGFncykKK3NlbGVjdF90YXNrX3JxX3N0b3Aoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgc2RfZmxhZywgaW50IGZsYWdzKQogewogCXJldHVybiB0YXNrX2NwdShwKTsgLyogc3RvcCB0YXNrcyBhcyBuZXZlciBtaWdyYXRlICovCiB9CkBAIC0yNiw3ICsyNSw3IEBACiB7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpzdG9wID0gcnEtPnN0b3A7CiAKLQlpZiAoc3RvcCAmJiBzdG9wLT5zZS5vbl9ycSkKKwlpZiAoc3RvcCAmJiBzdG9wLT5vbl9ycSkKIAkJcmV0dXJuIHN0b3A7CiAKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCBhZjQ2OGVkLi5mMGMxMDM4IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0zMTUsNyArMzE1LDYgQEAKIAlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZyZWJvb3Rfbm90aWZpZXJfbGlzdCwgU1lTX1JFU1RBUlQsIGNtZCk7CiAJc3lzdGVtX3N0YXRlID0gU1lTVEVNX1JFU1RBUlQ7CiAJZGV2aWNlX3NodXRkb3duKCk7Ci0Jc3lzZGV2X3NodXRkb3duKCk7CiAJc3lzY29yZV9zaHV0ZG93bigpOwogfQogCkBAIC0zNTQsNyArMzUzLDYgQEAKIHZvaWQga2VybmVsX2hhbHQodm9pZCkKIHsKIAlrZXJuZWxfc2h1dGRvd25fcHJlcGFyZShTWVNURU1fSEFMVCk7Ci0Jc3lzZGV2X3NodXRkb3duKCk7CiAJc3lzY29yZV9zaHV0ZG93bigpOwogCXByaW50ayhLRVJOX0VNRVJHICJTeXN0ZW0gaGFsdGVkLlxuIik7CiAJa21zZ19kdW1wKEtNU0dfRFVNUF9IQUxUKTsKQEAgLTM3NCw3ICszNzIsNiBAQAogCWlmIChwbV9wb3dlcl9vZmZfcHJlcGFyZSkKIAkJcG1fcG93ZXJfb2ZmX3ByZXBhcmUoKTsKIAlkaXNhYmxlX25vbmJvb3RfY3B1cygpOwotCXN5c2Rldl9zaHV0ZG93bigpOwogCXN5c2NvcmVfc2h1dGRvd24oKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiUG93ZXIgZG93bi5cbiIpOwogCWttc2dfZHVtcChLTVNHX0RVTVBfUE9XRVJPRkYpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvTWFrZWZpbGUgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQppbmRleCBiMDQyNTk5Li5lMmZkNzRiIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9NYWtlZmlsZQorKysgYi9rZXJuZWwvdGltZS9NYWtlZmlsZQpAQCAtMSw1ICsxLDUgQEAKIG9iai15ICs9IHRpbWVrZWVwaW5nLm8gbnRwLm8gY2xvY2tzb3VyY2UubyBqaWZmaWVzLm8gdGltZXJfbGlzdC5vIHRpbWVjb21wYXJlLm8KLW9iai15ICs9IHRpbWVjb252Lm8gcG9zaXgtY2xvY2subworb2JqLXkgKz0gdGltZWNvbnYubyBwb3NpeC1jbG9jay5vIGFsYXJtdGltZXIubwogCiBvYmotJChDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRCkJCSs9IGNsb2NrZXZlbnRzLm8KIG9iai0kKENPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTKQkJKz0gdGljay1jb21tb24ubwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvYWxhcm10aW1lci5jIGIva2VybmVsL3RpbWUvYWxhcm10aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNjUwMTQKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvdGltZS9hbGFybXRpbWVyLmMKQEAgLTAsMCArMSw2OTQgQEAKKy8qCisgKiBBbGFybXRpbWVyIGludGVyZmFjZQorICoKKyAqIFRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzIGEgdGltZXIgd2hpY2ggaXMgc2ltaWxhcnRvIGhydGltZXJzLAorICogYnV0IHRyaWdnZXJzIGEgUlRDIGFsYXJtIGlmIHRoZSBib3ggaXMgc3VzcGVuZC4KKyAqCisgKiBUaGlzIGludGVyZmFjZSBpcyBpbmZsdWVuY2VkIGJ5IHRoZSBBbmRyb2lkIFJUQyBBbGFybSB0aW1lcgorICogaW50ZXJmYWNlLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBJQk0gQ29ycGVyYXRpb24KKyAqCisgKiBBdXRob3I6IEpvaG4gU3R1bHR6IDxqb2huLnN0dWx0ekBsaW5hcm8ub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaHJ0aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVycXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9ydGMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbGFybXRpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wb3NpeC10aW1lcnMuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CisKKy8qKgorICogc3RydWN0IGFsYXJtX2Jhc2UgLSBBbGFybSB0aW1lciBiYXNlcworICogQGxvY2s6CQlMb2NrIGZvciBzeW5jcmhvbml6ZWQgYWNjZXNzIHRvIHRoZSBiYXNlCisgKiBAdGltZXJxdWV1ZToJCVRpbWVycXVldWUgaGVhZCBtYW5hZ2luZyB0aGUgbGlzdCBvZiBldmVudHMKKyAqIEB0aW1lcjogCQlocnRpbWVyIHVzZWQgdG8gc2NoZWR1bGUgZXZlbnRzIHdoaWxlIHJ1bm5pbmcKKyAqIEBnZXR0aW1lOgkJRnVuY3Rpb24gdG8gcmVhZCB0aGUgdGltZSBjb3JyZWxhdGluZyB0byB0aGUgYmFzZQorICogQGJhc2VfY2xvY2tpZDoJY2xvY2tpZCBmb3IgdGhlIGJhc2UKKyAqLworc3RhdGljIHN0cnVjdCBhbGFybV9iYXNlIHsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCB0aW1lcnF1ZXVlX2hlYWQJdGltZXJxdWV1ZTsKKwlzdHJ1Y3QgaHJ0aW1lcgkJdGltZXI7CisJa3RpbWVfdAkJCSgqZ2V0dGltZSkodm9pZCk7CisJY2xvY2tpZF90CQliYXNlX2Nsb2NraWQ7Cit9IGFsYXJtX2Jhc2VzW0FMQVJNX05VTVRZUEVdOworCisjaWZkZWYgQ09ORklHX1JUQ19DTEFTUworLyogcnRjIHRpbWVyIGFuZCBkZXZpY2UgZm9yIHNldHRpbmcgYWxhcm0gd2FrZXVwcyBhdCBzdXNwZW5kICovCitzdGF0aWMgc3RydWN0IHJ0Y190aW1lcgkJcnRjdGltZXI7CitzdGF0aWMgc3RydWN0IHJ0Y19kZXZpY2UJKnJ0Y2RldjsKKyNlbmRpZgorCisvKiBmcmVlemVyIGRlbHRhICYgbG9jayB1c2VkIHRvIGhhbmRsZSBjbG9ja19uYW5vc2xlZXAgdHJpZ2dlcmVkIHdha2V1cHMgKi8KK3N0YXRpYyBrdGltZV90IGZyZWV6ZXJfZGVsdGE7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZyZWV6ZXJfZGVsdGFfbG9jayk7CisKKworLyoqCisgKiBhbGFybXRpbWVyX2VucXVldWUgLSBBZGRzIGFuIGFsYXJtIHRpbWVyIHRvIGFuIGFsYXJtX2Jhc2UgdGltZXJxdWV1ZQorICogQGJhc2U6IHBvaW50ZXIgdG8gdGhlIGJhc2Ugd2hlcmUgdGhlIHRpbWVyIGlzIGJlaW5nIHJ1bgorICogQGFsYXJtOiBwb2ludGVyIHRvIGFsYXJtIGJlaW5nIGVucXVldWVkLgorICoKKyAqIEFkZHMgYWxhcm0gdG8gYSBhbGFybV9iYXNlIHRpbWVycXVldWUgYW5kIGlmIG5lY2Vzc2FyeSBzZXRzCisgKiBhbiBocnRpbWVyIHRvIHJ1bi4KKyAqCisgKiBNdXN0IGhvbGQgYmFzZS0+bG9jayB3aGVuIGNhbGxpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGFsYXJtdGltZXJfZW5xdWV1ZShzdHJ1Y3QgYWxhcm1fYmFzZSAqYmFzZSwgc3RydWN0IGFsYXJtICphbGFybSkKK3sKKwl0aW1lcnF1ZXVlX2FkZCgmYmFzZS0+dGltZXJxdWV1ZSwgJmFsYXJtLT5ub2RlKTsKKwlpZiAoJmFsYXJtLT5ub2RlID09IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+dGltZXJxdWV1ZSkpIHsKKwkJaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZiYXNlLT50aW1lcik7CisJCWhydGltZXJfc3RhcnQoJmJhc2UtPnRpbWVyLCBhbGFybS0+bm9kZS5leHBpcmVzLAorCQkJCUhSVElNRVJfTU9ERV9BQlMpOworCX0KK30KKworLyoqCisgKiBhbGFybXRpbWVyX3JlbW92ZSAtIFJlbW92ZXMgYW4gYWxhcm0gdGltZXIgZnJvbSBhbiBhbGFybV9iYXNlIHRpbWVycXVldWUKKyAqIEBiYXNlOiBwb2ludGVyIHRvIHRoZSBiYXNlIHdoZXJlIHRoZSB0aW1lciBpcyBydW5uaW5nCisgKiBAYWxhcm06IHBvaW50ZXIgdG8gYWxhcm0gYmVpbmcgcmVtb3ZlZAorICoKKyAqIFJlbW92ZXMgYWxhcm0gdG8gYSBhbGFybV9iYXNlIHRpbWVycXVldWUgYW5kIGlmIG5lY2Vzc2FyeSBzZXRzCisgKiBhIG5ldyB0aW1lciB0byBydW4uCisgKgorICogTXVzdCBob2xkIGJhc2UtPmxvY2sgd2hlbiBjYWxsaW5nLgorICovCitzdGF0aWMgdm9pZCBhbGFybXRpbWVyX3JlbW92ZShzdHJ1Y3QgYWxhcm1fYmFzZSAqYmFzZSwgc3RydWN0IGFsYXJtICphbGFybSkKK3sKKwlzdHJ1Y3QgdGltZXJxdWV1ZV9ub2RlICpuZXh0ID0gdGltZXJxdWV1ZV9nZXRuZXh0KCZiYXNlLT50aW1lcnF1ZXVlKTsKKworCXRpbWVycXVldWVfZGVsKCZiYXNlLT50aW1lcnF1ZXVlLCAmYWxhcm0tPm5vZGUpOworCWlmIChuZXh0ID09ICZhbGFybS0+bm9kZSkgeworCQlocnRpbWVyX3RyeV90b19jYW5jZWwoJmJhc2UtPnRpbWVyKTsKKwkJbmV4dCA9IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+dGltZXJxdWV1ZSk7CisJCWlmICghbmV4dCkKKwkJCXJldHVybjsKKwkJaHJ0aW1lcl9zdGFydCgmYmFzZS0+dGltZXIsIG5leHQtPmV4cGlyZXMsIEhSVElNRVJfTU9ERV9BQlMpOworCX0KK30KKworCisvKioKKyAqIGFsYXJtdGltZXJfZmlyZWQgLSBIYW5kbGVzIGFsYXJtIGhydGltZXIgYmVpbmcgZmlyZWQuCisgKiBAdGltZXI6IHBvaW50ZXIgdG8gaHJ0aW1lciBiZWluZyBydW4KKyAqCisgKiBXaGVuIGEgYWxhcm0gdGltZXIgZmlyZXMsIHRoaXMgcnVucyB0aHJvdWdoIHRoZSB0aW1lcnF1ZXVlIHRvCisgKiBzZWUgd2hpY2ggYWxhcm1zIGV4cGlyZWQsIGFuZCBydW5zIHRob3NlLiBJZiB0aGVyZSBhcmUgbW9yZSBhbGFybQorICogdGltZXJzIHF1ZXVlZCBmb3IgdGhlIGZ1dHVyZSwgd2Ugc2V0IHRoZSBocnRpbWVyIHRvIGZpcmUgd2hlbgorICogd2hlbiB0aGUgbmV4dCBmdXR1cmUgYWxhcm0gdGltZXIgZXhwaXJlcy4KKyAqLworc3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGFsYXJtdGltZXJfZmlyZWQoc3RydWN0IGhydGltZXIgKnRpbWVyKQoreworCXN0cnVjdCBhbGFybV9iYXNlICpiYXNlID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgYWxhcm1fYmFzZSwgdGltZXIpOworCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlrdGltZV90IG5vdzsKKwlpbnQgcmV0ID0gSFJUSU1FUl9OT1JFU1RBUlQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOworCW5vdyA9IGJhc2UtPmdldHRpbWUoKTsKKwl3aGlsZSAoKG5leHQgPSB0aW1lcnF1ZXVlX2dldG5leHQoJmJhc2UtPnRpbWVycXVldWUpKSkgeworCQlzdHJ1Y3QgYWxhcm0gKmFsYXJtOworCQlrdGltZV90IGV4cGlyZWQgPSBuZXh0LT5leHBpcmVzOworCisJCWlmIChleHBpcmVkLnR2NjQgPj0gbm93LnR2NjQpCisJCQlicmVhazsKKworCQlhbGFybSA9IGNvbnRhaW5lcl9vZihuZXh0LCBzdHJ1Y3QgYWxhcm0sIG5vZGUpOworCisJCXRpbWVycXVldWVfZGVsKCZiYXNlLT50aW1lcnF1ZXVlLCAmYWxhcm0tPm5vZGUpOworCQlhbGFybS0+ZW5hYmxlZCA9IDA7CisJCS8qIFJlLWFkZCBwZXJpb2RpYyB0aW1lcnMgKi8KKwkJaWYgKGFsYXJtLT5wZXJpb2QudHY2NCkgeworCQkJYWxhcm0tPm5vZGUuZXhwaXJlcyA9IGt0aW1lX2FkZChleHBpcmVkLCBhbGFybS0+cGVyaW9kKTsKKwkJCXRpbWVycXVldWVfYWRkKCZiYXNlLT50aW1lcnF1ZXVlLCAmYWxhcm0tPm5vZGUpOworCQkJYWxhcm0tPmVuYWJsZWQgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGFsYXJtLT5mdW5jdGlvbikKKwkJCWFsYXJtLT5mdW5jdGlvbihhbGFybSk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiYXNlLT5sb2NrLCBmbGFncyk7CisJfQorCisJaWYgKG5leHQpIHsKKwkJaHJ0aW1lcl9zZXRfZXhwaXJlcygmYmFzZS0+dGltZXIsIG5leHQtPmV4cGlyZXMpOworCQlyZXQgPSBIUlRJTUVSX1JFU1RBUlQ7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7CisKK30KKworI2lmZGVmIENPTkZJR19SVENfQ0xBU1MKKy8qKgorICogYWxhcm10aW1lcl9zdXNwZW5kIC0gU3VzcGVuZCB0aW1lIGNhbGxiYWNrCisgKiBAZGV2OiB1bnVzZWQKKyAqIEBzdGF0ZTogdW51c2VkCisgKgorICogV2hlbiB3ZSBhcmUgZ29pbmcgaW50byBzdXNwZW5kLCB3ZSBsb29rIHRocm91Z2ggdGhlIGJhc2VzCisgKiB0byBzZWUgd2hpY2ggaXMgdGhlIHNvb25lc3QgdGltZXIgdG8gZXhwaXJlLiBXZSB0aGVuCisgKiBzZXQgYW4gcnRjIHRpbWVyIHRvIGZpcmUgdGhhdCBmYXIgaW50byB0aGUgZnV0dXJlLCB3aGljaAorICogd2lsbCB3YWtlIHVzIGZyb20gc3VzcGVuZC4KKyAqLworc3RhdGljIGludCBhbGFybXRpbWVyX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBydGNfdGltZSB0bTsKKwlrdGltZV90IG1pbiwgbm93OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnJlZXplcl9kZWx0YV9sb2NrLCBmbGFncyk7CisJbWluID0gZnJlZXplcl9kZWx0YTsKKwlmcmVlemVyX2RlbHRhID0ga3RpbWVfc2V0KDAsIDApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyZWV6ZXJfZGVsdGFfbG9jaywgZmxhZ3MpOworCisJLyogSWYgd2UgaGF2ZSBubyBydGNkZXYsIGp1c3QgcmV0dXJuICovCisJaWYgKCFydGNkZXYpCisJCXJldHVybiAwOworCisJLyogRmluZCB0aGUgc29vbmVzdCB0aW1lciB0byBleHBpcmUqLworCWZvciAoaSA9IDA7IGkgPCBBTEFSTV9OVU1UWVBFOyBpKyspIHsKKwkJc3RydWN0IGFsYXJtX2Jhc2UgKmJhc2UgPSAmYWxhcm1fYmFzZXNbaV07CisJCXN0cnVjdCB0aW1lcnF1ZXVlX25vZGUgKm5leHQ7CisJCWt0aW1lX3QgZGVsdGE7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKKwkJbmV4dCA9IHRpbWVycXVldWVfZ2V0bmV4dCgmYmFzZS0+dGltZXJxdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFuZXh0KQorCQkJY29udGludWU7CisJCWRlbHRhID0ga3RpbWVfc3ViKG5leHQtPmV4cGlyZXMsIGJhc2UtPmdldHRpbWUoKSk7CisJCWlmICghbWluLnR2NjQgfHwgKGRlbHRhLnR2NjQgPCBtaW4udHY2NCkpCisJCQltaW4gPSBkZWx0YTsKKwl9CisJaWYgKG1pbi50djY0ID09IDApCisJCXJldHVybiAwOworCisJLyogWFhYIC0gU2hvdWxkIHdlIGVuZm9yY2UgYSBtaW5pbXVtIHNsZWVwIHRpbWU/ICovCisJV0FSTl9PTihtaW4udHY2NCA8IE5TRUNfUEVSX1NFQyk7CisKKwkvKiBTZXR1cCBhbiBydGMgdGltZXIgdG8gZmlyZSB0aGF0IGZhciBpbiB0aGUgZnV0dXJlICovCisJcnRjX3RpbWVyX2NhbmNlbChydGNkZXYsICZydGN0aW1lcik7CisJcnRjX3JlYWRfdGltZShydGNkZXYsICZ0bSk7CisJbm93ID0gcnRjX3RtX3RvX2t0aW1lKHRtKTsKKwlub3cgPSBrdGltZV9hZGQobm93LCBtaW4pOworCisJcnRjX3RpbWVyX3N0YXJ0KHJ0Y2RldiwgJnJ0Y3RpbWVyLCBub3csIGt0aW1lX3NldCgwLCAwKSk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW50IGFsYXJtdGltZXJfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgYWxhcm10aW1lcl9mcmVlemVyc2V0KGt0aW1lX3QgYWJzZXhwLCBlbnVtIGFsYXJtdGltZXJfdHlwZSB0eXBlKQoreworCWt0aW1lX3QgZGVsdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYWxhcm1fYmFzZSAqYmFzZSA9ICZhbGFybV9iYXNlc1t0eXBlXTsKKworCWRlbHRhID0ga3RpbWVfc3ViKGFic2V4cCwgYmFzZS0+Z2V0dGltZSgpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmcmVlemVyX2RlbHRhX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWZyZWV6ZXJfZGVsdGEudHY2NCB8fCAoZGVsdGEudHY2NCA8IGZyZWV6ZXJfZGVsdGEudHY2NCkpCisJCWZyZWV6ZXJfZGVsdGEgPSBkZWx0YTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmcmVlemVyX2RlbHRhX2xvY2ssIGZsYWdzKTsKK30KKworCisvKioKKyAqIGFsYXJtX2luaXQgLSBJbml0aWFsaXplIGFuIGFsYXJtIHN0cnVjdHVyZQorICogQGFsYXJtOiBwdHIgdG8gYWxhcm0gdG8gYmUgaW5pdGlhbGl6ZWQKKyAqIEB0eXBlOiB0aGUgdHlwZSBvZiB0aGUgYWxhcm0KKyAqIEBmdW5jdGlvbjogY2FsbGJhY2sgdGhhdCBpcyBydW4gd2hlbiB0aGUgYWxhcm0gZmlyZXMKKyAqLwordm9pZCBhbGFybV9pbml0KHN0cnVjdCBhbGFybSAqYWxhcm0sIGVudW0gYWxhcm10aW1lcl90eXBlIHR5cGUsCisJCXZvaWQgKCpmdW5jdGlvbikoc3RydWN0IGFsYXJtICopKQoreworCXRpbWVycXVldWVfaW5pdCgmYWxhcm0tPm5vZGUpOworCWFsYXJtLT5wZXJpb2QgPSBrdGltZV9zZXQoMCwgMCk7CisJYWxhcm0tPmZ1bmN0aW9uID0gZnVuY3Rpb247CisJYWxhcm0tPnR5cGUgPSB0eXBlOworCWFsYXJtLT5lbmFibGVkID0gMDsKK30KKworLyoqCisgKiBhbGFybV9zdGFydCAtIFNldHMgYW4gYWxhcm0gdG8gZmlyZQorICogQGFsYXJtOiBwdHIgdG8gYWxhcm0gdG8gc2V0CisgKiBAc3RhcnQ6IHRpbWUgdG8gcnVuIHRoZSBhbGFybQorICogQHBlcmlvZDogcGVyaW9kIGF0IHdoaWNoIHRoZSBhbGFybSB3aWxsIHJlY3VyCisgKi8KK3ZvaWQgYWxhcm1fc3RhcnQoc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBzdGFydCwga3RpbWVfdCBwZXJpb2QpCit7CisJc3RydWN0IGFsYXJtX2Jhc2UgKmJhc2UgPSAmYWxhcm1fYmFzZXNbYWxhcm0tPnR5cGVdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOworCWlmIChhbGFybS0+ZW5hYmxlZCkKKwkJYWxhcm10aW1lcl9yZW1vdmUoYmFzZSwgYWxhcm0pOworCWFsYXJtLT5ub2RlLmV4cGlyZXMgPSBzdGFydDsKKwlhbGFybS0+cGVyaW9kID0gcGVyaW9kOworCWFsYXJtdGltZXJfZW5xdWV1ZShiYXNlLCBhbGFybSk7CisJYWxhcm0tPmVuYWJsZWQgPSAxOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhc2UtPmxvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBhbGFybV9jYW5jZWwgLSBUcmllcyB0byBjYW5jZWwgYW4gYWxhcm0gdGltZXIKKyAqIEBhbGFybTogcHRyIHRvIGFsYXJtIHRvIGJlIGNhbmNlbGVkCisgKi8KK3ZvaWQgYWxhcm1fY2FuY2VsKHN0cnVjdCBhbGFybSAqYWxhcm0pCit7CisJc3RydWN0IGFsYXJtX2Jhc2UgKmJhc2UgPSAmYWxhcm1fYmFzZXNbYWxhcm0tPnR5cGVdOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmFzZS0+bG9jaywgZmxhZ3MpOworCWlmIChhbGFybS0+ZW5hYmxlZCkKKwkJYWxhcm10aW1lcl9yZW1vdmUoYmFzZSwgYWxhcm0pOworCWFsYXJtLT5lbmFibGVkID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiYXNlLT5sb2NrLCBmbGFncyk7Cit9CisKKworLyoqCisgKiBjbG9jazJhbGFybSAtIGhlbHBlciB0aGF0IGNvbnZlcnRzIGZyb20gY2xvY2tpZCB0byBhbGFybXR5cGVzCisgKiBAY2xvY2tpZDogY2xvY2tpZC4KKyAqLworc3RhdGljIGVudW0gYWxhcm10aW1lcl90eXBlIGNsb2NrMmFsYXJtKGNsb2NraWRfdCBjbG9ja2lkKQoreworCWlmIChjbG9ja2lkID09IENMT0NLX1JFQUxUSU1FX0FMQVJNKQorCQlyZXR1cm4gQUxBUk1fUkVBTFRJTUU7CisJaWYgKGNsb2NraWQgPT0gQ0xPQ0tfQk9PVFRJTUVfQUxBUk0pCisJCXJldHVybiBBTEFSTV9CT09UVElNRTsKKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogYWxhcm1faGFuZGxlX3RpbWVyIC0gQ2FsbGJhY2sgZm9yIHBvc2l4IHRpbWVycworICogQGFsYXJtOiBhbGFybSB0aGF0IGZpcmVkCisgKgorICogUG9zaXggdGltZXIgY2FsbGJhY2sgZm9yIGV4cGlyZWQgYWxhcm0gdGltZXJzLgorICovCitzdGF0aWMgdm9pZCBhbGFybV9oYW5kbGVfdGltZXIoc3RydWN0IGFsYXJtICphbGFybSkKK3sKKwlzdHJ1Y3Qga19pdGltZXIgKnB0ciA9IGNvbnRhaW5lcl9vZihhbGFybSwgc3RydWN0IGtfaXRpbWVyLAorCQkJCQkJaXQuYWxhcm10aW1lcik7CisJaWYgKHBvc2l4X3RpbWVyX2V2ZW50KHB0ciwgMCkgIT0gMCkKKwkJcHRyLT5pdF9vdmVycnVuKys7Cit9CisKKy8qKgorICogYWxhcm1fY2xvY2tfZ2V0cmVzIC0gcG9zaXggZ2V0cmVzIGludGVyZmFjZQorICogQHdoaWNoX2Nsb2NrOiBjbG9ja2lkCisgKiBAdHA6IHRpbWVzcGVjIHRvIGZpbGwKKyAqCisgKiBSZXR1cm5zIHRoZSBncmFudWxhcml0eSBvZiB1bmRlcmx5aW5nIGFsYXJtIGJhc2UgY2xvY2sKKyAqLworc3RhdGljIGludCBhbGFybV9jbG9ja19nZXRyZXMoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKQoreworCWNsb2NraWRfdCBiYXNlaWQgPSBhbGFybV9iYXNlc1tjbG9jazJhbGFybSh3aGljaF9jbG9jayldLmJhc2VfY2xvY2tpZDsKKworCXJldHVybiBocnRpbWVyX2dldF9yZXMoYmFzZWlkLCB0cCk7Cit9CisKKy8qKgorICogYWxhcm1fY2xvY2tfZ2V0IC0gcG9zaXggY2xvY2tfZ2V0IGludGVyZmFjZQorICogQHdoaWNoX2Nsb2NrOiBjbG9ja2lkCisgKiBAdHA6IHRpbWVzcGVjIHRvIGZpbGwuCisgKgorICogUHJvdmlkZXMgdGhlIHVuZGVybHlpbmcgYWxhcm0gYmFzZSB0aW1lLgorICovCitzdGF0aWMgaW50IGFsYXJtX2Nsb2NrX2dldChjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIHN0cnVjdCB0aW1lc3BlYyAqdHApCit7CisJc3RydWN0IGFsYXJtX2Jhc2UgKmJhc2UgPSAmYWxhcm1fYmFzZXNbY2xvY2syYWxhcm0od2hpY2hfY2xvY2spXTsKKworCSp0cCA9IGt0aW1lX3RvX3RpbWVzcGVjKGJhc2UtPmdldHRpbWUoKSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWxhcm1fdGltZXJfY3JlYXRlIC0gcG9zaXggdGltZXJfY3JlYXRlIGludGVyZmFjZQorICogQG5ld190aW1lcjoga19pdGltZXIgcG9pbnRlciB0byBtYW5hZ2UKKyAqCisgKiBJbml0aWFsaXplcyB0aGUga19pdGltZXIgc3RydWN0dXJlLgorICovCitzdGF0aWMgaW50IGFsYXJtX3RpbWVyX2NyZWF0ZShzdHJ1Y3Qga19pdGltZXIgKm5ld190aW1lcikKK3sKKwllbnVtICBhbGFybXRpbWVyX3R5cGUgdHlwZTsKKwlzdHJ1Y3QgYWxhcm1fYmFzZSAqYmFzZTsKKworCWlmICghY2FwYWJsZShDQVBfV0FLRV9BTEFSTSkpCisJCXJldHVybiAtRVBFUk07CisKKwl0eXBlID0gY2xvY2syYWxhcm0obmV3X3RpbWVyLT5pdF9jbG9jayk7CisJYmFzZSA9ICZhbGFybV9iYXNlc1t0eXBlXTsKKwlhbGFybV9pbml0KCZuZXdfdGltZXItPml0LmFsYXJtdGltZXIsIHR5cGUsIGFsYXJtX2hhbmRsZV90aW1lcik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogYWxhcm1fdGltZXJfZ2V0IC0gcG9zaXggdGltZXJfZ2V0IGludGVyZmFjZQorICogQG5ld190aW1lcjoga19pdGltZXIgcG9pbnRlcgorICogQGN1cl9zZXR0aW5nOiBpdGltZXJzcGVjIGRhdGEgdG8gZmlsbAorICoKKyAqIENvcGllcyB0aGUgaXRpbWVyc3BlYyBkYXRhIG91dCBmcm9tIHRoZSBrX2l0aW1lcgorICovCitzdGF0aWMgdm9pZCBhbGFybV90aW1lcl9nZXQoc3RydWN0IGtfaXRpbWVyICp0aW1yLAorCQkJCXN0cnVjdCBpdGltZXJzcGVjICpjdXJfc2V0dGluZykKK3sKKwljdXJfc2V0dGluZy0+aXRfaW50ZXJ2YWwgPQorCQkJa3RpbWVfdG9fdGltZXNwZWModGltci0+aXQuYWxhcm10aW1lci5wZXJpb2QpOworCWN1cl9zZXR0aW5nLT5pdF92YWx1ZSA9CisJCQlrdGltZV90b190aW1lc3BlYyh0aW1yLT5pdC5hbGFybXRpbWVyLm5vZGUuZXhwaXJlcyk7CisJcmV0dXJuOworfQorCisvKioKKyAqIGFsYXJtX3RpbWVyX2RlbCAtIHBvc2l4IHRpbWVyX2RlbCBpbnRlcmZhY2UKKyAqIEB0aW1yOiBrX2l0aW1lciBwb2ludGVyIHRvIGJlIGRlbGV0ZWQKKyAqCisgKiBDYW5jZWxzIGFueSBwcm9ncmFtbWVkIGFsYXJtcyBmb3IgdGhlIGdpdmVuIHRpbWVyLgorICovCitzdGF0aWMgaW50IGFsYXJtX3RpbWVyX2RlbChzdHJ1Y3Qga19pdGltZXIgKnRpbXIpCit7CisJYWxhcm1fY2FuY2VsKCZ0aW1yLT5pdC5hbGFybXRpbWVyKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhbGFybV90aW1lcl9zZXQgLSBwb3NpeCB0aW1lcl9zZXQgaW50ZXJmYWNlCisgKiBAdGltcjoga19pdGltZXIgcG9pbnRlciB0byBiZSBkZWxldGVkCisgKiBAZmxhZ3M6IHRpbWVyIGZsYWdzCisgKiBAbmV3X3NldHRpbmc6IGl0aW1lcnNwZWMgdG8gYmUgdXNlZAorICogQG9sZF9zZXR0aW5nOiBpdGltZXJzcGVjIGJlaW5nIHJlcGxhY2VkCisgKgorICogU2V0cyB0aGUgdGltZXIgdG8gbmV3X3NldHRpbmcsIGFuZCBzdGFydHMgdGhlIHRpbWVyLgorICovCitzdGF0aWMgaW50IGFsYXJtX3RpbWVyX3NldChzdHJ1Y3Qga19pdGltZXIgKnRpbXIsIGludCBmbGFncywKKwkJCQlzdHJ1Y3QgaXRpbWVyc3BlYyAqbmV3X3NldHRpbmcsCisJCQkJc3RydWN0IGl0aW1lcnNwZWMgKm9sZF9zZXR0aW5nKQoreworCS8qIFNhdmUgb2xkIHZhbHVlcyAqLworCW9sZF9zZXR0aW5nLT5pdF9pbnRlcnZhbCA9CisJCQlrdGltZV90b190aW1lc3BlYyh0aW1yLT5pdC5hbGFybXRpbWVyLnBlcmlvZCk7CisJb2xkX3NldHRpbmctPml0X3ZhbHVlID0KKwkJCWt0aW1lX3RvX3RpbWVzcGVjKHRpbXItPml0LmFsYXJtdGltZXIubm9kZS5leHBpcmVzKTsKKworCS8qIElmIHRoZSB0aW1lciB3YXMgYWxyZWFkeSBzZXQsIGNhbmNlbCBpdCAqLworCWFsYXJtX2NhbmNlbCgmdGltci0+aXQuYWxhcm10aW1lcik7CisKKwkvKiBzdGFydCB0aGUgdGltZXIgKi8KKwlhbGFybV9zdGFydCgmdGltci0+aXQuYWxhcm10aW1lciwKKwkJCXRpbWVzcGVjX3RvX2t0aW1lKG5ld19zZXR0aW5nLT5pdF92YWx1ZSksCisJCQl0aW1lc3BlY190b19rdGltZShuZXdfc2V0dGluZy0+aXRfaW50ZXJ2YWwpKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhbGFybXRpbWVyX25zbGVlcF93YWtldXAgLSBXYWtldXAgZnVuY3Rpb24gZm9yIGFsYXJtX3RpbWVyX25zbGVlcAorICogQGFsYXJtOiBwdHIgdG8gYWxhcm0gdGhhdCBmaXJlZAorICoKKyAqIFdha2VzIHVwIHRoZSB0YXNrIHRoYXQgc2V0IHRoZSBhbGFybXRpbWVyCisgKi8KK3N0YXRpYyB2b2lkIGFsYXJtdGltZXJfbnNsZWVwX3dha2V1cChzdHJ1Y3QgYWxhcm0gKmFsYXJtKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IChzdHJ1Y3QgdGFza19zdHJ1Y3QgKilhbGFybS0+ZGF0YTsKKworCWFsYXJtLT5kYXRhID0gTlVMTDsKKwlpZiAodGFzaykKKwkJd2FrZV91cF9wcm9jZXNzKHRhc2spOworfQorCisvKioKKyAqIGFsYXJtdGltZXJfZG9fbnNsZWVwIC0gSW50ZXJuYWwgYWxhcm10aW1lciBuc2xlZXAgaW1wbGVtZW50YXRpb24KKyAqIEBhbGFybTogcHRyIHRvIGFsYXJtdGltZXIKKyAqIEBhYnNleHA6IGFic29sdXRlIGV4cGlyYXRpb24gdGltZQorICoKKyAqIFNldHMgdGhlIGFsYXJtIHRpbWVyIGFuZCBzbGVlcHMgdW50aWwgaXQgaXMgZmlyZWQgb3IgaW50ZXJydXB0ZWQuCisgKi8KK3N0YXRpYyBpbnQgYWxhcm10aW1lcl9kb19uc2xlZXAoc3RydWN0IGFsYXJtICphbGFybSwga3RpbWVfdCBhYnNleHApCit7CisJYWxhcm0tPmRhdGEgPSAodm9pZCAqKWN1cnJlbnQ7CisJZG8geworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlhbGFybV9zdGFydChhbGFybSwgYWJzZXhwLCBrdGltZV9zZXQoMCwgMCkpOworCQlpZiAobGlrZWx5KGFsYXJtLT5kYXRhKSkKKwkJCXNjaGVkdWxlKCk7CisKKwkJYWxhcm1fY2FuY2VsKGFsYXJtKTsKKwl9IHdoaWxlIChhbGFybS0+ZGF0YSAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOworCisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJcmV0dXJuIChhbGFybS0+ZGF0YSA9PSBOVUxMKTsKK30KKworCisvKioKKyAqIHVwZGF0ZV9ybXRwIC0gVXBkYXRlIHJlbWFpbmluZyB0aW1lc3BlYyB2YWx1ZQorICogQGV4cDogZXhwaXJhdGlvbiB0aW1lCisgKiBAdHlwZTogdGltZXIgdHlwZQorICogQHJtdHA6IHVzZXIgcG9pbnRlciB0byByZW1haW5pbmcgdGltZXBzZWMgdmFsdWUKKyAqCisgKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBmaWxscyBpbiBybXRwIHZhbHVlIHdpdGggdGltZSBiZXR3ZWVuCisgKiBub3cgYW5kIHRoZSBleHAgdmFsdWUKKyAqLworc3RhdGljIGludCB1cGRhdGVfcm10cChrdGltZV90IGV4cCwgZW51bSAgYWxhcm10aW1lcl90eXBlIHR5cGUsCisJCQlzdHJ1Y3QgdGltZXNwZWMgX191c2VyICpybXRwKQoreworCXN0cnVjdCB0aW1lc3BlYyBybXQ7CisJa3RpbWVfdCByZW07CisKKwlyZW0gPSBrdGltZV9zdWIoZXhwLCBhbGFybV9iYXNlc1t0eXBlXS5nZXR0aW1lKCkpOworCisJaWYgKHJlbS50djY0IDw9IDApCisJCXJldHVybiAwOworCXJtdCA9IGt0aW1lX3RvX3RpbWVzcGVjKHJlbSk7CisKKwlpZiAoY29weV90b191c2VyKHJtdHAsICZybXQsIHNpemVvZigqcm10cCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiAxOworCit9CisKKy8qKgorICogYWxhcm1fdGltZXJfbnNsZWVwX3Jlc3RhcnQgLSByZXN0YXJ0YmxvY2sgYWxhcm10aW1lciBuc2xlZXAKKyAqIEByZXN0YXJ0OiBwdHIgdG8gcmVzdGFydCBibG9jaworICoKKyAqIEhhbmRsZXMgcmVzdGFydGVkIGNsb2NrX25hbm9zbGVlcCBjYWxscworICovCitzdGF0aWMgbG9uZyBfX3NjaGVkIGFsYXJtX3RpbWVyX25zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0KQoreworCWVudW0gIGFsYXJtdGltZXJfdHlwZSB0eXBlID0gcmVzdGFydC0+bmFub3NsZWVwLmluZGV4OworCWt0aW1lX3QgZXhwOworCXN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgICpybXRwOworCXN0cnVjdCBhbGFybSBhbGFybTsKKwlpbnQgcmV0ID0gMDsKKworCWV4cC50djY0ID0gcmVzdGFydC0+bmFub3NsZWVwLmV4cGlyZXM7CisJYWxhcm1faW5pdCgmYWxhcm0sIHR5cGUsIGFsYXJtdGltZXJfbnNsZWVwX3dha2V1cCk7CisKKwlpZiAoYWxhcm10aW1lcl9kb19uc2xlZXAoJmFsYXJtLCBleHApKQorCQlnb3RvIG91dDsKKworCWlmIChmcmVlemluZyhjdXJyZW50KSkKKwkJYWxhcm10aW1lcl9mcmVlemVyc2V0KGV4cCwgdHlwZSk7CisKKwlybXRwID0gcmVzdGFydC0+bmFub3NsZWVwLnJtdHA7CisJaWYgKHJtdHApIHsKKwkJcmV0ID0gdXBkYXRlX3JtdHAoZXhwLCB0eXBlLCBybXRwKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJZ290byBvdXQ7CisJfQorCisKKwkvKiBUaGUgb3RoZXIgdmFsdWVzIGluIHJlc3RhcnQgYXJlIGFscmVhZHkgZmlsbGVkIGluICovCisJcmV0ID0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGFsYXJtX3RpbWVyX25zbGVlcCAtIGFsYXJtdGltZXIgbmFub3NsZWVwCisgKiBAd2hpY2hfY2xvY2s6IGNsb2NraWQKKyAqIEBmbGFnczogZGV0ZXJtaW5zIGFic3RpbWUgb3IgcmVsYXRpdmUKKyAqIEB0c3JlcTogcmVxdWVzdGVkIHNsZWVwIHRpbWUgKGFicyBvciByZWwpCisgKiBAcm10cDogcmVtYWluaW5nIHNsZWVwIHRpbWUgc2F2ZWQKKyAqCisgKiBIYW5kbGVzIGNsb2NrX25hbm9zbGVlcCBjYWxscyBhZ2FpbnN0IF9BTEFSTSBjbG9ja2lkcworICovCitzdGF0aWMgaW50IGFsYXJtX3RpbWVyX25zbGVlcChjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIGludCBmbGFncywKKwkJICAgICBzdHJ1Y3QgdGltZXNwZWMgKnRzcmVxLCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICpybXRwKQoreworCWVudW0gIGFsYXJtdGltZXJfdHlwZSB0eXBlID0gY2xvY2syYWxhcm0od2hpY2hfY2xvY2spOworCXN0cnVjdCBhbGFybSBhbGFybTsKKwlrdGltZV90IGV4cDsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydDsKKworCWlmICghY2FwYWJsZShDQVBfV0FLRV9BTEFSTSkpCisJCXJldHVybiAtRVBFUk07CisKKwlhbGFybV9pbml0KCZhbGFybSwgdHlwZSwgYWxhcm10aW1lcl9uc2xlZXBfd2FrZXVwKTsKKworCWV4cCA9IHRpbWVzcGVjX3RvX2t0aW1lKCp0c3JlcSk7CisJLyogQ29udmVydCAoaWYgbmVjZXNzYXJ5KSB0byBhYnNvbHV0ZSB0aW1lICovCisJaWYgKGZsYWdzICE9IFRJTUVSX0FCU1RJTUUpIHsKKwkJa3RpbWVfdCBub3cgPSBhbGFybV9iYXNlc1t0eXBlXS5nZXR0aW1lKCk7CisJCWV4cCA9IGt0aW1lX2FkZChub3csIGV4cCk7CisJfQorCisJaWYgKGFsYXJtdGltZXJfZG9fbnNsZWVwKCZhbGFybSwgZXhwKSkKKwkJZ290byBvdXQ7CisKKwlpZiAoZnJlZXppbmcoY3VycmVudCkpCisJCWFsYXJtdGltZXJfZnJlZXplcnNldChleHAsIHR5cGUpOworCisJLyogYWJzIHRpbWVycyBkb24ndCBzZXQgcmVtYWluaW5nIHRpbWUgb3IgcmVzdGFydCAqLworCWlmIChmbGFncyA9PSBUSU1FUl9BQlNUSU1FKSB7CisJCXJldCA9IC1FUkVTVEFSVE5PSEFORDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHJtdHApIHsKKwkJcmV0ID0gdXBkYXRlX3JtdHAoZXhwLCB0eXBlLCBybXRwKTsKKwkJaWYgKHJldCA8PSAwKQorCQkJZ290byBvdXQ7CisJfQorCisJcmVzdGFydCA9ICZjdXJyZW50X3RocmVhZF9pbmZvKCktPnJlc3RhcnRfYmxvY2s7CisJcmVzdGFydC0+Zm4gPSBhbGFybV90aW1lcl9uc2xlZXBfcmVzdGFydDsKKwlyZXN0YXJ0LT5uYW5vc2xlZXAuaW5kZXggPSB0eXBlOworCXJlc3RhcnQtPm5hbm9zbGVlcC5leHBpcmVzID0gZXhwLnR2NjQ7CisJcmVzdGFydC0+bmFub3NsZWVwLnJtdHAgPSBybXRwOworCXJldCA9IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisKKy8qIFN1c3BlbmQgaG9vayBzdHJ1Y3R1cmVzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgYWxhcm10aW1lcl9wbV9vcHMgPSB7CisJLnN1c3BlbmQgPSBhbGFybXRpbWVyX3N1c3BlbmQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhbGFybXRpbWVyX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhbGFybXRpbWVyIiwKKwkJLnBtID0gJmFsYXJtdGltZXJfcG1fb3BzLAorCX0KK307CisKKy8qKgorICogYWxhcm10aW1lcl9pbml0IC0gSW5pdGlhbGl6ZSBhbGFybSB0aW1lciBjb2RlCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgYWxhcm0gYmFzZXMgYW5kIHJlZ2lzdGVycworICogdGhlIHBvc2l4IGNsb2NrIGlkcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgYWxhcm10aW1lcl9pbml0KHZvaWQpCit7CisJaW50IGVycm9yID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3Qga19jbG9jayBhbGFybV9jbG9jayA9IHsKKwkJLmNsb2NrX2dldHJlcwk9IGFsYXJtX2Nsb2NrX2dldHJlcywKKwkJLmNsb2NrX2dldAk9IGFsYXJtX2Nsb2NrX2dldCwKKwkJLnRpbWVyX2NyZWF0ZQk9IGFsYXJtX3RpbWVyX2NyZWF0ZSwKKwkJLnRpbWVyX3NldAk9IGFsYXJtX3RpbWVyX3NldCwKKwkJLnRpbWVyX2RlbAk9IGFsYXJtX3RpbWVyX2RlbCwKKwkJLnRpbWVyX2dldAk9IGFsYXJtX3RpbWVyX2dldCwKKwkJLm5zbGVlcAkJPSBhbGFybV90aW1lcl9uc2xlZXAsCisJfTsKKworCXBvc2l4X3RpbWVyc19yZWdpc3Rlcl9jbG9jayhDTE9DS19SRUFMVElNRV9BTEFSTSwgJmFsYXJtX2Nsb2NrKTsKKwlwb3NpeF90aW1lcnNfcmVnaXN0ZXJfY2xvY2soQ0xPQ0tfQk9PVFRJTUVfQUxBUk0sICZhbGFybV9jbG9jayk7CisKKwkvKiBJbml0aWFsaXplIGFsYXJtIGJhc2VzICovCisJYWxhcm1fYmFzZXNbQUxBUk1fUkVBTFRJTUVdLmJhc2VfY2xvY2tpZCA9IENMT0NLX1JFQUxUSU1FOworCWFsYXJtX2Jhc2VzW0FMQVJNX1JFQUxUSU1FXS5nZXR0aW1lID0gJmt0aW1lX2dldF9yZWFsOworCWFsYXJtX2Jhc2VzW0FMQVJNX0JPT1RUSU1FXS5iYXNlX2Nsb2NraWQgPSBDTE9DS19CT09UVElNRTsKKwlhbGFybV9iYXNlc1tBTEFSTV9CT09UVElNRV0uZ2V0dGltZSA9ICZrdGltZV9nZXRfYm9vdHRpbWU7CisJZm9yIChpID0gMDsgaSA8IEFMQVJNX05VTVRZUEU7IGkrKykgeworCQl0aW1lcnF1ZXVlX2luaXRfaGVhZCgmYWxhcm1fYmFzZXNbaV0udGltZXJxdWV1ZSk7CisJCXNwaW5fbG9ja19pbml0KCZhbGFybV9iYXNlc1tpXS5sb2NrKTsKKwkJaHJ0aW1lcl9pbml0KCZhbGFybV9iYXNlc1tpXS50aW1lciwKKwkJCQlhbGFybV9iYXNlc1tpXS5iYXNlX2Nsb2NraWQsCisJCQkJSFJUSU1FUl9NT0RFX0FCUyk7CisJCWFsYXJtX2Jhc2VzW2ldLnRpbWVyLmZ1bmN0aW9uID0gYWxhcm10aW1lcl9maXJlZDsKKwl9CisJZXJyb3IgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFsYXJtdGltZXJfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJhbGFybXRpbWVyIiwgLTEsIE5VTEwsIDApOworCisJcmV0dXJuIGVycm9yOworfQorZGV2aWNlX2luaXRjYWxsKGFsYXJtdGltZXJfaW5pdCk7CisKKyNpZmRlZiBDT05GSUdfUlRDX0NMQVNTCisvKioKKyAqIGhhc193YWtlYWxhcm0gLSBjaGVjayBydGMgZGV2aWNlIGhhcyB3YWtlYWxhcm0gYWJpbGl0eQorICogQGRldjogY3VycmVudCBkZXZpY2UKKyAqIEBuYW1lX3B0cjogbmFtZSB0byBiZSByZXR1cm5lZAorICoKKyAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIGNoZWNrcyB0byBzZWUgaWYgdGhlIHJ0YyBkZXZpY2UgY2FuIHdha2UKKyAqIGZyb20gc3VzcGVuZC4KKyAqLworc3RhdGljIGludCBfX2luaXQgaGFzX3dha2VhbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKm5hbWVfcHRyKQoreworCXN0cnVjdCBydGNfZGV2aWNlICpjYW5kaWRhdGUgPSB0b19ydGNfZGV2aWNlKGRldik7CisKKwlpZiAoIWNhbmRpZGF0ZS0+b3BzLT5zZXRfYWxhcm0pCisJCXJldHVybiAwOworCWlmICghZGV2aWNlX21heV93YWtldXAoY2FuZGlkYXRlLT5kZXYucGFyZW50KSkKKwkJcmV0dXJuIDA7CisKKwkqKGNvbnN0IGNoYXIgKiopbmFtZV9wdHIgPSBkZXZfbmFtZShkZXYpOworCXJldHVybiAxOworfQorCisvKioKKyAqIGFsYXJtdGltZXJfaW5pdF9sYXRlIC0gTGF0ZSBpbml0aWFsaXppbmcgb2YgYWxhcm10aW1lciBjb2RlCisgKgorICogVGhpcyBmdW5jdGlvbiBsb2NhdGVzIGEgcnRjIGRldmljZSB0byB1c2UgZm9yIHdha2VhbGFybXMuCisgKiBSdW4gYXMgbGF0ZV9pbml0Y2FsbCB0byBtYWtlIHN1cmUgcnRjIGRldmljZXMgaGF2ZSBiZWVuCisgKiByZWdpc3RlcmVkLgorICovCitzdGF0aWMgaW50IF9faW5pdCBhbGFybXRpbWVyX2luaXRfbGF0ZSh2b2lkKQoreworCWNoYXIgKnN0cjsKKworCS8qIEZpbmQgYW4gcnRjIGRldmljZSBhbmQgaW5pdCB0aGUgcnRjX3RpbWVyICovCisJY2xhc3NfZmluZF9kZXZpY2UocnRjX2NsYXNzLCBOVUxMLCAmc3RyLCBoYXNfd2FrZWFsYXJtKTsKKwlpZiAoc3RyKQorCQlydGNkZXYgPSBydGNfY2xhc3Nfb3BlbihzdHIpOworCWlmICghcnRjZGV2KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5vIFJUQyBkZXZpY2UgZm91bmQsIEFMQVJNIHRpbWVycyB3aWxsIgorCQkJIiBub3Qgd2FrZSBmcm9tIHN1c3BlbmQiKTsKKwl9CisJcnRjX3RpbWVyX2luaXQoJnJ0Y3RpbWVyLCBOVUxMLCBOVUxMKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKK3N0YXRpYyBpbnQgX19pbml0IGFsYXJtdGltZXJfaW5pdF9sYXRlKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiS2VybmVsIG5vdCBidWlsdCB3aXRoIFJUQyBzdXBwb3J0LCBBTEFSTSB0aW1lcnMiCisJCSIgd2lsbCBub3Qgd2FrZSBmcm9tIHN1c3BlbmQiKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorbGF0ZV9pbml0Y2FsbChhbGFybXRpbWVyX2luaXRfbGF0ZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jIGIva2VybmVsL3RpbWUvY2xvY2tldmVudHMuYwppbmRleCAwZDc0YjliLi4yMmE5ZGE5IDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS9jbG9ja2V2ZW50cy5jCisrKyBiL2tlcm5lbC90aW1lL2Nsb2NrZXZlbnRzLmMKQEAgLTE5NCw2ICsxOTQsNzAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSk7CiAKK3N0YXRpYyB2b2lkIGNsb2NrZXZlbnRzX2NvbmZpZyhzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgdTMyIGZyZXEpCit7CisJdW5zaWduZWQgbG9uZyBzZWM7CisKKwlpZiAoIShkZXYtPmZlYXR1cmVzICYgQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCkpCisJCXJldHVybjsKKworCS8qCisJICogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIG51bWJlciBvZiBzZWNvbmRzIHdlIGNhbiBzbGVlcC4gTGltaXQKKwkgKiB0byAxMCBtaW51dGVzIGZvciBoYXJkd2FyZSB3aGljaCBjYW4gcHJvZ3JhbSBtb3JlIHRoYW4KKwkgKiAzMmJpdCB0aWNrcyBzbyB3ZSBzdGlsbCBnZXQgcmVhc29uYWJsZSBjb252ZXJzaW9uIHZhbHVlcy4KKwkgKi8KKwlzZWMgPSBkZXYtPm1heF9kZWx0YV90aWNrczsKKwlkb19kaXYoc2VjLCBmcmVxKTsKKwlpZiAoIXNlYykKKwkJc2VjID0gMTsKKwllbHNlIGlmIChzZWMgPiA2MDAgJiYgZGV2LT5tYXhfZGVsdGFfdGlja3MgPiBVSU5UX01BWCkKKwkJc2VjID0gNjAwOworCisJY2xvY2tldmVudHNfY2FsY19tdWx0X3NoaWZ0KGRldiwgZnJlcSwgc2VjKTsKKwlkZXYtPm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoZGV2LT5taW5fZGVsdGFfdGlja3MsIGRldik7CisJZGV2LT5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKGRldi0+bWF4X2RlbHRhX3RpY2tzLCBkZXYpOworfQorCisvKioKKyAqIGNsb2NrZXZlbnRzX2NvbmZpZ19hbmRfcmVnaXN0ZXIgLSBDb25maWd1cmUgYW5kIHJlZ2lzdGVyIGEgY2xvY2sgZXZlbnQgZGV2aWNlCisgKiBAZGV2OglkZXZpY2UgdG8gcmVnaXN0ZXIKKyAqIEBmcmVxOglUaGUgY2xvY2sgZnJlcXVlbmN5CisgKiBAbWluX2RlbHRhOglUaGUgbWluaW11bSBjbG9jayB0aWNrcyB0byBwcm9ncmFtIGluIG9uZXNob3QgbW9kZQorICogQG1heF9kZWx0YToJVGhlIG1heGltdW0gY2xvY2sgdGlja3MgdG8gcHJvZ3JhbSBpbiBvbmVzaG90IG1vZGUKKyAqCisgKiBtaW4vbWF4X2RlbHRhIGNhbiBiZSAwIGZvciBkZXZpY2VzIHdoaWNoIGRvIG5vdCBzdXBwb3J0IG9uZXNob3QgbW9kZS4KKyAqLwordm9pZCBjbG9ja2V2ZW50c19jb25maWdfYW5kX3JlZ2lzdGVyKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiwKKwkJCQkgICAgIHUzMiBmcmVxLCB1bnNpZ25lZCBsb25nIG1pbl9kZWx0YSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbWF4X2RlbHRhKQoreworCWRldi0+bWluX2RlbHRhX3RpY2tzID0gbWluX2RlbHRhOworCWRldi0+bWF4X2RlbHRhX3RpY2tzID0gbWF4X2RlbHRhOworCWNsb2NrZXZlbnRzX2NvbmZpZyhkZXYsIGZyZXEpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShkZXYpOworfQorCisvKioKKyAqIGNsb2NrZXZlbnRzX3VwZGF0ZV9mcmVxIC0gVXBkYXRlIGZyZXF1ZW5jeSBhbmQgcmVwcm9ncmFtIGEgY2xvY2sgZXZlbnQgZGV2aWNlLgorICogQGRldjoJZGV2aWNlIHRvIG1vZGlmeQorICogQGZyZXE6CW5ldyBkZXZpY2UgZnJlcXVlbmN5CisgKgorICogUmVjb25maWd1cmUgYW5kIHJlcHJvZ3JhbSBhIGNsb2NrIGV2ZW50IGRldmljZSBpbiBvbmVzaG90CisgKiBtb2RlLiBNdXN0IGJlIGNhbGxlZCBvbiB0aGUgY3B1IGZvciB3aGljaCB0aGUgZGV2aWNlIGRlbGl2ZXJzIHBlcgorICogY3B1IHRpbWVyIGV2ZW50cyB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQhICBSZXR1cm5zIDAgb24gc3VjY2VzcywKKyAqIC1FVElNRSB3aGVuIHRoZSBldmVudCBpcyBpbiB0aGUgcGFzdC4KKyAqLworaW50IGNsb2NrZXZlbnRzX3VwZGF0ZV9mcmVxKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmRldiwgdTMyIGZyZXEpCit7CisJY2xvY2tldmVudHNfY29uZmlnKGRldiwgZnJlcSk7CisKKwlpZiAoZGV2LT5tb2RlICE9IENMT0NLX0VWVF9NT0RFX09ORVNIT1QpCisJCXJldHVybiAwOworCisJcmV0dXJuIGNsb2NrZXZlbnRzX3Byb2dyYW1fZXZlbnQoZGV2LCBkZXYtPm5leHRfZXZlbnQsIGt0aW1lX2dldCgpKTsKK30KKwogLyoKICAqIE5vb3AgaGFuZGxlciB3aGVuIHdlIHNodXQgZG93biBhbiBldmVudCBkZXZpY2UKICAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYyBiL2tlcm5lbC90aW1lL2Nsb2Nrc291cmNlLmMKaW5kZXggNjUxOWNmNi4uZDlkNWY4YyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvY2xvY2tzb3VyY2UuYworKysgYi9rZXJuZWwvdGltZS9jbG9ja3NvdXJjZS5jCkBAIC02MjYsMTkgKzYyNiw2IEBACiAJbGlzdF9hZGQoJmNzLT5saXN0LCBlbnRyeSk7CiB9CiAKLQotLyoKLSAqIE1heGltdW0gdGltZSB3ZSBleHBlY3QgdG8gZ28gYmV0d2VlbiB0aWNrcy4gVGhpcyBpbmNsdWRlcyBpZGxlCi0gKiB0aWNrbGVzcyB0aW1lLiBJdCBwcm92aWRlcyB0aGUgdHJhZGUgb2ZmIGJldHdlZW4gc2VsZWN0aW5nIGEKLSAqIG11bHQvc2hpZnQgcGFpciB0aGF0IGlzIHZlcnkgcHJlY2lzZSBidXQgY2FuIG9ubHkgaGFuZGxlIGEgc2hvcnQKLSAqIHBlcmlvZCBvZiB0aW1lLCB2cy4gYSBtdWx0L3NoaWZ0IHBhaXIgdGhhdCBjYW4gaGFuZGxlIGxvbmcgcGVyaW9kcwotICogb2YgdGltZSBidXQgaXNuJ3QgYXMgcHJlY2lzZS4KLSAqCi0gKiBUaGlzIGlzIGEgc3Vic3lzdGVtIGNvbnN0YW50LCBhbmQgYWN0dWFsIGhhcmR3YXJlIGxpbWl0YXRpb25zCi0gKiBtYXkgb3ZlcnJpZGUgaXQgKGllOiBjbG9ja3NvdXJjZXMgdGhhdCB3cmFwIGV2ZXJ5IDMgc2Vjb25kcykuCi0gKi8KLSNkZWZpbmUgTUFYX1VQREFURV9MRU5HVEggNSAvKiBTZWNvbmRzICovCi0KIC8qKgogICogX19jbG9ja3NvdXJjZV91cGRhdGVmcmVxX3NjYWxlIC0gVXNlZCB1cGRhdGUgY2xvY2tzb3VyY2Ugd2l0aCBuZXcgZnJlcQogICogQHQ6CQljbG9ja3NvdXJjZSB0byBiZSByZWdpc3RlcmVkCkBAIC02NTIsMTUgKzYzOSwyOCBAQAogICovCiB2b2lkIF9fY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9zY2FsZShzdHJ1Y3QgY2xvY2tzb3VyY2UgKmNzLCB1MzIgc2NhbGUsIHUzMiBmcmVxKQogeworCXVuc2lnbmVkIGxvbmcgc2VjOworCiAJLyoKLQkgKiBJZGVhbGx5IHdlIHdhbnQgdG8gdXNlICBzb21lIG9mIHRoZSBsaW1pdHMgdXNlZCBpbgotCSAqIGNsb2Nrc291cmNlX21heF9kZWZlcm1lbnQsIHRvIHByb3ZpZGUgYSBtb3JlIGluZm9ybWVkCi0JICogTUFYX1VQREFURV9MRU5HVEguIEJ1dCBmb3Igbm93IHRoaXMganVzdCBnZXRzIHRoZQotCSAqIHJlZ2lzdGVyIGludGVyZmFjZSB3b3JraW5nIHByb3Blcmx5LgorCSAqIENhbGMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHNlY29uZHMgd2hpY2ggd2UgY2FuIHJ1biBiZWZvcmUKKwkgKiB3cmFwcGluZyBhcm91bmQuIEZvciBjbG9ja3NvdXJjZXMgd2hpY2ggaGF2ZSBhIG1hc2sgPiAzMmJpdAorCSAqIHdlIG5lZWQgdG8gbGltaXQgdGhlIG1heCBzbGVlcCB0aW1lIHRvIGhhdmUgYSBnb29kCisJICogY29udmVyc2lvbiBwcmVjaXNpb24uIDEwIG1pbnV0ZXMgaXMgc3RpbGwgYSByZWFzb25hYmxlCisJICogYW1vdW50LiBUaGF0IHJlc3VsdHMgaW4gYSBzaGlmdCB2YWx1ZSBvZiAyNCBmb3IgYQorCSAqIGNsb2Nrc291cmNlIHdpdGggbWFzayA+PSA0MGJpdCBhbmQgZiA+PSA0R0h6LiBUaGF0IG1hcHMgdG8KKwkgKiB+IDAuMDZwcG0gZ3JhbnVsYXJpdHkgZm9yIE5UUC4gV2UgYXBwbHkgdGhlIHNhbWUgMTIuNSUKKwkgKiBtYXJnaW4gYXMgd2UgZG8gaW4gY2xvY2tzb3VyY2VfbWF4X2RlZmVybWVudCgpCiAJICovCisJc2VjID0gKGNzLT5tYXNrIC0gKGNzLT5tYXNrID4+IDUpKTsKKwlkb19kaXYoc2VjLCBmcmVxKTsKKwlkb19kaXYoc2VjLCBzY2FsZSk7CisJaWYgKCFzZWMpCisJCXNlYyA9IDE7CisJZWxzZSBpZiAoc2VjID4gNjAwICYmIGNzLT5tYXNrID4gVUlOVF9NQVgpCisJCXNlYyA9IDYwMDsKKwogCWNsb2Nrc19jYWxjX211bHRfc2hpZnQoJmNzLT5tdWx0LCAmY3MtPnNoaWZ0LCBmcmVxLAotCQkJCSAgICAgIE5TRUNfUEVSX1NFQy9zY2FsZSwKLQkJCQkgICAgICBNQVhfVVBEQVRFX0xFTkdUSCpzY2FsZSk7CisJCQkgICAgICAgTlNFQ19QRVJfU0VDIC8gc2NhbGUsIHNlYyAqIHNjYWxlKTsKIAljcy0+bWF4X2lkbGVfbnMgPSBjbG9ja3NvdXJjZV9tYXhfZGVmZXJtZW50KGNzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKF9fY2xvY2tzb3VyY2VfdXBkYXRlZnJlcV9zY2FsZSk7CkBAIC02ODUsOCArNjg1LDggQEAKIAkvKiBBZGQgY2xvY2tzb3VyY2UgdG8gdGhlIGNsY29rc291cmNlIGxpc3QgKi8KIAltdXRleF9sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiAJY2xvY2tzb3VyY2VfZW5xdWV1ZShjcyk7Ci0JY2xvY2tzb3VyY2Vfc2VsZWN0KCk7CiAJY2xvY2tzb3VyY2VfZW5xdWV1ZV93YXRjaGRvZyhjcyk7CisJY2xvY2tzb3VyY2Vfc2VsZWN0KCk7CiAJbXV0ZXhfdW5sb2NrKCZjbG9ja3NvdXJjZV9tdXRleCk7CiAJcmV0dXJuIDA7CiB9CkBAIC03MDYsOCArNzA2LDggQEAKIAogCW11dGV4X2xvY2soJmNsb2Nrc291cmNlX211dGV4KTsKIAljbG9ja3NvdXJjZV9lbnF1ZXVlKGNzKTsKLQljbG9ja3NvdXJjZV9zZWxlY3QoKTsKIAljbG9ja3NvdXJjZV9lbnF1ZXVlX3dhdGNoZG9nKGNzKTsKKwljbG9ja3NvdXJjZV9zZWxlY3QoKTsKIAltdXRleF91bmxvY2soJmNsb2Nrc291cmNlX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3Bvc2l4LWNsb2NrLmMgYi9rZXJuZWwvdGltZS9wb3NpeC1jbG9jay5jCmluZGV4IDI1MDI4ZGQuLmMzNDBjYTYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3Bvc2l4LWNsb2NrLmMKKysrIGIva2VybmVsL3RpbWUvcG9zaXgtY2xvY2suYwpAQCAtMTksNyArMTksNiBAQAogICovCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXgtY2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KQEAgLTM0LDE5ICszMywxOSBAQAogewogCXN0cnVjdCBwb3NpeF9jbG9jayAqY2xrID0gZnAtPnByaXZhdGVfZGF0YTsKIAotCW11dGV4X2xvY2soJmNsay0+bXV0ZXgpOworCWRvd25fcmVhZCgmY2xrLT5yd3NlbSk7CiAKIAlpZiAoIWNsay0+em9tYmllKQogCQlyZXR1cm4gY2xrOwogCi0JbXV0ZXhfdW5sb2NrKCZjbGstPm11dGV4KTsKKwl1cF9yZWFkKCZjbGstPnJ3c2VtKTsKIAogCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfcG9zaXhfY2xvY2soc3RydWN0IHBvc2l4X2Nsb2NrICpjbGspCiB7Ci0JbXV0ZXhfdW5sb2NrKCZjbGstPm11dGV4KTsKKwl1cF9yZWFkKCZjbGstPnJ3c2VtKTsKIH0KIAogc3RhdGljIHNzaXplX3QgcG9zaXhfY2xvY2tfcmVhZChzdHJ1Y3QgZmlsZSAqZnAsIGNoYXIgX191c2VyICpidWYsCkBAIC0xNTYsNyArMTU1LDcgQEAKIAlzdHJ1Y3QgcG9zaXhfY2xvY2sgKmNsayA9CiAJCWNvbnRhaW5lcl9vZihpbm9kZS0+aV9jZGV2LCBzdHJ1Y3QgcG9zaXhfY2xvY2ssIGNkZXYpOwogCi0JbXV0ZXhfbG9jaygmY2xrLT5tdXRleCk7CisJZG93bl9yZWFkKCZjbGstPnJ3c2VtKTsKIAogCWlmIChjbGstPnpvbWJpZSkgewogCQllcnIgPSAtRU5PREVWOwpAQCAtMTcyLDcgKzE3MSw3IEBACiAJCWZwLT5wcml2YXRlX2RhdGEgPSBjbGs7CiAJfQogb3V0OgotCW11dGV4X3VubG9jaygmY2xrLT5tdXRleCk7CisJdXBfcmVhZCgmY2xrLT5yd3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjExLDI1ICsyMTAsMjAgQEAKIAlpbnQgZXJyOwogCiAJa3JlZl9pbml0KCZjbGstPmtyZWYpOwotCW11dGV4X2luaXQoJmNsay0+bXV0ZXgpOworCWluaXRfcndzZW0oJmNsay0+cndzZW0pOwogCiAJY2Rldl9pbml0KCZjbGstPmNkZXYsICZwb3NpeF9jbG9ja19maWxlX29wZXJhdGlvbnMpOwogCWNsay0+Y2Rldi5vd25lciA9IGNsay0+b3BzLm93bmVyOwogCWVyciA9IGNkZXZfYWRkKCZjbGstPmNkZXYsIGRldmlkLCAxKTsKLQlpZiAoZXJyKQotCQlnb3RvIG5vX2NkZXY7CiAKIAlyZXR1cm4gZXJyOwotbm9fY2RldjoKLQltdXRleF9kZXN0cm95KCZjbGstPm11dGV4KTsKLQlyZXR1cm4gZXJyOwogfQogRVhQT1JUX1NZTUJPTF9HUEwocG9zaXhfY2xvY2tfcmVnaXN0ZXIpOwogCiBzdGF0aWMgdm9pZCBkZWxldGVfY2xvY2soc3RydWN0IGtyZWYgKmtyZWYpCiB7CiAJc3RydWN0IHBvc2l4X2Nsb2NrICpjbGsgPSBjb250YWluZXJfb2Yoa3JlZiwgc3RydWN0IHBvc2l4X2Nsb2NrLCBrcmVmKTsKLQltdXRleF9kZXN0cm95KCZjbGstPm11dGV4KTsKKwogCWlmIChjbGstPnJlbGVhc2UpCiAJCWNsay0+cmVsZWFzZShjbGspOwogfQpAQCAtMjM4LDkgKzIzMiw5IEBACiB7CiAJY2Rldl9kZWwoJmNsay0+Y2Rldik7CiAKLQltdXRleF9sb2NrKCZjbGstPm11dGV4KTsKKwlkb3duX3dyaXRlKCZjbGstPnJ3c2VtKTsKIAljbGstPnpvbWJpZSA9IHRydWU7Ci0JbXV0ZXhfdW5sb2NrKCZjbGstPm11dGV4KTsKKwl1cF93cml0ZSgmY2xrLT5yd3NlbSk7CiAKIAlrcmVmX3B1dCgmY2xrLT5rcmVmLCBkZWxldGVfY2xvY2spOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYyBiL2tlcm5lbC90aW1lL3RpY2stYnJvYWRjYXN0LmMKaW5kZXggZGE4MDBmZi4uNzIzYzc2MyAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWUvdGljay1icm9hZGNhc3QuYworKysgYi9rZXJuZWwvdGltZS90aWNrLWJyb2FkY2FzdC5jCkBAIC01MjIsMTAgKzUyMiwxMSBAQAogICovCiB2b2lkIHRpY2tfYnJvYWRjYXN0X3NldHVwX29uZXNob3Qoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYmMpCiB7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwogCS8qIFNldCBpdCB1cCBvbmx5IG9uY2UgISAqLwogCWlmIChiYy0+ZXZlbnRfaGFuZGxlciAhPSB0aWNrX2hhbmRsZV9vbmVzaG90X2Jyb2FkY2FzdCkgewogCQlpbnQgd2FzX3BlcmlvZGljID0gYmMtPm1vZGUgPT0gQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM7Ci0JCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAkJYmMtPmV2ZW50X2hhbmRsZXIgPSB0aWNrX2hhbmRsZV9vbmVzaG90X2Jyb2FkY2FzdDsKIAkJY2xvY2tldmVudHNfc2V0X21vZGUoYmMsIENMT0NLX0VWVF9NT0RFX09ORVNIT1QpOwpAQCAtNTUxLDYgKzU1MiwxNSBAQAogCQkJdGlja19icm9hZGNhc3Rfc2V0X2V2ZW50KHRpY2tfbmV4dF9wZXJpb2QsIDEpOwogCQl9IGVsc2UKIAkJCWJjLT5uZXh0X2V2ZW50LnR2NjQgPSBLVElNRV9NQVg7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGhlIGZpcnN0IGNwdSB3aGljaCBzd2l0Y2hlcyB0byBvbmVzaG90IG1vZGUgc2V0cworCQkgKiB0aGUgYml0IGZvciBhbGwgb3RoZXIgY3B1cyB3aGljaCBhcmUgaW4gdGhlIGdlbmVyYWwKKwkJICogKHBlcmlvZGljKSBicm9hZGNhc3QgbWFzay4gU28gdGhlIGJpdCBpcyBzZXQgYW5kCisJCSAqIHdvdWxkIHByZXZlbnQgdGhlIGZpcnN0IGJyb2FkY2FzdCBlbnRlciBhZnRlciB0aGlzCisJCSAqIHRvIHByb2dyYW0gdGhlIGJjIGRldmljZS4KKwkJICovCisJCXRpY2tfYnJvYWRjYXN0X2NsZWFyX29uZXNob3QoY3B1KTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMgYi9rZXJuZWwvdGltZS90aW1la2VlcGluZy5jCmluZGV4IDhhZDVkNTcuLjhlNmEwNWEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL3RpbWVrZWVwaW5nLmMKKysrIGIva2VybmVsL3RpbWUvdGltZWtlZXBpbmcuYwpAQCAtNTk2LDYgKzU5Niw1OCBAQAogc3RhdGljIHN0cnVjdCB0aW1lc3BlYyB0aW1la2VlcGluZ19zdXNwZW5kX3RpbWU7CiAKIC8qKgorICogX190aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lIC0gSW50ZXJuYWwgZnVuY3Rpb24gdG8gYWRkIHNsZWVwIGludGVydmFsCisgKiBAZGVsdGE6IHBvaW50ZXIgdG8gYSB0aW1lc3BlYyBkZWx0YSB2YWx1ZQorICoKKyAqIFRha2VzIGEgdGltZXNwZWMgb2Zmc2V0IG1lYXN1cmluZyBhIHN1c3BlbmQgaW50ZXJ2YWwgYW5kIHByb3Blcmx5CisgKiBhZGRzIHRoZSBzbGVlcCBvZmZzZXQgdG8gdGhlIHRpbWVrZWVwaW5nIHZhcmlhYmxlcy4KKyAqLworc3RhdGljIHZvaWQgX190aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lKHN0cnVjdCB0aW1lc3BlYyAqZGVsdGEpCit7CisJeHRpbWUgPSB0aW1lc3BlY19hZGQoeHRpbWUsICpkZWx0YSk7CisJd2FsbF90b19tb25vdG9uaWMgPSB0aW1lc3BlY19zdWIod2FsbF90b19tb25vdG9uaWMsICpkZWx0YSk7CisJdG90YWxfc2xlZXBfdGltZSA9IHRpbWVzcGVjX2FkZCh0b3RhbF9zbGVlcF90aW1lLCAqZGVsdGEpOworfQorCisKKy8qKgorICogdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZSAtIEFkZHMgc3VzcGVuZCBpbnRlcnZhbCB0byB0aW1lZWtlZXBpbmcgdmFsdWVzCisgKiBAZGVsdGE6IHBvaW50ZXIgdG8gYSB0aW1lc3BlYyBkZWx0YSB2YWx1ZQorICoKKyAqIFRoaXMgaG9vayBpcyBmb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGNhbm5vdCBzdXBwb3J0IHJlYWRfcGVyc2lzdGVudF9jbG9jaworICogYmVjYXVzZSB0aGVpciBSVEMvcGVyc2lzdGVudCBjbG9jayBpcyBvbmx5IGFjY2Vzc2libGUgd2hlbiBpcnFzIGFyZSBlbmFibGVkLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IHJ0Y19yZXN1bWUoKSwgYW5kIGFsbG93cworICogYSBzdXNwZW5kIG9mZnNldCB0byBiZSBpbmplY3RlZCBpbnRvIHRoZSB0aW1la2VlcGluZyB2YWx1ZXMuCisgKi8KK3ZvaWQgdGltZWtlZXBpbmdfaW5qZWN0X3NsZWVwdGltZShzdHJ1Y3QgdGltZXNwZWMgKmRlbHRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCisJLyogTWFrZSBzdXJlIHdlIGRvbid0IHNldCB0aGUgY2xvY2sgdHdpY2UgKi8KKwlyZWFkX3BlcnNpc3RlbnRfY2xvY2soJnRzKTsKKwlpZiAoISh0cy50dl9zZWMgPT0gMCAmJiB0cy50dl9uc2VjID09IDApKQorCQlyZXR1cm47CisKKwl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKKwl0aW1la2VlcGluZ19mb3J3YXJkX25vdygpOworCisJX190aW1la2VlcGluZ19pbmplY3Rfc2xlZXB0aW1lKGRlbHRhKTsKKworCXRpbWVrZWVwZXIubnRwX2Vycm9yID0gMDsKKwludHBfY2xlYXIoKTsKKwl1cGRhdGVfdnN5c2NhbGwoJnh0aW1lLCAmd2FsbF90b19tb25vdG9uaWMsIHRpbWVrZWVwZXIuY2xvY2ssCisJCQkJdGltZWtlZXBlci5tdWx0KTsKKworCXdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisKKwkvKiBzaWduYWwgaHJ0aW1lcnMgYWJvdXQgdGltZSBjaGFuZ2UgKi8KKwljbG9ja193YXNfc2V0KCk7Cit9CisKKworLyoqCiAgKiB0aW1la2VlcGluZ19yZXN1bWUgLSBSZXN1bWVzIHRoZSBnZW5lcmljIHRpbWVrZWVwaW5nIHN1YnN5c3RlbS4KICAqCiAgKiBUaGlzIGlzIGZvciB0aGUgZ2VuZXJpYyBjbG9ja3NvdXJjZSB0aW1la2VlcGluZy4KQEAgLTYxNSw5ICs2NjcsNyBAQAogCiAJaWYgKHRpbWVzcGVjX2NvbXBhcmUoJnRzLCAmdGltZWtlZXBpbmdfc3VzcGVuZF90aW1lKSA+IDApIHsKIAkJdHMgPSB0aW1lc3BlY19zdWIodHMsIHRpbWVrZWVwaW5nX3N1c3BlbmRfdGltZSk7Ci0JCXh0aW1lID0gdGltZXNwZWNfYWRkKHh0aW1lLCB0cyk7Ci0JCXdhbGxfdG9fbW9ub3RvbmljID0gdGltZXNwZWNfc3ViKHdhbGxfdG9fbW9ub3RvbmljLCB0cyk7Ci0JCXRvdGFsX3NsZWVwX3RpbWUgPSB0aW1lc3BlY19hZGQodG90YWxfc2xlZXBfdGltZSwgdHMpOworCQlfX3RpbWVrZWVwaW5nX2luamVjdF9zbGVlcHRpbWUoJnRzKTsKIAl9CiAJLyogcmUtYmFzZSB0aGUgbGFzdCBjeWNsZSB2YWx1ZSAqLwogCXRpbWVrZWVwZXIuY2xvY2stPmN5Y2xlX2xhc3QgPSB0aW1la2VlcGVyLmNsb2NrLT5yZWFkKHRpbWVrZWVwZXIuY2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL0tjb25maWcgYi9rZXJuZWwvdHJhY2UvS2NvbmZpZwppbmRleCA2MWQ3ZDU5Zi4uMmFkMzllNSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL0tjb25maWcKKysrIGIva2VybmVsL3RyYWNlL0tjb25maWcKQEAgLTE0MSw3ICsxNDEsNyBAQAogY29uZmlnIEZVTkNUSU9OX1RSQUNFUgogCWJvb2wgIktlcm5lbCBGdW5jdGlvbiBUcmFjZXIiCiAJZGVwZW5kcyBvbiBIQVZFX0ZVTkNUSU9OX1RSQUNFUgotCXNlbGVjdCBGUkFNRV9QT0lOVEVSIGlmICFBUk1fVU5XSU5EICYmICFTMzkwCisJc2VsZWN0IEZSQU1FX1BPSU5URVIgaWYgIUFSTV9VTldJTkQgJiYgIVMzOTAgJiYgIU1JQ1JPQkxBWkUKIAlzZWxlY3QgS0FMTFNZTVMKIAlzZWxlY3QgR0VORVJJQ19UUkFDRVIKIAlzZWxlY3QgQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvZnRyYWNlLmMgYi9rZXJuZWwvdHJhY2UvZnRyYWNlLmMKaW5kZXggZWUyNGZhMS4uZDAxN2MyYyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL2Z0cmFjZS5jCisrKyBiL2tlcm5lbC90cmFjZS9mdHJhY2UuYwpAQCAtMzksMjAgKzM5LDI2IEBACiAjaW5jbHVkZSAidHJhY2Vfc3RhdC5oIgogCiAjZGVmaW5lIEZUUkFDRV9XQVJOX09OKGNvbmQpCQkJXAotCWRvIHsJCQkJCVwKLQkJaWYgKFdBUk5fT04oY29uZCkpCQlcCisJKHsJCQkJCVwKKwkJaW50IF9fX3IgPSBjb25kOwkJXAorCQlpZiAoV0FSTl9PTihfX19yKSkJCVwKIAkJCWZ0cmFjZV9raWxsKCk7CQlcCi0JfSB3aGlsZSAoMCkKKwkJX19fcjsJCQkJXAorCX0pCiAKICNkZWZpbmUgRlRSQUNFX1dBUk5fT05fT05DRShjb25kKQkJXAotCWRvIHsJCQkJCVwKLQkJaWYgKFdBUk5fT05fT05DRShjb25kKSkJCVwKKwkoewkJCQkJXAorCQlpbnQgX19fciA9IGNvbmQ7CQlcCisJCWlmIChXQVJOX09OX09OQ0UoX19fcikpCQlcCiAJCQlmdHJhY2Vfa2lsbCgpOwkJXAotCX0gd2hpbGUgKDApCisJCV9fX3I7CQkJCVwKKwl9KQogCiAvKiBoYXNoIGJpdHMgZm9yIHNwZWNpZmljIGZ1bmN0aW9uIHNlbGVjdGlvbiAqLwogI2RlZmluZSBGVFJBQ0VfSEFTSF9CSVRTIDcKICNkZWZpbmUgRlRSQUNFX0ZVTkNfSEFTSFNJWkUgKDEgPDwgRlRSQUNFX0hBU0hfQklUUykKKyNkZWZpbmUgRlRSQUNFX0hBU0hfREVGQVVMVF9CSVRTIDEwCisjZGVmaW5lIEZUUkFDRV9IQVNIX01BWF9CSVRTIDEyCiAKIC8qIGZ0cmFjZV9lbmFibGVkIGlzIGEgbWV0aG9kIHRvIHR1cm4gZnRyYWNlIG9uIG9yIG9mZiAqLwogaW50IGZ0cmFjZV9lbmFibGVkIF9fcmVhZF9tb3N0bHk7CkBAIC04MSwyMyArODcsMjkgQEAKIAkuZnVuYwkJPSBmdHJhY2Vfc3R1YiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyAqZnRyYWNlX2xpc3QgX19yZWFkX21vc3RseSA9ICZmdHJhY2VfbGlzdF9lbmQ7CitzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgKmZ0cmFjZV9nbG9iYWxfbGlzdCBfX3JlYWRfbW9zdGx5ID0gJmZ0cmFjZV9saXN0X2VuZDsKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyAqZnRyYWNlX29wc19saXN0IF9fcmVhZF9tb3N0bHkgPSAmZnRyYWNlX2xpc3RfZW5kOwogZnRyYWNlX2Z1bmNfdCBmdHJhY2VfdHJhY2VfZnVuY3Rpb24gX19yZWFkX21vc3RseSA9IGZ0cmFjZV9zdHViOwogZnRyYWNlX2Z1bmNfdCBfX2Z0cmFjZV90cmFjZV9mdW5jdGlvbiBfX3JlYWRfbW9zdGx5ID0gZnRyYWNlX3N0dWI7CiBmdHJhY2VfZnVuY190IGZ0cmFjZV9waWRfZnVuY3Rpb24gX19yZWFkX21vc3RseSA9IGZ0cmFjZV9zdHViOworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGdsb2JhbF9vcHM7CisKK3N0YXRpYyB2b2lkCitmdHJhY2Vfb3BzX2xpc3RfZnVuYyh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCk7CiAKIC8qCi0gKiBUcmF2ZXJzZSB0aGUgZnRyYWNlX2xpc3QsIGludm9raW5nIGFsbCBlbnRyaWVzLiAgVGhlIHJlYXNvbiB0aGF0IHdlCisgKiBUcmF2ZXJzZSB0aGUgZnRyYWNlX2dsb2JhbF9saXN0LCBpbnZva2luZyBhbGwgZW50cmllcy4gIFRoZSByZWFzb24gdGhhdCB3ZQogICogY2FuIHVzZSByY3VfZGVyZWZlcmVuY2VfcmF3KCkgaXMgdGhhdCBlbGVtZW50cyByZW1vdmVkIGZyb20gdGhpcyBsaXN0CiAgKiBhcmUgc2ltcGx5IGxlYWtlZCwgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBpbnRlcmFjdCB3aXRoIGEgZ3JhY2UtcGVyaW9kCiAgKiBtZWNoYW5pc20uICBUaGUgcmN1X2RlcmVmZXJlbmNlX3JhdygpIGNhbGxzIGFyZSBuZWVkZWQgdG8gaGFuZGxlCi0gKiBjb25jdXJyZW50IGluc2VydGlvbnMgaW50byB0aGUgZnRyYWNlX2xpc3QuCisgKiBjb25jdXJyZW50IGluc2VydGlvbnMgaW50byB0aGUgZnRyYWNlX2dsb2JhbF9saXN0LgogICoKICAqIFNpbGx5IEFscGhhIGFuZCBzaWxseSBwb2ludGVyLXNwZWN1bGF0aW9uIGNvbXBpbGVyIG9wdGltaXphdGlvbnMhCiAgKi8KLXN0YXRpYyB2b2lkIGZ0cmFjZV9saXN0X2Z1bmModW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBwYXJlbnRfaXApCitzdGF0aWMgdm9pZCBmdHJhY2VfZ2xvYmFsX2xpc3RfZnVuYyh1bnNpZ25lZCBsb25nIGlwLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKIHsKLQlzdHJ1Y3QgZnRyYWNlX29wcyAqb3AgPSByY3VfZGVyZWZlcmVuY2VfcmF3KGZ0cmFjZV9saXN0KTsgLypzZWUgYWJvdmUqLworCXN0cnVjdCBmdHJhY2Vfb3BzICpvcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoZnRyYWNlX2dsb2JhbF9saXN0KTsgLypzZWUgYWJvdmUqLwogCiAJd2hpbGUgKG9wICE9ICZmdHJhY2VfbGlzdF9lbmQpIHsKIAkJb3AtPmZ1bmMoaXAsIHBhcmVudF9pcCk7CkBAIC0xNDcsNDYgKzE1OSw2OSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oc3RydWN0IGZ0cmFjZV9vcHMgKm9wcykKK3N0YXRpYyB2b2lkIHVwZGF0ZV9nbG9iYWxfb3BzKHZvaWQpCiB7Ci0Jb3BzLT5uZXh0ID0gZnRyYWNlX2xpc3Q7CisJZnRyYWNlX2Z1bmNfdCBmdW5jOworCiAJLyoKLQkgKiBXZSBhcmUgZW50ZXJpbmcgb3BzIGludG8gdGhlIGZ0cmFjZV9saXN0IGJ1dCBhbm90aGVyCi0JICogQ1BVIG1pZ2h0IGJlIHdhbGtpbmcgdGhhdCBsaXN0LiBXZSBuZWVkIHRvIG1ha2Ugc3VyZQotCSAqIHRoZSBvcHMtPm5leHQgcG9pbnRlciBpcyB2YWxpZCBiZWZvcmUgYW5vdGhlciBDUFUgc2VlcwotCSAqIHRoZSBvcHMgcG9pbnRlciBpbmNsdWRlZCBpbnRvIHRoZSBmdHJhY2VfbGlzdC4KKwkgKiBJZiB0aGVyZSdzIG9ubHkgb25lIGZ1bmN0aW9uIHJlZ2lzdGVyZWQsIHRoZW4gY2FsbCB0aGF0CisJICogZnVuY3Rpb24gZGlyZWN0bHkuIE90aGVyd2lzZSwgd2UgbmVlZCB0byBpdGVyYXRlIG92ZXIgdGhlCisJICogcmVnaXN0ZXJlZCBjYWxsZXJzLgogCSAqLwotCXJjdV9hc3NpZ25fcG9pbnRlcihmdHJhY2VfbGlzdCwgb3BzKTsKKwlpZiAoZnRyYWNlX2dsb2JhbF9saXN0ID09ICZmdHJhY2VfbGlzdF9lbmQgfHwKKwkgICAgZnRyYWNlX2dsb2JhbF9saXN0LT5uZXh0ID09ICZmdHJhY2VfbGlzdF9lbmQpCisJCWZ1bmMgPSBmdHJhY2VfZ2xvYmFsX2xpc3QtPmZ1bmM7CisJZWxzZQorCQlmdW5jID0gZnRyYWNlX2dsb2JhbF9saXN0X2Z1bmM7CiAKLQlpZiAoZnRyYWNlX2VuYWJsZWQpIHsKLQkJZnRyYWNlX2Z1bmNfdCBmdW5jOwotCi0JCWlmIChvcHMtPm5leHQgPT0gJmZ0cmFjZV9saXN0X2VuZCkKLQkJCWZ1bmMgPSBvcHMtPmZ1bmM7Ci0JCWVsc2UKLQkJCWZ1bmMgPSBmdHJhY2VfbGlzdF9mdW5jOwotCi0JCWlmICghbGlzdF9lbXB0eSgmZnRyYWNlX3BpZHMpKSB7Ci0JCQlzZXRfZnRyYWNlX3BpZF9mdW5jdGlvbihmdW5jKTsKLQkJCWZ1bmMgPSBmdHJhY2VfcGlkX2Z1bmM7Ci0JCX0KLQotCQkvKgotCQkgKiBGb3Igb25lIGZ1bmMsIHNpbXBseSBjYWxsIGl0IGRpcmVjdGx5LgotCQkgKiBGb3IgbW9yZSB0aGFuIG9uZSBmdW5jLCBjYWxsIHRoZSBjaGFpbi4KLQkJICovCi0jaWZkZWYgQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKLQkJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnVuYzsKLSNlbHNlCi0JCV9fZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnVuYzsKLQkJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnRyYWNlX3Rlc3Rfc3RvcF9mdW5jOwotI2VuZGlmCisJLyogSWYgd2UgZmlsdGVyIG9uIHBpZHMsIHVwZGF0ZSB0byB1c2UgdGhlIHBpZCBmdW5jdGlvbiAqLworCWlmICghbGlzdF9lbXB0eSgmZnRyYWNlX3BpZHMpKSB7CisJCXNldF9mdHJhY2VfcGlkX2Z1bmN0aW9uKGZ1bmMpOworCQlmdW5jID0gZnRyYWNlX3BpZF9mdW5jOwogCX0KIAotCXJldHVybiAwOworCWdsb2JhbF9vcHMuZnVuYyA9IGZ1bmM7CiB9CiAKLXN0YXRpYyBpbnQgX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQorc3RhdGljIHZvaWQgdXBkYXRlX2Z0cmFjZV9mdW5jdGlvbih2b2lkKQoreworCWZ0cmFjZV9mdW5jX3QgZnVuYzsKKworCXVwZGF0ZV9nbG9iYWxfb3BzKCk7CisKKwkvKgorCSAqIElmIHdlIGFyZSBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCB0aGlzIG9wcyBpcworCSAqIG5vdCBkeW5hbWljLCB0aGVuIGhhdmUgdGhlIG1jb3VudCB0cmFtcG9saW5lIGNhbGwKKwkgKiB0aGUgZnVuY3Rpb24gZGlyZWN0bHkKKwkgKi8KKwlpZiAoZnRyYWNlX29wc19saXN0ID09ICZmdHJhY2VfbGlzdF9lbmQgfHwKKwkgICAgKGZ0cmFjZV9vcHNfbGlzdC0+bmV4dCA9PSAmZnRyYWNlX2xpc3RfZW5kICYmCisJICAgICAhKGZ0cmFjZV9vcHNfbGlzdC0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0RZTkFNSUMpKSkKKwkJZnVuYyA9IGZ0cmFjZV9vcHNfbGlzdC0+ZnVuYzsKKwllbHNlCisJCWZ1bmMgPSBmdHJhY2Vfb3BzX2xpc3RfZnVuYzsKKworI2lmZGVmIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCisJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnVuYzsKKyNlbHNlCisJX19mdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdW5jOworCWZ0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ0cmFjZV90ZXN0X3N0b3BfZnVuYzsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBhZGRfZnRyYWNlX29wcyhzdHJ1Y3QgZnRyYWNlX29wcyAqKmxpc3QsIHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMpCit7CisJb3BzLT5uZXh0ID0gKmxpc3Q7CisJLyoKKwkgKiBXZSBhcmUgZW50ZXJpbmcgb3BzIGludG8gdGhlIGxpc3QgYnV0IGFub3RoZXIKKwkgKiBDUFUgbWlnaHQgYmUgd2Fsa2luZyB0aGF0IGxpc3QuIFdlIG5lZWQgdG8gbWFrZSBzdXJlCisJICogdGhlIG9wcy0+bmV4dCBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSBhbm90aGVyIENQVSBzZWVzCisJICogdGhlIG9wcyBwb2ludGVyIGluY2x1ZGVkIGludG8gdGhlIGxpc3QuCisJICovCisJcmN1X2Fzc2lnbl9wb2ludGVyKCpsaXN0LCBvcHMpOworfQorCitzdGF0aWMgaW50IHJlbW92ZV9mdHJhY2Vfb3BzKHN0cnVjdCBmdHJhY2Vfb3BzICoqbGlzdCwgc3RydWN0IGZ0cmFjZV9vcHMgKm9wcykKIHsKIAlzdHJ1Y3QgZnRyYWNlX29wcyAqKnA7CiAKQEAgLTE5NCwxMyArMjI5LDEyIEBACiAJICogSWYgd2UgYXJlIHJlbW92aW5nIHRoZSBsYXN0IGZ1bmN0aW9uLCB0aGVuIHNpbXBseSBwb2ludAogCSAqIHRvIHRoZSBmdHJhY2Vfc3R1Yi4KIAkgKi8KLQlpZiAoZnRyYWNlX2xpc3QgPT0gb3BzICYmIG9wcy0+bmV4dCA9PSAmZnRyYWNlX2xpc3RfZW5kKSB7Ci0JCWZ0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ0cmFjZV9zdHViOwotCQlmdHJhY2VfbGlzdCA9ICZmdHJhY2VfbGlzdF9lbmQ7CisJaWYgKCpsaXN0ID09IG9wcyAmJiBvcHMtPm5leHQgPT0gJmZ0cmFjZV9saXN0X2VuZCkgeworCQkqbGlzdCA9ICZmdHJhY2VfbGlzdF9lbmQ7CiAJCXJldHVybiAwOwogCX0KIAotCWZvciAocCA9ICZmdHJhY2VfbGlzdDsgKnAgIT0gJmZ0cmFjZV9saXN0X2VuZDsgcCA9ICYoKnApLT5uZXh0KQorCWZvciAocCA9IGxpc3Q7ICpwICE9ICZmdHJhY2VfbGlzdF9lbmQ7IHAgPSAmKCpwKS0+bmV4dCkKIAkJaWYgKCpwID09IG9wcykKIAkJCWJyZWFrOwogCkBAIC0yMDgsNTMgKzI0Miw4MyBAQAogCQlyZXR1cm4gLTE7CiAKIAkqcCA9ICgqcCktPm5leHQ7CisJcmV0dXJuIDA7Cit9CiAKLQlpZiAoZnRyYWNlX2VuYWJsZWQpIHsKLQkJLyogSWYgd2Ugb25seSBoYXZlIG9uZSBmdW5jIGxlZnQsIHRoZW4gY2FsbCB0aGF0IGRpcmVjdGx5ICovCi0JCWlmIChmdHJhY2VfbGlzdC0+bmV4dCA9PSAmZnRyYWNlX2xpc3RfZW5kKSB7Ci0JCQlmdHJhY2VfZnVuY190IGZ1bmMgPSBmdHJhY2VfbGlzdC0+ZnVuYzsKK3N0YXRpYyBpbnQgX19yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oc3RydWN0IGZ0cmFjZV9vcHMgKm9wcykKK3sKKwlpZiAoZnRyYWNlX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKIAotCQkJaWYgKCFsaXN0X2VtcHR5KCZmdHJhY2VfcGlkcykpIHsKLQkJCQlzZXRfZnRyYWNlX3BpZF9mdW5jdGlvbihmdW5jKTsKLQkJCQlmdW5jID0gZnRyYWNlX3BpZF9mdW5jOwotCQkJfQotI2lmZGVmIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFX01DT1VOVF9URVNUCi0JCQlmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdW5jOwotI2Vsc2UKLQkJCV9fZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnVuYzsKLSNlbmRpZgotCQl9Ci0JfQorCWlmIChGVFJBQ0VfV0FSTl9PTihvcHMgPT0gJmdsb2JhbF9vcHMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChXQVJOX09OKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFjb3JlX2tlcm5lbF9kYXRhKCh1bnNpZ25lZCBsb25nKW9wcykpCisJCW9wcy0+ZmxhZ3MgfD0gRlRSQUNFX09QU19GTF9EWU5BTUlDOworCisJaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0dMT0JBTCkgeworCQlpbnQgZmlyc3QgPSBmdHJhY2VfZ2xvYmFsX2xpc3QgPT0gJmZ0cmFjZV9saXN0X2VuZDsKKwkJYWRkX2Z0cmFjZV9vcHMoJmZ0cmFjZV9nbG9iYWxfbGlzdCwgb3BzKTsKKwkJb3BzLT5mbGFncyB8PSBGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQ7CisJCWlmIChmaXJzdCkKKwkJCWFkZF9mdHJhY2Vfb3BzKCZmdHJhY2Vfb3BzX2xpc3QsICZnbG9iYWxfb3BzKTsKKwl9IGVsc2UKKwkJYWRkX2Z0cmFjZV9vcHMoJmZ0cmFjZV9vcHNfbGlzdCwgb3BzKTsKKworCWlmIChmdHJhY2VfZW5hYmxlZCkKKwkJdXBkYXRlX2Z0cmFjZV9mdW5jdGlvbigpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzKQoreworCWludCByZXQ7CisKKwlpZiAoZnRyYWNlX2Rpc2FibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmIChXQVJOX09OKCEob3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfRU5BQkxFRCkpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKEZUUkFDRV9XQVJOX09OKG9wcyA9PSAmZ2xvYmFsX29wcykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0dMT0JBTCkgeworCQlyZXQgPSByZW1vdmVfZnRyYWNlX29wcygmZnRyYWNlX2dsb2JhbF9saXN0LCBvcHMpOworCQlpZiAoIXJldCAmJiBmdHJhY2VfZ2xvYmFsX2xpc3QgPT0gJmZ0cmFjZV9saXN0X2VuZCkKKwkJCXJldCA9IHJlbW92ZV9mdHJhY2Vfb3BzKCZmdHJhY2Vfb3BzX2xpc3QsICZnbG9iYWxfb3BzKTsKKwkJaWYgKCFyZXQpCisJCQlvcHMtPmZsYWdzICY9IH5GVFJBQ0VfT1BTX0ZMX0VOQUJMRUQ7CisJfSBlbHNlCisJCXJldCA9IHJlbW92ZV9mdHJhY2Vfb3BzKCZmdHJhY2Vfb3BzX2xpc3QsIG9wcyk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChmdHJhY2VfZW5hYmxlZCkKKwkJdXBkYXRlX2Z0cmFjZV9mdW5jdGlvbigpOworCisJLyoKKwkgKiBEeW5hbWljIG9wcyBtYXkgYmUgZnJlZWQsIHdlIG11c3QgbWFrZSBzdXJlIHRoYXQgYWxsCisJICogY2FsbGVycyBhcmUgZG9uZSBiZWZvcmUgbGVhdmluZyB0aGlzIGZ1bmN0aW9uLgorCSAqLworCWlmIChvcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9EWU5BTUlDKQorCQlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV91cGRhdGVfcGlkX2Z1bmModm9pZCkKIHsKLQlmdHJhY2VfZnVuY190IGZ1bmM7Ci0KKwkvKiBPbmx5IGRvIHNvbWV0aGluZyBpZiB3ZSBhcmUgdHJhY2luZyBzb21ldGhpbmcgKi8KIAlpZiAoZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID09IGZ0cmFjZV9zdHViKQogCQlyZXR1cm47CiAKLSNpZmRlZiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRV9NQ09VTlRfVEVTVAotCWZ1bmMgPSBmdHJhY2VfdHJhY2VfZnVuY3Rpb247Ci0jZWxzZQotCWZ1bmMgPSBfX2Z0cmFjZV90cmFjZV9mdW5jdGlvbjsKLSNlbmRpZgotCi0JaWYgKCFsaXN0X2VtcHR5KCZmdHJhY2VfcGlkcykpIHsKLQkJc2V0X2Z0cmFjZV9waWRfZnVuY3Rpb24oZnVuYyk7Ci0JCWZ1bmMgPSBmdHJhY2VfcGlkX2Z1bmM7Ci0JfSBlbHNlIHsKLQkJaWYgKGZ1bmMgPT0gZnRyYWNlX3BpZF9mdW5jKQotCQkJZnVuYyA9IGZ0cmFjZV9waWRfZnVuY3Rpb247Ci0JfQotCi0jaWZkZWYgQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VfTUNPVU5UX1RFU1QKLQlmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdW5jOwotI2Vsc2UKLQlfX2Z0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ1bmM7Ci0jZW5kaWYKKwl1cGRhdGVfZnRyYWNlX2Z1bmN0aW9uKCk7CiB9CiAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fUFJPRklMRVIKQEAgLTg4OCw4ICs5NTIsMzUgQEAKIAlGVFJBQ0VfU1RBUlRfRlVOQ19SRVQJCT0gKDEgPDwgMyksCiAJRlRSQUNFX1NUT1BfRlVOQ19SRVQJCT0gKDEgPDwgNCksCiB9Oworc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5IHsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBobGlzdDsKKwl1bnNpZ25lZCBsb25nIGlwOworfTsKIAotc3RhdGljIGludCBmdHJhY2VfZmlsdGVyZWQ7CitzdHJ1Y3QgZnRyYWNlX2hhc2ggeworCXVuc2lnbmVkIGxvbmcJCXNpemVfYml0czsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAkqYnVja2V0czsKKwl1bnNpZ25lZCBsb25nCQljb3VudDsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKK307CisKKy8qCisgKiBXZSBtYWtlIHRoZXNlIGNvbnN0YW50IGJlY2F1c2Ugbm8gb25lIHNob3VsZCB0b3VjaCB0aGVtLAorICogYnV0IHRoZXkgYXJlIHVzZWQgYXMgdGhlIGRlZmF1bHQgImVtcHR5IGhhc2giLCB0byBhdm9pZCBhbGxvY2F0aW5nCisgKiBpdCBhbGwgdGhlIHRpbWUuIFRoZXNlIGFyZSBpbiBhIHJlYWQgb25seSBzZWN0aW9uIHN1Y2ggdGhhdCBpZgorICogYW55b25lIGRvZXMgdHJ5IHRvIG1vZGlmeSBpdCwgaXQgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGxpc3RfaGVhZCBlbXB0eV9idWNrZXRzWzFdOworc3RhdGljIGNvbnN0IHN0cnVjdCBmdHJhY2VfaGFzaCBlbXB0eV9oYXNoID0geworCS5idWNrZXRzID0gKHN0cnVjdCBobGlzdF9oZWFkICopZW1wdHlfYnVja2V0cywKK307CisjZGVmaW5lIEVNUFRZX0hBU0gJKChzdHJ1Y3QgZnRyYWNlX2hhc2ggKikmZW1wdHlfaGFzaCkKKworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIGdsb2JhbF9vcHMgPSB7CisJLmZ1bmMJCQk9IGZ0cmFjZV9zdHViLAorCS5ub3RyYWNlX2hhc2gJCT0gRU1QVFlfSEFTSCwKKwkuZmlsdGVyX2hhc2gJCT0gRU1QVFlfSEFTSCwKK307CiAKIHN0YXRpYyBzdHJ1Y3QgZHluX2Z0cmFjZSAqZnRyYWNlX25ld19hZGRyczsKIApAQCAtOTEyLDYgKzEwMDMsMjY5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZHluX2Z0cmFjZSAqZnRyYWNlX2ZyZWVfcmVjb3JkczsKIAorc3RhdGljIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqCitmdHJhY2VfbG9va3VwX2lwKHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwgdW5zaWduZWQgbG9uZyBpcCkKK3sKKwl1bnNpZ25lZCBsb25nIGtleTsKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5OworCXN0cnVjdCBobGlzdF9oZWFkICpoaGQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm47CisKKwlpZiAoIWhhc2gtPmNvdW50KQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChoYXNoLT5zaXplX2JpdHMgPiAwKQorCQlrZXkgPSBoYXNoX2xvbmcoaXAsIGhhc2gtPnNpemVfYml0cyk7CisJZWxzZQorCQlrZXkgPSAwOworCisJaGhkID0gJmhhc2gtPmJ1Y2tldHNba2V5XTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShlbnRyeSwgbiwgaGhkLCBobGlzdCkgeworCQlpZiAoZW50cnktPmlwID09IGlwKQorCQkJcmV0dXJuIGVudHJ5OworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgX19hZGRfaGFzaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsCisJCQkgICAgIHN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhoZDsKKwl1bnNpZ25lZCBsb25nIGtleTsKKworCWlmIChoYXNoLT5zaXplX2JpdHMpCisJCWtleSA9IGhhc2hfbG9uZyhlbnRyeS0+aXAsIGhhc2gtPnNpemVfYml0cyk7CisJZWxzZQorCQlrZXkgPSAwOworCisJaGhkID0gJmhhc2gtPmJ1Y2tldHNba2V5XTsKKwlobGlzdF9hZGRfaGVhZCgmZW50cnktPmhsaXN0LCBoaGQpOworCWhhc2gtPmNvdW50Kys7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2hhc2hfZW50cnkoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLCB1bnNpZ25lZCBsb25nIGlwKQoreworCXN0cnVjdCBmdHJhY2VfZnVuY19lbnRyeSAqZW50cnk7CisKKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpCisJCXJldHVybiAtRU5PTUVNOworCisJZW50cnktPmlwID0gaXA7CisJX19hZGRfaGFzaF9lbnRyeShoYXNoLCBlbnRyeSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2ZyZWVfaGFzaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsCisJCSAgc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5ICplbnRyeSkKK3sKKwlobGlzdF9kZWwoJmVudHJ5LT5obGlzdCk7CisJa2ZyZWUoZW50cnkpOworCWhhc2gtPmNvdW50LS07Cit9CisKK3N0YXRpYyB2b2lkCityZW1vdmVfaGFzaF9lbnRyeShzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsCisJCSAgc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5ICplbnRyeSkKK3sKKwlobGlzdF9kZWwoJmVudHJ5LT5obGlzdCk7CisJaGFzaC0+Y291bnQtLTsKK30KKworc3RhdGljIHZvaWQgZnRyYWNlX2hhc2hfY2xlYXIoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoKQoreworCXN0cnVjdCBobGlzdF9oZWFkICpoaGQ7CisJc3RydWN0IGhsaXN0X25vZGUgKnRwLCAqdG47CisJc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5ICplbnRyeTsKKwlpbnQgc2l6ZSA9IDEgPDwgaGFzaC0+c2l6ZV9iaXRzOworCWludCBpOworCisJaWYgKCFoYXNoLT5jb3VudCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQloaGQgPSAmaGFzaC0+YnVja2V0c1tpXTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdHAsIHRuLCBoaGQsIGhsaXN0KQorCQkJZnJlZV9oYXNoX2VudHJ5KGhhc2gsIGVudHJ5KTsKKwl9CisJRlRSQUNFX1dBUk5fT04oaGFzaC0+Y291bnQpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2Z0cmFjZV9oYXNoKHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCkKK3sKKwlpZiAoIWhhc2ggfHwgaGFzaCA9PSBFTVBUWV9IQVNIKQorCQlyZXR1cm47CisJZnRyYWNlX2hhc2hfY2xlYXIoaGFzaCk7CisJa2ZyZWUoaGFzaC0+YnVja2V0cyk7CisJa2ZyZWUoaGFzaCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZnJlZV9mdHJhY2VfaGFzaF9yY3Uoc3RydWN0IHJjdV9oZWFkICpyY3UpCit7CisJc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoOworCisJaGFzaCA9IGNvbnRhaW5lcl9vZihyY3UsIHN0cnVjdCBmdHJhY2VfaGFzaCwgcmN1KTsKKwlmcmVlX2Z0cmFjZV9oYXNoKGhhc2gpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2Z0cmFjZV9oYXNoX3JjdShzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gpCit7CisJaWYgKCFoYXNoIHx8IGhhc2ggPT0gRU1QVFlfSEFTSCkKKwkJcmV0dXJuOworCWNhbGxfcmN1X3NjaGVkKCZoYXNoLT5yY3UsIF9fZnJlZV9mdHJhY2VfaGFzaF9yY3UpOworfQorCitzdGF0aWMgc3RydWN0IGZ0cmFjZV9oYXNoICphbGxvY19mdHJhY2VfaGFzaChpbnQgc2l6ZV9iaXRzKQoreworCXN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaDsKKwlpbnQgc2l6ZTsKKworCWhhc2ggPSBremFsbG9jKHNpemVvZigqaGFzaCksIEdGUF9LRVJORUwpOworCWlmICghaGFzaCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzaXplID0gMSA8PCBzaXplX2JpdHM7CisJaGFzaC0+YnVja2V0cyA9IGt6YWxsb2Moc2l6ZW9mKCpoYXNoLT5idWNrZXRzKSAqIHNpemUsIEdGUF9LRVJORUwpOworCisJaWYgKCFoYXNoLT5idWNrZXRzKSB7CisJCWtmcmVlKGhhc2gpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwloYXNoLT5zaXplX2JpdHMgPSBzaXplX2JpdHM7CisKKwlyZXR1cm4gaGFzaDsKK30KKworc3RhdGljIHN0cnVjdCBmdHJhY2VfaGFzaCAqCithbGxvY19hbmRfY29weV9mdHJhY2VfaGFzaChpbnQgc2l6ZV9iaXRzLCBzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gpCit7CisJc3RydWN0IGZ0cmFjZV9mdW5jX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3QgZnRyYWNlX2hhc2ggKm5ld19oYXNoOworCXN0cnVjdCBobGlzdF9ub2RlICp0cDsKKwlpbnQgc2l6ZTsKKwlpbnQgcmV0OworCWludCBpOworCisJbmV3X2hhc2ggPSBhbGxvY19mdHJhY2VfaGFzaChzaXplX2JpdHMpOworCWlmICghbmV3X2hhc2gpCisJCXJldHVybiBOVUxMOworCisJLyogRW1wdHkgaGFzaD8gKi8KKwlpZiAoIWhhc2ggfHwgIWhhc2gtPmNvdW50KQorCQlyZXR1cm4gbmV3X2hhc2g7CisKKwlzaXplID0gMSA8PCBoYXNoLT5zaXplX2JpdHM7CisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgdHAsICZoYXNoLT5idWNrZXRzW2ldLCBobGlzdCkgeworCQkJcmV0ID0gYWRkX2hhc2hfZW50cnkobmV3X2hhc2gsIGVudHJ5LT5pcCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIGZyZWVfaGFzaDsKKwkJfQorCX0KKworCUZUUkFDRV9XQVJOX09OKG5ld19oYXNoLT5jb3VudCAhPSBoYXNoLT5jb3VudCk7CisKKwlyZXR1cm4gbmV3X2hhc2g7CisKKyBmcmVlX2hhc2g6CisJZnJlZV9mdHJhY2VfaGFzaChuZXdfaGFzaCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK2Z0cmFjZV9oYXNoX21vdmUoc3RydWN0IGZ0cmFjZV9oYXNoICoqZHN0LCBzdHJ1Y3QgZnRyYWNlX2hhc2ggKnNyYykKK3sKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5OworCXN0cnVjdCBobGlzdF9ub2RlICp0cCwgKnRuOworCXN0cnVjdCBobGlzdF9oZWFkICpoaGQ7CisJc3RydWN0IGZ0cmFjZV9oYXNoICpvbGRfaGFzaDsKKwlzdHJ1Y3QgZnRyYWNlX2hhc2ggKm5ld19oYXNoOworCXVuc2lnbmVkIGxvbmcga2V5OworCWludCBzaXplID0gc3JjLT5jb3VudDsKKwlpbnQgYml0cyA9IDA7CisJaW50IGk7CisKKwkvKgorCSAqIElmIHRoZSBuZXcgc291cmNlIGlzIGVtcHR5LCBqdXN0IGZyZWUgZHN0IGFuZCBhc3NpZ24gaXQKKwkgKiB0aGUgZW1wdHlfaGFzaC4KKwkgKi8KKwlpZiAoIXNyYy0+Y291bnQpIHsKKwkJZnJlZV9mdHJhY2VfaGFzaF9yY3UoKmRzdCk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcigqZHN0LCBFTVBUWV9IQVNIKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyoKKwkgKiBNYWtlIHRoZSBoYXNoIHNpemUgYWJvdXQgMS8yIHRoZSAjIGZvdW5kCisJICovCisJZm9yIChzaXplIC89IDI7IHNpemU7IHNpemUgPj49IDEpCisJCWJpdHMrKzsKKworCS8qIERvbid0IGFsbG9jYXRlIHRvbyBtdWNoICovCisJaWYgKGJpdHMgPiBGVFJBQ0VfSEFTSF9NQVhfQklUUykKKwkJYml0cyA9IEZUUkFDRV9IQVNIX01BWF9CSVRTOworCisJbmV3X2hhc2ggPSBhbGxvY19mdHJhY2VfaGFzaChiaXRzKTsKKwlpZiAoIW5ld19oYXNoKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNpemUgPSAxIDw8IHNyYy0+c2l6ZV9iaXRzOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJaGhkID0gJnNyYy0+YnVja2V0c1tpXTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgdHAsIHRuLCBoaGQsIGhsaXN0KSB7CisJCQlpZiAoYml0cyA+IDApCisJCQkJa2V5ID0gaGFzaF9sb25nKGVudHJ5LT5pcCwgYml0cyk7CisJCQllbHNlCisJCQkJa2V5ID0gMDsKKwkJCXJlbW92ZV9oYXNoX2VudHJ5KHNyYywgZW50cnkpOworCQkJX19hZGRfaGFzaF9lbnRyeShuZXdfaGFzaCwgZW50cnkpOworCQl9CisJfQorCisJb2xkX2hhc2ggPSAqZHN0OworCXJjdV9hc3NpZ25fcG9pbnRlcigqZHN0LCBuZXdfaGFzaCk7CisJZnJlZV9mdHJhY2VfaGFzaF9yY3Uob2xkX2hhc2gpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUZXN0IHRoZSBoYXNoZXMgZm9yIHRoaXMgb3BzIHRvIHNlZSBpZiB3ZSB3YW50IHRvIGNhbGwKKyAqIHRoZSBvcHMtPmZ1bmMgb3Igbm90LgorICoKKyAqIEl0J3MgYSBtYXRjaCBpZiB0aGUgaXAgaXMgaW4gdGhlIG9wcy0+ZmlsdGVyX2hhc2ggb3IKKyAqIHRoZSBmaWx0ZXJfaGFzaCBkb2VzIG5vdCBleGlzdCBvciBpcyBlbXB0eSwKKyAqICBBTkQKKyAqIHRoZSBpcCBpcyBub3QgaW4gdGhlIG9wcy0+bm90cmFjZV9oYXNoLgorICoKKyAqIFRoaXMgbmVlZHMgdG8gYmUgY2FsbGVkIHdpdGggcHJlZW1wdGlvbiBkaXNhYmxlZCBhcworICogdGhlIGhhc2hlcyBhcmUgZnJlZWQgd2l0aCBjYWxsX3JjdV9zY2hlZCgpLgorICovCitzdGF0aWMgaW50CitmdHJhY2Vfb3BzX3Rlc3Qoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgbG9uZyBpcCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX2hhc2ggKmZpbHRlcl9oYXNoOworCXN0cnVjdCBmdHJhY2VfaGFzaCAqbm90cmFjZV9oYXNoOworCWludCByZXQ7CisKKwlmaWx0ZXJfaGFzaCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcob3BzLT5maWx0ZXJfaGFzaCk7CisJbm90cmFjZV9oYXNoID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhvcHMtPm5vdHJhY2VfaGFzaCk7CisKKwlpZiAoKCFmaWx0ZXJfaGFzaCB8fCAhZmlsdGVyX2hhc2gtPmNvdW50IHx8CisJICAgICBmdHJhY2VfbG9va3VwX2lwKGZpbHRlcl9oYXNoLCBpcCkpICYmCisJICAgICghbm90cmFjZV9oYXNoIHx8ICFub3RyYWNlX2hhc2gtPmNvdW50IHx8CisJICAgICAhZnRyYWNlX2xvb2t1cF9pcChub3RyYWNlX2hhc2gsIGlwKSkpCisJCXJldCA9IDE7CisJZWxzZQorCQlyZXQgPSAwOworCisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIFRoaXMgaXMgYSBkb3VibGUgZm9yLiBEbyBub3QgdXNlICdicmVhaycgdG8gYnJlYWsgb3V0IG9mIHRoZSBsb29wLAogICogeW91IG11c3QgdXNlIGEgZ290by4KQEAgLTkyNiw2ICsxMjgwLDEwNSBAQAogCQl9CQkJCVwKIAl9CiAKK3N0YXRpYyB2b2lkIF9fZnRyYWNlX2hhc2hfcmVjX3VwZGF0ZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLAorCQkJCSAgICAgaW50IGZpbHRlcl9oYXNoLAorCQkJCSAgICAgYm9vbCBpbmMpCit7CisJc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoOworCXN0cnVjdCBmdHJhY2VfaGFzaCAqb3RoZXJfaGFzaDsKKwlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOworCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7CisJaW50IGNvdW50ID0gMDsKKwlpbnQgYWxsID0gMDsKKworCS8qIE9ubHkgdXBkYXRlIGlmIHRoZSBvcHMgaGFzIGJlZW4gcmVnaXN0ZXJlZCAqLworCWlmICghKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0VOQUJMRUQpKQorCQlyZXR1cm47CisKKwkvKgorCSAqIEluIHRoZSBmaWx0ZXJfaGFzaCBjYXNlOgorCSAqICAgSWYgdGhlIGNvdW50IGlzIHplcm8sIHdlIHVwZGF0ZSBhbGwgcmVjb3Jkcy4KKwkgKiAgIE90aGVyd2lzZSB3ZSBqdXN0IHVwZGF0ZSB0aGUgaXRlbXMgaW4gdGhlIGhhc2guCisJICoKKwkgKiBJbiB0aGUgbm90cmFjZV9oYXNoIGNhc2U6CisJICogICBXZSBlbmFibGUgdGhlIHVwZGF0ZSBpbiB0aGUgaGFzaC4KKwkgKiAgIEFzIGRpc2FibGluZyBub3RyYWNlIG1lYW5zIGVuYWJsaW5nIHRoZSB0cmFjaW5nLAorCSAqICAgYW5kIGVuYWJsaW5nIG5vdHJhY2UgbWVhbnMgZGlzYWJsaW5nLCB0aGUgaW5jIHZhcmlhYmxlCisJICogICBnZXRzIGludmVyc2VkLgorCSAqLworCWlmIChmaWx0ZXJfaGFzaCkgeworCQloYXNoID0gb3BzLT5maWx0ZXJfaGFzaDsKKwkJb3RoZXJfaGFzaCA9IG9wcy0+bm90cmFjZV9oYXNoOworCQlpZiAoIWhhc2ggfHwgIWhhc2gtPmNvdW50KQorCQkJYWxsID0gMTsKKwl9IGVsc2UgeworCQlpbmMgPSAhaW5jOworCQloYXNoID0gb3BzLT5ub3RyYWNlX2hhc2g7CisJCW90aGVyX2hhc2ggPSBvcHMtPmZpbHRlcl9oYXNoOworCQkvKgorCQkgKiBJZiB0aGUgbm90cmFjZSBoYXNoIGhhcyBubyBpdGVtcywKKwkJICogdGhlbiB0aGVyZSdzIG5vdGhpbmcgdG8gZG8uCisJCSAqLworCQlpZiAoaGFzaCAmJiAhaGFzaC0+Y291bnQpCisJCQlyZXR1cm47CisJfQorCisJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CisJCWludCBpbl9vdGhlcl9oYXNoID0gMDsKKwkJaW50IGluX2hhc2ggPSAwOworCQlpbnQgbWF0Y2ggPSAwOworCisJCWlmIChhbGwpIHsKKwkJCS8qCisJCQkgKiBPbmx5IHRoZSBmaWx0ZXJfaGFzaCBhZmZlY3RzIGFsbCByZWNvcmRzLgorCQkJICogVXBkYXRlIGlmIHRoZSByZWNvcmQgaXMgbm90IGluIHRoZSBub3RyYWNlIGhhc2guCisJCQkgKi8KKwkJCWlmICghb3RoZXJfaGFzaCB8fCAhZnRyYWNlX2xvb2t1cF9pcChvdGhlcl9oYXNoLCByZWMtPmlwKSkKKwkJCQltYXRjaCA9IDE7CisJCX0gZWxzZSB7CisJCQlpbl9oYXNoID0gaGFzaCAmJiAhIWZ0cmFjZV9sb29rdXBfaXAoaGFzaCwgcmVjLT5pcCk7CisJCQlpbl9vdGhlcl9oYXNoID0gb3RoZXJfaGFzaCAmJiAhIWZ0cmFjZV9sb29rdXBfaXAob3RoZXJfaGFzaCwgcmVjLT5pcCk7CisKKwkJCS8qCisJCQkgKgorCQkJICovCisJCQlpZiAoZmlsdGVyX2hhc2ggJiYgaW5faGFzaCAmJiAhaW5fb3RoZXJfaGFzaCkKKwkJCQltYXRjaCA9IDE7CisJCQllbHNlIGlmICghZmlsdGVyX2hhc2ggJiYgaW5faGFzaCAmJgorCQkJCSAoaW5fb3RoZXJfaGFzaCB8fCAhb3RoZXJfaGFzaC0+Y291bnQpKQorCQkJCW1hdGNoID0gMTsKKwkJfQorCQlpZiAoIW1hdGNoKQorCQkJY29udGludWU7CisKKwkJaWYgKGluYykgeworCQkJcmVjLT5mbGFncysrOworCQkJaWYgKEZUUkFDRV9XQVJOX09OKChyZWMtPmZsYWdzICYgfkZUUkFDRV9GTF9NQVNLKSA9PSBGVFJBQ0VfUkVGX01BWCkpCisJCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJaWYgKEZUUkFDRV9XQVJOX09OKChyZWMtPmZsYWdzICYgfkZUUkFDRV9GTF9NQVNLKSA9PSAwKSkKKwkJCQlyZXR1cm47CisJCQlyZWMtPmZsYWdzLS07CisJCX0KKwkJY291bnQrKzsKKwkJLyogU2hvcnRjdXQsIGlmIHdlIGhhbmRsZWQgYWxsIHJlY29yZHMsIHdlIGFyZSBkb25lLiAqLworCQlpZiAoIWFsbCAmJiBjb3VudCA9PSBoYXNoLT5jb3VudCkKKwkJCXJldHVybjsKKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKK30KKworc3RhdGljIHZvaWQgZnRyYWNlX2hhc2hfcmVjX2Rpc2FibGUoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywKKwkJCQkgICAgaW50IGZpbHRlcl9oYXNoKQoreworCV9fZnRyYWNlX2hhc2hfcmVjX3VwZGF0ZShvcHMsIGZpbHRlcl9oYXNoLCAwKTsKK30KKworc3RhdGljIHZvaWQgZnRyYWNlX2hhc2hfcmVjX2VuYWJsZShzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLAorCQkJCSAgIGludCBmaWx0ZXJfaGFzaCkKK3sKKwlfX2Z0cmFjZV9oYXNoX3JlY191cGRhdGUob3BzLCBmaWx0ZXJfaGFzaCwgMSk7Cit9CisKIHN0YXRpYyB2b2lkIGZ0cmFjZV9mcmVlX3JlYyhzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKQogewogCXJlYy0+ZnJlZWxpc3QgPSBmdHJhY2VfZnJlZV9yZWNvcmRzOwpAQCAtMTA0NywxOCArMTUwMCwxOCBAQAogCWZ0cmFjZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpRlRSQUNFX0FERFI7CiAKIAkvKgotCSAqIElmIHRoaXMgcmVjb3JkIGlzIG5vdCB0byBiZSB0cmFjZWQgb3Igd2Ugd2FudCB0byBkaXNhYmxlIGl0LAotCSAqIHRoZW4gZGlzYWJsZSBpdC4KKwkgKiBJZiB3ZSBhcmUgZW5hYmxpbmcgdHJhY2luZzoKIAkgKgotCSAqIElmIHdlIHdhbnQgdG8gZW5hYmxlIGl0IGFuZCBmaWx0ZXJpbmcgaXMgb2ZmLCB0aGVuIGVuYWJsZSBpdC4KKwkgKiAgIElmIHRoZSByZWNvcmQgaGFzIGEgcmVmIGNvdW50LCB0aGVuIHdlIG5lZWQgdG8gZW5hYmxlIGl0CisJICogICBiZWNhdXNlIHNvbWVvbmUgaXMgdXNpbmcgaXQuCiAJICoKLQkgKiBJZiB3ZSB3YW50IHRvIGVuYWJsZSBpdCBhbmQgZmlsdGVyaW5nIGlzIG9uLCBlbmFibGUgaXQgb25seSBpZgotCSAqIGl0J3MgZmlsdGVyZWQKKwkgKiAgIE90aGVyd2lzZSB3ZSBtYWtlIHN1cmUgaXRzIGRpc2FibGVkLgorCSAqCisJICogSWYgd2UgYXJlIGRpc2FibGluZyB0cmFjaW5nLCB0aGVuIGRpc2FibGUgYWxsIHJlY29yZHMgdGhhdAorCSAqIGFyZSBlbmFibGVkLgogCSAqLwotCWlmIChlbmFibGUgJiYgIShyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX05PVFJBQ0UpKSB7Ci0JCWlmICghZnRyYWNlX2ZpbHRlcmVkIHx8IChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZJTFRFUikpCi0JCQlmbGFnID0gRlRSQUNFX0ZMX0VOQUJMRUQ7Ci0JfQorCWlmIChlbmFibGUgJiYgKHJlYy0+ZmxhZ3MgJiB+RlRSQUNFX0ZMX01BU0spKQorCQlmbGFnID0gRlRSQUNFX0ZMX0VOQUJMRUQ7CiAKIAkvKiBJZiB0aGUgc3RhdGUgb2YgdGhpcyByZWNvcmQgaGFzbid0IGNoYW5nZWQsIHRoZW4gZG8gbm90aGluZyAqLwogCWlmICgocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9FTkFCTEVEKSA9PSBmbGFnKQpAQCAtMTA3OSwxOSArMTUzMiwxNiBAQAogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CiAJaW50IGZhaWxlZDsKIAorCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQorCQlyZXR1cm47CisKIAlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKLQkJLyoKLQkJICogU2tpcCBvdmVyIGZyZWUgcmVjb3JkcywgcmVjb3JkcyB0aGF0IGhhdmUKLQkJICogZmFpbGVkIGFuZCBub3QgY29udmVydGVkLgotCQkgKi8KLQkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJFRSB8fAotCQkgICAgcmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQgfHwKLQkJICAgICEocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9DT05WRVJURUQpKQorCQkvKiBTa2lwIG92ZXIgZnJlZSByZWNvcmRzICovCisJCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZSRUUpCiAJCQljb250aW51ZTsKIAogCQlmYWlsZWQgPSBfX2Z0cmFjZV9yZXBsYWNlX2NvZGUocmVjLCBlbmFibGUpOwogCQlpZiAoZmFpbGVkKSB7Ci0JCQlyZWMtPmZsYWdzIHw9IEZUUkFDRV9GTF9GQUlMRUQ7CiAJCQlmdHJhY2VfYnVnKGZhaWxlZCwgcmVjLT5pcCk7CiAJCQkvKiBTdG9wIHByb2Nlc3NpbmcgKi8KIAkJCXJldHVybjsKQEAgLTExMDcsMTAgKzE1NTcsMTIgQEAKIAogCWlwID0gcmVjLT5pcDsKIAorCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQorCQlyZXR1cm4gMDsKKwogCXJldCA9IGZ0cmFjZV9tYWtlX25vcChtb2QsIHJlYywgTUNPVU5UX0FERFIpOwogCWlmIChyZXQpIHsKIAkJZnRyYWNlX2J1ZyhyZXQsIGlwKTsKLQkJcmVjLT5mbGFncyB8PSBGVFJBQ0VfRkxfRkFJTEVEOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIDE7CkBAIC0xMTcxLDYgKzE2MjMsNyBAQAogCiBzdGF0aWMgZnRyYWNlX2Z1bmNfdCBzYXZlZF9mdHJhY2VfZnVuYzsKIHN0YXRpYyBpbnQgZnRyYWNlX3N0YXJ0X3VwOworc3RhdGljIGludCBnbG9iYWxfc3RhcnRfdXA7CiAKIHN0YXRpYyB2b2lkIGZ0cmFjZV9zdGFydHVwX2VuYWJsZShpbnQgY29tbWFuZCkKIHsKQEAgLTExODUsMTkgKzE2MzgsMzYgQEAKIAlmdHJhY2VfcnVuX3VwZGF0ZV9jb2RlKGNvbW1hbmQpOwogfQogCi1zdGF0aWMgdm9pZCBmdHJhY2Vfc3RhcnR1cChpbnQgY29tbWFuZCkKK3N0YXRpYyB2b2lkIGZ0cmFjZV9zdGFydHVwKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIGludCBjb21tYW5kKQogeworCWJvb2wgaGFzaF9lbmFibGUgPSB0cnVlOworCiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCiAJCXJldHVybjsKIAogCWZ0cmFjZV9zdGFydF91cCsrOwogCWNvbW1hbmQgfD0gRlRSQUNFX0VOQUJMRV9DQUxMUzsKIAorCS8qIG9wcyBtYXJrZWQgZ2xvYmFsIHNoYXJlIHRoZSBmaWx0ZXIgaGFzaGVzICovCisJaWYgKG9wcy0+ZmxhZ3MgJiBGVFJBQ0VfT1BTX0ZMX0dMT0JBTCkgeworCQlvcHMgPSAmZ2xvYmFsX29wczsKKwkJLyogRG9uJ3QgdXBkYXRlIGhhc2ggaWYgZ2xvYmFsIGlzIGFscmVhZHkgc2V0ICovCisJCWlmIChnbG9iYWxfc3RhcnRfdXApCisJCQloYXNoX2VuYWJsZSA9IGZhbHNlOworCQlnbG9iYWxfc3RhcnRfdXArKzsKKwl9CisKKwlvcHMtPmZsYWdzIHw9IEZUUkFDRV9PUFNfRkxfRU5BQkxFRDsKKwlpZiAoaGFzaF9lbmFibGUpCisJCWZ0cmFjZV9oYXNoX3JlY19lbmFibGUob3BzLCAxKTsKKwogCWZ0cmFjZV9zdGFydHVwX2VuYWJsZShjb21tYW5kKTsKIH0KIAotc3RhdGljIHZvaWQgZnRyYWNlX3NodXRkb3duKGludCBjb21tYW5kKQorc3RhdGljIHZvaWQgZnRyYWNlX3NodXRkb3duKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIGludCBjb21tYW5kKQogeworCWJvb2wgaGFzaF9kaXNhYmxlID0gdHJ1ZTsKKwogCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQogCQlyZXR1cm47CiAKQEAgLTEyMDksNiArMTY3OSwyMyBAQAogCSAqLwogCVdBUk5fT05fT05DRShmdHJhY2Vfc3RhcnRfdXAgPCAwKTsKIAorCWlmIChvcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9HTE9CQUwpIHsKKwkJb3BzID0gJmdsb2JhbF9vcHM7CisJCWdsb2JhbF9zdGFydF91cC0tOworCQlXQVJOX09OX09OQ0UoZ2xvYmFsX3N0YXJ0X3VwIDwgMCk7CisJCS8qIERvbid0IHVwZGF0ZSBoYXNoIGlmIGdsb2JhbCBzdGlsbCBoYXMgdXNlcnMgKi8KKwkJaWYgKGdsb2JhbF9zdGFydF91cCkgeworCQkJV0FSTl9PTl9PTkNFKCFmdHJhY2Vfc3RhcnRfdXApOworCQkJaGFzaF9kaXNhYmxlID0gZmFsc2U7CisJCX0KKwl9CisKKwlpZiAoaGFzaF9kaXNhYmxlKQorCQlmdHJhY2VfaGFzaF9yZWNfZGlzYWJsZShvcHMsIDEpOworCisJaWYgKG9wcyAhPSAmZ2xvYmFsX29wcyB8fCAhZ2xvYmFsX3N0YXJ0X3VwKQorCQlvcHMtPmZsYWdzICY9IH5GVFJBQ0VfT1BTX0ZMX0VOQUJMRUQ7CisKIAlpZiAoIWZ0cmFjZV9zdGFydF91cCkKIAkJY29tbWFuZCB8PSBGVFJBQ0VfRElTQUJMRV9DQUxMUzsKIApAQCAtMTI3MywxMCArMTc2MCwxMCBAQAogCQkgKi8KIAkJaWYgKCFmdHJhY2VfY29kZV9kaXNhYmxlKG1vZCwgcCkpIHsKIAkJCWZ0cmFjZV9mcmVlX3JlYyhwKTsKLQkJCWNvbnRpbnVlOworCQkJLyogR2FtZSBvdmVyICovCisJCQlicmVhazsKIAkJfQogCi0JCXAtPmZsYWdzIHw9IEZUUkFDRV9GTF9DT05WRVJURUQ7CiAJCWZ0cmFjZV91cGRhdGVfY250Kys7CiAKIAkJLyoKQEAgLTEzNTEsOSArMTgzOCw5IEBACiBlbnVtIHsKIAlGVFJBQ0VfSVRFUl9GSUxURVIJPSAoMSA8PCAwKSwKIAlGVFJBQ0VfSVRFUl9OT1RSQUNFCT0gKDEgPDwgMSksCi0JRlRSQUNFX0lURVJfRkFJTFVSRVMJPSAoMSA8PCAyKSwKLQlGVFJBQ0VfSVRFUl9QUklOVEFMTAk9ICgxIDw8IDMpLAotCUZUUkFDRV9JVEVSX0hBU0gJPSAoMSA8PCA0KSwKKwlGVFJBQ0VfSVRFUl9QUklOVEFMTAk9ICgxIDw8IDIpLAorCUZUUkFDRV9JVEVSX0hBU0gJPSAoMSA8PCAzKSwKKwlGVFJBQ0VfSVRFUl9FTkFCTEVECT0gKDEgPDwgNCksCiB9OwogCiAjZGVmaW5lIEZUUkFDRV9CVUZGX01BWCAoS1NZTV9TWU1CT0xfTEVOKzQpIC8qIHJvb20gZm9yIHdpbGRjYXJkcyAqLwpAQCAtMTM2NSw2ICsxODUyLDggQEAKIAlzdHJ1Y3QgZHluX2Z0cmFjZQkJKmZ1bmM7CiAJc3RydWN0IGZ0cmFjZV9mdW5jX3Byb2JlCSpwcm9iZTsKIAlzdHJ1Y3QgdHJhY2VfcGFyc2VyCQlwYXJzZXI7CisJc3RydWN0IGZ0cmFjZV9oYXNoCQkqaGFzaDsKKwlzdHJ1Y3QgZnRyYWNlX29wcwkJKm9wczsKIAlpbnQJCQkJaGlkeDsKIAlpbnQJCQkJaWR4OwogCXVuc2lnbmVkCQkJZmxhZ3M7CkBAIC0xNDYxLDggKzE5NTAsMTIgQEAKIHRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewogCXN0cnVjdCBmdHJhY2VfaXRlcmF0b3IgKml0ZXIgPSBtLT5wcml2YXRlOworCXN0cnVjdCBmdHJhY2Vfb3BzICpvcHMgPSAmZ2xvYmFsX29wczsKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjID0gTlVMTDsKIAorCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQorCQlyZXR1cm4gTlVMTDsKKwogCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0hBU0gpCiAJCXJldHVybiB0X2hhc2hfbmV4dChtLCBwb3MpOwogCkBAIC0xNDgzLDE3ICsxOTc2LDE1IEBACiAJCXJlYyA9ICZpdGVyLT5wZy0+cmVjb3Jkc1tpdGVyLT5pZHgrK107CiAJCWlmICgocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GUkVFKSB8fAogCi0JCSAgICAoIShpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0ZBSUxVUkVTKSAmJgotCQkgICAgIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkpIHx8Ci0KLQkJICAgICgoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9GQUlMVVJFUykgJiYKLQkJICAgICAhKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKSkgfHwKLQogCQkgICAgKChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0ZJTFRFUikgJiYKLQkJICAgICAhKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRklMVEVSKSkgfHwKKwkJICAgICAhKGZ0cmFjZV9sb29rdXBfaXAob3BzLT5maWx0ZXJfaGFzaCwgcmVjLT5pcCkpKSB8fAogCiAJCSAgICAoKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfTk9UUkFDRSkgJiYKLQkJICAgICAhKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfTk9UUkFDRSkpKSB7CisJCSAgICAgIWZ0cmFjZV9sb29rdXBfaXAob3BzLT5ub3RyYWNlX2hhc2gsIHJlYy0+aXApKSB8fAorCisJCSAgICAoKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfRU5BQkxFRCkgJiYKKwkJICAgICAhKHJlYy0+ZmxhZ3MgJiB+RlRSQUNFX0ZMX01BU0spKSkgeworCiAJCQlyZWMgPSBOVUxMOwogCQkJZ290byByZXRyeTsKIAkJfQpAQCAtMTUxNywxMCArMjAwOCwxNSBAQAogc3RhdGljIHZvaWQgKnRfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyID0gbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzID0gJmdsb2JhbF9vcHM7CiAJdm9pZCAqcCA9IE5VTEw7CiAJbG9mZl90IGw7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKgogCSAqIElmIGFuIGxzZWVrIHdhcyBkb25lLCB0aGVuIHJlc2V0IGFuZCBzdGFydCBmcm9tIGJlZ2lubmluZy4KIAkgKi8KQEAgLTE1MzIsNyArMjAyOCw3IEBACiAJICogb2ZmLCB3ZSBjYW4gc2hvcnQgY3V0IGFuZCBqdXN0IHByaW50IG91dCB0aGF0IGFsbAogCSAqIGZ1bmN0aW9ucyBhcmUgZW5hYmxlZC4KIAkgKi8KLQlpZiAoaXRlci0+ZmxhZ3MgJiBGVFJBQ0VfSVRFUl9GSUxURVIgJiYgIWZ0cmFjZV9maWx0ZXJlZCkgeworCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0ZJTFRFUiAmJiAhb3BzLT5maWx0ZXJfaGFzaC0+Y291bnQpIHsKIAkJaWYgKCpwb3MgPiAwKQogCQkJcmV0dXJuIHRfaGFzaF9zdGFydChtLCBwb3MpOwogCQlpdGVyLT5mbGFncyB8PSBGVFJBQ0VfSVRFUl9QUklOVEFMTDsKQEAgLTE1OTAsNyArMjA4NiwxMSBAQAogCWlmICghcmVjKQogCQlyZXR1cm4gMDsKIAotCXNlcV9wcmludGYobSwgIiVwc1xuIiwgKHZvaWQgKilyZWMtPmlwKTsKKwlzZXFfcHJpbnRmKG0sICIlcHMiLCAodm9pZCAqKXJlYy0+aXApOworCWlmIChpdGVyLT5mbGFncyAmIEZUUkFDRV9JVEVSX0VOQUJMRUQpCisJCXNlcV9wcmludGYobSwgIiAoJWxkKSIsCisJCQkgICByZWMtPmZsYWdzICYgfkZUUkFDRV9GTF9NQVNLKTsKKwlzZXFfcHJpbnRmKG0sICJcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjMwLDQ0ICsyMTMwLDQ2IEBACiB9CiAKIHN0YXRpYyBpbnQKLWZ0cmFjZV9mYWlsdXJlc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorZnRyYWNlX2VuYWJsZWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgcmV0OwotCXN0cnVjdCBzZXFfZmlsZSAqbTsKIAlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyOworCWludCByZXQ7CiAKLQlyZXQgPSBmdHJhY2VfYXZhaWxfb3Blbihpbm9kZSwgZmlsZSk7CisJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCXJldHVybiAtRU5PREVWOworCisJaXRlciA9IGt6YWxsb2Moc2l6ZW9mKCppdGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpdGVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWl0ZXItPnBnID0gZnRyYWNlX3BhZ2VzX3N0YXJ0OworCWl0ZXItPmZsYWdzID0gRlRSQUNFX0lURVJfRU5BQkxFRDsKKworCXJldCA9IHNlcV9vcGVuKGZpbGUsICZzaG93X2Z0cmFjZV9zZXFfb3BzKTsKIAlpZiAoIXJldCkgewotCQltID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlpdGVyID0gbS0+cHJpdmF0ZTsKLQkJaXRlci0+ZmxhZ3MgPSBGVFJBQ0VfSVRFUl9GQUlMVVJFUzsKKwkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJCW0tPnByaXZhdGUgPSBpdGVyOworCX0gZWxzZSB7CisJCWtmcmVlKGl0ZXIpOwogCX0KIAogCXJldHVybiByZXQ7CiB9CiAKLQotc3RhdGljIHZvaWQgZnRyYWNlX2ZpbHRlcl9yZXNldChpbnQgZW5hYmxlKQorc3RhdGljIHZvaWQgZnRyYWNlX2ZpbHRlcl9yZXNldChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gpCiB7Ci0Jc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKLQlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwotCXVuc2lnbmVkIGxvbmcgdHlwZSA9IGVuYWJsZSA/IEZUUkFDRV9GTF9GSUxURVIgOiBGVFJBQ0VfRkxfTk9UUkFDRTsKLQogCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKLQlpZiAoZW5hYmxlKQotCQlmdHJhY2VfZmlsdGVyZWQgPSAwOwotCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewotCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCi0JCQljb250aW51ZTsKLQkJcmVjLT5mbGFncyAmPSB+dHlwZTsKLQl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKwlmdHJhY2VfaGFzaF9jbGVhcihoYXNoKTsKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIH0KIAogc3RhdGljIGludAotZnRyYWNlX3JlZ2V4X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBlbmFibGUpCitmdHJhY2VfcmVnZXhfb3BlbihzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCBpbnQgZmxhZywKKwkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgZnRyYWNlX2l0ZXJhdG9yICppdGVyOworCXN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaDsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQpAQCAtMTY4MiwyMSArMjE4NCw0MiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlpZiAoZmxhZyAmIEZUUkFDRV9JVEVSX05PVFJBQ0UpCisJCWhhc2ggPSBvcHMtPm5vdHJhY2VfaGFzaDsKKwllbHNlCisJCWhhc2ggPSBvcHMtPmZpbHRlcl9oYXNoOworCisJaXRlci0+b3BzID0gb3BzOworCWl0ZXItPmZsYWdzID0gZmxhZzsKKworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisJCWl0ZXItPmhhc2ggPSBhbGxvY19hbmRfY29weV9mdHJhY2VfaGFzaChGVFJBQ0VfSEFTSF9ERUZBVUxUX0JJVFMsIGhhc2gpOworCQltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKworCQlpZiAoIWl0ZXItPmhhc2gpIHsKKwkJCXRyYWNlX3BhcnNlcl9wdXQoJml0ZXItPnBhcnNlcik7CisJCQlrZnJlZShpdGVyKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJfQorCiAJbXV0ZXhfbG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOworCiAJaWYgKChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYKIAkgICAgKGZpbGUtPmZfZmxhZ3MgJiBPX1RSVU5DKSkKLQkJZnRyYWNlX2ZpbHRlcl9yZXNldChlbmFibGUpOworCQlmdHJhY2VfZmlsdGVyX3Jlc2V0KGl0ZXItPmhhc2gpOwogCiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpIHsKIAkJaXRlci0+cGcgPSBmdHJhY2VfcGFnZXNfc3RhcnQ7Ci0JCWl0ZXItPmZsYWdzID0gZW5hYmxlID8gRlRSQUNFX0lURVJfRklMVEVSIDoKLQkJCUZUUkFDRV9JVEVSX05PVFJBQ0U7CiAKIAkJcmV0ID0gc2VxX29wZW4oZmlsZSwgJnNob3dfZnRyYWNlX3NlcV9vcHMpOwogCQlpZiAoIXJldCkgewogCQkJc3RydWN0IHNlcV9maWxlICptID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCQkJbS0+cHJpdmF0ZSA9IGl0ZXI7CiAJCX0gZWxzZSB7CisJCQkvKiBGYWlsZWQgKi8KKwkJCWZyZWVfZnRyYWNlX2hhc2goaXRlci0+aGFzaCk7CiAJCQl0cmFjZV9wYXJzZXJfcHV0KCZpdGVyLT5wYXJzZXIpOwogCQkJa2ZyZWUoaXRlcik7CiAJCX0KQEAgLTE3MTAsMTMgKzIyMzMsMTUgQEAKIHN0YXRpYyBpbnQKIGZ0cmFjZV9maWx0ZXJfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gZnRyYWNlX3JlZ2V4X29wZW4oaW5vZGUsIGZpbGUsIDEpOworCXJldHVybiBmdHJhY2VfcmVnZXhfb3BlbigmZ2xvYmFsX29wcywgRlRSQUNFX0lURVJfRklMVEVSLAorCQkJCSBpbm9kZSwgZmlsZSk7CiB9CiAKIHN0YXRpYyBpbnQKIGZ0cmFjZV9ub3RyYWNlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIGZ0cmFjZV9yZWdleF9vcGVuKGlub2RlLCBmaWxlLCAwKTsKKwlyZXR1cm4gZnRyYWNlX3JlZ2V4X29wZW4oJmdsb2JhbF9vcHMsIEZUUkFDRV9JVEVSX05PVFJBQ0UsCisJCQkJIGlub2RlLCBmaWxlKTsKIH0KIAogc3RhdGljIGxvZmZfdApAQCAtMTc2MSw4NiArMjI4Niw5OSBAQAogfQogCiBzdGF0aWMgaW50Ci1mdHJhY2VfbWF0Y2hfcmVjb3JkKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGNoYXIgKnJlZ2V4LCBpbnQgbGVuLCBpbnQgdHlwZSkKK2VudGVyX3JlY29yZChzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGludCBub3QpCiB7Ci0JY2hhciBzdHJbS1NZTV9TWU1CT0xfTEVOXTsKKwlzdHJ1Y3QgZnRyYWNlX2Z1bmNfZW50cnkgKmVudHJ5OworCWludCByZXQgPSAwOwogCi0Ja2FsbHN5bXNfbG9va3VwKHJlYy0+aXAsIE5VTEwsIE5VTEwsIE5VTEwsIHN0cik7Ci0JcmV0dXJuIGZ0cmFjZV9tYXRjaChzdHIsIHJlZ2V4LCBsZW4sIHR5cGUpOwotfQorCWVudHJ5ID0gZnRyYWNlX2xvb2t1cF9pcChoYXNoLCByZWMtPmlwKTsKKwlpZiAobm90KSB7CisJCS8qIERvIG5vdGhpbmcgaWYgaXQgZG9lc24ndCBleGlzdCAqLworCQlpZiAoIWVudHJ5KQorCQkJcmV0dXJuIDA7CiAKLXN0YXRpYyBpbnQgZnRyYWNlX21hdGNoX3JlY29yZHMoY2hhciAqYnVmZiwgaW50IGxlbiwgaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgc2VhcmNoX2xlbjsKLQlzdHJ1Y3QgZnRyYWNlX3BhZ2UgKnBnOwotCXN0cnVjdCBkeW5fZnRyYWNlICpyZWM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCWNoYXIgKnNlYXJjaDsKLQlpbnQgdHlwZTsKLQlpbnQgbm90OwotCWludCBmb3VuZCA9IDA7CisJCWZyZWVfaGFzaF9lbnRyeShoYXNoLCBlbnRyeSk7CisJfSBlbHNlIHsKKwkJLyogRG8gbm90aGluZyBpZiBpdCBleGlzdHMgKi8KKwkJaWYgKGVudHJ5KQorCQkJcmV0dXJuIDA7CiAKLQlmbGFnID0gZW5hYmxlID8gRlRSQUNFX0ZMX0ZJTFRFUiA6IEZUUkFDRV9GTF9OT1RSQUNFOwotCXR5cGUgPSBmaWx0ZXJfcGFyc2VfcmVnZXgoYnVmZiwgbGVuLCAmc2VhcmNoLCAmbm90KTsKLQotCXNlYXJjaF9sZW4gPSBzdHJsZW4oc2VhcmNoKTsKLQotCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKLQlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKLQotCQlpZiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GQUlMRUQpCi0JCQljb250aW51ZTsKLQotCQlpZiAoZnRyYWNlX21hdGNoX3JlY29yZChyZWMsIHNlYXJjaCwgc2VhcmNoX2xlbiwgdHlwZSkpIHsKLQkJCWlmIChub3QpCi0JCQkJcmVjLT5mbGFncyAmPSB+ZmxhZzsKLQkJCWVsc2UKLQkJCQlyZWMtPmZsYWdzIHw9IGZsYWc7Ci0JCQlmb3VuZCA9IDE7Ci0JCX0KLQkJLyoKLQkJICogT25seSBlbmFibGUgZmlsdGVyaW5nIGlmIHdlIGhhdmUgYSBmdW5jdGlvbiB0aGF0Ci0JCSAqIGlzIGZpbHRlcmVkIG9uLgotCQkgKi8KLQkJaWYgKGVuYWJsZSAmJiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GSUxURVIpKQotCQkJZnRyYWNlX2ZpbHRlcmVkID0gMTsKLQl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKLQltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKLQotCXJldHVybiBmb3VuZDsKKwkJcmV0ID0gYWRkX2hhc2hfZW50cnkoaGFzaCwgcmVjLT5pcCk7CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKLWZ0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIGNoYXIgKm1vZCwKLQkJCSAgIGNoYXIgKnJlZ2V4LCBpbnQgbGVuLCBpbnQgdHlwZSkKK2Z0cmFjZV9tYXRjaF9yZWNvcmQoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgY2hhciAqbW9kLAorCQkgICAgY2hhciAqcmVnZXgsIGludCBsZW4sIGludCB0eXBlKQogewogCWNoYXIgc3RyW0tTWU1fU1lNQk9MX0xFTl07CiAJY2hhciAqbW9kbmFtZTsKIAogCWthbGxzeW1zX2xvb2t1cChyZWMtPmlwLCBOVUxMLCBOVUxMLCAmbW9kbmFtZSwgc3RyKTsKIAotCWlmICghbW9kbmFtZSB8fCBzdHJjbXAobW9kbmFtZSwgbW9kKSkKLQkJcmV0dXJuIDA7CisJaWYgKG1vZCkgeworCQkvKiBtb2R1bGUgbG9va3VwIHJlcXVpcmVzIG1hdGNoaW5nIHRoZSBtb2R1bGUgKi8KKwkJaWYgKCFtb2RuYW1lIHx8IHN0cmNtcChtb2RuYW1lLCBtb2QpKQorCQkJcmV0dXJuIDA7CiAKLQkvKiBibGFuayBzZWFyY2ggbWVhbnMgdG8gbWF0Y2ggYWxsIGZ1bmNzIGluIHRoZSBtb2QgKi8KLQlpZiAobGVuKQotCQlyZXR1cm4gZnRyYWNlX21hdGNoKHN0ciwgcmVnZXgsIGxlbiwgdHlwZSk7Ci0JZWxzZQotCQlyZXR1cm4gMTsKKwkJLyogYmxhbmsgc2VhcmNoIG1lYW5zIHRvIG1hdGNoIGFsbCBmdW5jcyBpbiB0aGUgbW9kICovCisJCWlmICghbGVuKQorCQkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIGZ0cmFjZV9tYXRjaChzdHIsIHJlZ2V4LCBsZW4sIHR5cGUpOwogfQogCi1zdGF0aWMgaW50IGZ0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkcyhjaGFyICpidWZmLCBjaGFyICptb2QsIGludCBlbmFibGUpCitzdGF0aWMgaW50CittYXRjaF9yZWNvcmRzKHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwgY2hhciAqYnVmZiwKKwkgICAgICBpbnQgbGVuLCBjaGFyICptb2QsIGludCBub3QpCiB7CiAJdW5zaWduZWQgc2VhcmNoX2xlbiA9IDA7CiAJc3RydWN0IGZ0cmFjZV9wYWdlICpwZzsKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwogCWludCB0eXBlID0gTUFUQ0hfRlVMTDsKIAljaGFyICpzZWFyY2ggPSBidWZmOwotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQlpbnQgbm90ID0gMDsKIAlpbnQgZm91bmQgPSAwOworCWludCByZXQ7CiAKLQlmbGFnID0gZW5hYmxlID8gRlRSQUNFX0ZMX0ZJTFRFUiA6IEZUUkFDRV9GTF9OT1RSQUNFOworCWlmIChsZW4pIHsKKwkJdHlwZSA9IGZpbHRlcl9wYXJzZV9yZWdleChidWZmLCBsZW4sICZzZWFyY2gsICZub3QpOworCQlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaCk7CisJfQorCisJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOworCisJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgeworCisJCWlmIChmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgbW9kLCBzZWFyY2gsIHNlYXJjaF9sZW4sIHR5cGUpKSB7CisJCQlyZXQgPSBlbnRlcl9yZWNvcmQoaGFzaCwgcmVjLCBub3QpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlmb3VuZCA9IHJldDsKKwkJCQlnb3RvIG91dF91bmxvY2s7CisJCQl9CisJCQlmb3VuZCA9IDE7CisJCX0KKwl9IHdoaWxlX2Zvcl9lYWNoX2Z0cmFjZV9yZWMoKTsKKyBvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOworCisJcmV0dXJuIGZvdW5kOworfQorCitzdGF0aWMgaW50CitmdHJhY2VfbWF0Y2hfcmVjb3JkcyhzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2gsIGNoYXIgKmJ1ZmYsIGludCBsZW4pCit7CisJcmV0dXJuIG1hdGNoX3JlY29yZHMoaGFzaCwgYnVmZiwgbGVuLCBOVUxMLCAwKTsKK30KKworc3RhdGljIGludAorZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmRzKHN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaCwgY2hhciAqYnVmZiwgY2hhciAqbW9kKQoreworCWludCBub3QgPSAwOwogCiAJLyogYmxhbmsgb3IgJyonIG1lYW4gdGhlIHNhbWUgKi8KIAlpZiAoc3RyY21wKGJ1ZmYsICIqIikgPT0gMCkKQEAgLTE4NTIsMzIgKzIzOTAsNyBAQAogCQlub3QgPSAxOwogCX0KIAotCWlmIChzdHJsZW4oYnVmZikpIHsKLQkJdHlwZSA9IGZpbHRlcl9wYXJzZV9yZWdleChidWZmLCBzdHJsZW4oYnVmZiksICZzZWFyY2gsICZub3QpOwotCQlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaCk7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwotCWRvX2Zvcl9lYWNoX2Z0cmFjZV9yZWMocGcsIHJlYykgewotCi0JCWlmIChyZWMtPmZsYWdzICYgRlRSQUNFX0ZMX0ZBSUxFRCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChmdHJhY2VfbWF0Y2hfbW9kdWxlX3JlY29yZChyZWMsIG1vZCwKLQkJCQkJICAgICAgIHNlYXJjaCwgc2VhcmNoX2xlbiwgdHlwZSkpIHsKLQkJCWlmIChub3QpCi0JCQkJcmVjLT5mbGFncyAmPSB+ZmxhZzsKLQkJCWVsc2UKLQkJCQlyZWMtPmZsYWdzIHw9IGZsYWc7Ci0JCQlmb3VuZCA9IDE7Ci0JCX0KLQkJaWYgKGVuYWJsZSAmJiAocmVjLT5mbGFncyAmIEZUUkFDRV9GTF9GSUxURVIpKQotCQkJZnRyYWNlX2ZpbHRlcmVkID0gMTsKLQotCX0gd2hpbGVfZm9yX2VhY2hfZnRyYWNlX3JlYygpOwotCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwotCi0JcmV0dXJuIGZvdW5kOworCXJldHVybiBtYXRjaF9yZWNvcmRzKGhhc2gsIGJ1ZmYsIHN0cmxlbihidWZmKSwgbW9kLCBub3QpOwogfQogCiAvKgpAQCAtMTg4OCw3ICsyNDAxLDEwIEBACiBzdGF0aWMgaW50CiBmdHJhY2VfbW9kX2NhbGxiYWNrKGNoYXIgKmZ1bmMsIGNoYXIgKmNtZCwgY2hhciAqcGFyYW0sIGludCBlbmFibGUpCiB7CisJc3RydWN0IGZ0cmFjZV9vcHMgKm9wcyA9ICZnbG9iYWxfb3BzOworCXN0cnVjdCBmdHJhY2VfaGFzaCAqaGFzaDsKIAljaGFyICptb2Q7CisJaW50IHJldCA9IC1FSU5WQUw7CiAKIAkvKgogCSAqIGNtZCA9PSAnbW9kJyBiZWNhdXNlIHdlIG9ubHkgcmVnaXN0ZXJlZCB0aGlzIGZ1bmMKQEAgLTE5MDAsMTUgKzI0MTYsMjQgQEAKIAogCS8qIHdlIG11c3QgaGF2ZSBhIG1vZHVsZSBuYW1lICovCiAJaWYgKCFwYXJhbSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiByZXQ7CiAKIAltb2QgPSBzdHJzZXAoJnBhcmFtLCAiOiIpOwogCWlmICghc3RybGVuKG1vZCkpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gcmV0OwogCi0JaWYgKGZ0cmFjZV9tYXRjaF9tb2R1bGVfcmVjb3JkcyhmdW5jLCBtb2QsIGVuYWJsZSkpCi0JCXJldHVybiAwOwotCXJldHVybiAtRUlOVkFMOworCWlmIChlbmFibGUpCisJCWhhc2ggPSBvcHMtPmZpbHRlcl9oYXNoOworCWVsc2UKKwkJaGFzaCA9IG9wcy0+bm90cmFjZV9oYXNoOworCisJcmV0ID0gZnRyYWNlX21hdGNoX21vZHVsZV9yZWNvcmRzKGhhc2gsIGZ1bmMsIG1vZCk7CisJaWYgKCFyZXQpCisJCXJldCA9IC1FSU5WQUw7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBmdHJhY2VfZnVuY19jb21tYW5kIGZ0cmFjZV9tb2RfY21kID0gewpAQCAtMTk1OSw2ICsyNDg0LDcgQEAKIAogc3RhdGljIHZvaWQgX19lbmFibGVfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKHZvaWQpCiB7CisJaW50IHJldDsKIAlpbnQgaTsKIAogCWlmIChmdHJhY2VfcHJvYmVfcmVnaXN0ZXJlZCkKQEAgLTE5NzMsMTMgKzI0OTksMTYgQEAKIAlpZiAoaSA9PSBGVFJBQ0VfRlVOQ19IQVNIU0laRSkKIAkJcmV0dXJuOwogCi0JX19yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3Byb2JlX29wcyk7Ci0JZnRyYWNlX3N0YXJ0dXAoMCk7CisJcmV0ID0gX19yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRyYWNlX3Byb2JlX29wcyk7CisJaWYgKCFyZXQpCisJCWZ0cmFjZV9zdGFydHVwKCZ0cmFjZV9wcm9iZV9vcHMsIDApOworCiAJZnRyYWNlX3Byb2JlX3JlZ2lzdGVyZWQgPSAxOwogfQogCiBzdGF0aWMgdm9pZCBfX2Rpc2FibGVfZnRyYWNlX2Z1bmN0aW9uX3Byb2JlKHZvaWQpCiB7CisJaW50IHJldDsKIAlpbnQgaTsKIAogCWlmICghZnRyYWNlX3Byb2JlX3JlZ2lzdGVyZWQpCkBAIC0xOTkyLDggKzI1MjEsMTAgQEAKIAl9CiAKIAkvKiBubyBtb3JlIGZ1bmNzIGxlZnQgKi8KLQlfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9wcm9iZV9vcHMpOwotCWZ0cmFjZV9zaHV0ZG93bigwKTsKKwlyZXQgPSBfX3VucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0cmFjZV9wcm9iZV9vcHMpOworCWlmICghcmV0KQorCQlmdHJhY2Vfc2h1dGRvd24oJnRyYWNlX3Byb2JlX29wcywgMCk7CisKIAlmdHJhY2VfcHJvYmVfcmVnaXN0ZXJlZCA9IDA7CiB9CiAKQEAgLTIwMjksMTIgKzI1NjAsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkKKwkJZ290byBvdXRfdW5sb2NrOworCiAJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CiAKLQkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRkFJTEVEKQotCQkJY29udGludWU7Ci0KLQkJaWYgKCFmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgc2VhcmNoLCBsZW4sIHR5cGUpKQorCQlpZiAoIWZ0cmFjZV9tYXRjaF9yZWNvcmQocmVjLCBOVUxMLCBzZWFyY2gsIGxlbiwgdHlwZSkpCiAJCQljb250aW51ZTsKIAogCQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOwpAQCAtMjE5NSwxOCArMjcyNywyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZnRyYWNlX3Byb2Nlc3NfcmVnZXgoY2hhciAqYnVmZiwgaW50IGxlbiwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQgZnRyYWNlX3Byb2Nlc3NfcmVnZXgoc3RydWN0IGZ0cmFjZV9oYXNoICpoYXNoLAorCQkJCWNoYXIgKmJ1ZmYsIGludCBsZW4sIGludCBlbmFibGUpCiB7CiAJY2hhciAqZnVuYywgKmNvbW1hbmQsICpuZXh0ID0gYnVmZjsKIAlzdHJ1Y3QgZnRyYWNlX2Z1bmNfY29tbWFuZCAqcDsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKKwlpbnQgcmV0OwogCiAJZnVuYyA9IHN0cnNlcCgmbmV4dCwgIjoiKTsKIAogCWlmICghbmV4dCkgewotCQlpZiAoZnRyYWNlX21hdGNoX3JlY29yZHMoZnVuYywgbGVuLCBlbmFibGUpKQotCQkJcmV0dXJuIDA7Ci0JCXJldHVybiByZXQ7CisJCXJldCA9IGZ0cmFjZV9tYXRjaF9yZWNvcmRzKGhhc2gsIGZ1bmMsIGxlbik7CisJCWlmICghcmV0KQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBjb21tYW5kIGZvdW5kICovCkBAIC0yMjM5LDYgKzI3NzUsMTAgQEAKIAogCW11dGV4X2xvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKIAorCXJldCA9IC1FTk9ERVY7CisJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCisJCWdvdG8gb3V0X3VubG9jazsKKwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CiAJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAkJaXRlciA9IG0tPnByaXZhdGU7CkBAIC0yMjUwLDcgKzI3OTAsNyBAQAogCiAJaWYgKHJlYWQgPj0gMCAmJiB0cmFjZV9wYXJzZXJfbG9hZGVkKHBhcnNlcikgJiYKIAkgICAgIXRyYWNlX3BhcnNlcl9jb250KHBhcnNlcikpIHsKLQkJcmV0ID0gZnRyYWNlX3Byb2Nlc3NfcmVnZXgocGFyc2VyLT5idWZmZXIsCisJCXJldCA9IGZ0cmFjZV9wcm9jZXNzX3JlZ2V4KGl0ZXItPmhhc2gsIHBhcnNlci0+YnVmZmVyLAogCQkJCQkgICBwYXJzZXItPmlkeCwgZW5hYmxlKTsKIAkJdHJhY2VfcGFyc2VyX2NsZWFyKHBhcnNlcik7CiAJCWlmIChyZXQpCkBAIC0yMjc4LDIyICsyODE4LDQ5IEBACiAJcmV0dXJuIGZ0cmFjZV9yZWdleF93cml0ZShmaWxlLCB1YnVmLCBjbnQsIHBwb3MsIDApOwogfQogCi1zdGF0aWMgdm9pZAotZnRyYWNlX3NldF9yZWdleCh1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sIGludCByZXNldCwgaW50IGVuYWJsZSkKK3N0YXRpYyBpbnQKK2Z0cmFjZV9zZXRfcmVnZXgoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLAorCQkgaW50IHJlc2V0LCBpbnQgZW5hYmxlKQogeworCXN0cnVjdCBmdHJhY2VfaGFzaCAqKm9yaWdfaGFzaDsKKwlzdHJ1Y3QgZnRyYWNlX2hhc2ggKmhhc2g7CisJaW50IHJldDsKKworCS8qIEFsbCBnbG9iYWwgb3BzIHVzZXMgdGhlIGdsb2JhbCBvcHMgZmlsdGVycyAqLworCWlmIChvcHMtPmZsYWdzICYgRlRSQUNFX09QU19GTF9HTE9CQUwpCisJCW9wcyA9ICZnbG9iYWxfb3BzOworCiAJaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCi0JCXJldHVybjsKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoZW5hYmxlKQorCQlvcmlnX2hhc2ggPSAmb3BzLT5maWx0ZXJfaGFzaDsKKwllbHNlCisJCW9yaWdfaGFzaCA9ICZvcHMtPm5vdHJhY2VfaGFzaDsKKworCWhhc2ggPSBhbGxvY19hbmRfY29weV9mdHJhY2VfaGFzaChGVFJBQ0VfSEFTSF9ERUZBVUxUX0JJVFMsICpvcmlnX2hhc2gpOworCWlmICghaGFzaCkKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfcmVnZXhfbG9jayk7CiAJaWYgKHJlc2V0KQotCQlmdHJhY2VfZmlsdGVyX3Jlc2V0KGVuYWJsZSk7CisJCWZ0cmFjZV9maWx0ZXJfcmVzZXQoaGFzaCk7CiAJaWYgKGJ1ZikKLQkJZnRyYWNlX21hdGNoX3JlY29yZHMoYnVmLCBsZW4sIGVuYWJsZSk7CisJCWZ0cmFjZV9tYXRjaF9yZWNvcmRzKGhhc2gsIGJ1ZiwgbGVuKTsKKworCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwlyZXQgPSBmdHJhY2VfaGFzaF9tb3ZlKG9yaWdfaGFzaCwgaGFzaCk7CisJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CisKIAltdXRleF91bmxvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKKworCWZyZWVfZnRyYWNlX2hhc2goaGFzaCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCiAgKiBmdHJhY2Vfc2V0X2ZpbHRlciAtIHNldCBhIGZ1bmN0aW9uIHRvIGZpbHRlciBvbiBpbiBmdHJhY2UKKyAqIEBvcHMgLSB0aGUgb3BzIHRvIHNldCB0aGUgZmlsdGVyIHdpdGgKICAqIEBidWYgLSB0aGUgc3RyaW5nIHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uIGZpbHRlciB0ZXh0LgogICogQGxlbiAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KICAqIEByZXNldCAtIG5vbiB6ZXJvIHRvIHJlc2V0IGFsbCBmaWx0ZXJzIGJlZm9yZSBhcHBseWluZyB0aGlzIGZpbHRlci4KQEAgLTIzMDEsMTMgKzI4NjgsMTYgQEAKICAqIEZpbHRlcnMgZGVub3RlIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgYmUgZW5hYmxlZCB3aGVuIHRyYWNpbmcgaXMgZW5hYmxlZC4KICAqIElmIEBidWYgaXMgTlVMTCBhbmQgcmVzZXQgaXMgc2V0LCBhbGwgZnVuY3Rpb25zIHdpbGwgYmUgZW5hYmxlZCBmb3IgdHJhY2luZy4KICAqLwotdm9pZCBmdHJhY2Vfc2V0X2ZpbHRlcih1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sIGludCByZXNldCkKK3ZvaWQgZnRyYWNlX3NldF9maWx0ZXIoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgdW5zaWduZWQgY2hhciAqYnVmLAorCQkgICAgICAgaW50IGxlbiwgaW50IHJlc2V0KQogewotCWZ0cmFjZV9zZXRfcmVnZXgoYnVmLCBsZW4sIHJlc2V0LCAxKTsKKwlmdHJhY2Vfc2V0X3JlZ2V4KG9wcywgYnVmLCBsZW4sIHJlc2V0LCAxKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZ0cmFjZV9zZXRfZmlsdGVyKTsKIAogLyoqCiAgKiBmdHJhY2Vfc2V0X25vdHJhY2UgLSBzZXQgYSBmdW5jdGlvbiB0byBub3QgdHJhY2UgaW4gZnRyYWNlCisgKiBAb3BzIC0gdGhlIG9wcyB0byBzZXQgdGhlIG5vdHJhY2UgZmlsdGVyIHdpdGgKICAqIEBidWYgLSB0aGUgc3RyaW5nIHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uIG5vdHJhY2UgdGV4dC4KICAqIEBsZW4gLSB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCiAgKiBAcmVzZXQgLSBub24gemVybyB0byByZXNldCBhbGwgZmlsdGVycyBiZWZvcmUgYXBwbHlpbmcgdGhpcyBmaWx0ZXIuCkBAIC0yMzE2LDEwICsyODg2LDQ0IEBACiAgKiBpcyBlbmFibGVkLiBJZiBAYnVmIGlzIE5VTEwgYW5kIHJlc2V0IGlzIHNldCwgYWxsIGZ1bmN0aW9ucyB3aWxsIGJlIGVuYWJsZWQKICAqIGZvciB0cmFjaW5nLgogICovCi12b2lkIGZ0cmFjZV9zZXRfbm90cmFjZSh1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4sIGludCByZXNldCkKK3ZvaWQgZnRyYWNlX3NldF9ub3RyYWNlKHN0cnVjdCBmdHJhY2Vfb3BzICpvcHMsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCWludCBsZW4sIGludCByZXNldCkKIHsKLQlmdHJhY2Vfc2V0X3JlZ2V4KGJ1ZiwgbGVuLCByZXNldCwgMCk7CisJZnRyYWNlX3NldF9yZWdleChvcHMsIGJ1ZiwgbGVuLCByZXNldCwgMCk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChmdHJhY2Vfc2V0X25vdHJhY2UpOworLyoqCisgKiBmdHJhY2Vfc2V0X2ZpbHRlciAtIHNldCBhIGZ1bmN0aW9uIHRvIGZpbHRlciBvbiBpbiBmdHJhY2UKKyAqIEBvcHMgLSB0aGUgb3BzIHRvIHNldCB0aGUgZmlsdGVyIHdpdGgKKyAqIEBidWYgLSB0aGUgc3RyaW5nIHRoYXQgaG9sZHMgdGhlIGZ1bmN0aW9uIGZpbHRlciB0ZXh0LgorICogQGxlbiAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KKyAqIEByZXNldCAtIG5vbiB6ZXJvIHRvIHJlc2V0IGFsbCBmaWx0ZXJzIGJlZm9yZSBhcHBseWluZyB0aGlzIGZpbHRlci4KKyAqCisgKiBGaWx0ZXJzIGRlbm90ZSB3aGljaCBmdW5jdGlvbnMgc2hvdWxkIGJlIGVuYWJsZWQgd2hlbiB0cmFjaW5nIGlzIGVuYWJsZWQuCisgKiBJZiBAYnVmIGlzIE5VTEwgYW5kIHJlc2V0IGlzIHNldCwgYWxsIGZ1bmN0aW9ucyB3aWxsIGJlIGVuYWJsZWQgZm9yIHRyYWNpbmcuCisgKi8KK3ZvaWQgZnRyYWNlX3NldF9nbG9iYWxfZmlsdGVyKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbiwgaW50IHJlc2V0KQoreworCWZ0cmFjZV9zZXRfcmVnZXgoJmdsb2JhbF9vcHMsIGJ1ZiwgbGVuLCByZXNldCwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmdHJhY2Vfc2V0X2dsb2JhbF9maWx0ZXIpOworCisvKioKKyAqIGZ0cmFjZV9zZXRfbm90cmFjZSAtIHNldCBhIGZ1bmN0aW9uIHRvIG5vdCB0cmFjZSBpbiBmdHJhY2UKKyAqIEBvcHMgLSB0aGUgb3BzIHRvIHNldCB0aGUgbm90cmFjZSBmaWx0ZXIgd2l0aAorICogQGJ1ZiAtIHRoZSBzdHJpbmcgdGhhdCBob2xkcyB0aGUgZnVuY3Rpb24gbm90cmFjZSB0ZXh0LgorICogQGxlbiAtIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZy4KKyAqIEByZXNldCAtIG5vbiB6ZXJvIHRvIHJlc2V0IGFsbCBmaWx0ZXJzIGJlZm9yZSBhcHBseWluZyB0aGlzIGZpbHRlci4KKyAqCisgKiBOb3RyYWNlIEZpbHRlcnMgZGVub3RlIHdoaWNoIGZ1bmN0aW9ucyBzaG91bGQgbm90IGJlIGVuYWJsZWQgd2hlbiB0cmFjaW5nCisgKiBpcyBlbmFibGVkLiBJZiBAYnVmIGlzIE5VTEwgYW5kIHJlc2V0IGlzIHNldCwgYWxsIGZ1bmN0aW9ucyB3aWxsIGJlIGVuYWJsZWQKKyAqIGZvciB0cmFjaW5nLgorICovCit2b2lkIGZ0cmFjZV9zZXRfZ2xvYmFsX25vdHJhY2UodW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuLCBpbnQgcmVzZXQpCit7CisJZnRyYWNlX3NldF9yZWdleCgmZ2xvYmFsX29wcywgYnVmLCBsZW4sIHJlc2V0LCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZ0cmFjZV9zZXRfZ2xvYmFsX25vdHJhY2UpOwogCiAvKgogICogY29tbWFuZCBsaW5lIGludGVyZmFjZSB0byBhbGxvdyB1c2VycyB0byBzZXQgZmlsdGVycyBvbiBib290IHVwLgpAQCAtMjM3MCwyMiArMjk3NCwyMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIgKi8KIAotc3RhdGljIHZvaWQgX19pbml0IHNldF9mdHJhY2VfZWFybHlfZmlsdGVyKGNoYXIgKmJ1ZiwgaW50IGVuYWJsZSkKK3N0YXRpYyB2b2lkIF9faW5pdAorc2V0X2Z0cmFjZV9lYXJseV9maWx0ZXIoc3RydWN0IGZ0cmFjZV9vcHMgKm9wcywgY2hhciAqYnVmLCBpbnQgZW5hYmxlKQogewogCWNoYXIgKmZ1bmM7CiAKIAl3aGlsZSAoYnVmKSB7CiAJCWZ1bmMgPSBzdHJzZXAoJmJ1ZiwgIiwiKTsKLQkJZnRyYWNlX3NldF9yZWdleChmdW5jLCBzdHJsZW4oZnVuYyksIDAsIGVuYWJsZSk7CisJCWZ0cmFjZV9zZXRfcmVnZXgob3BzLCBmdW5jLCBzdHJsZW4oZnVuYyksIDAsIGVuYWJsZSk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0X2Z0cmFjZV9lYXJseV9maWx0ZXJzKHZvaWQpCiB7CiAJaWYgKGZ0cmFjZV9maWx0ZXJfYnVmWzBdKQotCQlzZXRfZnRyYWNlX2Vhcmx5X2ZpbHRlcihmdHJhY2VfZmlsdGVyX2J1ZiwgMSk7CisJCXNldF9mdHJhY2VfZWFybHlfZmlsdGVyKCZnbG9iYWxfb3BzLCBmdHJhY2VfZmlsdGVyX2J1ZiwgMSk7CiAJaWYgKGZ0cmFjZV9ub3RyYWNlX2J1ZlswXSkKLQkJc2V0X2Z0cmFjZV9lYXJseV9maWx0ZXIoZnRyYWNlX25vdHJhY2VfYnVmLCAwKTsKKwkJc2V0X2Z0cmFjZV9lYXJseV9maWx0ZXIoJmdsb2JhbF9vcHMsIGZ0cmFjZV9ub3RyYWNlX2J1ZiwgMCk7CiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgogCWlmIChmdHJhY2VfZ3JhcGhfYnVmWzBdKQogCQlzZXRfZnRyYWNlX2Vhcmx5X2dyYXBoKGZ0cmFjZV9ncmFwaF9idWYpOwpAQCAtMjM5MywxMSArMjk5OCwxNCBAQAogfQogCiBzdGF0aWMgaW50Ci1mdHJhY2VfcmVnZXhfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IGVuYWJsZSkKK2Z0cmFjZV9yZWdleF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBzZXFfZmlsZSAqbSA9IChzdHJ1Y3Qgc2VxX2ZpbGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGZ0cmFjZV9pdGVyYXRvciAqaXRlcjsKKwlzdHJ1Y3QgZnRyYWNlX2hhc2ggKipvcmlnX2hhc2g7CiAJc3RydWN0IHRyYWNlX3BhcnNlciAqcGFyc2VyOworCWludCBmaWx0ZXJfaGFzaDsKKwlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX3JlZ2V4X2xvY2spOwogCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSB7CkBAIC0yNDEwLDMzICszMDE4LDQxIEBACiAJcGFyc2VyID0gJml0ZXItPnBhcnNlcjsKIAlpZiAodHJhY2VfcGFyc2VyX2xvYWRlZChwYXJzZXIpKSB7CiAJCXBhcnNlci0+YnVmZmVyW3BhcnNlci0+aWR4XSA9IDA7Ci0JCWZ0cmFjZV9tYXRjaF9yZWNvcmRzKHBhcnNlci0+YnVmZmVyLCBwYXJzZXItPmlkeCwgZW5hYmxlKTsKKwkJZnRyYWNlX21hdGNoX3JlY29yZHMoaXRlci0+aGFzaCwgcGFyc2VyLT5idWZmZXIsIHBhcnNlci0+aWR4KTsKIAl9CiAKLQltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7Ci0JaWYgKGZ0cmFjZV9zdGFydF91cCAmJiBmdHJhY2VfZW5hYmxlZCkKLQkJZnRyYWNlX3J1bl91cGRhdGVfY29kZShGVFJBQ0VfRU5BQkxFX0NBTExTKTsKLQltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKLQogCXRyYWNlX3BhcnNlcl9wdXQocGFyc2VyKTsKKworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkgeworCQlmaWx0ZXJfaGFzaCA9ICEhKGl0ZXItPmZsYWdzICYgRlRSQUNFX0lURVJfRklMVEVSKTsKKworCQlpZiAoZmlsdGVyX2hhc2gpCisJCQlvcmlnX2hhc2ggPSAmaXRlci0+b3BzLT5maWx0ZXJfaGFzaDsKKwkJZWxzZQorCQkJb3JpZ19oYXNoID0gJml0ZXItPm9wcy0+bm90cmFjZV9oYXNoOworCisJCW11dGV4X2xvY2soJmZ0cmFjZV9sb2NrKTsKKwkJLyoKKwkJICogUmVtb3ZlIHRoZSBjdXJyZW50IHNldCwgdXBkYXRlIHRoZSBoYXNoIGFuZCBhZGQKKwkJICogdGhlbSBiYWNrLgorCQkgKi8KKwkJZnRyYWNlX2hhc2hfcmVjX2Rpc2FibGUoaXRlci0+b3BzLCBmaWx0ZXJfaGFzaCk7CisJCXJldCA9IGZ0cmFjZV9oYXNoX21vdmUob3JpZ19oYXNoLCBpdGVyLT5oYXNoKTsKKwkJaWYgKCFyZXQpIHsKKwkJCWZ0cmFjZV9oYXNoX3JlY19lbmFibGUoaXRlci0+b3BzLCBmaWx0ZXJfaGFzaCk7CisJCQlpZiAoaXRlci0+b3BzLT5mbGFncyAmIEZUUkFDRV9PUFNfRkxfRU5BQkxFRAorCQkJICAgICYmIGZ0cmFjZV9lbmFibGVkKQorCQkJCWZ0cmFjZV9ydW5fdXBkYXRlX2NvZGUoRlRSQUNFX0VOQUJMRV9DQUxMUyk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CisJfQorCWZyZWVfZnRyYWNlX2hhc2goaXRlci0+aGFzaCk7CiAJa2ZyZWUoaXRlcik7CiAKIAltdXRleF91bmxvY2soJmZ0cmFjZV9yZWdleF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotZnRyYWNlX2ZpbHRlcl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBmdHJhY2VfcmVnZXhfcmVsZWFzZShpbm9kZSwgZmlsZSwgMSk7Ci19Ci0KLXN0YXRpYyBpbnQKLWZ0cmFjZV9ub3RyYWNlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JcmV0dXJuIGZ0cmFjZV9yZWdleF9yZWxlYXNlKGlub2RlLCBmaWxlLCAwKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2F2YWlsX2ZvcHMgPSB7CiAJLm9wZW4gPSBmdHJhY2VfYXZhaWxfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLApAQCAtMjQ0NCw4ICszMDYwLDggQEAKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX3ByaXZhdGUsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdHJhY2VfZmFpbHVyZXNfZm9wcyA9IHsKLQkub3BlbiA9IGZ0cmFjZV9mYWlsdXJlc19vcGVuLAorc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZnRyYWNlX2VuYWJsZWRfZm9wcyA9IHsKKwkub3BlbiA9IGZ0cmFjZV9lbmFibGVkX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKQEAgLTI0NTYsNyArMzA3Miw3IEBACiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkud3JpdGUgPSBmdHJhY2VfZmlsdGVyX3dyaXRlLAogCS5sbHNlZWsgPSBmdHJhY2VfcmVnZXhfbHNlZWssCi0JLnJlbGVhc2UgPSBmdHJhY2VfZmlsdGVyX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBmdHJhY2VfcmVnZXhfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0cmFjZV9ub3RyYWNlX2ZvcHMgPSB7CkBAIC0yNDY0LDcgKzMwODAsNyBAQAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLndyaXRlID0gZnRyYWNlX25vdHJhY2Vfd3JpdGUsCiAJLmxsc2VlayA9IGZ0cmFjZV9yZWdleF9sc2VlaywKLQkucmVsZWFzZSA9IGZ0cmFjZV9ub3RyYWNlX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBmdHJhY2VfcmVnZXhfcmVsZWFzZSwKIH07CiAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCkBAIC0yNTczLDkgKzMxODksNiBAQAogCWJvb2wgZXhpc3RzOwogCWludCBpOwogCi0JaWYgKGZ0cmFjZV9kaXNhYmxlZCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KIAkvKiBkZWNvZGUgcmVnZXggKi8KIAl0eXBlID0gZmlsdGVyX3BhcnNlX3JlZ2V4KGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksICZzZWFyY2gsICZub3QpOwogCWlmICghbm90ICYmICppZHggPj0gRlRSQUNFX0dSQVBIX01BWF9GVU5DUykKQEAgLTI1ODQsMTIgKzMxOTcsMTggQEAKIAlzZWFyY2hfbGVuID0gc3RybGVuKHNlYXJjaCk7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlpZiAodW5saWtlbHkoZnRyYWNlX2Rpc2FibGVkKSkgeworCQltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJZG9fZm9yX2VhY2hfZnRyYWNlX3JlYyhwZywgcmVjKSB7CiAKLQkJaWYgKHJlYy0+ZmxhZ3MgJiAoRlRSQUNFX0ZMX0ZBSUxFRCB8IEZUUkFDRV9GTF9GUkVFKSkKKwkJaWYgKHJlYy0+ZmxhZ3MgJiBGVFJBQ0VfRkxfRlJFRSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChmdHJhY2VfbWF0Y2hfcmVjb3JkKHJlYywgc2VhcmNoLCBzZWFyY2hfbGVuLCB0eXBlKSkgeworCQlpZiAoZnRyYWNlX21hdGNoX3JlY29yZChyZWMsIE5VTEwsIHNlYXJjaCwgc2VhcmNoX2xlbiwgdHlwZSkpIHsKIAkJCS8qIGlmIGl0IGlzIGluIHRoZSBhcnJheSAqLwogCQkJZXhpc3RzID0gZmFsc2U7CiAJCQlmb3IgKGkgPSAwOyBpIDwgKmlkeDsgaSsrKSB7CkBAIC0yNjc5LDggKzMyOTgsOCBAQAogCXRyYWNlX2NyZWF0ZV9maWxlKCJhdmFpbGFibGVfZmlsdGVyX2Z1bmN0aW9ucyIsIDA0NDQsCiAJCQlkX3RyYWNlciwgTlVMTCwgJmZ0cmFjZV9hdmFpbF9mb3BzKTsKIAotCXRyYWNlX2NyZWF0ZV9maWxlKCJmYWlsdXJlcyIsIDA0NDQsCi0JCQlkX3RyYWNlciwgTlVMTCwgJmZ0cmFjZV9mYWlsdXJlc19mb3BzKTsKKwl0cmFjZV9jcmVhdGVfZmlsZSgiZW5hYmxlZF9mdW5jdGlvbnMiLCAwNDQ0LAorCQkJZF90cmFjZXIsIE5VTEwsICZmdHJhY2VfZW5hYmxlZF9mb3BzKTsKIAogCXRyYWNlX2NyZWF0ZV9maWxlKCJzZXRfZnRyYWNlX2ZpbHRlciIsIDA2NDQsIGRfdHJhY2VyLAogCQkJTlVMTCwgJmZ0cmFjZV9maWx0ZXJfZm9wcyk7CkBAIC0yNzAzLDcgKzMzMjIsNiBAQAogewogCXVuc2lnbmVkIGxvbmcgKnA7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJcCA9IHN0YXJ0OwpAQCAtMjcyMCwxMCArMzMzOCw3IEBACiAJCWZ0cmFjZV9yZWNvcmRfaXAoYWRkcik7CiAJfQogCi0JLyogZGlzYWJsZSBpbnRlcnJ1cHRzIHRvIHByZXZlbnQga3N0b3AgbWFjaGluZSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmdHJhY2VfdXBkYXRlX2NvZGUobW9kKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXR1cm4gMDsKQEAgLTI3MzUsMTAgKzMzNTAsMTEgQEAKIAlzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjOwogCXN0cnVjdCBmdHJhY2VfcGFnZSAqcGc7CiAKLQlpZiAoZnRyYWNlX2Rpc2FibGVkKQotCQlyZXR1cm47Ci0KIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CisKKwlpZiAoZnRyYWNlX2Rpc2FibGVkKQorCQlnb3RvIG91dF91bmxvY2s7CisKIAlkb19mb3JfZWFjaF9mdHJhY2VfcmVjKHBnLCByZWMpIHsKIAkJaWYgKHdpdGhpbl9tb2R1bGVfY29yZShyZWMtPmlwLCBtb2QpKSB7CiAJCQkvKgpAQCAtMjc0OSw2ICszMzY1LDcgQEAKIAkJCWZ0cmFjZV9mcmVlX3JlYyhyZWMpOwogCQl9CiAJfSB3aGlsZV9mb3JfZWFjaF9mdHJhY2VfcmVjKCk7Cisgb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKIH0KIApAQCAtMjgzNSw2ICszNDUyLDEwIEBACiAKICNlbHNlCiAKK3N0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyBnbG9iYWxfb3BzID0geworCS5mdW5jCQkJPSBmdHJhY2Vfc3R1YiwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGZ0cmFjZV9ub2R5bl9pbml0KHZvaWQpCiB7CiAJZnRyYWNlX2VuYWJsZWQgPSAxOwpAQCAtMjg0NSwxMiArMzQ2NiwzOCBAQAogc3RhdGljIGlubGluZSBpbnQgZnRyYWNlX2luaXRfZHluX2RlYnVnZnMoc3RydWN0IGRlbnRyeSAqZF90cmFjZXIpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmdHJhY2Vfc3RhcnR1cF9lbmFibGUoaW50IGNvbW1hbmQpIHsgfQogLyogS2VlcCBhcyBtYWNyb3Mgc28gd2UgZG8gbm90IG5lZWQgdG8gZGVmaW5lIHRoZSBjb21tYW5kcyAqLwotIyBkZWZpbmUgZnRyYWNlX3N0YXJ0dXAoY29tbWFuZCkJZG8geyB9IHdoaWxlICgwKQotIyBkZWZpbmUgZnRyYWNlX3NodXRkb3duKGNvbW1hbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGZ0cmFjZV9zdGFydHVwKG9wcywgY29tbWFuZCkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgZnRyYWNlX3NodXRkb3duKG9wcywgY29tbWFuZCkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX3N0YXJ0dXBfc3lzY3RsKCkJZG8geyB9IHdoaWxlICgwKQogIyBkZWZpbmUgZnRyYWNlX3NodXRkb3duX3N5c2N0bCgpCWRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBpbnQKK2Z0cmFjZV9vcHNfdGVzdChzdHJ1Y3QgZnRyYWNlX29wcyAqb3BzLCB1bnNpZ25lZCBsb25nIGlwKQoreworCXJldHVybiAxOworfQorCiAjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCiAKK3N0YXRpYyB2b2lkCitmdHJhY2Vfb3BzX2xpc3RfZnVuYyh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBsb25nIHBhcmVudF9pcCkKK3sKKwlzdHJ1Y3QgZnRyYWNlX29wcyAqb3A7CisKKwkvKgorCSAqIFNvbWUgb2YgdGhlIG9wcyBtYXkgYmUgZHluYW1pY2FsbHkgYWxsb2NhdGVkLAorCSAqIHRoZXkgbXVzdCBiZSBmcmVlZCBhZnRlciBhIHN5bmNocm9uaXplX3NjaGVkKCkuCisJICovCisJcHJlZW1wdF9kaXNhYmxlX25vdHJhY2UoKTsKKwlvcCA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoZnRyYWNlX29wc19saXN0KTsKKwl3aGlsZSAob3AgIT0gJmZ0cmFjZV9saXN0X2VuZCkgeworCQlpZiAoZnRyYWNlX29wc190ZXN0KG9wLCBpcCkpCisJCQlvcC0+ZnVuYyhpcCwgcGFyZW50X2lwKTsKKwkJb3AgPSByY3VfZGVyZWZlcmVuY2VfcmF3KG9wLT5uZXh0KTsKKwl9OworCXByZWVtcHRfZW5hYmxlX25vdHJhY2UoKTsKK30KKwogc3RhdGljIHZvaWQgY2xlYXJfZnRyYWNlX3N3YXBwZXIodm9pZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CkBAIC0zMTQzLDE5ICszNzkwLDIzIEBACiAgKi8KIGludCByZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oc3RydWN0IGZ0cmFjZV9vcHMgKm9wcykKIHsKLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0ID0gLTE7CiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAKLQlyZXQgPSBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihvcHMpOwotCWZ0cmFjZV9zdGFydHVwKDApOworCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQorCQlnb3RvIG91dF91bmxvY2s7CiAKKwlyZXQgPSBfX3JlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihvcHMpOworCWlmICghcmV0KQorCQlmdHJhY2Vfc3RhcnR1cChvcHMsIDApOworCisKKyBvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmZnRyYWNlX2xvY2spOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24pOwogCiAvKioKICAqIHVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uIC0gdW5yZWdpc3RlciBhIGZ1bmN0aW9uIGZvciBwcm9maWxpbmcuCkBAIC0zMTY5LDI1ICszODIwLDI3IEBACiAKIAltdXRleF9sb2NrKCZmdHJhY2VfbG9jayk7CiAJcmV0ID0gX191bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihvcHMpOwotCWZ0cmFjZV9zaHV0ZG93bigwKTsKKwlpZiAoIXJldCkKKwkJZnRyYWNlX3NodXRkb3duKG9wcywgMCk7CiAJbXV0ZXhfdW5sb2NrKCZmdHJhY2VfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24pOwogCiBpbnQKIGZ0cmFjZV9lbmFibGVfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsCiAJCSAgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLAogCQkgICAgIGxvZmZfdCAqcHBvcykKIHsKLQlpbnQgcmV0OwotCi0JaWYgKHVubGlrZWx5KGZ0cmFjZV9kaXNhYmxlZCkpCi0JCXJldHVybiAtRU5PREVWOworCWludCByZXQgPSAtRU5PREVWOwogCiAJbXV0ZXhfbG9jaygmZnRyYWNlX2xvY2spOwogCi0JcmV0ICA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOworCWlmICh1bmxpa2VseShmdHJhY2VfZGlzYWJsZWQpKQorCQlnb3RvIG91dDsKKworCXJldCA9IHByb2NfZG9pbnR2ZWModGFibGUsIHdyaXRlLCBidWZmZXIsIGxlbnAsIHBwb3MpOwogCiAJaWYgKHJldCB8fCAhd3JpdGUgfHwgKGxhc3RfZnRyYWNlX2VuYWJsZWQgPT0gISFmdHJhY2VfZW5hYmxlZCkpCiAJCWdvdG8gb3V0OwpAQCAtMzE5OSwxMSArMzg1MiwxMSBAQAogCQlmdHJhY2Vfc3RhcnR1cF9zeXNjdGwoKTsKIAogCQkvKiB3ZSBhcmUgc3RhcnRpbmcgZnRyYWNlIGFnYWluICovCi0JCWlmIChmdHJhY2VfbGlzdCAhPSAmZnRyYWNlX2xpc3RfZW5kKSB7Ci0JCQlpZiAoZnRyYWNlX2xpc3QtPm5leHQgPT0gJmZ0cmFjZV9saXN0X2VuZCkKLQkJCQlmdHJhY2VfdHJhY2VfZnVuY3Rpb24gPSBmdHJhY2VfbGlzdC0+ZnVuYzsKKwkJaWYgKGZ0cmFjZV9vcHNfbGlzdCAhPSAmZnRyYWNlX2xpc3RfZW5kKSB7CisJCQlpZiAoZnRyYWNlX29wc19saXN0LT5uZXh0ID09ICZmdHJhY2VfbGlzdF9lbmQpCisJCQkJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnRyYWNlX29wc19saXN0LT5mdW5jOwogCQkJZWxzZQotCQkJCWZ0cmFjZV90cmFjZV9mdW5jdGlvbiA9IGZ0cmFjZV9saXN0X2Z1bmM7CisJCQkJZnRyYWNlX3RyYWNlX2Z1bmN0aW9uID0gZnRyYWNlX29wc19saXN0X2Z1bmM7CiAJCX0KIAogCX0gZWxzZSB7CkBAIC0zMzkyLDcgKzQwNDUsNyBAQAogCWZ0cmFjZV9ncmFwaF9yZXR1cm4gPSByZXRmdW5jOwogCWZ0cmFjZV9ncmFwaF9lbnRyeSA9IGVudHJ5ZnVuYzsKIAotCWZ0cmFjZV9zdGFydHVwKEZUUkFDRV9TVEFSVF9GVU5DX1JFVCk7CisJZnRyYWNlX3N0YXJ0dXAoJmdsb2JhbF9vcHMsIEZUUkFDRV9TVEFSVF9GVU5DX1JFVCk7CiAKIG91dDoKIAltdXRleF91bmxvY2soJmZ0cmFjZV9sb2NrKTsKQEAgLTM0MDksNyArNDA2Miw3IEBACiAJZnRyYWNlX2dyYXBoX2FjdGl2ZS0tOwogCWZ0cmFjZV9ncmFwaF9yZXR1cm4gPSAodHJhY2VfZnVuY19ncmFwaF9yZXRfdClmdHJhY2Vfc3R1YjsKIAlmdHJhY2VfZ3JhcGhfZW50cnkgPSBmdHJhY2VfZ3JhcGhfZW50cnlfc3R1YjsKLQlmdHJhY2Vfc2h1dGRvd24oRlRSQUNFX1NUT1BfRlVOQ19SRVQpOworCWZ0cmFjZV9zaHV0ZG93bigmZ2xvYmFsX29wcywgRlRSQUNFX1NUT1BfRlVOQ19SRVQpOwogCXVucmVnaXN0ZXJfcG1fbm90aWZpZXIoJmZ0cmFjZV9zdXNwZW5kX25vdGlmaWVyKTsKIAl1bnJlZ2lzdGVyX3RyYWNlX3NjaGVkX3N3aXRjaChmdHJhY2VfZ3JhcGhfcHJvYmVfc2NoZWRfc3dpdGNoLCBOVUxMKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwppbmRleCBkMzhjMTZhLi5lZTljOTIxIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuYwpAQCAtMTExMCw2ICsxMTEwLDcgQEAKIAogCWVudHJ5LT5wcmVlbXB0X2NvdW50CQk9IHBjICYgMHhmZjsKIAllbnRyeS0+cGlkCQkJPSAodHNrKSA/IHRzay0+cGlkIDogMDsKKwllbnRyeS0+cGFkZGluZwkJCT0gMDsKIAllbnRyeS0+ZmxhZ3MgPQogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUCiAJCShpcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKSA/IFRSQUNFX0ZMQUdfSVJRU19PRkYgOiAwKSB8CkBAIC0yMDEzLDkgKzIwMTQsMTAgQEAKIHsKIAllbnVtIHByaW50X2xpbmVfdCByZXQ7CiAKLQlpZiAoaXRlci0+bG9zdF9ldmVudHMpCi0JCXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgIkNQVTolZCBbTE9TVCAlbHUgRVZFTlRTXVxuIiwKLQkJCQkgaXRlci0+Y3B1LCBpdGVyLT5sb3N0X2V2ZW50cyk7CisJaWYgKGl0ZXItPmxvc3RfZXZlbnRzICYmCisJICAgICF0cmFjZV9zZXFfcHJpbnRmKCZpdGVyLT5zZXEsICJDUFU6JWQgW0xPU1QgJWx1IEVWRU5UU11cbiIsCisJCQkJIGl0ZXItPmNwdSwgaXRlci0+bG9zdF9ldmVudHMpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CiAKIAlpZiAoaXRlci0+dHJhY2UgJiYgaXRlci0+dHJhY2UtPnByaW50X2xpbmUpIHsKIAkJcmV0ID0gaXRlci0+dHJhY2UtPnByaW50X2xpbmUoaXRlcik7CkBAIC0zMjI5LDYgKzMyMzEsMTQgQEAKIAogCQlpZiAoaXRlci0+c2VxLmxlbiA+PSBjbnQpCiAJCQlicmVhazsKKworCQkvKgorCQkgKiBTZXR0aW5nIHRoZSBmdWxsIGZsYWcgbWVhbnMgd2UgcmVhY2hlZCB0aGUgdHJhY2Vfc2VxIGJ1ZmZlcgorCQkgKiBzaXplIGFuZCB3ZSBzaG91bGQgbGVhdmUgYnkgcGFydGlhbCBvdXRwdXQgY29uZGl0aW9uIGFib3ZlLgorCQkgKiBPbmUgb2YgdGhlIHRyYWNlX3NlcV8qIGZ1bmN0aW9ucyBpcyBub3QgdXNlZCBwcm9wZXJseS4KKwkJICovCisJCVdBUk5fT05DRShpdGVyLT5zZXEuZnVsbCwgImZ1bGwgZmxhZyBzZXQgZm9yIHRyYWNlIHR5cGUgJWQiLAorCQkJICBpdGVyLT5lbnQtPnR5cGUpOwogCX0KIAl0cmFjZV9hY2Nlc3NfdW5sb2NrKGl0ZXItPmNwdV9maWxlKTsKIAl0cmFjZV9ldmVudF9yZWFkX3VubG9jaygpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlLmggYi9rZXJuZWwvdHJhY2UvdHJhY2UuaAppbmRleCA1ZTlkZmM2Li42YjY5YzRiIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2UuaAorKysgYi9rZXJuZWwvdHJhY2UvdHJhY2UuaApAQCAtNDE5LDYgKzQxOSw4IEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBmdHJhY2VfdXBkYXRlX3RvdF9jbnQ7CiAjZGVmaW5lIERZTl9GVFJBQ0VfVEVTVF9OQU1FIHRyYWNlX3NlbGZ0ZXN0X2R5bmFtaWNfdGVzdF9mdW5jCiBleHRlcm4gaW50IERZTl9GVFJBQ0VfVEVTVF9OQU1FKHZvaWQpOworI2RlZmluZSBEWU5fRlRSQUNFX1RFU1RfTkFNRTIgdHJhY2Vfc2VsZnRlc3RfZHluYW1pY190ZXN0X2Z1bmMyCitleHRlcm4gaW50IERZTl9GVFJBQ0VfVEVTVF9OQU1FMih2b2lkKTsKICNlbmRpZgogCiBleHRlcm4gaW50IHJpbmdfYnVmZmVyX2V4cGFuZGVkOwpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2V2ZW50cy5jCmluZGV4IGU4OGY3NGYuLjJmZTExMDMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9ldmVudHMuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZXZlbnRzLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCV9fY29tbW9uX2ZpZWxkKHVuc2lnbmVkIGNoYXIsIGZsYWdzKTsKIAlfX2NvbW1vbl9maWVsZCh1bnNpZ25lZCBjaGFyLCBwcmVlbXB0X2NvdW50KTsKIAlfX2NvbW1vbl9maWVsZChpbnQsIHBpZCk7CisJX19jb21tb25fZmllbGQoaW50LCBwYWRkaW5nKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zLmMKaW5kZXggMTZhZWU0ZC4uOGQwZTFjYyAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9ucy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnMuYwpAQCAtMTQ5LDExICsxNDksMTMgQEAKIHN0YXRpYyBzdHJ1Y3QgZnRyYWNlX29wcyB0cmFjZV9vcHMgX19yZWFkX21vc3RseSA9CiB7CiAJLmZ1bmMgPSBmdW5jdGlvbl90cmFjZV9jYWxsLAorCS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfR0xPQkFMLAogfTsKIAogc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRyYWNlX3N0YWNrX29wcyBfX3JlYWRfbW9zdGx5ID0KIHsKIAkuZnVuYyA9IGZ1bmN0aW9uX3N0YWNrX3RyYWNlX2NhbGwsCisJLmZsYWdzID0gRlRSQUNFX09QU19GTF9HTE9CQUwsCiB9OwogCiAvKiBPdXIgdHdvIG9wdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfaXJxc29mZi5jCmluZGV4IGE0OTY5YjQuLmM3NzQyNGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9pcnFzb2ZmLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2lycXNvZmYuYwpAQCAtMTUzLDYgKzE1Myw3IEBACiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQogewogCS5mdW5jID0gaXJxc29mZl90cmFjZXJfY2FsbCwKKwkuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX0dMT0JBTCwKIH07CiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLwogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfa3Byb2JlLmMKaW5kZXggMzVkNTVhMy4uZjkyNWM0NSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX2twcm9iZS5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9rcHJvYmUuYwpAQCAtNTMsNyArNTMsNiBAQAogCSJjb21tb25fcHJlZW1wdF9jb3VudCIsCiAJImNvbW1vbl9waWQiLAogCSJjb21tb25fdGdpZCIsCi0JImNvbW1vbl9sb2NrX2RlcHRoIiwKIAlGSUVMRF9TVFJJTkdfSVAsCiAJRklFTERfU1RSSU5HX1JFVElQLAogCUZJRUxEX1NUUklOR19GVU5DLApkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX291dHB1dC5jCmluZGV4IDQ1NmJlOTAuLmNmNTM1Y2MgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9vdXRwdXQuYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfb3V0cHV0LmMKQEAgLTgzMCw2ICs4MzAsOSBAQAogZW51bSBwcmludF9saW5lX3QgdHJhY2Vfbm9wX3ByaW50KHN0cnVjdCB0cmFjZV9pdGVyYXRvciAqaXRlciwgaW50IGZsYWdzLAogCQkJCSAgc3RydWN0IHRyYWNlX2V2ZW50ICpldmVudCkKIHsKKwlpZiAoIXRyYWNlX3NlcV9wcmludGYoJml0ZXItPnNlcSwgInR5cGU6ICVkXG4iLCBpdGVyLT5lbnQtPnR5cGUpKQorCQlyZXR1cm4gVFJBQ0VfVFlQRV9QQVJUSUFMX0xJTkU7CisKIAlyZXR1cm4gVFJBQ0VfVFlQRV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2VfcHJpbnRrLmMKaW5kZXggMjU0N2Q4OC4uZGZmNzYzYiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3ByaW50ay5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9wcmludGsuYwpAQCAtMzIsNyArMzIsNyBAQAogCiBzdHJ1Y3QgdHJhY2VfYnByaW50a19mbXQgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljaGFyIGZtdFswXTsKKwljb25zdCBjaGFyICpmbXQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdCAqbG9va3VwX2Zvcm1hdChjb25zdCBjaGFyICpmbXQpCkBAIC00OSw2ICs0OSw3IEBACiB2b2lkIGhvbGRfbW9kdWxlX3RyYWNlX2JwcmludGtfZm9ybWF0KGNvbnN0IGNoYXIgKipzdGFydCwgY29uc3QgY2hhciAqKmVuZCkKIHsKIAljb25zdCBjaGFyICoqaXRlcjsKKwljaGFyICpmbXQ7CiAKIAltdXRleF9sb2NrKCZidHJhY2VfbXV0ZXgpOwogCWZvciAoaXRlciA9IHN0YXJ0OyBpdGVyIDwgZW5kOyBpdGVyKyspIHsKQEAgLTU4LDE0ICs1OSwxOCBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQl0Yl9mbXQgPSBrbWFsbG9jKG9mZnNldG9mKHN0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdCwgZm10KQotCQkJCSsgc3RybGVuKCppdGVyKSArIDEsIEdGUF9LRVJORUwpOwotCQlpZiAodGJfZm10KSB7CisJCXRiX2ZtdCA9IGttYWxsb2Moc2l6ZW9mKCp0Yl9mbXQpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHRiX2ZtdCkKKwkJCWZtdCA9IGttYWxsb2Moc3RybGVuKCppdGVyKSArIDEsIEdGUF9LRVJORUwpOworCQlpZiAodGJfZm10ICYmIGZtdCkgewogCQkJbGlzdF9hZGRfdGFpbCgmdGJfZm10LT5saXN0LCAmdHJhY2VfYnByaW50a19mbXRfbGlzdCk7Ci0JCQlzdHJjcHkodGJfZm10LT5mbXQsICppdGVyKTsKKwkJCXN0cmNweShmbXQsICppdGVyKTsKKwkJCXRiX2ZtdC0+Zm10ID0gZm10OwogCQkJKml0ZXIgPSB0Yl9mbXQtPmZtdDsKLQkJfSBlbHNlCisJCX0gZWxzZSB7CisJCQlrZnJlZSh0Yl9mbXQpOwogCQkJKml0ZXIgPSBOVUxMOworCQl9CiAJfQogCW11dGV4X3VubG9jaygmYnRyYWNlX211dGV4KTsKIH0KQEAgLTg0LDYgKzg5LDc2IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGUgZGVidWdmcy90cmFjaW5nL3ByaW50a19mb3JtYXRzIGZpbGUgbWFwcyB0aGUgYWRkcmVzc2VzIHdpdGgKKyAqIHRoZSBBU0NJSSBmb3JtYXRzIHRoYXQgYXJlIHVzZWQgaW4gdGhlIGJwcmludGsgZXZlbnRzIGluIHRoZQorICogYnVmZmVyLiBGb3IgdXNlcnNwYWNlIHRvb2xzIHRvIGJlIGFibGUgdG8gZGVjb2RlIHRoZSBldmVudHMgZnJvbQorICogdGhlIGJ1ZmZlciwgdGhleSBuZWVkIHRvIGJlIGFibGUgdG8gbWFwIHRoZSBhZGRyZXNzIHdpdGggdGhlIGZvcm1hdC4KKyAqCisgKiBUaGUgYWRkcmVzc2VzIG9mIHRoZSBicHJpbnRrIGZvcm1hdHMgYXJlIGluIHRoZWlyIG93biBzZWN0aW9uCisgKiBfX3RyYWNlX3ByaW50a19mbXQuIEJ1dCBmb3IgbW9kdWxlcyB3ZSBjb3B5IHRoZW0gaW50byBhIGxpbmsgbGlzdC4KKyAqIFRoZSBjb2RlIHRvIHByaW50IHRoZSBmb3JtYXRzIGFuZCB0aGVpciBhZGRyZXNzZXMgcGFzc2VzIGFyb3VuZCB0aGUKKyAqIGFkZHJlc3Mgb2YgdGhlIGZtdCBzdHJpbmcuIElmIHRoZSBmbXQgYWRkcmVzcyBwYXNzZWQgaW50byB0aGUgc2VxCisgKiBmdW5jdGlvbnMgaXMgd2l0aGluIHRoZSBrZXJuZWwgY29yZSBfX3RyYWNlX3ByaW50a19mbXQgc2VjdGlvbiwgdGhlbgorICogaXQgc2ltcGx5IHVzZXMgdGhlIG5leHQgcG9pbnRlciBpbiB0aGUgbGlzdC4KKyAqCisgKiBXaGVuIHRoZSBmbXQgcG9pbnRlciBpcyBvdXRzaWRlIHRoZSBrZXJuZWwgY29yZSBfX3RyYWNlX3ByaW50a19mbXQKKyAqIHNlY3Rpb24sIHRoZW4gd2UgbmVlZCB0byByZWFkIHRoZSBsaW5rIGxpc3QgcG9pbnRlcnMuIFRoZSB0cmljayBpcworICogd2UgcGFzcyB0aGUgYWRkcmVzcyBvZiB0aGUgc3RyaW5nIHRvIHRoZSBzZXEgZnVuY3Rpb24ganVzdCBsaWtlCisgKiB3ZSBkbyBmb3IgdGhlIGtlcm5lbCBjb3JlIGZvcm1hdHMuIFRvIGdldCBiYWNrIHRoZSBzdHJ1Y3R1cmUgdGhhdAorICogaG9sZHMgdGhlIGZvcm1hdCwgd2Ugc2ltcGx5IHVzZSBjb250YWluZXJvZigpIGFuZCB0aGVuIGdvIHRvIHRoZQorICogbmV4dCBmb3JtYXQgaW4gdGhlIGxpc3QuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoqCitmaW5kX25leHRfbW9kX2Zvcm1hdChpbnQgc3RhcnRfaW5kZXgsIHZvaWQgKnYsIGNvbnN0IGNoYXIgKipmbXQsIGxvZmZfdCAqcG9zKQoreworCXN0cnVjdCB0cmFjZV9icHJpbnRrX2ZtdCAqbW9kX2ZtdDsKKworCWlmIChsaXN0X2VtcHR5KCZ0cmFjZV9icHJpbnRrX2ZtdF9saXN0KSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIHYgd2lsbCBwb2ludCB0byB0aGUgYWRkcmVzcyBvZiB0aGUgZm10IHJlY29yZCBmcm9tIHRfbmV4dAorCSAqIHYgd2lsbCBiZSBOVUxMIGZyb20gdF9zdGFydC4KKwkgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBwb2ludGVyIG9yIGNhbGxlZCBmcm9tIHN0YXJ0CisJICogdGhlbiB3ZSBuZWVkIHRvIHdhbGsgdGhlIGxpc3QuCisJICovCisJaWYgKCF2IHx8IHN0YXJ0X2luZGV4ID09ICpwb3MpIHsKKwkJc3RydWN0IHRyYWNlX2JwcmludGtfZm10ICpwOworCisJCS8qIHNlYXJjaCB0aGUgbW9kdWxlIGxpc3QgKi8KKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmdHJhY2VfYnByaW50a19mbXRfbGlzdCwgbGlzdCkgeworCQkJaWYgKHN0YXJ0X2luZGV4ID09ICpwb3MpCisJCQkJcmV0dXJuICZwLT5mbXQ7CisJCQlzdGFydF9pbmRleCsrOworCQl9CisJCS8qIHBvcyA+IGluZGV4ICovCisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogdiBwb2ludHMgdG8gdGhlIGFkZHJlc3Mgb2YgdGhlIGZtdCBmaWVsZCBpbiB0aGUgbW9kIGxpc3QKKwkgKiBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgbW9kdWxlIHByaW50IGZvcm1hdC4KKwkgKi8KKwltb2RfZm10ID0gY29udGFpbmVyX29mKHYsIHR5cGVvZigqbW9kX2ZtdCksIGZtdCk7CisJaWYgKG1vZF9mbXQtPmxpc3QubmV4dCA9PSAmdHJhY2VfYnByaW50a19mbXRfbGlzdCkKKwkJcmV0dXJuIE5VTEw7CisKKwltb2RfZm10ID0gY29udGFpbmVyX29mKG1vZF9mbXQtPmxpc3QubmV4dCwgdHlwZW9mKCptb2RfZm10KSwgbGlzdCk7CisKKwlyZXR1cm4gJm1vZF9mbXQtPmZtdDsKK30KKworc3RhdGljIHZvaWQgZm9ybWF0X21vZF9zdGFydCh2b2lkKQoreworCW11dGV4X2xvY2soJmJ0cmFjZV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIGZvcm1hdF9tb2Rfc3RvcCh2b2lkKQoreworCW11dGV4X3VubG9jaygmYnRyYWNlX211dGV4KTsKK30KKwogI2Vsc2UgLyogIUNPTkZJR19NT0RVTEVTICovCiBfX2luaXQgc3RhdGljIGludAogbW9kdWxlX3RyYWNlX2JwcmludGtfZm9ybWF0X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCkBAIC05MSw2ICsxNjYsMTMgQEAKIHsKIAlyZXR1cm4gMDsKIH0KK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqKgorZmluZF9uZXh0X21vZF9mb3JtYXQoaW50IHN0YXJ0X2luZGV4LCB2b2lkICp2LCBjb25zdCBjaGFyICoqZm10LCBsb2ZmX3QgKnBvcykKK3sKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBmb3JtYXRfbW9kX3N0YXJ0KHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIGZvcm1hdF9tb2Rfc3RvcCh2b2lkKSB7IH0KICNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiAKQEAgLTE1MywyMCArMjM1LDMzIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2Z0cmFjZV92cHJpbnRrKTsKIAorc3RhdGljIGNvbnN0IGNoYXIgKipmaW5kX25leHQodm9pZCAqdiwgbG9mZl90ICpwb3MpCit7CisJY29uc3QgY2hhciAqKmZtdCA9IHY7CisJaW50IHN0YXJ0X2luZGV4OworCisJaWYgKCFmbXQpCisJCWZtdCA9IF9fc3RhcnRfX190cmFjZV9icHJpbnRrX2ZtdCArICpwb3M7CisKKwlzdGFydF9pbmRleCA9IF9fc3RvcF9fX3RyYWNlX2JwcmludGtfZm10IC0gX19zdGFydF9fX3RyYWNlX2JwcmludGtfZm10OworCisJaWYgKCpwb3MgPCBzdGFydF9pbmRleCkKKwkJcmV0dXJuIGZtdDsKKworCXJldHVybiBmaW5kX25leHRfbW9kX2Zvcm1hdChzdGFydF9pbmRleCwgdiwgZm10LCBwb3MpOworfQorCiBzdGF0aWMgdm9pZCAqCiB0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCiB7Ci0JY29uc3QgY2hhciAqKmZtdCA9IF9fc3RhcnRfX190cmFjZV9icHJpbnRrX2ZtdCArICpwb3M7Ci0KLQlpZiAoKHVuc2lnbmVkIGxvbmcpZm10ID49ICh1bnNpZ25lZCBsb25nKV9fc3RvcF9fX3RyYWNlX2JwcmludGtfZm10KQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gZm10OworCWZvcm1hdF9tb2Rfc3RhcnQoKTsKKwlyZXR1cm4gZmluZF9uZXh0KE5VTEwsIHBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkICp0X25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICogdiwgbG9mZl90ICpwb3MpCiB7CiAJKCpwb3MpKys7Ci0JcmV0dXJuIHRfc3RhcnQobSwgcG9zKTsKKwlyZXR1cm4gZmluZF9uZXh0KHYsIHBvcyk7CiB9CiAKIHN0YXRpYyBpbnQgdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKQEAgLTIwNSw2ICszMDAsNyBAQAogCiBzdGF0aWMgdm9pZCB0X3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpwKQogeworCWZvcm1hdF9tb2Rfc3RvcCgpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIHNob3dfZm9ybWF0X3NlcV9vcHMgPSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc2NoZWRfd2FrZXVwLmMKaW5kZXggNzMxOTU1OS4uZjAyOWRkNCAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NjaGVkX3dha2V1cC5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zY2hlZF93YWtldXAuYwpAQCAtMTI5LDYgKzEyOSw3IEBACiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQogewogCS5mdW5jID0gd2FrZXVwX3RyYWNlcl9jYWxsLAorCS5mbGFncyA9IEZUUkFDRV9PUFNfRkxfR0xPQkFMLAogfTsKICNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSICovCiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKaW5kZXggNjU5NzMyZS4uMjg4NTQxZiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0LmMKQEAgLTEwMSw2ICsxMDEsMjA2IEBACiAKICNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKIAorc3RhdGljIGludCB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9jbnQ7CitzdGF0aWMgdm9pZCB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHBpcCkKK3sKKwl0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9jbnQrKzsKK30KKworc3RhdGljIGludCB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMl9jbnQ7CitzdGF0aWMgdm9pZCB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMl9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHBpcCkKK3sKKwl0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMl9jbnQrKzsKK30KKworc3RhdGljIGludCB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlM19jbnQ7CitzdGF0aWMgdm9pZCB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlM19mdW5jKHVuc2lnbmVkIGxvbmcgaXAsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHBpcCkKK3sKKwl0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlM19jbnQrKzsKK30KKworc3RhdGljIGludCB0cmFjZV9zZWxmdGVzdF90ZXN0X2dsb2JhbF9jbnQ7CitzdGF0aWMgdm9pZCB0cmFjZV9zZWxmdGVzdF90ZXN0X2dsb2JhbF9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIHBpcCkKK3sKKwl0cmFjZV9zZWxmdGVzdF90ZXN0X2dsb2JhbF9jbnQrKzsKK30KKworc3RhdGljIGludCB0cmFjZV9zZWxmdGVzdF90ZXN0X2R5bl9jbnQ7CitzdGF0aWMgdm9pZCB0cmFjZV9zZWxmdGVzdF90ZXN0X2R5bl9mdW5jKHVuc2lnbmVkIGxvbmcgaXAsCisJCQkJCSB1bnNpZ25lZCBsb25nIHBpcCkKK3sKKwl0cmFjZV9zZWxmdGVzdF90ZXN0X2R5bl9jbnQrKzsKK30KKworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRlc3RfcHJvYmUxID0geworCS5mdW5jCQkJPSB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9mdW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRlc3RfcHJvYmUyID0geworCS5mdW5jCQkJPSB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMl9mdW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRlc3RfcHJvYmUzID0geworCS5mdW5jCQkJPSB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlM19mdW5jLAorfTsKKworc3RhdGljIHN0cnVjdCBmdHJhY2Vfb3BzIHRlc3RfZ2xvYmFsID0geworCS5mdW5jCQkJPSB0cmFjZV9zZWxmdGVzdF90ZXN0X2dsb2JhbF9mdW5jLAorCS5mbGFncwkJCT0gRlRSQUNFX09QU19GTF9HTE9CQUwsCit9OworCitzdGF0aWMgdm9pZCBwcmludF9jb3VudHModm9pZCkKK3sKKwlwcmludGsoIiglZCAlZCAlZCAlZCAlZCkgIiwKKwkgICAgICAgdHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTFfY250LAorCSAgICAgICB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMl9jbnQsCisJICAgICAgIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2NudCwKKwkgICAgICAgdHJhY2Vfc2VsZnRlc3RfdGVzdF9nbG9iYWxfY250LAorCSAgICAgICB0cmFjZV9zZWxmdGVzdF90ZXN0X2R5bl9jbnQpOworfQorCitzdGF0aWMgdm9pZCByZXNldF9jb3VudHModm9pZCkKK3sKKwl0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9jbnQgPSAwOworCXRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUyX2NudCA9IDA7CisJdHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTNfY250ID0gMDsKKwl0cmFjZV9zZWxmdGVzdF90ZXN0X2dsb2JhbF9jbnQgPSAwOworCXRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZHluX2NudCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgdHJhY2Vfc2VsZnRlc3Rfb3BzKGludCBjbnQpCit7CisJaW50IHNhdmVfZnRyYWNlX2VuYWJsZWQgPSBmdHJhY2VfZW5hYmxlZDsKKwlzdHJ1Y3QgZnRyYWNlX29wcyAqZHluX29wczsKKwljaGFyICpmdW5jMV9uYW1lOworCWNoYXIgKmZ1bmMyX25hbWU7CisJaW50IGxlbjE7CisJaW50IGxlbjI7CisJaW50IHJldCA9IC0xOworCisJcHJpbnRrKEtFUk5fQ09OVCAiUEFTU0VEXG4iKTsKKwlwcl9pbmZvKCJUZXN0aW5nIGR5bmFtaWMgZnRyYWNlIG9wcyAjJWQ6ICIsIGNudCk7CisKKwlmdHJhY2VfZW5hYmxlZCA9IDE7CisJcmVzZXRfY291bnRzKCk7CisKKwkvKiBIYW5kbGUgUFBDNjQgJy4nIG5hbWUgKi8KKwlmdW5jMV9uYW1lID0gIioiIF9fc3RyaW5naWZ5KERZTl9GVFJBQ0VfVEVTVF9OQU1FKTsKKwlmdW5jMl9uYW1lID0gIioiIF9fc3RyaW5naWZ5KERZTl9GVFJBQ0VfVEVTVF9OQU1FMik7CisJbGVuMSA9IHN0cmxlbihmdW5jMV9uYW1lKTsKKwlsZW4yID0gc3RybGVuKGZ1bmMyX25hbWUpOworCisJLyoKKwkgKiBQcm9iZSAxIHdpbGwgdHJhY2UgZnVuY3Rpb24gMS4KKwkgKiBQcm9iZSAyIHdpbGwgdHJhY2UgZnVuY3Rpb24gMi4KKwkgKiBQcm9iZSAzIHdpbGwgdHJhY2UgZnVuY3Rpb25zIDEgYW5kIDIuCisJICovCisJZnRyYWNlX3NldF9maWx0ZXIoJnRlc3RfcHJvYmUxLCBmdW5jMV9uYW1lLCBsZW4xLCAxKTsKKwlmdHJhY2Vfc2V0X2ZpbHRlcigmdGVzdF9wcm9iZTIsIGZ1bmMyX25hbWUsIGxlbjIsIDEpOworCWZ0cmFjZV9zZXRfZmlsdGVyKCZ0ZXN0X3Byb2JlMywgZnVuYzFfbmFtZSwgbGVuMSwgMSk7CisJZnRyYWNlX3NldF9maWx0ZXIoJnRlc3RfcHJvYmUzLCBmdW5jMl9uYW1lLCBsZW4yLCAwKTsKKworCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdGVzdF9wcm9iZTEpOworCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdGVzdF9wcm9iZTIpOworCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdGVzdF9wcm9iZTMpOworCXJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdGVzdF9nbG9iYWwpOworCisJRFlOX0ZUUkFDRV9URVNUX05BTUUoKTsKKworCXByaW50X2NvdW50cygpOworCisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUxX2NudCAhPSAxKQorCQlnb3RvIG91dDsKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTJfY250ICE9IDApCisJCWdvdG8gb3V0OworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlM19jbnQgIT0gMSkKKwkJZ290byBvdXQ7CisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZ2xvYmFsX2NudCA9PSAwKQorCQlnb3RvIG91dDsKKworCURZTl9GVFJBQ0VfVEVTVF9OQU1FMigpOworCisJcHJpbnRfY291bnRzKCk7CisKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTFfY250ICE9IDEpCisJCWdvdG8gb3V0OworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMl9jbnQgIT0gMSkKKwkJZ290byBvdXQ7CisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2NudCAhPSAyKQorCQlnb3RvIG91dDsKKworCS8qIEFkZCBhIGR5bmFtaWMgcHJvYmUgKi8KKwlkeW5fb3BzID0ga3phbGxvYyhzaXplb2YoKmR5bl9vcHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWR5bl9vcHMpIHsKKwkJcHJpbnRrKCJNRU1PUlkgRVJST1IgIik7CisJCWdvdG8gb3V0OworCX0KKworCWR5bl9vcHMtPmZ1bmMgPSB0cmFjZV9zZWxmdGVzdF90ZXN0X2R5bl9mdW5jOworCisJcmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKGR5bl9vcHMpOworCisJdHJhY2Vfc2VsZnRlc3RfdGVzdF9nbG9iYWxfY250ID0gMDsKKworCURZTl9GVFJBQ0VfVEVTVF9OQU1FKCk7CisKKwlwcmludF9jb3VudHMoKTsKKworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9jbnQgIT0gMikKKwkJZ290byBvdXRfZnJlZTsKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTJfY250ICE9IDEpCisJCWdvdG8gb3V0X2ZyZWU7CisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2NudCAhPSAzKQorCQlnb3RvIG91dF9mcmVlOworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X2dsb2JhbF9jbnQgPT0gMCkKKwkJZ290byBvdXQ7CisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZHluX2NudCA9PSAwKQorCQlnb3RvIG91dF9mcmVlOworCisJRFlOX0ZUUkFDRV9URVNUX05BTUUyKCk7CisKKwlwcmludF9jb3VudHMoKTsKKworCWlmICh0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlMV9jbnQgIT0gMikKKwkJZ290byBvdXRfZnJlZTsKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTJfY250ICE9IDIpCisJCWdvdG8gb3V0X2ZyZWU7CisJaWYgKHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUzX2NudCAhPSA0KQorCQlnb3RvIG91dF9mcmVlOworCisJcmV0ID0gMDsKKyBvdXRfZnJlZToKKwl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbihkeW5fb3BzKTsKKwlrZnJlZShkeW5fb3BzKTsKKworIG91dDoKKwkvKiBQdXJwb3NlbHkgdW5yZWdpc3RlciBpbiB0aGUgc2FtZSBvcmRlciAqLworCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0ZXN0X3Byb2JlMSk7CisJdW5yZWdpc3Rlcl9mdHJhY2VfZnVuY3Rpb24oJnRlc3RfcHJvYmUyKTsKKwl1bnJlZ2lzdGVyX2Z0cmFjZV9mdW5jdGlvbigmdGVzdF9wcm9iZTMpOworCXVucmVnaXN0ZXJfZnRyYWNlX2Z1bmN0aW9uKCZ0ZXN0X2dsb2JhbCk7CisKKwkvKiBNYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBvZmYgKi8KKwlyZXNldF9jb3VudHMoKTsKKwlEWU5fRlRSQUNFX1RFU1RfTkFNRSgpOworCURZTl9GVFJBQ0VfVEVTVF9OQU1FKCk7CisKKwlpZiAodHJhY2Vfc2VsZnRlc3RfdGVzdF9wcm9iZTFfY250IHx8CisJICAgIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfcHJvYmUyX2NudCB8fAorCSAgICB0cmFjZV9zZWxmdGVzdF90ZXN0X3Byb2JlM19jbnQgfHwKKwkgICAgdHJhY2Vfc2VsZnRlc3RfdGVzdF9nbG9iYWxfY250IHx8CisJICAgIHRyYWNlX3NlbGZ0ZXN0X3Rlc3RfZHluX2NudCkKKwkJcmV0ID0gLTE7CisKKwlmdHJhY2VfZW5hYmxlZCA9IHNhdmVfZnRyYWNlX2VuYWJsZWQ7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKiBUZXN0IGR5bmFtaWMgY29kZSBtb2RpZmljYXRpb24gYW5kIGZ0cmFjZSBmaWx0ZXJzICovCiBpbnQgdHJhY2Vfc2VsZnRlc3Rfc3RhcnR1cF9keW5hbWljX3RyYWNpbmcoc3RydWN0IHRyYWNlciAqdHJhY2UsCiAJCQkJCSAgIHN0cnVjdCB0cmFjZV9hcnJheSAqdHIsCkBAIC0xMzEsNyArMzMxLDcgQEAKIAlmdW5jX25hbWUgPSAiKiIgX19zdHJpbmdpZnkoRFlOX0ZUUkFDRV9URVNUX05BTUUpOwogCiAJLyogZmlsdGVyIG9ubHkgb24gb3VyIGZ1bmN0aW9uICovCi0JZnRyYWNlX3NldF9maWx0ZXIoZnVuY19uYW1lLCBzdHJsZW4oZnVuY19uYW1lKSwgMSk7CisJZnRyYWNlX3NldF9nbG9iYWxfZmlsdGVyKGZ1bmNfbmFtZSwgc3RybGVuKGZ1bmNfbmFtZSksIDEpOwogCiAJLyogZW5hYmxlIHRyYWNpbmcgKi8KIAlyZXQgPSB0cmFjZXJfaW5pdCh0cmFjZSwgdHIpOwpAQCAtMTY2LDIyICszNjYsMzAgQEAKIAogCS8qIGNoZWNrIHRoZSB0cmFjZSBidWZmZXIgKi8KIAlyZXQgPSB0cmFjZV90ZXN0X2J1ZmZlcih0ciwgJmNvdW50KTsKLQl0cmFjZS0+cmVzZXQodHIpOwogCXRyYWNpbmdfc3RhcnQoKTsKIAogCS8qIHdlIHNob3VsZCBvbmx5IGhhdmUgb25lIGl0ZW0gKi8KIAlpZiAoIXJldCAmJiBjb3VudCAhPSAxKSB7CisJCXRyYWNlLT5yZXNldCh0cik7CiAJCXByaW50ayhLRVJOX0NPTlQgIi4uIGZpbHRlciBmYWlsZWQgY291bnQ9JWxkIC4uIiwgY291bnQpOwogCQlyZXQgPSAtMTsKIAkJZ290byBvdXQ7CiAJfQogCisJLyogVGVzdCB0aGUgb3BzIHdpdGggZ2xvYmFsIHRyYWNpbmcgcnVubmluZyAqLworCXJldCA9IHRyYWNlX3NlbGZ0ZXN0X29wcygxKTsKKwl0cmFjZS0+cmVzZXQodHIpOworCiAgb3V0OgogCWZ0cmFjZV9lbmFibGVkID0gc2F2ZV9mdHJhY2VfZW5hYmxlZDsKIAl0cmFjZXJfZW5hYmxlZCA9IHNhdmVfdHJhY2VyX2VuYWJsZWQ7CiAKIAkvKiBFbmFibGUgdHJhY2luZyBvbiBhbGwgZnVuY3Rpb25zIGFnYWluICovCi0JZnRyYWNlX3NldF9maWx0ZXIoTlVMTCwgMCwgMSk7CisJZnRyYWNlX3NldF9nbG9iYWxfZmlsdGVyKE5VTEwsIDAsIDEpOworCisJLyogVGVzdCB0aGUgb3BzIHdpdGggZ2xvYmFsIHRyYWNpbmcgb2ZmICovCisJaWYgKCFyZXQpCisJCXJldCA9IHRyYWNlX3NlbGZ0ZXN0X29wcygyKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3RfZHluYW1pYy5jIGIva2VybmVsL3RyYWNlL3RyYWNlX3NlbGZ0ZXN0X2R5bmFtaWMuYwppbmRleCA1NGRkNzdjLi5iNGM0NzVhIDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc2VsZnRlc3RfZHluYW1pYy5jCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZV9zZWxmdGVzdF9keW5hbWljLmMKQEAgLTUsMyArNSw5IEBACiAJLyogdXNlZCB0byBjYWxsIG1jb3VudCAqLwogCXJldHVybiAwOwogfQorCitpbnQgRFlOX0ZUUkFDRV9URVNUX05BTUUyKHZvaWQpCit7CisJLyogdXNlZCB0byBjYWxsIG1jb3VudCAqLworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX3N0YWNrLmMgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwppbmRleCA0YzVkZWFkLi5iMGI1M2I4IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2Vfc3RhY2suYwpAQCAtMTMzLDYgKzEzMyw3IEBACiBzdGF0aWMgc3RydWN0IGZ0cmFjZV9vcHMgdHJhY2Vfb3BzIF9fcmVhZF9tb3N0bHkgPQogewogCS5mdW5jID0gc3RhY2tfdHJhY2VfY2FsbCwKKwkuZmxhZ3MgPSBGVFJBQ0VfT1BTX0ZMX0dMT0JBTCwKIH07CiAKIHN0YXRpYyBzc2l6ZV90CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2Vwb2ludC5jIGIva2VybmVsL3RyYWNlcG9pbnQuYwppbmRleCA2ODE4N2FmLi5iMjE5ZjE0IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2Vwb2ludC5jCisrKyBiL2tlcm5lbC90cmFjZXBvaW50LmMKQEAgLTI1MSw5ICsyNTEsOSBAQAogewogCVdBUk5fT04oc3RyY21wKCgqZW50cnkpLT5uYW1lLCBlbGVtLT5uYW1lKSAhPSAwKTsKIAotCWlmIChlbGVtLT5yZWdmdW5jICYmICFlbGVtLT5zdGF0ZSAmJiBhY3RpdmUpCisJaWYgKGVsZW0tPnJlZ2Z1bmMgJiYgIWp1bXBfbGFiZWxfZW5hYmxlZCgmZWxlbS0+a2V5KSAmJiBhY3RpdmUpCiAJCWVsZW0tPnJlZ2Z1bmMoKTsKLQllbHNlIGlmIChlbGVtLT51bnJlZ2Z1bmMgJiYgZWxlbS0+c3RhdGUgJiYgIWFjdGl2ZSkKKwllbHNlIGlmIChlbGVtLT51bnJlZ2Z1bmMgJiYganVtcF9sYWJlbF9lbmFibGVkKCZlbGVtLT5rZXkpICYmICFhY3RpdmUpCiAJCWVsZW0tPnVucmVnZnVuYygpOwogCiAJLyoKQEAgLTI2NCwxMyArMjY0LDEwIEBACiAJICogaXMgdXNlZC4KIAkgKi8KIAlyY3VfYXNzaWduX3BvaW50ZXIoZWxlbS0+ZnVuY3MsICgqZW50cnkpLT5mdW5jcyk7Ci0JaWYgKCFlbGVtLT5zdGF0ZSAmJiBhY3RpdmUpIHsKLQkJanVtcF9sYWJlbF9lbmFibGUoJmVsZW0tPnN0YXRlKTsKLQkJZWxlbS0+c3RhdGUgPSBhY3RpdmU7Ci0JfSBlbHNlIGlmIChlbGVtLT5zdGF0ZSAmJiAhYWN0aXZlKSB7Ci0JCWp1bXBfbGFiZWxfZGlzYWJsZSgmZWxlbS0+c3RhdGUpOwotCQllbGVtLT5zdGF0ZSA9IGFjdGl2ZTsKLQl9CisJaWYgKGFjdGl2ZSAmJiAhanVtcF9sYWJlbF9lbmFibGVkKCZlbGVtLT5rZXkpKQorCQlqdW1wX2xhYmVsX2luYygmZWxlbS0+a2V5KTsKKwllbHNlIGlmICghYWN0aXZlICYmIGp1bXBfbGFiZWxfZW5hYmxlZCgmZWxlbS0+a2V5KSkKKwkJanVtcF9sYWJlbF9kZWMoJmVsZW0tPmtleSk7CiB9CiAKIC8qCkBAIC0yODEsMTMgKzI3OCwxMSBAQAogICovCiBzdGF0aWMgdm9pZCBkaXNhYmxlX3RyYWNlcG9pbnQoc3RydWN0IHRyYWNlcG9pbnQgKmVsZW0pCiB7Ci0JaWYgKGVsZW0tPnVucmVnZnVuYyAmJiBlbGVtLT5zdGF0ZSkKKwlpZiAoZWxlbS0+dW5yZWdmdW5jICYmIGp1bXBfbGFiZWxfZW5hYmxlZCgmZWxlbS0+a2V5KSkKIAkJZWxlbS0+dW5yZWdmdW5jKCk7CiAKLQlpZiAoZWxlbS0+c3RhdGUpIHsKLQkJanVtcF9sYWJlbF9kaXNhYmxlKCZlbGVtLT5zdGF0ZSk7Ci0JCWVsZW0tPnN0YXRlID0gMDsKLQl9CisJaWYgKGp1bXBfbGFiZWxfZW5hYmxlZCgmZWxlbS0+a2V5KSkKKwkJanVtcF9sYWJlbF9kZWMoJmVsZW0tPmtleSk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKGVsZW0tPmZ1bmNzLCBOVUxMKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3dhdGNoZG9nLmMgYi9rZXJuZWwvd2F0Y2hkb2cuYwppbmRleCAxNDBkY2U3Li4xNDczM2Q0IDEwMDY0NAotLS0gYS9rZXJuZWwvd2F0Y2hkb2cuYworKysgYi9rZXJuZWwvd2F0Y2hkb2cuYwpAQCAtNDMwLDkgKzQzMCwxMiBAQAogCQlwID0ga3RocmVhZF9jcmVhdGUod2F0Y2hkb2csICh2b2lkICopKHVuc2lnbmVkIGxvbmcpY3B1LCAid2F0Y2hkb2cvJWQiLCBjcHUpOwogCQlpZiAoSVNfRVJSKHApKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgInNvZnRsb2NrdXAgd2F0Y2hkb2cgZm9yICVpIGZhaWxlZFxuIiwgY3B1KTsKLQkJCWlmICghZXJyKQorCQkJaWYgKCFlcnIpIHsKIAkJCQkvKiBpZiBoYXJkbG9ja3VwIGhhc24ndCBhbHJlYWR5IHNldCB0aGlzICovCiAJCQkJZXJyID0gUFRSX0VSUihwKTsKKwkJCQkvKiBhbmQgZGlzYWJsZSB0aGUgcGVyZiBldmVudCAqLworCQkJCXdhdGNoZG9nX25taV9kaXNhYmxlKGNwdSk7CisJCQl9CiAJCQlnb3RvIG91dDsKIAkJfQogCQlrdGhyZWFkX2JpbmQocCwgY3B1KTsKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCA4ODU5YTQxLi5lMzM3OGU4IDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC0xMjkxLDggKzEyOTEsMTQgQEAKIAkJCXJldHVybiB0cnVlOwogCQlzcGluX3VubG9ja19pcnEoJmdjd3EtPmxvY2spOwogCi0JCS8qIENQVSBoYXMgY29tZSB1cCBpbiBiZXR3ZWVuLCByZXRyeSBtaWdyYXRpb24gKi8KKwkJLyoKKwkJICogV2UndmUgcmFjZWQgd2l0aCBDUFUgaG90W3VuXXBsdWcuICBHaXZlIGl0IGEgYnJlYXRoZXIKKwkJICogYW5kIHJldHJ5IG1pZ3JhdGlvbi4gIGNvbmRfcmVzY2hlZCgpIGlzIHJlcXVpcmVkIGhlcmU7CisJCSAqIG90aGVyd2lzZSwgd2UgbWlnaHQgZGVhZGxvY2sgYWdhaW5zdCBjcHVfc3RvcCB0cnlpbmcgdG8KKwkJICogYnJpbmcgZG93biB0aGUgQ1BVIG9uIG5vbi1wcmVlbXB0aXZlIGtlcm5lbC4KKwkJICovCiAJCWNwdV9yZWxheCgpOworCQljb25kX3Jlc2NoZWQoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggYzc2OGJjZC4uOWIxNzA3YiAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTIzOCw2ICsyMzgsMjEgQEAKIAkgIGVuYWJsZWQgdGhlbiBhbGwgaGVsZCBsb2NrcyB3aWxsIGFsc28gYmUgcmVwb3J0ZWQuIFRoaXMKIAkgIGZlYXR1cmUgaGFzIG5lZ2xpZ2libGUgb3ZlcmhlYWQuCiAKK2NvbmZpZyBERUZBVUxUX0hVTkdfVEFTS19USU1FT1VUCisJaW50ICJEZWZhdWx0IHRpbWVvdXQgZm9yIGh1bmcgdGFzayBkZXRlY3Rpb24gKGluIHNlY29uZHMpIgorCWRlcGVuZHMgb24gREVURUNUX0hVTkdfVEFTSworCWRlZmF1bHQgMTIwCisJaGVscAorCSAgVGhpcyBvcHRpb24gY29udHJvbHMgdGhlIGRlZmF1bHQgdGltZW91dCAoaW4gc2Vjb25kcykgdXNlZAorCSAgdG8gZGV0ZXJtaW5lIHdoZW4gYSB0YXNrIGhhcyBiZWNvbWUgbm9uLXJlc3BvbnNpdmUgYW5kIHNob3VsZAorCSAgYmUgY29uc2lkZXJlZCBodW5nLgorCisJICBJdCBjYW4gYmUgYWRqdXN0ZWQgYXQgcnVudGltZSB2aWEgdGhlIGtlcm5lbC5odW5nX3Rhc2tfdGltZW91dAorCSAgc3lzY3RsIG9yIGJ5IHdyaXRpbmcgYSB2YWx1ZSB0byAvcHJvYy9zeXMva2VybmVsL2h1bmdfdGFza190aW1lb3V0LgorCisJICBBIHRpbWVvdXQgb2YgMCBkaXNhYmxlcyB0aGUgY2hlY2suICBUaGUgZGVmYXVsdCBpcyB0d28gbWludXRlcy4KKwkgIEtlZXBpbmcgdGhlIGRlZmF1bHQgc2hvdWxkIGJlIGZpbmUgaW4gbW9zdCBjYXNlcy4KKwogY29uZmlnIEJPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMKIAlib29sICJQYW5pYyAoUmVib290KSBPbiBIdW5nIFRhc2tzIgogCWRlcGVuZHMgb24gREVURUNUX0hVTkdfVEFTSwpAQCAtMzk4LDkgKzQxMyw5IEBACiBjb25maWcgREVCVUdfS01FTUxFQUsKIAlib29sICJLZXJuZWwgbWVtb3J5IGxlYWsgZGV0ZWN0b3IiCiAJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgRVhQRVJJTUVOVEFMICYmICFNRU1PUllfSE9UUExVRyAmJiBcCi0JCShYODYgfHwgQVJNIHx8IFBQQyB8fCBTMzkwIHx8IFNQQVJDNjQgfHwgU1VQRVJIIHx8IE1JQ1JPQkxBWkUgfHwgVElMRSkKKwkJKFg4NiB8fCBBUk0gfHwgUFBDIHx8IE1JUFMgfHwgUzM5MCB8fCBTUEFSQzY0IHx8IFNVUEVSSCB8fCBNSUNST0JMQVpFIHx8IFRJTEUpCiAKLQlzZWxlY3QgREVCVUdfRlMgaWYgU1lTRlMKKwlzZWxlY3QgREVCVUdfRlMKIAlzZWxlY3QgU1RBQ0tUUkFDRSBpZiBTVEFDS1RSQUNFX1NVUFBPUlQKIAlzZWxlY3QgS0FMTFNZTVMKIAlzZWxlY3QgQ1JDMzIKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCBlZjBmMjg1Li40YjQ5YTI0IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC0yMSw3ICsyMSw4IEBACiAKIG9iai15ICs9IGJjZC5vIGRpdjY0Lm8gc29ydC5vIHBhcnNlci5vIGhhbGZtZDQubyBkZWJ1Z19sb2Nrcy5vIHJhbmRvbTMyLm8gXAogCSBidXN0X3NwaW5sb2Nrcy5vIGhleGR1bXAubyBrYXNwcmludGYubyBiaXRtYXAubyBzY2F0dGVybGlzdC5vIFwKLQkgc3RyaW5nX2hlbHBlcnMubyBnY2QubyBsY20ubyBsaXN0X3NvcnQubyB1dWlkLm8gZmxleF9hcnJheS5vCisJIHN0cmluZ19oZWxwZXJzLm8gZ2NkLm8gbGNtLm8gbGlzdF9zb3J0Lm8gdXVpZC5vIGZsZXhfYXJyYXkubyBcCisJIGJzZWFyY2gubwogb2JqLXkgKz0ga3N0cnRveC5vCiBvYmotJChDT05GSUdfVEVTVF9LU1RSVE9YKSArPSB0ZXN0LWtzdHJ0b3gubwogCmRpZmYgLS1naXQgYS9saWIvYnNlYXJjaC5jIGIvbGliL2JzZWFyY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YjU0NzU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2JzZWFyY2guYwpAQCAtMCwwICsxLDUzIEBACisvKgorICogQSBnZW5lcmljIGltcGxlbWVudGF0aW9uIG9mIGJpbmFyeSBzZWFyY2ggZm9yIHRoZSBMaW51eCBrZXJuZWwKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBLc3BsaWNlLCBJbmMuCisgKiBBdXRob3I6IFRpbSBBYmJvdHQgPHRhYmJvdHRAa3NwbGljZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2JzZWFyY2guaD4KKworLyoKKyAqIGJzZWFyY2ggLSBiaW5hcnkgc2VhcmNoIGFuIGFycmF5IG9mIGVsZW1lbnRzCisgKiBAa2V5OiBwb2ludGVyIHRvIGl0ZW0gYmVpbmcgc2VhcmNoZWQgZm9yCisgKiBAYmFzZTogcG9pbnRlciB0byBmaXJzdCBlbGVtZW50IHRvIHNlYXJjaAorICogQG51bTogbnVtYmVyIG9mIGVsZW1lbnRzCisgKiBAc2l6ZTogc2l6ZSBvZiBlYWNoIGVsZW1lbnQKKyAqIEBjbXA6IHBvaW50ZXIgdG8gY29tcGFyaXNvbiBmdW5jdGlvbgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBhIGJpbmFyeSBzZWFyY2ggb24gdGhlIGdpdmVuIGFycmF5LiAgVGhlCisgKiBjb250ZW50cyBvZiB0aGUgYXJyYXkgc2hvdWxkIGFscmVhZHkgYmUgaW4gYXNjZW5kaW5nIHNvcnRlZCBvcmRlcgorICogdW5kZXIgdGhlIHByb3ZpZGVkIGNvbXBhcmlzb24gZnVuY3Rpb24uCisgKgorICogTm90ZSB0aGF0IHRoZSBrZXkgbmVlZCBub3QgaGF2ZSB0aGUgc2FtZSB0eXBlIGFzIHRoZSBlbGVtZW50cyBpbgorICogdGhlIGFycmF5LCBlLmcuIGtleSBjb3VsZCBiZSBhIHN0cmluZyBhbmQgdGhlIGNvbXBhcmlzb24gZnVuY3Rpb24KKyAqIGNvdWxkIGNvbXBhcmUgdGhlIHN0cmluZyB3aXRoIHRoZSBzdHJ1Y3QncyBuYW1lIGZpZWxkLiAgSG93ZXZlciwgaWYKKyAqIHRoZSBrZXkgYW5kIGVsZW1lbnRzIGluIHRoZSBhcnJheSBhcmUgb2YgdGhlIHNhbWUgdHlwZSwgeW91IGNhbiB1c2UKKyAqIHRoZSBzYW1lIGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGJvdGggc29ydCgpIGFuZCBic2VhcmNoKCkuCisgKi8KK3ZvaWQgKmJzZWFyY2goY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICpiYXNlLCBzaXplX3QgbnVtLCBzaXplX3Qgc2l6ZSwKKwkgICAgICBpbnQgKCpjbXApKGNvbnN0IHZvaWQgKmtleSwgY29uc3Qgdm9pZCAqZWx0KSkKK3sKKwlzaXplX3Qgc3RhcnQgPSAwLCBlbmQgPSBudW07CisJaW50IHJlc3VsdDsKKworCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQlzaXplX3QgbWlkID0gc3RhcnQgKyAoZW5kIC0gc3RhcnQpIC8gMjsKKworCQlyZXN1bHQgPSBjbXAoa2V5LCBiYXNlICsgbWlkICogc2l6ZSk7CisJCWlmIChyZXN1bHQgPCAwKQorCQkJZW5kID0gbWlkOworCQllbHNlIGlmIChyZXN1bHQgPiAwKQorCQkJc3RhcnQgPSBtaWQgKyAxOworCQllbHNlCisJCQlyZXR1cm4gKHZvaWQgKiliYXNlICsgbWlkICogc2l6ZTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woYnNlYXJjaCk7CmRpZmYgLS1naXQgYS9saWIvZG1hLWRlYnVnLmMgYi9saWIvZG1hLWRlYnVnLmMKaW5kZXggNGJmYjA0Ny4uZGIwN2JmZCAxMDA2NDQKLS0tIGEvbGliL2RtYS1kZWJ1Zy5jCisrKyBiL2xpYi9kbWEtZGVidWcuYwpAQCAtNjQ5LDcgKzY0OSw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyBpbnQgZGV2aWNlX2RtYV9hbGxvY2F0aW9ucyhzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGRldmljZV9kbWFfYWxsb2NhdGlvbnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICoqb3V0X2VudHJ5KQogewogCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC02NjAsOCArNjYwLDEwIEBACiAJZm9yIChpID0gMDsgaSA8IEhBU0hfU0laRTsgKytpKSB7CiAJCXNwaW5fbG9jaygmZG1hX2VudHJ5X2hhc2hbaV0ubG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkbWFfZW50cnlfaGFzaFtpXS5saXN0LCBsaXN0KSB7Ci0JCQlpZiAoZW50cnktPmRldiA9PSBkZXYpCisJCQlpZiAoZW50cnktPmRldiA9PSBkZXYpIHsKIAkJCQljb3VudCArPSAxOworCQkJCSpvdXRfZW50cnkgPSBlbnRyeTsKKwkJCX0KIAkJfQogCQlzcGluX3VubG9jaygmZG1hX2VudHJ5X2hhc2hbaV0ubG9jayk7CiAJfQpAQCAtNjc0LDYgKzY3Niw3IEBACiBzdGF0aWMgaW50IGRtYV9kZWJ1Z19kZXZpY2VfY2hhbmdlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqdW5pbml0aWFsaXplZF92YXIoZW50cnkpOwogCWludCBjb3VudDsKIAogCWlmIChnbG9iYWxfZGlzYWJsZSkKQEAgLTY4MSwxMiArNjg0LDE3IEBACiAKIAlzd2l0Y2ggKGFjdGlvbikgewogCWNhc2UgQlVTX05PVElGWV9VTkJPVU5EX0RSSVZFUjoKLQkJY291bnQgPSBkZXZpY2VfZG1hX2FsbG9jYXRpb25zKGRldik7CisJCWNvdW50ID0gZGV2aWNlX2RtYV9hbGxvY2F0aW9ucyhkZXYsICZlbnRyeSk7CiAJCWlmIChjb3VudCA9PSAwKQogCQkJYnJlYWs7Ci0JCWVycl9wcmludGsoZGV2LCBOVUxMLCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBoYXMgcGVuZGluZyAiCisJCWVycl9wcmludGsoZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgaGFzIHBlbmRpbmcgIgogCQkJCSJETUEgYWxsb2NhdGlvbnMgd2hpbGUgcmVsZWFzZWQgZnJvbSBkZXZpY2UgIgotCQkJCSJbY291bnQ9JWRdXG4iLCBjb3VudCk7CisJCQkJIltjb3VudD0lZF1cbiIKKwkJCQkiT25lIG9mIGxlYWtlZCBlbnRyaWVzIGRldGFpbHM6ICIKKwkJCQkiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgorCQkJCSJbbWFwcGVkIHdpdGggJXNdIFttYXBwZWQgYXMgJXNdXG4iLAorCQkJY291bnQsIGVudHJ5LT5kZXZfYWRkciwgZW50cnktPnNpemUsCisJCQlkaXIybmFtZVtlbnRyeS0+ZGlyZWN0aW9uXSwgdHlwZTJuYW1lW2VudHJ5LT50eXBlXSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbGliL2ZsZXhfYXJyYXkuYyBiL2xpYi9mbGV4X2FycmF5LmMKaW5kZXggYzBlYTQwYi4uODU0YjU3YiAxMDA2NDQKLS0tIGEvbGliL2ZsZXhfYXJyYXkuYworKysgYi9saWIvZmxleF9hcnJheS5jCkBAIC0yMzIsMTAgKzIzMiwxMCBAQAogCiAvKioKICAqIGZsZXhfYXJyYXlfcHJlYWxsb2MgLSBndWFyYW50ZWUgdGhhdCBhcnJheSBzcGFjZSBleGlzdHMKLSAqIEBmYToJCXRoZSBmbGV4IGFycmF5IGZvciB3aGljaCB0byBwcmVhbGxvY2F0ZSBwYXJ0cwotICogQHN0YXJ0OglpbmRleCBvZiBmaXJzdCBhcnJheSBlbGVtZW50IGZvciB3aGljaCBzcGFjZSBpcyBhbGxvY2F0ZWQKLSAqIEBlbmQ6CWluZGV4IG9mIGxhc3QgKGluY2x1c2l2ZSkgZWxlbWVudCBmb3Igd2hpY2ggc3BhY2UgaXMgYWxsb2NhdGVkCi0gKiBAZmxhZ3M6CXBhZ2UgYWxsb2NhdGlvbiBmbGFncworICogQGZhOgkJCXRoZSBmbGV4IGFycmF5IGZvciB3aGljaCB0byBwcmVhbGxvY2F0ZSBwYXJ0cworICogQHN0YXJ0OgkJaW5kZXggb2YgZmlyc3QgYXJyYXkgZWxlbWVudCBmb3Igd2hpY2ggc3BhY2UgaXMgYWxsb2NhdGVkCisgKiBAbnJfZWxlbWVudHM6CW51bWJlciBvZiBlbGVtZW50cyBmb3Igd2hpY2ggc3BhY2UgaXMgYWxsb2NhdGVkCisgKiBAZmxhZ3M6CQlwYWdlIGFsbG9jYXRpb24gZmxhZ3MKICAqCiAgKiBUaGlzIHdpbGwgZ3VhcmFudGVlIHRoYXQgbm8gZnV0dXJlIGNhbGxzIHRvIGZsZXhfYXJyYXlfcHV0KCkKICAqIHdpbGwgYWxsb2NhdGUgbWVtb3J5LiAgSXQgY2FuIGJlIHVzZWQgaWYgeW91IGFyZSBleHBlY3RpbmcgdG8KQEAgLTI0NSwxNCArMjQ1LDI0IEBACiAgKiBMb2NraW5nIG11c3QgYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlci4KICAqLwogaW50IGZsZXhfYXJyYXlfcHJlYWxsb2Moc3RydWN0IGZsZXhfYXJyYXkgKmZhLCB1bnNpZ25lZCBpbnQgc3RhcnQsCi0JCQl1bnNpZ25lZCBpbnQgZW5kLCBnZnBfdCBmbGFncykKKwkJCXVuc2lnbmVkIGludCBucl9lbGVtZW50cywgZ2ZwX3QgZmxhZ3MpCiB7CiAJaW50IHN0YXJ0X3BhcnQ7CiAJaW50IGVuZF9wYXJ0OwogCWludCBwYXJ0X25yOworCXVuc2lnbmVkIGludCBlbmQ7CiAJc3RydWN0IGZsZXhfYXJyYXlfcGFydCAqcGFydDsKIAotCWlmIChzdGFydCA+PSBmYS0+dG90YWxfbnJfZWxlbWVudHMgfHwgZW5kID49IGZhLT50b3RhbF9ucl9lbGVtZW50cykKKwlpZiAoIXN0YXJ0ICYmICFucl9lbGVtZW50cykKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXJ0ID49IGZhLT50b3RhbF9ucl9lbGVtZW50cykKKwkJcmV0dXJuIC1FTk9TUEM7CisJaWYgKCFucl9lbGVtZW50cykKKwkJcmV0dXJuIDA7CisKKwllbmQgPSBzdGFydCArIG5yX2VsZW1lbnRzIC0gMTsKKworCWlmIChlbmQgPj0gZmEtPnRvdGFsX25yX2VsZW1lbnRzKQogCQlyZXR1cm4gLUVOT1NQQzsKIAlpZiAoZWxlbWVudHNfZml0X2luX2Jhc2UoZmEpKQogCQlyZXR1cm4gMDsKQEAgLTM0Myw2ICszNTMsOCBAQAogCWludCBwYXJ0X25yOwogCWludCByZXQgPSAwOwogCisJaWYgKCFmYS0+dG90YWxfbnJfZWxlbWVudHMpCisJCXJldHVybiAwOwogCWlmIChlbGVtZW50c19maXRfaW5fYmFzZShmYSkpCiAJCXJldHVybiByZXQ7CiAJZm9yIChwYXJ0X25yID0gMDsgcGFydF9uciA8IEZMRVhfQVJSQVlfTlJfQkFTRV9QVFJTOyBwYXJ0X25yKyspIHsKZGlmZiAtLWdpdCBhL2xpYi9zdHJpbmcuYyBiL2xpYi9zdHJpbmcuYwppbmRleCBmNzFiZWFkLi4wMWZhZDliIDEwMDY0NAotLS0gYS9saWIvc3RyaW5nLmMKKysrIGIvbGliL3N0cmluZy5jCkBAIC01MzUsNiArNTM1LDM1IEBACiB9CiBFWFBPUlRfU1lNQk9MKHN5c2ZzX3N0cmVxKTsKIAorLyoqCisgKiBzdHJ0b2Jvb2wgLSBjb252ZXJ0IGNvbW1vbiB1c2VyIGlucHV0cyBpbnRvIGJvb2xlYW4gdmFsdWVzCisgKiBAczogaW5wdXQgc3RyaW5nCisgKiBAcmVzOiByZXN1bHQKKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0dXJucyAwIGlmZiB0aGUgZmlyc3QgY2hhcmFjdGVyIGlzIG9uZSBvZiAnWXkxTm4wJy4KKyAqIE90aGVyd2lzZSBpdCB3aWxsIHJldHVybiAtRUlOVkFMLiAgVmFsdWUgcG9pbnRlZCB0byBieSByZXMgaXMKKyAqIHVwZGF0ZWQgdXBvbiBmaW5kaW5nIGEgbWF0Y2guCisgKi8KK2ludCBzdHJ0b2Jvb2woY29uc3QgY2hhciAqcywgYm9vbCAqcmVzKQoreworCXN3aXRjaCAoc1swXSkgeworCWNhc2UgJ3knOgorCWNhc2UgJ1knOgorCWNhc2UgJzEnOgorCQkqcmVzID0gdHJ1ZTsKKwkJYnJlYWs7CisJY2FzZSAnbic6CisJY2FzZSAnTic6CisJY2FzZSAnMCc6CisJCSpyZXMgPSBmYWxzZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzdHJ0b2Jvb2wpOworCiAjaWZuZGVmIF9fSEFWRV9BUkNIX01FTVNFVAogLyoqCiAgKiBtZW1zZXQgLSBGaWxsIGEgcmVnaW9uIG9mIG1lbW9yeSB3aXRoIHRoZSBnaXZlbiB2YWx1ZQpkaWZmIC0tZ2l0IGEvbGliL3ZzcHJpbnRmLmMgYi9saWIvdnNwcmludGYuYwppbmRleCBiYzBhYzZiLi5kZmQ2MDE5IDEwMDY0NAotLS0gYS9saWIvdnNwcmludGYuYworKysgYi9saWIvdnNwcmludGYuYwpAQCAtNzk3LDcgKzc5Nyw3IEBACiAJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgdXVpZCwgc3BlYyk7CiB9CiAKLWludCBrcHRyX3Jlc3RyaWN0ID0gMTsKK2ludCBrcHRyX3Jlc3RyaWN0IF9fcmVhZF9tb3N0bHk7CiAKIC8qCiAgKiBTaG93IGEgJyVwJyB0aGluZy4gIEEga2VybmVsIGV4dGVuc2lvbiBpcyB0aGF0IHRoZSAnJXAnIGlzIGZvbGxvd2VkCmRpZmYgLS1naXQgYS9saWIveHoveHpfZGVjX2x6bWEyLmMgYi9saWIveHoveHpfZGVjX2x6bWEyLmMKaW5kZXggZWE1ZmE0Zi4uYTZjZGM5NiAxMDA2NDQKLS0tIGEvbGliL3h6L3h6X2RlY19sem1hMi5jCisrKyBiL2xpYi94ei94el9kZWNfbHptYTIuYwpAQCAtOTY5LDYgKzk2OSw5IEBACiAJCQkgKi8KIAkJCXRtcCA9IGItPmluW2ItPmluX3BvcysrXTsKIAorCQkJaWYgKHRtcCA9PSAweDAwKQorCQkJCXJldHVybiBYWl9TVFJFQU1fRU5EOworCiAJCQlpZiAodG1wID49IDB4RTAgfHwgdG1wID09IDB4MDEpIHsKIAkJCQlzLT5sem1hMi5uZWVkX3Byb3BzID0gdHJ1ZTsKIAkJCQlzLT5sem1hMi5uZWVkX2RpY3RfcmVzZXQgPSBmYWxzZTsKQEAgLTEwMDEsOSArMTAwNCw2IEBACiAJCQkJCQlsem1hX3Jlc2V0KHMpOwogCQkJCX0KIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKHRtcCA9PSAweDAwKQotCQkJCQlyZXR1cm4gWFpfU1RSRUFNX0VORDsKLQogCQkJCWlmICh0bXAgPiAweDAyKQogCQkJCQlyZXR1cm4gWFpfREFUQV9FUlJPUjsKIApkaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmMKaW5kZXggNDcwZGNkYS4uODMzMjZhZCAxMDA2NDQKLS0tIGEvbW0vaHVnZV9tZW1vcnkuYworKysgYi9tbS9odWdlX21lbW9yeS5jCkBAIC0xNDA4LDYgKzE0MDgsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNkZWZpbmUgVk1fTk9fVEhQIChWTV9TUEVDSUFMfFZNX0lOU0VSVFBBR0V8Vk1fTUlYRURNQVB8Vk1fU0FPfCBcCisJCSAgIFZNX0hVR0VUTEJ8Vk1fU0hBUkVEfFZNX01BWVNIQVJFKQorCiBpbnQgaHVnZXBhZ2VfbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJICAgICB1bnNpZ25lZCBsb25nICp2bV9mbGFncywgaW50IGFkdmljZSkKIHsKQEAgLTE0MTYsMTEgKzE0MTksNyBAQAogCQkvKgogCQkgKiBCZSBzb21ld2hhdCBvdmVyLXByb3RlY3RpdmUgbGlrZSBLU00gZm9yIG5vdyEKIAkJICovCi0JCWlmICgqdm1fZmxhZ3MgJiAoVk1fSFVHRVBBR0UgfAotCQkJCSBWTV9TSEFSRUQgICB8IFZNX01BWVNIQVJFICAgfAotCQkJCSBWTV9QRk5NQVAgICB8IFZNX0lPICAgICAgfCBWTV9ET05URVhQQU5EIHwKLQkJCQkgVk1fUkVTRVJWRUQgfCBWTV9IVUdFVExCIHwgVk1fSU5TRVJUUEFHRSB8Ci0JCQkJIFZNX01JWEVETUFQIHwgVk1fU0FPKSkKKwkJaWYgKCp2bV9mbGFncyAmIChWTV9IVUdFUEFHRSB8IFZNX05PX1RIUCkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJKnZtX2ZsYWdzICY9IH5WTV9OT0hVR0VQQUdFOwogCQkqdm1fZmxhZ3MgfD0gVk1fSFVHRVBBR0U7CkBAIC0xNDM2LDExICsxNDM1LDcgQEAKIAkJLyoKIAkJICogQmUgc29tZXdoYXQgb3Zlci1wcm90ZWN0aXZlIGxpa2UgS1NNIGZvciBub3chCiAJCSAqLwotCQlpZiAoKnZtX2ZsYWdzICYgKFZNX05PSFVHRVBBR0UgfAotCQkJCSBWTV9TSEFSRUQgICB8IFZNX01BWVNIQVJFICAgfAotCQkJCSBWTV9QRk5NQVAgICB8IFZNX0lPICAgICAgfCBWTV9ET05URVhQQU5EIHwKLQkJCQkgVk1fUkVTRVJWRUQgfCBWTV9IVUdFVExCIHwgVk1fSU5TRVJUUEFHRSB8Ci0JCQkJIFZNX01JWEVETUFQIHwgVk1fU0FPKSkKKwkJaWYgKCp2bV9mbGFncyAmIChWTV9OT0hVR0VQQUdFIHwgVk1fTk9fVEhQKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQkqdm1fZmxhZ3MgJj0gflZNX0hVR0VQQUdFOwogCQkqdm1fZmxhZ3MgfD0gVk1fTk9IVUdFUEFHRTsKQEAgLTE1NzQsMTAgKzE1NjksMTQgQEAKIAkJICogcGFnZSBmYXVsdCBpZiBuZWVkZWQuCiAJCSAqLwogCQlyZXR1cm4gMDsKLQlpZiAodm1hLT52bV9maWxlIHx8IHZtYS0+dm1fb3BzKQorCWlmICh2bWEtPnZtX29wcykKIAkJLyoga2h1Z2VwYWdlZCBub3QgeWV0IHdvcmtpbmcgb24gZmlsZSBvciBzcGVjaWFsIG1hcHBpbmdzICovCiAJCXJldHVybiAwOwotCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCBpc19wZm5fbWFwcGluZyh2bWEpKTsKKwkvKgorCSAqIElmIGlzX3Bmbl9tYXBwaW5nKCkgaXMgdHJ1ZSBpc19sZWFybl9wZm5fbWFwcGluZygpIG11c3QgYmUKKwkgKiB0cnVlIHRvbywgdmVyaWZ5IGl0IGhlcmUuCisJICovCisJVk1fQlVHX09OKGlzX2xpbmVhcl9wZm5fbWFwcGluZyh2bWEpIHx8IHZtYS0+dm1fZmxhZ3MgJiBWTV9OT19USFApOwogCWhzdGFydCA9ICh2bWEtPnZtX3N0YXJ0ICsgfkhQQUdFX1BNRF9NQVNLKSAmIEhQQUdFX1BNRF9NQVNLOwogCWhlbmQgPSB2bWEtPnZtX2VuZCAmIEhQQUdFX1BNRF9NQVNLOwogCWlmIChoc3RhcnQgPCBoZW5kKQpAQCAtMTgyOCwxMiArMTgyNywxNSBAQAogCSAgICAodm1hLT52bV9mbGFncyAmIFZNX05PSFVHRVBBR0UpKQogCQlnb3RvIG91dDsKIAotCS8qIFZNX1BGTk1BUCB2bWFzIG1heSBoYXZlIHZtX29wcyBudWxsIGJ1dCB2bV9maWxlIHNldCAqLwotCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCisJaWYgKCF2bWEtPmFub25fdm1hIHx8IHZtYS0+dm1fb3BzKQogCQlnb3RvIG91dDsKIAlpZiAoaXNfdm1hX3RlbXBvcmFyeV9zdGFjayh2bWEpKQogCQlnb3RvIG91dDsKLQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgaXNfcGZuX21hcHBpbmcodm1hKSk7CisJLyoKKwkgKiBJZiBpc19wZm5fbWFwcGluZygpIGlzIHRydWUgaXNfbGVhcm5fcGZuX21hcHBpbmcoKSBtdXN0IGJlCisJICogdHJ1ZSB0b28sIHZlcmlmeSBpdCBoZXJlLgorCSAqLworCVZNX0JVR19PTihpc19saW5lYXJfcGZuX21hcHBpbmcodm1hKSB8fCB2bWEtPnZtX2ZsYWdzICYgVk1fTk9fVEhQKTsKIAogCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHJlc3MpOwogCWlmICghcGdkX3ByZXNlbnQoKnBnZCkpCkBAIC0yMDY2LDEzICsyMDY4LDE2IEBACiAJCQlwcm9ncmVzcysrOwogCQkJY29udGludWU7CiAJCX0KLQkJLyogVk1fUEZOTUFQIHZtYXMgbWF5IGhhdmUgdm1fb3BzIG51bGwgYnV0IHZtX2ZpbGUgc2V0ICovCi0JCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcyB8fCB2bWEtPnZtX2ZpbGUpCisJCWlmICghdm1hLT5hbm9uX3ZtYSB8fCB2bWEtPnZtX29wcykKIAkJCWdvdG8gc2tpcDsKIAkJaWYgKGlzX3ZtYV90ZW1wb3Jhcnlfc3RhY2sodm1hKSkKIAkJCWdvdG8gc2tpcDsKLQotCQlWTV9CVUdfT04oaXNfbGluZWFyX3Bmbl9tYXBwaW5nKHZtYSkgfHwgaXNfcGZuX21hcHBpbmcodm1hKSk7CisJCS8qCisJCSAqIElmIGlzX3Bmbl9tYXBwaW5nKCkgaXMgdHJ1ZSBpc19sZWFybl9wZm5fbWFwcGluZygpCisJCSAqIG11c3QgYmUgdHJ1ZSB0b28sIHZlcmlmeSBpdCBoZXJlLgorCQkgKi8KKwkJVk1fQlVHX09OKGlzX2xpbmVhcl9wZm5fbWFwcGluZyh2bWEpIHx8CisJCQkgIHZtYS0+dm1fZmxhZ3MgJiBWTV9OT19USFApOwogCiAJCWhzdGFydCA9ICh2bWEtPnZtX3N0YXJ0ICsgfkhQQUdFX1BNRF9NQVNLKSAmIEhQQUdFX1BNRF9NQVNLOwogCQloZW5kID0gdm1hLT52bV9lbmQgJiBIUEFHRV9QTURfTUFTSzsKZGlmZiAtLWdpdCBhL21tL2ttZW1sZWFrLmMgYi9tbS9rbWVtbGVhay5jCmluZGV4IGMxZDU4NjcuLmFhY2VlNDUgMTAwNjQ0Ci0tLSBhL21tL2ttZW1sZWFrLmMKKysrIGIvbW0va21lbWxlYWsuYwpAQCAtMTQxNCw5ICsxNDE0LDEyIEBACiAJKysoKnBvcyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2NvbnRpbnVlX3JjdShuLCAmb2JqZWN0X2xpc3QpIHsKLQkJbmV4dF9vYmogPSBsaXN0X2VudHJ5KG4sIHN0cnVjdCBrbWVtbGVha19vYmplY3QsIG9iamVjdF9saXN0KTsKLQkJaWYgKGdldF9vYmplY3QobmV4dF9vYmopKQorCQlzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0ICpvYmogPQorCQkJbGlzdF9lbnRyeShuLCBzdHJ1Y3Qga21lbWxlYWtfb2JqZWN0LCBvYmplY3RfbGlzdCk7CisJCWlmIChnZXRfb2JqZWN0KG9iaikpIHsKKwkJCW5leHRfb2JqID0gb2JqOwogCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlwdXRfb2JqZWN0KHByZXZfb2JqKTsKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggY2UyMmEyNS4uNjFlNjZmMCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTEzNTksNyArMTM1OSw3IEBACiAJCSAqLwogCQltYXJrX3BhZ2VfYWNjZXNzZWQocGFnZSk7CiAJfQotCWlmIChmbGFncyAmIEZPTExfTUxPQ0spIHsKKwlpZiAoKGZsYWdzICYgRk9MTF9NTE9DSykgJiYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpKSB7CiAJCS8qCiAJCSAqIFRoZSBwcmVsaW1pbmFyeSBtYXBwaW5nIGNoZWNrIGlzIG1haW5seSB0byBhdm9pZCB0aGUKIAkJICogcG9pbnRsZXNzIG92ZXJoZWFkIG9mIGxvY2tfcGFnZSBvbiB0aGUgWkVST19QQUdFCkBAIC0xNDEyLDkgKzE0MTIsOCBAQAogCiBzdGF0aWMgaW5saW5lIGludCBzdGFja19ndWFyZF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fR1JPV1NET1dOKSAmJgotCQkodm1hLT52bV9zdGFydCA9PSBhZGRyKSAmJgotCQkhdm1hX3N0YWNrX2NvbnRpbnVlKHZtYS0+dm1fcHJldiwgYWRkcik7CisJcmV0dXJuIHN0YWNrX2d1YXJkX3BhZ2Vfc3RhcnQodm1hLCBhZGRyKSB8fAorCSAgICAgICBzdGFja19ndWFyZF9wYWdlX2VuZCh2bWEsIGFkZHIrUEFHRV9TSVpFKTsKIH0KIAogLyoqCkBAIC0xNTUxLDEzICsxNTUwLDYgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyoKLQkJICogSWYgd2UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0aGUgcGFnZSBpdHNlbGYsCi0JCSAqIGFuZCBpdCdzIHRoZSBzdGFjayBndWFyZCBwYWdlLCBqdXN0IHNraXAgaXQuCi0JCSAqLwotCQlpZiAoIXBhZ2VzICYmIHN0YWNrX2d1YXJkX3BhZ2Uodm1hLCBzdGFydCkpCi0JCQlnb3RvIG5leHRfcGFnZTsKLQogCQlkbyB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAkJCXVuc2lnbmVkIGludCBmb2xsX2ZsYWdzID0gZ3VwX2ZsYWdzOwpAQCAtMTU3NCw2ICsxNTY2LDExIEBACiAJCQkJaW50IHJldDsKIAkJCQl1bnNpZ25lZCBpbnQgZmF1bHRfZmxhZ3MgPSAwOwogCisJCQkJLyogRm9yIG1sb2NrLCBqdXN0IHNraXAgdGhlIHN0YWNrIGd1YXJkIHBhZ2UuICovCisJCQkJaWYgKGZvbGxfZmxhZ3MgJiBGT0xMX01MT0NLKSB7CisJCQkJCWlmIChzdGFja19ndWFyZF9wYWdlKHZtYSwgc3RhcnQpKQorCQkJCQkJZ290byBuZXh0X3BhZ2U7CisJCQkJfQogCQkJCWlmIChmb2xsX2ZsYWdzICYgRk9MTF9XUklURSkKIAkJCQkJZmF1bHRfZmxhZ3MgfD0gRkFVTFRfRkxBR19XUklURTsKIAkJCQlpZiAobm9uYmxvY2tpbmcpCkBAIC0zMzk2LDcgKzMzOTMsNyBAQAogCSAqIHJ1biBwdGVfb2Zmc2V0X21hcCBvbiB0aGUgcG1kLCBpZiBhbiBodWdlIHBtZCBjb3VsZAogCSAqIG1hdGVyaWFsaXplIGZyb20gdW5kZXIgdXMgZnJvbSBhIGRpZmZlcmVudCB0aHJlYWQuCiAJICovCi0JaWYgKHVubGlrZWx5KF9fcHRlX2FsbG9jKG1tLCB2bWEsIHBtZCwgYWRkcmVzcykpKQorCWlmICh1bmxpa2VseShwbWRfbm9uZSgqcG1kKSkgJiYgX19wdGVfYWxsb2MobW0sIHZtYSwgcG1kLCBhZGRyZXNzKSkKIAkJcmV0dXJuIFZNX0ZBVUxUX09PTTsKIAkvKiBpZiBhbiBodWdlIHBtZCBtYXRlcmlhbGl6ZWQgZnJvbSB1bmRlciB1cyBqdXN0IHJldHJ5IGxhdGVyICovCiAJaWYgKHVubGlrZWx5KHBtZF90cmFuc19odWdlKCpwbWQpKSkKZGlmZiAtLWdpdCBhL21tL21sb2NrLmMgYi9tbS9tbG9jay5jCmluZGV4IDZiNTVlM2UuLjUxNmIyYzIgMTAwNjQ0Ci0tLSBhL21tL21sb2NrLmMKKysrIGIvbW0vbWxvY2suYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJVk1fQlVHX09OKGVuZCAgID4gdm1hLT52bV9lbmQpOwogCVZNX0JVR19PTighcndzZW1faXNfbG9ja2VkKCZtbS0+bW1hcF9zZW0pKTsKIAotCWd1cF9mbGFncyA9IEZPTExfVE9VQ0g7CisJZ3VwX2ZsYWdzID0gRk9MTF9UT1VDSCB8IEZPTExfTUxPQ0s7CiAJLyoKIAkgKiBXZSB3YW50IHRvIHRvdWNoIHdyaXRhYmxlIG1hcHBpbmdzIHdpdGggYSB3cml0ZSBmYXVsdCBpbiBvcmRlcgogCSAqIHRvIGJyZWFrIENPVywgZXhjZXB0IGZvciBzaGFyZWQgbWFwcGluZ3MgYmVjYXVzZSB0aGVzZSBkb24ndCBDT1cKQEAgLTE3OCw5ICsxNzgsNiBAQAogCWlmICh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMpKQogCQlndXBfZmxhZ3MgfD0gRk9MTF9GT1JDRTsKIAotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKQotCQlndXBfZmxhZ3MgfD0gRk9MTF9NTE9DSzsKLQogCXJldHVybiBfX2dldF91c2VyX3BhZ2VzKGN1cnJlbnQsIG1tLCBhZGRyLCBucl9wYWdlcywgZ3VwX2ZsYWdzLAogCQkJCU5VTEwsIE5VTEwsIG5vbmJsb2NraW5nKTsKIH0KZGlmZiAtLWdpdCBhL21tL21tYXAuYyBiL21tL21tYXAuYwppbmRleCBlMjdlMGNmLi43NzIxNDBjIDEwMDY0NAotLS0gYS9tbS9tbWFwLmMKKysrIGIvbW0vbW1hcC5jCkBAIC0xNzY3LDEwICsxNzY3LDEzIEBACiAJCXNpemUgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsKIAkJZ3JvdyA9IChhZGRyZXNzIC0gdm1hLT52bV9lbmQpID4+IFBBR0VfU0hJRlQ7CiAKLQkJZXJyb3IgPSBhY2N0X3N0YWNrX2dyb3d0aCh2bWEsIHNpemUsIGdyb3cpOwotCQlpZiAoIWVycm9yKSB7Ci0JCQl2bWEtPnZtX2VuZCA9IGFkZHJlc3M7Ci0JCQlwZXJmX2V2ZW50X21tYXAodm1hKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlpZiAodm1hLT52bV9wZ29mZiArIChzaXplID4+IFBBR0VfU0hJRlQpID49IHZtYS0+dm1fcGdvZmYpIHsKKwkJCWVycm9yID0gYWNjdF9zdGFja19ncm93dGgodm1hLCBzaXplLCBncm93KTsKKwkJCWlmICghZXJyb3IpIHsKKwkJCQl2bWEtPnZtX2VuZCA9IGFkZHJlc3M7CisJCQkJcGVyZl9ldmVudF9tbWFwKHZtYSk7CisJCQl9CiAJCX0KIAl9CiAJdm1hX3VubG9ja19hbm9uX3ZtYSh2bWEpOwpkaWZmIC0tZ2l0IGEvbW0vb29tX2tpbGwuYyBiL21tL29vbV9raWxsLmMKaW5kZXggODNmYjcyYzEuLmY1MmU4NWMgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtMTcyLDEwICsxNzIsMTMgQEAKIAogCS8qCiAJICogVGhlIGJhc2VsaW5lIGZvciB0aGUgYmFkbmVzcyBzY29yZSBpcyB0aGUgcHJvcG9ydGlvbiBvZiBSQU0gdGhhdCBlYWNoCi0JICogdGFzaydzIHJzcyBhbmQgc3dhcCBzcGFjZSB1c2UuCisJICogdGFzaydzIHJzcywgcGFnZXRhYmxlIGFuZCBzd2FwIHNwYWNlIHVzZS4KIAkgKi8KLQlwb2ludHMgPSAoZ2V0X21tX3JzcyhwLT5tbSkgKyBnZXRfbW1fY291bnRlcihwLT5tbSwgTU1fU1dBUEVOVFMpKSAqIDEwMDAgLwotCQkJdG90YWxwYWdlczsKKwlwb2ludHMgPSBnZXRfbW1fcnNzKHAtPm1tKSArIHAtPm1tLT5ucl9wdGVzOworCXBvaW50cyArPSBnZXRfbW1fY291bnRlcihwLT5tbSwgTU1fU1dBUEVOVFMpOworCisJcG9pbnRzICo9IDEwMDA7CisJcG9pbnRzIC89IHRvdGFscGFnZXM7CiAJdGFza191bmxvY2socCk7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDlmOGE5N2IuLjNmOGJjZTIgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTIzMTcsNiArMjMxNywyMSBAQAogCiBFWFBPUlRfU1lNQk9MKGZyZWVfcGFnZXMpOwogCitzdGF0aWMgdm9pZCAqbWFrZV9hbGxvY19leGFjdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIG9yZGVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoYWRkcikgeworCQl1bnNpZ25lZCBsb25nIGFsbG9jX2VuZCA9IGFkZHIgKyAoUEFHRV9TSVpFIDw8IG9yZGVyKTsKKwkJdW5zaWduZWQgbG9uZyB1c2VkID0gYWRkciArIFBBR0VfQUxJR04oc2l6ZSk7CisKKwkJc3BsaXRfcGFnZSh2aXJ0X3RvX3BhZ2UoKHZvaWQgKilhZGRyKSwgb3JkZXIpOworCQl3aGlsZSAodXNlZCA8IGFsbG9jX2VuZCkgeworCQkJZnJlZV9wYWdlKHVzZWQpOworCQkJdXNlZCArPSBQQUdFX1NJWkU7CisJCX0KKwl9CisJcmV0dXJuICh2b2lkICopYWRkcjsKK30KKwogLyoqCiAgKiBhbGxvY19wYWdlc19leGFjdCAtIGFsbG9jYXRlIGFuIGV4YWN0IG51bWJlciBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgcGFnZXMuCiAgKiBAc2l6ZTogdGhlIG51bWJlciBvZiBieXRlcyB0byBhbGxvY2F0ZQpAQCAtMjMzNiwyMiArMjM1MSwzMyBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAogCWFkZHIgPSBfX2dldF9mcmVlX3BhZ2VzKGdmcF9tYXNrLCBvcmRlcik7Ci0JaWYgKGFkZHIpIHsKLQkJdW5zaWduZWQgbG9uZyBhbGxvY19lbmQgPSBhZGRyICsgKFBBR0VfU0laRSA8PCBvcmRlcik7Ci0JCXVuc2lnbmVkIGxvbmcgdXNlZCA9IGFkZHIgKyBQQUdFX0FMSUdOKHNpemUpOwotCi0JCXNwbGl0X3BhZ2UodmlydF90b19wYWdlKCh2b2lkICopYWRkciksIG9yZGVyKTsKLQkJd2hpbGUgKHVzZWQgPCBhbGxvY19lbmQpIHsKLQkJCWZyZWVfcGFnZSh1c2VkKTsKLQkJCXVzZWQgKz0gUEFHRV9TSVpFOwotCQl9Ci0JfQotCi0JcmV0dXJuICh2b2lkICopYWRkcjsKKwlyZXR1cm4gbWFrZV9hbGxvY19leGFjdChhZGRyLCBvcmRlciwgc2l6ZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGFsbG9jX3BhZ2VzX2V4YWN0KTsKIAogLyoqCisgKiBhbGxvY19wYWdlc19leGFjdF9uaWQgLSBhbGxvY2F0ZSBhbiBleGFjdCBudW1iZXIgb2YgcGh5c2ljYWxseS1jb250aWd1b3VzCisgKgkJCSAgIHBhZ2VzIG9uIGEgbm9kZS4KKyAqIEBuaWQ6IHRoZSBwcmVmZXJyZWQgbm9kZSBJRCB3aGVyZSBtZW1vcnkgc2hvdWxkIGJlIGFsbG9jYXRlZAorICogQHNpemU6IHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUKKyAqIEBnZnBfbWFzazogR0ZQIGZsYWdzIGZvciB0aGUgYWxsb2NhdGlvbgorICoKKyAqIExpa2UgYWxsb2NfcGFnZXNfZXhhY3QoKSwgYnV0IHRyeSB0byBhbGxvY2F0ZSBvbiBub2RlIG5pZCBmaXJzdCBiZWZvcmUgZmFsbGluZworICogYmFjay4KKyAqIE5vdGUgdGhpcyBpcyBub3QgYWxsb2NfcGFnZXNfZXhhY3Rfbm9kZSgpIHdoaWNoIGFsbG9jYXRlcyBvbiBhIHNwZWNpZmljIG5vZGUsCisgKiBidXQgaXMgbm90IGV4YWN0LgorICovCit2b2lkICphbGxvY19wYWdlc19leGFjdF9uaWQoaW50IG5pZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcF9tYXNrKQoreworCXVuc2lnbmVkIG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCXN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXNfbm9kZShuaWQsIGdmcF9tYXNrLCBvcmRlcik7CisJaWYgKCFwKQorCQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbWFrZV9hbGxvY19leGFjdCgodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MocCksIG9yZGVyLCBzaXplKTsKK30KK0VYUE9SVF9TWU1CT0woYWxsb2NfcGFnZXNfZXhhY3RfbmlkKTsKKworLyoqCiAgKiBmcmVlX3BhZ2VzX2V4YWN0IC0gcmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlc19leGFjdCgpCiAgKiBAdmlydDogdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFsbG9jX3BhZ2VzX2V4YWN0LgogICogQHNpemU6IHNpemUgb2YgYWxsb2NhdGlvbiwgc2FtZSB2YWx1ZSBhcyBwYXNzZWQgdG8gYWxsb2NfcGFnZXNfZXhhY3QoKS4KQEAgLTM1NjQsNyArMzU5MCw3IEBACiAKIAlpZiAoIXNsYWJfaXNfYXZhaWxhYmxlKCkpIHsKIAkJem9uZS0+d2FpdF90YWJsZSA9ICh3YWl0X3F1ZXVlX2hlYWRfdCAqKQotCQkJYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCBhbGxvY19zaXplKTsKKwkJCWFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LCBhbGxvY19zaXplKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBUaGlzIGNhc2UgbWVhbnMgdGhhdCBhIHpvbmUgd2hvc2Ugc2l6ZSB3YXMgMCBnZXRzIG5ldyBtZW1vcnkKQEAgLTQxNDEsNyArNDE2Nyw4IEBACiAJdW5zaWduZWQgbG9uZyB1c2VtYXBzaXplID0gdXNlbWFwX3NpemUoem9uZXNpemUpOwogCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IE5VTEw7CiAJaWYgKHVzZW1hcHNpemUpCi0JCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IGFsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdCwgdXNlbWFwc2l6ZSk7CisJCXpvbmUtPnBhZ2VibG9ja19mbGFncyA9IGFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LAorCQkJCQkJCQkgICB1c2VtYXBzaXplKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdXNlbWFwKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCkBAIC00MzA3LDcgKzQzMzQsNyBAQAogCQlzaXplID0gIChlbmQgLSBzdGFydCkgKiBzaXplb2Yoc3RydWN0IHBhZ2UpOwogCQltYXAgPSBhbGxvY19yZW1hcChwZ2RhdC0+bm9kZV9pZCwgc2l6ZSk7CiAJCWlmICghbWFwKQotCQkJbWFwID0gYWxsb2NfYm9vdG1lbV9ub2RlKHBnZGF0LCBzaXplKTsKKwkJCW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZV9ub3BhbmljKHBnZGF0LCBzaXplKTsKIAkJcGdkYXQtPm5vZGVfbWVtX21hcCA9IG1hcCArIChwZ2RhdC0+bm9kZV9zdGFydF9wZm4gLSBzdGFydCk7CiAJfQogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9jZ3JvdXAuYyBiL21tL3BhZ2VfY2dyb3VwLmMKaW5kZXggOTkwNTUwMS4uMmRhYWRjMyAxMDA2NDQKLS0tIGEvbW0vcGFnZV9jZ3JvdXAuYworKysgYi9tbS9wYWdlX2Nncm91cC5jCkBAIC0xMzQsNyArMTM0LDcgQEAKIHsKIAl2b2lkICphZGRyID0gTlVMTDsKIAotCWFkZHIgPSBhbGxvY19wYWdlc19leGFjdChzaXplLCBHRlBfS0VSTkVMIHwgX19HRlBfTk9XQVJOKTsKKwlhZGRyID0gYWxsb2NfcGFnZXNfZXhhY3RfbmlkKG5pZCwgc2l6ZSwgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CiAJaWYgKGFkZHIpCiAJCXJldHVybiBhZGRyOwogCmRpZmYgLS1naXQgYS9tbS9zaG1lbS5jIGIvbW0vc2htZW0uYwppbmRleCA4ZmEyN2U0Li5kZmM3MDY5IDEwMDY0NAotLS0gYS9tbS9zaG1lbS5jCisrKyBiL21tL3NobWVtLmMKQEAgLTg1Miw3ICs4NTIsNyBAQAogCiBzdGF0aWMgaW50IHNobWVtX3VudXNlX2lub2RlKHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvICppbmZvLCBzd3BfZW50cnlfdCBlbnRyeSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAl1bnNpZ25lZCBsb25nIGlkeDsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKQEAgLTg3NSw4ICs4NzUsMTAgQEAKIAlpZiAoc2l6ZSA+IFNITUVNX05SX0RJUkVDVCkKIAkJc2l6ZSA9IFNITUVNX05SX0RJUkVDVDsKIAlvZmZzZXQgPSBzaG1lbV9maW5kX3N3cChlbnRyeSwgcHRyLCBwdHIrc2l6ZSk7Ci0JaWYgKG9mZnNldCA+PSAwKQorCWlmIChvZmZzZXQgPj0gMCkgeworCQlzaG1lbV9zd3BfYmFsYW5jZV91bm1hcCgpOwogCQlnb3RvIGZvdW5kOworCX0KIAlpZiAoIWluZm8tPmlfaW5kaXJlY3QpCiAJCWdvdG8gbG9zdDI7CiAKQEAgLTkxNCwxMSArOTE2LDExIEBACiAJCQlpZiAoc2l6ZSA+IEVOVFJJRVNfUEVSX1BBR0UpCiAJCQkJc2l6ZSA9IEVOVFJJRVNfUEVSX1BBR0U7CiAJCQlvZmZzZXQgPSBzaG1lbV9maW5kX3N3cChlbnRyeSwgcHRyLCBwdHIrc2l6ZSk7Ci0JCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAkJCWlmIChvZmZzZXQgPj0gMCkgewogCQkJCXNobWVtX2Rpcl91bm1hcChkaXIpOwogCQkJCWdvdG8gZm91bmQ7CiAJCQl9CisJCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAkJfQogCX0KIGxvc3QxOgpAQCAtOTI4LDggKzkzMCw3IEBACiAJcmV0dXJuIDA7CiBmb3VuZDoKIAlpZHggKz0gb2Zmc2V0OwotCWlub2RlID0gaWdyYWIoJmluZm8tPnZmc19pbm9kZSk7Ci0Jc3Bpbl91bmxvY2soJmluZm8tPmxvY2spOworCXB0ciArPSBvZmZzZXQ7CiAKIAkvKgogCSAqIE1vdmUgX2hlYWRfIHRvIHN0YXJ0IHNlYXJjaCBmb3IgbmV4dCBmcm9tIGhlcmUuCkBAIC05NDAsMzcgKzk0MSwxOCBAQAogCSAqLwogCWlmIChzaG1lbV9zd2FwbGlzdC5uZXh0ICE9ICZpbmZvLT5zd2FwbGlzdCkKIAkJbGlzdF9tb3ZlX3RhaWwoJnNobWVtX3N3YXBsaXN0LCAmaW5mby0+c3dhcGxpc3QpOwotCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwogCi0JZXJyb3IgPSAxOwotCWlmICghaW5vZGUpCi0JCWdvdG8gb3V0OwogCS8qCi0JICogQ2hhcmdlIHBhZ2UgdXNpbmcgR0ZQX0tFUk5FTCB3aGlsZSB3ZSBjYW4gd2FpdC4KLQkgKiBDaGFyZ2VkIGJhY2sgdG8gdGhlIHVzZXIobm90IHRvIGNhbGxlcikgd2hlbiBzd2FwIGFjY291bnQgaXMgdXNlZC4KLQkgKiBhZGRfdG9fcGFnZV9jYWNoZSgpIHdpbGwgYmUgY2FsbGVkIHdpdGggR0ZQX05PV0FJVC4KKwkgKiBXZSByZWx5IG9uIHNobWVtX3N3YXBsaXN0X211dGV4LCBub3Qgb25seSB0byBwcm90ZWN0IHRoZSBzd2FwbGlzdCwKKwkgKiBidXQgYWxzbyB0byBob2xkIHVwIHNobWVtX2V2aWN0X2lub2RlKCk6IHNvIGlub2RlIGNhbm5vdCBiZSBmcmVlZAorCSAqIGJlbmVhdGggdXMgKHBhZ2Vsb2NrIGRvZXNuJ3QgaGVscCB1bnRpbCB0aGUgcGFnZSBpcyBpbiBwYWdlY2FjaGUpLgogCSAqLwotCWVycm9yID0gbWVtX2Nncm91cF9jYWNoZV9jaGFyZ2UocGFnZSwgY3VycmVudC0+bW0sIEdGUF9LRVJORUwpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0JZXJyb3IgPSByYWRpeF90cmVlX3ByZWxvYWQoR0ZQX0tFUk5FTCk7Ci0JaWYgKGVycm9yKSB7Ci0JCW1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZShwYWdlKTsKLQkJZ290byBvdXQ7Ci0JfQotCWVycm9yID0gMTsKLQotCXNwaW5fbG9jaygmaW5mby0+bG9jayk7Ci0JcHRyID0gc2htZW1fc3dwX2VudHJ5KGluZm8sIGlkeCwgTlVMTCk7Ci0JaWYgKHB0ciAmJiBwdHItPnZhbCA9PSBlbnRyeS52YWwpIHsKLQkJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQocGFnZSwgaW5vZGUtPmlfbWFwcGluZywKLQkJCQkJCWlkeCwgR0ZQX05PV0FJVCk7Ci0JCS8qIGRvZXMgbWVtX2Nncm91cF91bmNoYXJnZV9jYWNoZV9wYWdlIG9uIGVycm9yICovCi0JfSBlbHNlCS8qIHdlIG11c3QgY29tcGVuc2F0ZSBmb3Igb3VyIHByZWNoYXJnZSBhYm92ZSAqLwotCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CisJbWFwcGluZyA9IGluZm8tPnZmc19pbm9kZS5pX21hcHBpbmc7CisJZXJyb3IgPSBhZGRfdG9fcGFnZV9jYWNoZV9sb2NrZWQocGFnZSwgbWFwcGluZywgaWR4LCBHRlBfTk9XQUlUKTsKKwkvKiB3aGljaCBkb2VzIG1lbV9jZ3JvdXBfdW5jaGFyZ2VfY2FjaGVfcGFnZSBvbiBlcnJvciAqLwogCiAJaWYgKGVycm9yID09IC1FRVhJU1QpIHsKLQkJc3RydWN0IHBhZ2UgKmZpbGVwYWdlID0gZmluZF9nZXRfcGFnZShpbm9kZS0+aV9tYXBwaW5nLCBpZHgpOworCQlzdHJ1Y3QgcGFnZSAqZmlsZXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGlkeCk7CiAJCWVycm9yID0gMTsKIAkJaWYgKGZpbGVwYWdlKSB7CiAJCQkvKgpAQCAtOTkwLDE0ICs5NzIsOCBAQAogCQlzd2FwX2ZyZWUoZW50cnkpOwogCQllcnJvciA9IDE7CS8qIG5vdCBhbiBlcnJvciwgYnV0IGVudHJ5IHdhcyBmb3VuZCAqLwogCX0KLQlpZiAocHRyKQotCQlzaG1lbV9zd3BfdW5tYXAocHRyKTsKKwlzaG1lbV9zd3BfdW5tYXAocHRyKTsKIAlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JcmFkaXhfdHJlZV9wcmVsb2FkX2VuZCgpOwotb3V0OgotCXVubG9ja19wYWdlKHBhZ2UpOwotCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQlpcHV0KGlub2RlKTsJCS8qIGFsbG93cyBmb3IgTlVMTCAqLwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMTAwOSw2ICs5ODUsMjYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbmV4dDsKIAlzdHJ1Y3Qgc2htZW1faW5vZGVfaW5mbyAqaW5mbzsKIAlpbnQgZm91bmQgPSAwOworCWludCBlcnJvcjsKKworCS8qCisJICogQ2hhcmdlIHBhZ2UgdXNpbmcgR0ZQX0tFUk5FTCB3aGlsZSB3ZSBjYW4gd2FpdCwgYmVmb3JlIHRha2luZworCSAqIHRoZSBzaG1lbV9zd2FwbGlzdF9tdXRleCB3aGljaCBtaWdodCBob2xkIHVwIHNobWVtX3dyaXRlcGFnZSgpLgorCSAqIENoYXJnZWQgYmFjayB0byB0aGUgdXNlciAobm90IHRvIGNhbGxlcikgd2hlbiBzd2FwIGFjY291bnQgaXMgdXNlZC4KKwkgKiBhZGRfdG9fcGFnZV9jYWNoZSgpIHdpbGwgYmUgY2FsbGVkIHdpdGggR0ZQX05PV0FJVC4KKwkgKi8KKwllcnJvciA9IG1lbV9jZ3JvdXBfY2FjaGVfY2hhcmdlKHBhZ2UsIGN1cnJlbnQtPm1tLCBHRlBfS0VSTkVMKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCS8qCisJICogVHJ5IHRvIHByZWxvYWQgd2hpbGUgd2UgY2FuIHdhaXQsIHRvIG5vdCBtYWtlIGEgaGFiaXQgb2YKKwkgKiBkcmFpbmluZyBhdG9taWMgcmVzZXJ2ZXM7IGJ1dCBkb24ndCBsYXRjaCBvbiB0byB0aGlzIGNwdSwKKwkgKiBpdCdzIG9rYXkgaWYgc29tZXRpbWVzIHdlIGdldCByZXNjaGVkdWxlZCBhZnRlciB0aGlzLgorCSAqLworCWVycm9yID0gcmFkaXhfdHJlZV9wcmVsb2FkKEdGUF9LRVJORUwpOworCWlmIChlcnJvcikKKwkJZ290byB1bmNoYXJnZTsKKwlyYWRpeF90cmVlX3ByZWxvYWRfZW5kKCk7CiAKIAltdXRleF9sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG5leHQsICZzaG1lbV9zd2FwbGlzdCkgewpAQCAtMTAxNiwxNyArMTAxMiwxOSBAQAogCQlmb3VuZCA9IHNobWVtX3VudXNlX2lub2RlKGluZm8sIGVudHJ5LCBwYWdlKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJCWlmIChmb3VuZCkKLQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CiAJfQogCW11dGV4X3VubG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwotCS8qCi0JICogQ2FuIHNvbWUgcmFjZSBicmluZyB1cyBoZXJlPyAgV2UndmUgYmVlbiBob2xkaW5nIHBhZ2UgbG9jaywKLQkgKiBzbyBJIHRoaW5rIG5vdDsgYnV0IHdvdWxkIHJhdGhlciB0cnkgYWdhaW4gbGF0ZXIgdGhhbiBCVUcoKQotCSAqLworCit1bmNoYXJnZToKKwlpZiAoIWZvdW5kKQorCQltZW1fY2dyb3VwX3VuY2hhcmdlX2NhY2hlX3BhZ2UocGFnZSk7CisJaWYgKGZvdW5kIDwgMCkKKwkJZXJyb3IgPSBmb3VuZDsKK291dDoKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Ci1vdXQ6Ci0JcmV0dXJuIChmb3VuZCA8IDApID8gZm91bmQgOiAwOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoKQEAgLTEwNjQsNyArMTA2MiwyNSBAQAogCWVsc2UKIAkJc3dhcC52YWwgPSAwOwogCisJLyoKKwkgKiBBZGQgaW5vZGUgdG8gc2htZW1fdW51c2UoKSdzIGxpc3Qgb2Ygc3dhcHBlZC1vdXQgaW5vZGVzLAorCSAqIGlmIGl0J3Mgbm90IGFscmVhZHkgdGhlcmUuICBEbyBpdCBub3cgYmVjYXVzZSB3ZSBjYW5ub3QgdGFrZQorCSAqIG11dGV4IHdoaWxlIGhvbGRpbmcgc3BpbmxvY2ssIGFuZCBtdXN0IGRvIHNvIGJlZm9yZSB0aGUgcGFnZQorCSAqIGlzIG1vdmVkIHRvIHN3YXAgY2FjaGUsIHdoZW4gaXRzIHBhZ2Vsb2NrIG5vIGxvbmdlciBwcm90ZWN0cworCSAqIHRoZSBpbm9kZSBmcm9tIGV2aWN0aW9uLiAgQnV0IGRvbid0IHVubG9jayB0aGUgbXV0ZXggdW50aWwKKwkgKiB3ZSd2ZSB0YWtlbiB0aGUgc3BpbmxvY2ssIGJlY2F1c2Ugc2htZW1fdW51c2VfaW5vZGUoKSB3aWxsCisJICogcHJ1bmUgYSAhc3dhcHBlZCBpbm9kZSBmcm9tIHRoZSBzd2FwbGlzdCB1bmRlciBib3RoIGxvY2tzLgorCSAqLworCWlmIChzd2FwLnZhbCkgeworCQltdXRleF9sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CisJCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zd2FwbGlzdCkpCisJCQlsaXN0X2FkZF90YWlsKCZpbmZvLT5zd2FwbGlzdCwgJnNobWVtX3N3YXBsaXN0KTsKKwl9CisKIAlzcGluX2xvY2soJmluZm8tPmxvY2spOworCWlmIChzd2FwLnZhbCkKKwkJbXV0ZXhfdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7CisKIAlpZiAoaW5kZXggPj0gaW5mby0+bmV4dF9pbmRleCkgewogCQlCVUdfT04oIShpbmZvLT5mbGFncyAmIFNITUVNX1RSVU5DQVRFKSk7CiAJCWdvdG8gdW5sb2NrOwpAQCAtMTA4NCwyMSArMTEwMCwxMCBAQAogCQlkZWxldGVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwogCQlzaG1lbV9zd3Bfc2V0KGluZm8sIGVudHJ5LCBzd2FwLnZhbCk7CiAJCXNobWVtX3N3cF91bm1hcChlbnRyeSk7Ci0JCWlmIChsaXN0X2VtcHR5KCZpbmZvLT5zd2FwbGlzdCkpCi0JCQlpbm9kZSA9IGlncmFiKGlub2RlKTsKLQkJZWxzZQotCQkJaW5vZGUgPSBOVUxMOwogCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7CiAJCXN3YXBfc2htZW1fYWxsb2Moc3dhcCk7CiAJCUJVR19PTihwYWdlX21hcHBlZChwYWdlKSk7CiAJCXN3YXBfd3JpdGVwYWdlKHBhZ2UsIHdiYyk7Ci0JCWlmIChpbm9kZSkgewotCQkJbXV0ZXhfbG9jaygmc2htZW1fc3dhcGxpc3RfbXV0ZXgpOwotCQkJLyogbW92ZSBpbnN0ZWFkIG9mIGFkZCBpbiBjYXNlIHdlJ3JlIHJhY2luZyAqLwotCQkJbGlzdF9tb3ZlX3RhaWwoJmluZm8tPnN3YXBsaXN0LCAmc2htZW1fc3dhcGxpc3QpOwotCQkJbXV0ZXhfdW5sb2NrKCZzaG1lbV9zd2FwbGlzdF9tdXRleCk7Ci0JCQlpcHV0KGlub2RlKTsKLQkJfQogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE0MDAsMjAgKzE0MDUsMTQgQEAKIAkJaWYgKHNiaW5mby0+bWF4X2Jsb2NrcykgewogCQkJaWYgKHBlcmNwdV9jb3VudGVyX2NvbXBhcmUoJnNiaW5mby0+dXNlZF9ibG9ja3MsCiAJCQkJCQlzYmluZm8tPm1heF9ibG9ja3MpID49IDAgfHwKLQkJCSAgICBzaG1lbV9hY2N0X2Jsb2NrKGluZm8tPmZsYWdzKSkgewotCQkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKLQkJCQllcnJvciA9IC1FTk9TUEM7Ci0JCQkJZ290byBmYWlsZWQ7Ci0JCQl9CisJCQkgICAgc2htZW1fYWNjdF9ibG9jayhpbmZvLT5mbGFncykpCisJCQkJZ290byBub3NwYWNlOwogCQkJcGVyY3B1X2NvdW50ZXJfaW5jKCZzYmluZm8tPnVzZWRfYmxvY2tzKTsKIAkJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCQlpbm9kZS0+aV9ibG9ja3MgKz0gQkxPQ0tTX1BFUl9QQUdFOwogCQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQl9IGVsc2UgaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKSB7Ci0JCQlzcGluX3VubG9jaygmaW5mby0+bG9jayk7Ci0JCQllcnJvciA9IC1FTk9TUEM7Ci0JCQlnb3RvIGZhaWxlZDsKLQkJfQorCQl9IGVsc2UgaWYgKHNobWVtX2FjY3RfYmxvY2soaW5mby0+ZmxhZ3MpKQorCQkJZ290byBub3NwYWNlOwogCiAJCWlmICghZmlsZXBhZ2UpIHsKIAkJCWludCByZXQ7CkBAIC0xNDkzLDYgKzE0OTIsMjQgQEAKIAllcnJvciA9IDA7CiAJZ290byBvdXQ7CiAKK25vc3BhY2U6CisJLyoKKwkgKiBQZXJoYXBzIHRoZSBwYWdlIHdhcyBicm91Z2h0IGluIGZyb20gc3dhcCBiZXR3ZWVuIGZpbmRfbG9ja19wYWdlCisJICogYW5kIHRha2luZyBpbmZvLT5sb2NrPyAgV2UgYWxsb3cgZm9yIHRoYXQgYXQgYWRkX3RvX3BhZ2VfY2FjaGVfbHJ1LAorCSAqIGJ1dCBtdXN0IGFsc28gYXZvaWQgcmVwb3J0aW5nIGEgc3B1cmlvdXMgRU5PU1BDIHdoaWxlIHdvcmtpbmcgb24gYQorCSAqIGZ1bGwgdG1wZnMuICAoV2hlbiBmaWxlcGFnZSBoYXMgYmVlbiBwYXNzZWQgaW4gdG8gc2htZW1fZ2V0cGFnZSwgaXQKKwkgKiBpcyBhbHJlYWR5IGluIHBhZ2UgY2FjaGUsIHdoaWNoIHByZXZlbnRzIHRoaXMgcmFjZSBmcm9tIG9jY3VycmluZy4pCisJICovCisJaWYgKCFmaWxlcGFnZSkgeworCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaWR4KTsKKwkJaWYgKHBhZ2UpIHsKKwkJCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJCWdvdG8gcmVwZWF0OworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZpbmZvLT5sb2NrKTsKKwllcnJvciA9IC1FTk9TUEM7CiBmYWlsZWQ6CiAJaWYgKCpwYWdlcCAhPSBmaWxlcGFnZSkgewogCQl1bmxvY2tfcGFnZShmaWxlcGFnZSk7CmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggOTRkMmEzMy4uOWQyZTVlNCAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTk0MCw3ICsxOTQwLDcgQEAKIAkJICogU2luY2UgdGhpcyBpcyB3aXRob3V0IGxvY2sgc2VtYW50aWNzIHRoZSBwcm90ZWN0aW9uIGlzIG9ubHkgYWdhaW5zdAogCQkgKiBjb2RlIGV4ZWN1dGluZyBvbiB0aGlzIGNwdSAqbm90KiBmcm9tIGFjY2VzcyBieSBvdGhlciBjcHVzLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KCF0aGlzX2NwdV9jbXB4Y2hnX2RvdWJsZSgKKwkJaWYgKHVubGlrZWx5KCFpcnFzYWZlX2NwdV9jbXB4Y2hnX2RvdWJsZSgKIAkJCQlzLT5jcHVfc2xhYi0+ZnJlZWxpc3QsIHMtPmNwdV9zbGFiLT50aWQsCiAJCQkJb2JqZWN0LCB0aWQsCiAJCQkJZ2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCksIG5leHRfdGlkKHRpZCkpKSkgewpAQCAtMjE0NSw3ICsyMTQ1LDcgQEAKIAkJc2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCwgYy0+ZnJlZWxpc3QpOwogCiAjaWZkZWYgQ09ORklHX0NNUFhDSEdfTE9DQUwKLQkJaWYgKHVubGlrZWx5KCF0aGlzX2NwdV9jbXB4Y2hnX2RvdWJsZSgKKwkJaWYgKHVubGlrZWx5KCFpcnFzYWZlX2NwdV9jbXB4Y2hnX2RvdWJsZSgKIAkJCQlzLT5jcHVfc2xhYi0+ZnJlZWxpc3QsIHMtPmNwdV9zbGFiLT50aWQsCiAJCQkJYy0+ZnJlZWxpc3QsIHRpZCwKIAkJCQlvYmplY3QsIG5leHRfdGlkKHRpZCkpKSkgewpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IGE0NDhkYjMuLjU2MDJmMWEgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTM5Niw2ICszOTYsOSBAQAogCWlmICghUGFnZUxSVShwYWdlKSkKIAkJcmV0dXJuOwogCisJaWYgKFBhZ2VVbmV2aWN0YWJsZShwYWdlKSkKKwkJcmV0dXJuOworCiAJLyogU29tZSBwcm9jZXNzZXMgYXJlIHVzaW5nIHRoZSBwYWdlICovCiAJaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGY2YjQzNWMuLjhiZmQ0NTAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC05MzcsNyArOTM3LDcgQEAKIAkgKiBiYWNrIG9mZiBhbmQgd2FpdCBmb3IgY29uZ2VzdGlvbiB0byBjbGVhciBiZWNhdXNlIGZ1cnRoZXIgcmVjbGFpbQogCSAqIHdpbGwgZW5jb3VudGVyIHRoZSBzYW1lIHByb2JsZW0KIAkgKi8KLQlpZiAobnJfZGlydHkgPT0gbnJfY29uZ2VzdGVkICYmIG5yX2RpcnR5ICE9IDApCisJaWYgKG5yX2RpcnR5ICYmIG5yX2RpcnR5ID09IG5yX2Nvbmdlc3RlZCAmJiBzY2FubmluZ19nbG9iYWxfbHJ1KHNjKSkKIAkJem9uZV9zZXRfZmxhZyh6b25lLCBaT05FX0NPTkdFU1RFRCk7CiAKIAlmcmVlX3BhZ2VfbGlzdCgmZnJlZV9wYWdlcyk7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5jIGIvbmV0LzgwMjFxL3ZsYW4uYwppbmRleCA3ODUwNDEyLi4wZWIxYTg4IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5jCisrKyBiL25ldC84MDIxcS92bGFuLmMKQEAgLTEyNCw2ICsxMjQsOSBAQAogCiAJZ3JwLT5ucl92bGFucy0tOwogCisJaWYgKHZsYW4tPmZsYWdzICYgVkxBTl9GTEFHX0dWUlApCisJCXZsYW5fZ3ZycF9yZXF1ZXN0X2xlYXZlKGRldik7CisKIAl2bGFuX2dyb3VwX3NldF9kZXZpY2UoZ3JwLCB2bGFuX2lkLCBOVUxMKTsKIAlpZiAoIWdycC0+a2lsbGFsbCkKIAkJc3luY2hyb25pemVfbmV0KCk7CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IGUzNGVhOWUuLmIyZmY2YzggMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC00ODcsOSArNDg3LDYgQEAKIAlzdHJ1Y3Qgdmxhbl9kZXZfaW5mbyAqdmxhbiA9IHZsYW5fZGV2X2luZm8oZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqcmVhbF9kZXYgPSB2bGFuLT5yZWFsX2RldjsKIAotCWlmICh2bGFuLT5mbGFncyAmIFZMQU5fRkxBR19HVlJQKQotCQl2bGFuX2d2cnBfcmVxdWVzdF9sZWF2ZShkZXYpOwotCiAJZGV2X21jX3Vuc3luYyhyZWFsX2RldiwgZGV2KTsKIAlkZXZfdWNfdW5zeW5jKHJlYWxfZGV2LCBkZXYpOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQpkaWZmIC0tZ2l0IGEvbmV0LzlwL2NsaWVudC5jIGIvbmV0LzlwL2NsaWVudC5jCmluZGV4IDc3MzY3NzQuLmE5YWEyZGQgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTYxNCw3ICs2MTQsNyBAQAogCiAJZXJyID0gYy0+dHJhbnNfbW9kLT5yZXF1ZXN0KGMsIHJlcSk7CiAJaWYgKGVyciA8IDApIHsKLQkJaWYgKGVyciAhPSAtRVJFU1RBUlRTWVMpCisJCWlmIChlcnIgIT0gLUVSRVNUQVJUU1lTICYmIGVyciAhPSAtRUZBVUxUKQogCQkJYy0+c3RhdHVzID0gRGlzY29ubmVjdGVkOwogCQlnb3RvIHJldGVycjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvOXAvcHJvdG9jb2wuYyBiL25ldC85cC9wcm90b2NvbC5jCmluZGV4IGI1OGE1MDEuLmE4NzMyNzcgMTAwNjQ0Ci0tLSBhL25ldC85cC9wcm90b2NvbC5jCisrKyBiL25ldC85cC9wcm90b2NvbC5jCkBAIC02NzQsNiArNjc0LDcgQEAKIAl9CiAKIAlzdHJjcHkoZGlyZW50LT5kX25hbWUsIG5hbWVwdHIpOworCWtmcmVlKG5hbWVwdHIpOwogCiBvdXQ6CiAJcmV0dXJuIGZha2VfcGR1Lm9mZnNldDsKZGlmZiAtLWdpdCBhL25ldC85cC90cmFuc19jb21tb24uYyBiL25ldC85cC90cmFuc19jb21tb24uYwppbmRleCBlODgzMTcyLi45YTcwZWJkIDEwMDY0NAotLS0gYS9uZXQvOXAvdHJhbnNfY29tbW9uLmMKKysrIGIvbmV0LzlwL3RyYW5zX2NvbW1vbi5jCkBAIC02Myw3ICs2Myw3IEBACiAJCWludCBucl9wYWdlcywgdTggcncpCiB7CiAJdWludDMyX3QgZmlyc3RfcGFnZV9ieXRlcyA9IDA7Ci0JdWludDMyX3QgcGRhdGFfbWFwcGVkX3BhZ2VzOworCWludDMyX3QgcGRhdGFfbWFwcGVkX3BhZ2VzOwogCXN0cnVjdCB0cmFuc19ycGFnZV9pbmZvICAqcnBpbmZvOwogCiAJKnBkYXRhX29mZiA9IChfX2ZvcmNlIHNpemVfdClyZXEtPnRjLT5wdWJ1ZiAmIChQQUdFX1NJWkUtMSk7CkBAIC03NSwxNCArNzUsOSBAQAogCXJwaW5mbyA9IHJlcS0+dGMtPnByaXZhdGU7CiAJcGRhdGFfbWFwcGVkX3BhZ2VzID0gZ2V0X3VzZXJfcGFnZXNfZmFzdCgodW5zaWduZWQgbG9uZylyZXEtPnRjLT5wdWJ1ZiwKIAkJCW5yX3BhZ2VzLCBydywgJnJwaW5mby0+cnBfZGF0YVswXSk7CisJaWYgKHBkYXRhX21hcHBlZF9wYWdlcyA8PSAwKQorCQlyZXR1cm4gcGRhdGFfbWFwcGVkX3BhZ2VzOwogCi0JaWYgKHBkYXRhX21hcHBlZF9wYWdlcyA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJnZXRfdXNlcl9wYWdlc19mYXN0IGZhaWxlZDolZCB1ZGF0YTolcCIKLQkJCQkibnJfcGFnZXM6JWRcbiIsIHBkYXRhX21hcHBlZF9wYWdlcywKLQkJCQlyZXEtPnRjLT5wdWJ1ZiwgbnJfcGFnZXMpOwotCQlwZGF0YV9tYXBwZWRfcGFnZXMgPSAwOwotCQlyZXR1cm4gLUVJTzsKLQl9CiAJcnBpbmZvLT5ycF9ucl9wYWdlcyA9IHBkYXRhX21hcHBlZF9wYWdlczsKIAlpZiAoKnBkYXRhX29mZikgewogCQkqcGRhdGFfbGVuID0gZmlyc3RfcGFnZV9ieXRlczsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCBjODNmNjE4Li5iNWE4YWZjIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC01ODcsMTAgKzU4Nyw4IEBACiAJaGNpX3JlcV9jYW5jZWwoaGRldiwgRU5PREVWKTsKIAloY2lfcmVxX2xvY2soaGRldik7CiAKLQkvKiBTdG9wIHRpbWVyLCBpdCBtaWdodCBiZSBydW5uaW5nICovCi0JZGVsX3RpbWVyX3N5bmMoJmhkZXYtPmNtZF90aW1lcik7Ci0KIAlpZiAoIXRlc3RfYW5kX2NsZWFyX2JpdChIQ0lfVVAsICZoZGV2LT5mbGFncykpIHsKKwkJZGVsX3RpbWVyX3N5bmMoJmhkZXYtPmNtZF90aW1lcik7CiAJCWhjaV9yZXFfdW5sb2NrKGhkZXYpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC02MjksNiArNjI3LDcgQEAKIAogCS8qIERyb3AgbGFzdCBzZW50IGNvbW1hbmQgKi8KIAlpZiAoaGRldi0+c2VudF9jbWQpIHsKKwkJZGVsX3RpbWVyX3N5bmMoJmhkZXYtPmNtZF90aW1lcik7CiAJCWtmcmVlX3NrYihoZGV2LT5zZW50X2NtZCk7CiAJCWhkZXYtPnNlbnRfY21kID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCBjZWJlNzU4OC4uYjI1NzAxNSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCkBAIC0yMzg3LDggKzIzODcsNiBAQAogCWlmICghY29ubikKIAkJZ290byB1bmxvY2s7CiAKLQloY2lfY29ubl9ob2xkKGNvbm4pOwotCiAJY29ubi0+cmVtb3RlX2NhcCA9IGV2LT5jYXBhYmlsaXR5OwogCWNvbm4tPnJlbW90ZV9vb2IgPSBldi0+b29iX2RhdGE7CiAJY29ubi0+cmVtb3RlX2F1dGggPSBldi0+YXV0aGVudGljYXRpb247CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2wyY2FwX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCmluZGV4IGNhMjdmM2EuLjJjOGRkNDQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvbDJjYXBfY29yZS5jCkBAIC0xMDUxLDYgKzEwNTEsNyBAQAogCXR4X3NrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCWJ0X2NiKHNrYiktPnJldHJpZXMrKzsKIAljb250cm9sID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR4X3NrYi0+ZGF0YSArIEwyQ0FQX0hEUl9TSVpFKTsKKwljb250cm9sICY9IEwyQ0FQX0NUUkxfU0FSOwogCiAJaWYgKHBpLT5jb25uX3N0YXRlICYgTDJDQVBfQ09OTl9TRU5EX0ZCSVQpIHsKIAkJY29udHJvbCB8PSBMMkNBUF9DVFJMX0ZJTkFMOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IGUyMTYwNzkuLjBjN2JhZGEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYworKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCQkJZ290byBkcm9wOwogCiAJCS8qIElmIFNUUCBpcyB0dXJuZWQgb2ZmLCB0aGVuIGZvcndhcmQgKi8KLQkJaWYgKHAtPmJyLT5zdHBfZW5hYmxlZCA9PSBCUl9OT19TVFApCisJCWlmIChwLT5ici0+c3RwX2VuYWJsZWQgPT0gQlJfTk9fU1RQICYmIGRlc3RbNV0gPT0gMCkKIAkJCWdvdG8gZm9yd2FyZDsKIAogCQlpZiAoTkZfSE9PSyhORlBST1RPX0JSSURHRSwgTkZfQlJfTE9DQUxfSU4sIHNrYiwgc2tiLT5kZXYsCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jIGIvbmV0L2JyaWRnZS9icl9uZXRmaWx0ZXIuYwppbmRleCAwMDhmZjZjLi43NGVmNGQ0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX25ldGZpbHRlci5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0ZmlsdGVyLmMKQEAgLTI0OSwxMSArMjQ5LDkgQEAKIAkJZ290byBkcm9wOwogCX0KIAotCS8qIFplcm8gb3V0IHRoZSBDQiBidWZmZXIgaWYgbm8gb3B0aW9ucyBwcmVzZW50ICovCi0JaWYgKGlwaC0+aWhsID09IDUpIHsKLQkJbWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7CisJbWVtc2V0KElQQ0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBpbmV0X3NrYl9wYXJtKSk7CisJaWYgKGlwaC0+aWhsID09IDUpCiAJCXJldHVybiAwOwotCX0KIAogCW9wdC0+b3B0bGVuID0gaXBoLT5paGwqNCAtIHNpemVvZihzdHJ1Y3QgaXBoZHIpOwogCWlmIChpcF9vcHRpb25zX2NvbXBpbGUoZGV2X25ldChkZXYpLCBvcHQsIHNrYikpCkBAIC03MzksNyArNzM3LDcgQEAKIAkJbmZfYnJpZGdlLT5tYXNrIHw9IEJSTkZfUEtUX1RZUEU7CiAJfQogCi0JaWYgKGJyX3BhcnNlX2lwX29wdGlvbnMoc2tiKSkKKwlpZiAocGYgPT0gUEZfSU5FVCAmJiBicl9wYXJzZV9pcF9vcHRpb25zKHNrYikpCiAJCXJldHVybiBORl9EUk9QOwogCiAJLyogVGhlIHBoeXNkZXYgbW9kdWxlIGNoZWNrcyBvbiB0aGlzICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYwppbmRleCA4OTM2NjljLi4xYTkyYjM2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKQEAgLTE3NjYsNyArMTc2Niw3IEBACiAKIAluZXdpbmZvLT5lbnRyaWVzX3NpemUgPSBzaXplOwogCi0JeHRfY29tcGF0X2luaXRfb2Zmc2V0cyhBRl9JTkVULCBpbmZvLT5uZW50cmllcyk7CisJeHRfY29tcGF0X2luaXRfb2Zmc2V0cyhORlBST1RPX0JSSURHRSwgaW5mby0+bmVudHJpZXMpOwogCXJldHVybiBFQlRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBjb21wYXRfY2FsY19lbnRyeSwgaW5mbywKIAkJCQkJCQllbnRyaWVzLCBuZXdpbmZvKTsKIH0KQEAgLTE4ODIsNyArMTg4Miw3IEBACiAJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIAlzdHJ1Y3QgeHRfdGFyZ2V0ICp3dDsKIAl2b2lkICpkc3QgPSBOVUxMOwotCWludCBvZmYsIHBhZCA9IDAsIHJldCA9IDA7CisJaW50IG9mZiwgcGFkID0gMDsKIAl1bnNpZ25lZCBpbnQgc2l6ZV9rZXJuLCBlbnRyeV9vZmZzZXQsIG1hdGNoX3NpemUgPSBtd3QtPm1hdGNoX3NpemU7CiAKIAlzdHJsY3B5KG5hbWUsIG13dC0+dS5uYW1lLCBzaXplb2YobmFtZSkpOwpAQCAtMTkzNSwxMyArMTkzNSw2IEBACiAJCWJyZWFrOwogCX0KIAotCWlmICghZHN0KSB7Ci0JCXJldCA9IHh0X2NvbXBhdF9hZGRfb2Zmc2V0KE5GUFJPVE9fQlJJREdFLCBlbnRyeV9vZmZzZXQsCi0JCQkJCW9mZiArIGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSgpKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCX0KLQogCXN0YXRlLT5idWZfa2Vybl9vZmZzZXQgKz0gbWF0Y2hfc2l6ZSArIG9mZjsKIAlzdGF0ZS0+YnVmX3VzZXJfb2Zmc2V0ICs9IG1hdGNoX3NpemU7CiAJcGFkID0gWFRfQUxJR04oc2l6ZV9rZXJuKSAtIHNpemVfa2VybjsKQEAgLTIwMTYsNTAgKzIwMDksNiBAQAogCXJldHVybiBncm93dGg7CiB9CiAKLSNkZWZpbmUgRUJUX0NPTVBBVF9XQVRDSEVSX0lURVJBVEUoZSwgZm4sIGFyZ3MuLi4pICAgICAgICAgIFwKLSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl1bnNpZ25lZCBpbnQgX19pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWludCBfX3JldCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0Jc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0ICpfX3dhdGNoZXI7ICAgICAgICAgICAgIFwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWZvciAoX19pID0gZS0+d2F0Y2hlcnNfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICBcCi0JICAgICBfX2kgPCAoZSktPnRhcmdldF9vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIF9faSArPSBfX3dhdGNoZXItPndhdGNoZXJfc2l6ZSArICAgICAgICAgICAgICAgXAotCSAgICAgc2l6ZW9mKHN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCkpIHsgICAgICAgICBcCi0JCV9fd2F0Y2hlciA9ICh2b2lkICopKGUpICsgX19pOyAgICAgICAgICAgICAgXAotCQlfX3JldCA9IGZuKF9fd2F0Y2hlciAsICMjIGFyZ3MpOyAgICAgICAgICAgIFwKLQkJaWYgKF9fcmV0ICE9IDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpZiAoX19yZXQgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAoX19pICE9IChlKS0+dGFyZ2V0X29mZnNldCkgICAgICAgICAgICAgIFwKLQkJCV9fcmV0ID0gLUVJTlZBTDsgICAgICAgICAgICAgICAgICAgIFwKLQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCV9fcmV0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19KQotCi0jZGVmaW5lIEVCVF9DT01QQVRfTUFUQ0hfSVRFUkFURShlLCBmbiwgYXJncy4uLikgICAgICAgICAgICBcCi0oeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JdW5zaWduZWQgaW50IF9faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlpbnQgX19yZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCAqX19tYXRjaDsgICAgICAgICAgICAgICBcCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlmb3IgKF9faSA9IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJ5KTsgICAgICAgICAgICAgICAgXAotCSAgICAgX19pIDwgKGUpLT53YXRjaGVyc19vZmZzZXQ7ICAgICAgICAgICAgICAgICAgICBcCi0JICAgICBfX2kgKz0gX19tYXRjaC0+bWF0Y2hfc2l6ZSArICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIHNpemVvZihzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QpKSB7ICAgICAgICAgXAotCQlfX21hdGNoID0gKHZvaWQgKikoZSkgKyBfX2k7ICAgICAgICAgICAgICAgIFwKLQkJX19yZXQgPSBmbihfX21hdGNoICwgIyMgYXJncyk7ICAgICAgICAgICAgICBcCi0JCWlmIChfX3JldCAhPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JaWYgKF9fcmV0ID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJaWYgKF9faSAhPSAoZSktPndhdGNoZXJzX29mZnNldCkgICAgICAgICAgICBcCi0JCQlfX3JldCA9IC1FSU5WQUw7ICAgICAgICAgICAgICAgICAgICBcCi0JfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSkKLQogLyogY2FsbGVkIGZvciBhbGwgZWJ0X2VudHJ5IHN0cnVjdHVyZXMuICovCiBzdGF0aWMgaW50IHNpemVfZW50cnlfbXd0KHN0cnVjdCBlYnRfZW50cnkgKmVudHJ5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAogCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFsLApAQCAtMjEzMiw2ICsyMDgxLDE0IEBACiAJCX0KIAl9CiAKKwlpZiAoc3RhdGUtPmJ1Zl9rZXJuX3N0YXJ0ID09IE5VTEwpIHsKKwkJdW5zaWduZWQgaW50IG9mZnNldCA9IGJ1Zl9zdGFydCAtIChjaGFyICopIGJhc2U7CisKKwkJcmV0ID0geHRfY29tcGF0X2FkZF9vZmZzZXQoTkZQUk9UT19CUklER0UsIG9mZnNldCwgbmV3X29mZnNldCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKIAlzdGFydG9mZiA9IHN0YXRlLT5idWZfdXNlcl9vZmZzZXQgLSBzdGFydG9mZjsKIAogCUJVR19PTigqdG90YWwgPCBzdGFydG9mZik7CkBAIC0yMjQwLDYgKzIxOTcsNyBAQAogCiAJeHRfY29tcGF0X2xvY2soTkZQUk9UT19CUklER0UpOwogCisJeHRfY29tcGF0X2luaXRfb2Zmc2V0cyhORlBST1RPX0JSSURHRSwgdG1wLm5lbnRyaWVzKTsKIAlyZXQgPSBjb21wYXRfY29weV9lbnRyaWVzKGVudHJpZXNfdG1wLCB0bXAuZW50cmllc19zaXplLCAmc3RhdGUpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dF91bmxvY2s7CmRpZmYgLS1naXQgYS9uZXQvY2FpZi9jZmRnbWwuYyBiL25ldC9jYWlmL2NmZGdtbC5jCmluZGV4IDI3ZGFiMjYuLjA1NGZkYjUgMTAwNjQ0Ci0tLSBhL25ldC9jYWlmL2NmZGdtbC5jCisrKyBiL25ldC9jYWlmL2NmZGdtbC5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bmV0L2NhaWYvY2ZzcnZsLmg+CiAjaW5jbHVkZSA8bmV0L2NhaWYvY2Zwa3QuaD4KIAorCiAjZGVmaW5lIGNvbnRhaW5lcl9vYmoobGF5cikgKChzdHJ1Y3QgY2ZzcnZsICopIGxheXIpCiAKICNkZWZpbmUgREdNX0NNRF9CSVQgIDB4ODAKQEAgLTgzLDYgKzg0LDcgQEAKIAogc3RhdGljIGludCBjZmRnbWxfdHJhbnNtaXQoc3RydWN0IGNmbGF5ZXIgKmxheXIsIHN0cnVjdCBjZnBrdCAqcGt0KQogeworCXU4IHBhY2tldF90eXBlOwogCXUzMiB6ZXJvID0gMDsKIAlzdHJ1Y3QgY2FpZl9wYXlsb2FkX2luZm8gKmluZm87CiAJc3RydWN0IGNmc3J2bCAqc2VydmljZSA9IGNvbnRhaW5lcl9vYmoobGF5cik7CkBAIC05NCw3ICs5Niw5IEBACiAJaWYgKGNmcGt0X2dldGxlbihwa3QpID4gREdNX01UVSkKIAkJcmV0dXJuIC1FTVNHU0laRTsKIAotCWNmcGt0X2FkZF9oZWFkKHBrdCwgJnplcm8sIDQpOworCWNmcGt0X2FkZF9oZWFkKHBrdCwgJnplcm8sIDMpOworCXBhY2tldF90eXBlID0gMHgwODsgLyogQjkgc2V0IC0gVU5DTEFTU0lGSUVEICovCisJY2Zwa3RfYWRkX2hlYWQocGt0LCAmcGFja2V0X3R5cGUsIDEpOwogCiAJLyogQWRkIGluZm8gZm9yIE1VWC1sYXllciB0byByb3V0ZSB0aGUgcGFja2V0IG91dC4gKi8KIAlpbmZvID0gY2Zwa3RfaW5mbyhwa3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2NhaWYvY2ZtdXhsLmMgYi9uZXQvY2FpZi9jZm11eGwuYwppbmRleCA0NmYzNGIyLi4yNGYxZmZhIDEwMDY0NAotLS0gYS9uZXQvY2FpZi9jZm11eGwuYworKysgYi9uZXQvY2FpZi9jZm11eGwuYwpAQCAtMjQ0LDkgKzI0NCw5IEBACiAJCQkJaW50IHBoeWlkKQogewogCXN0cnVjdCBjZm11eGwgKm11eGwgPSBjb250YWluZXJfb2JqKGxheXIpOwotCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CisJc3RydWN0IGxpc3RfaGVhZCAqbm9kZSwgKm5leHQ7CiAJc3RydWN0IGNmbGF5ZXIgKmxheWVyOwotCWxpc3RfZm9yX2VhY2gobm9kZSwgJm11eGwtPnNydmxfbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfc2FmZShub2RlLCBuZXh0LCAmbXV4bC0+c3J2bF9saXN0KSB7CiAJCWxheWVyID0gbGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgY2ZsYXllciwgbm9kZSk7CiAJCWlmIChjZnNydmxfcGh5aWRfbWF0Y2gobGF5ZXIsIHBoeWlkKSkKIAkJCWxheWVyLT5jdHJsY21kKGxheWVyLCBjdHJsLCBwaHlpZCk7CmRpZmYgLS1naXQgYS9uZXQvY2FuL2JjbS5jIGIvbmV0L2Nhbi9iY20uYwppbmRleCA1N2IxYWVkLi44YTZhMDVlIDEwMDY0NAotLS0gYS9uZXQvY2FuL2JjbS5jCisrKyBiL25ldC9jYW4vYmNtLmMKQEAgLTE0MjcsOSArMTQyNywxNCBAQAogc3RhdGljIGludCBiY21fcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwotCXN0cnVjdCBiY21fc29jayAqYm8gPSBiY21fc2soc2spOworCXN0cnVjdCBiY21fc29jayAqYm87CiAJc3RydWN0IGJjbV9vcCAqb3AsICpuZXh0OwogCisJaWYgKHNrID09IE5VTEwpCisJCXJldHVybiAwOworCisJYm8gPSBiY21fc2soc2spOworCiAJLyogcmVtb3ZlIGJjbV9vcHMsIHRpbWVyLCByeF91bnJlZ2lzdGVyKCksIGV0Yy4gKi8KIAogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZiby0+bm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9yYXcuYyBiL25ldC9jYW4vcmF3LmMKaW5kZXggNjQ5YWNmYS4uMGViMzlhNyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9yYXcuYworKysgYi9uZXQvY2FuL3Jhdy5jCkBAIC0zMDUsNyArMzA1LDEyIEBACiBzdGF0aWMgaW50IHJhd19yZWxlYXNlKHN0cnVjdCBzb2NrZXQgKnNvY2spCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IHJhd19zb2NrICpybyA9IHJhd19zayhzayk7CisJc3RydWN0IHJhd19zb2NrICpybzsKKworCWlmICghc2spCisJCXJldHVybiAwOworCisJcm8gPSByYXdfc2soc2spOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnJvLT5ub3RpZmllcik7CiAKZGlmZiAtLWdpdCBhL25ldC9jZXBoL21lc3Nlbmdlci5jIGIvbmV0L2NlcGgvbWVzc2VuZ2VyLmMKaW5kZXggMDVmMzU3OC4uZTE1YTgyYyAxMDA2NDQKLS0tIGEvbmV0L2NlcGgvbWVzc2VuZ2VyLmMKKysrIGIvbmV0L2NlcGgvbWVzc2VuZ2VyLmMKQEAgLTIyNjcsNiArMjI2NywxOSBAQAogCW0tPm1vcmVfdG9fZm9sbG93ID0gZmFsc2U7CiAJbS0+cG9vbCA9IE5VTEw7CiAKKwkvKiBtaWRkbGUgKi8KKwltLT5taWRkbGUgPSBOVUxMOworCisJLyogZGF0YSAqLworCW0tPm5yX3BhZ2VzID0gMDsKKwltLT5wYWdlX2FsaWdubWVudCA9IDA7CisJbS0+cGFnZXMgPSBOVUxMOworCW0tPnBhZ2VsaXN0ID0gTlVMTDsKKwltLT5iaW8gPSBOVUxMOworCW0tPmJpb19pdGVyID0gTlVMTDsKKwltLT5iaW9fc2VnID0gMDsKKwltLT50cmFpbCA9IE5VTEw7CisKIAkvKiBmcm9udCAqLwogCWlmIChmcm9udF9sZW4pIHsKIAkJaWYgKGZyb250X2xlbiA+IFBBR0VfQ0FDSEVfU0laRSkgewpAQCAtMjI4NiwxOSArMjI5OSw2IEBACiAJfQogCW0tPmZyb250Lmlvdl9sZW4gPSBmcm9udF9sZW47CiAKLQkvKiBtaWRkbGUgKi8KLQltLT5taWRkbGUgPSBOVUxMOwotCi0JLyogZGF0YSAqLwotCW0tPm5yX3BhZ2VzID0gMDsKLQltLT5wYWdlX2FsaWdubWVudCA9IDA7Ci0JbS0+cGFnZXMgPSBOVUxMOwotCW0tPnBhZ2VsaXN0ID0gTlVMTDsKLQltLT5iaW8gPSBOVUxMOwotCW0tPmJpb19pdGVyID0gTlVMTDsKLQltLT5iaW9fc2VnID0gMDsKLQltLT50cmFpbCA9IE5VTEw7Ci0KIAlkb3V0KCJjZXBoX21zZ19uZXcgJXAgZnJvbnQgJWRcbiIsIG0sIGZyb250X2xlbik7CiAJcmV0dXJuIG07CiAKZGlmZiAtLWdpdCBhL25ldC9jZXBoL29zZF9jbGllbnQuYyBiL25ldC9jZXBoL29zZF9jbGllbnQuYwppbmRleCA1YTgwZjQxLi42YjVkZGExIDEwMDY0NAotLS0gYS9uZXQvY2VwaC9vc2RfY2xpZW50LmMKKysrIGIvbmV0L2NlcGgvb3NkX2NsaWVudC5jCkBAIC00NzAsOCArNDcwLDggQEAKIAkJCQkJIHNuYXBjLCBvcHMsCiAJCQkJCSB1c2VfbWVtcG9vbCwKIAkJCQkJIEdGUF9OT0ZTLCBOVUxMLCBOVUxMKTsKLQlpZiAoSVNfRVJSKHJlcSkpCi0JCXJldHVybiByZXE7CisJaWYgKCFyZXEpCisJCXJldHVybiBOVUxMOwogCiAJLyogY2FsY3VsYXRlIG1heCB3cml0ZSBzaXplICovCiAJY2FsY19sYXlvdXQob3NkYywgdmlubywgbGF5b3V0LCBvZmYsIHBsZW4sIHJlcSwgb3BzKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggOTU2ZDNiMC4uYjYyNGZlNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTEyODQsMTEgKzEyODQsMTMgQEAKICAqLwogaW50IGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCUxJU1RfSEVBRChzaW5nbGUpOworCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CisJCUxJU1RfSEVBRChzaW5nbGUpOwogCi0JbGlzdF9hZGQoJmRldi0+dW5yZWdfbGlzdCwgJnNpbmdsZSk7Ci0JZGV2X2Nsb3NlX21hbnkoJnNpbmdsZSk7Ci0JbGlzdF9kZWwoJnNpbmdsZSk7CisJCWxpc3RfYWRkKCZkZXYtPnVucmVnX2xpc3QsICZzaW5nbGUpOworCQlkZXZfY2xvc2VfbWFueSgmc2luZ2xlKTsKKwkJbGlzdF9kZWwoJnNpbmdsZSk7CisJfQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChkZXZfY2xvc2UpOwpAQCAtNDc3Myw3ICs0Nzc1LDcgQEAKIAkJICogaXMgbmV2ZXIgcmVhY2hlZAogCQkgKi8KIAkJV0FSTl9PTigxKTsKLQkJZXJyID0gLUVJTlZBTDsKKwkJZXJyID0gLUVOT1RUWTsKIAkJYnJlYWs7CiAKIAl9CkBAIC01MDQxLDcgKzUwNDMsNyBAQAogCQkvKiBTZXQgdGhlIHBlciBkZXZpY2UgbWVtb3J5IGJ1ZmZlciBzcGFjZS4KIAkJICogTm90IGFwcGxpY2FibGUgaW4gb3VyIGNhc2UgKi8KIAljYXNlIFNJT0NTSUZMSU5LOgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTk9UVFk7CiAKIAkvKgogCSAqCVVua25vd24gb3IgcHJpdmF0ZSBpb2N0bC4KQEAgLTUwNjIsNyArNTA2NCw3IEBACiAJCS8qIFRha2UgY2FyZSBvZiBXaXJlbGVzcyBFeHRlbnNpb25zICovCiAJCWlmIChjbWQgPj0gU0lPQ0lXRklSU1QgJiYgY21kIDw9IFNJT0NJV0xBU1QpCiAJCQlyZXR1cm4gd2V4dF9oYW5kbGVfaW9jdGwobmV0LCAmaWZyLCBjbWQsIGFyZyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gLUVOT1RUWTsKIAl9CiB9CiAKQEAgLTUxODQsMzMgKzUxODYsMzcgQEAKIAkvKiBGaXggaWxsZWdhbCBjaGVja3N1bSBjb21iaW5hdGlvbnMgKi8KIAlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9IV19DU1VNKSAmJgogCSAgICAoZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfSVBWNl9DU1VNKSkpIHsKLQkJbmV0ZGV2X2luZm8oZGV2LCAibWl4ZWQgSFcgYW5kIElQIGNoZWNrc3VtIHNldHRpbmdzLlxuIik7CisJCW5ldGRldl93YXJuKGRldiwgIm1peGVkIEhXIGFuZCBJUCBjaGVja3N1bSBzZXR0aW5ncy5cbiIpOwogCQlmZWF0dXJlcyAmPSB+KE5FVElGX0ZfSVBfQ1NVTXxORVRJRl9GX0lQVjZfQ1NVTSk7CiAJfQogCiAJaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfTk9fQ1NVTSkgJiYKIAkgICAgKGZlYXR1cmVzICYgKE5FVElGX0ZfSFdfQ1NVTXxORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU0pKSkgewotCQluZXRkZXZfaW5mbyhkZXYsICJtaXhlZCBubyBjaGVja3N1bW1pbmcgYW5kIG90aGVyIHNldHRpbmdzLlxuIik7CisJCW5ldGRldl93YXJuKGRldiwgIm1peGVkIG5vIGNoZWNrc3VtbWluZyBhbmQgb3RoZXIgc2V0dGluZ3MuXG4iKTsKIAkJZmVhdHVyZXMgJj0gfihORVRJRl9GX0lQX0NTVU18TkVUSUZfRl9JUFY2X0NTVU18TkVUSUZfRl9IV19DU1VNKTsKIAl9CiAKIAkvKiBGaXggaWxsZWdhbCBTRytDU1VNIGNvbWJpbmF0aW9ucy4gKi8KIAlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9TRykgJiYKIAkgICAgIShmZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pKSB7Ci0JCW5ldGRldl9pbmZvKGRldiwKLQkJCSAgICAiRHJvcHBpbmcgTkVUSUZfRl9TRyBzaW5jZSBubyBjaGVja3N1bSBmZWF0dXJlLlxuIik7CisJCW5ldGRldl9kYmcoZGV2LAorCQkJIkRyb3BwaW5nIE5FVElGX0ZfU0cgc2luY2Ugbm8gY2hlY2tzdW0gZmVhdHVyZS5cbiIpOwogCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKIAl9CiAKIAkvKiBUU08gcmVxdWlyZXMgdGhhdCBTRyBpcyBwcmVzZW50IGFzIHdlbGwuICovCi0JaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAmJiAhKGZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJbmV0ZGV2X2luZm8oZGV2LCAiRHJvcHBpbmcgTkVUSUZfRl9UU08gc2luY2Ugbm8gU0cgZmVhdHVyZS5cbiIpOwotCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087CisJaWYgKChmZWF0dXJlcyAmIE5FVElGX0ZfQUxMX1RTTykgJiYgIShmZWF0dXJlcyAmIE5FVElGX0ZfU0cpKSB7CisJCW5ldGRldl9kYmcoZGV2LCAiRHJvcHBpbmcgVFNPIGZlYXR1cmVzIHNpbmNlIG5vIFNHIGZlYXR1cmUuXG4iKTsKKwkJZmVhdHVyZXMgJj0gfk5FVElGX0ZfQUxMX1RTTzsKIAl9CiAKKwkvKiBUU08gRUNOIHJlcXVpcmVzIHRoYXQgVFNPIGlzIHByZXNlbnQgYXMgd2VsbC4gKi8KKwlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9BTExfVFNPKSA9PSBORVRJRl9GX1RTT19FQ04pCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1RTT19FQ047CisKIAkvKiBTb2Z0d2FyZSBHU08gZGVwZW5kcyBvbiBTRy4gKi8KIAlpZiAoKGZlYXR1cmVzICYgTkVUSUZfRl9HU08pICYmICEoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSkgewotCQluZXRkZXZfaW5mbyhkZXYsICJEcm9wcGluZyBORVRJRl9GX0dTTyBzaW5jZSBubyBTRyBmZWF0dXJlLlxuIik7CisJCW5ldGRldl9kYmcoZGV2LCAiRHJvcHBpbmcgTkVUSUZfRl9HU08gc2luY2Ugbm8gU0cgZmVhdHVyZS5cbiIpOwogCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9HU087CiAJfQogCkBAIC01MjIwLDEzICs1MjI2LDEzIEBACiAJCWlmICghKChmZWF0dXJlcyAmIE5FVElGX0ZfR0VOX0NTVU0pIHx8CiAJCSAgICAoZmVhdHVyZXMgJiAoTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfSVBWNl9DU1VNKSkKIAkJCSAgICA9PSAoTkVUSUZfRl9JUF9DU1VNfE5FVElGX0ZfSVBWNl9DU1VNKSkpIHsKLQkJCW5ldGRldl9pbmZvKGRldiwKKwkJCW5ldGRldl9kYmcoZGV2LAogCQkJCSJEcm9wcGluZyBORVRJRl9GX1VGTyBzaW5jZSBubyBjaGVja3N1bSBvZmZsb2FkIGZlYXR1cmVzLlxuIik7CiAJCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9VRk87CiAJCX0KIAogCQlpZiAoIShmZWF0dXJlcyAmIE5FVElGX0ZfU0cpKSB7Ci0JCQluZXRkZXZfaW5mbyhkZXYsCisJCQluZXRkZXZfZGJnKGRldiwKIAkJCQkiRHJvcHBpbmcgTkVUSUZfRl9VRk8gc2luY2Ugbm8gTkVUSUZfRl9TRyBmZWF0dXJlLlxuIik7CiAJCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9VRk87CiAJCX0KQEAgLTU0MDgsMTIgKzU0MTQsNiBAQAogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9TT0ZUX0ZFQVRVUkVTOwogCWRldi0+d2FudGVkX2ZlYXR1cmVzID0gZGV2LT5mZWF0dXJlcyAmIGRldi0+aHdfZmVhdHVyZXM7CiAKLQkvKiBBdm9pZCB3YXJuaW5nIGZyb20gbmV0ZGV2X2ZpeF9mZWF0dXJlcygpIGZvciBHU08gd2l0aG91dCBTRyAqLwotCWlmICghKGRldi0+d2FudGVkX2ZlYXR1cmVzICYgTkVUSUZfRl9TRykpIHsKLQkJZGV2LT53YW50ZWRfZmVhdHVyZXMgJj0gfk5FVElGX0ZfR1NPOwotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0dTTzsKLQl9Ci0KIAkvKiBFbmFibGUgR1JPIGFuZCBORVRJRl9GX0hJR0hETUEgZm9yIHZsYW5zIGJ5IGRlZmF1bHQsCiAJICogdmxhbl9kZXZfaW5pdCgpIHdpbGwgZG8gdGhlIGRldi0+ZmVhdHVyZXMgY2hlY2ssIHNvIHRoZXNlIGZlYXR1cmVzCiAJICogYXJlIGVuYWJsZWQgb25seSBpZiBzdXBwb3J0ZWQgYnkgdW5kZXJseWluZyBkZXZpY2UuCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9vcHRpb25zLmMgYi9uZXQvZGNjcC9vcHRpb25zLmMKaW5kZXggZjA2ZmZjZi4uNGIyYWI2NSAxMDA2NDQKLS0tIGEvbmV0L2RjY3Avb3B0aW9ucy5jCisrKyBiL25ldC9kY2NwL29wdGlvbnMuYwpAQCAtMTIzLDYgKzEyMyw4IEBACiAJCWNhc2UgRENDUE9fQ0hBTkdFX0wgLi4uIERDQ1BPX0NPTkZJUk1fUjoKIAkJCWlmIChwa3RfdHlwZSA9PSBEQ0NQX1BLVF9EQVRBKSAgICAgIC8qIFJGQyA0MzQwLCA2ICovCiAJCQkJYnJlYWs7CisJCQlpZiAobGVuID09IDApCisJCQkJZ290byBvdXRfaW52YWxpZF9vcHRpb247CiAJCQlyYyA9IGRjY3BfZmVhdF9wYXJzZV9vcHRpb25zKHNrLCBkcmVxLCBtYW5kYXRvcnksIG9wdCwKIAkJCQkJCSAgICAqdmFsdWUsIHZhbHVlICsgMSwgbGVuIC0gMSk7CiAJCQlpZiAocmMpCmRpZmYgLS1naXQgYS9uZXQvZHNhL0tjb25maWcgYi9uZXQvZHNhL0tjb25maWcKaW5kZXggODdiYjVmNC4uYzUzZGVkMiAxMDA2NDQKLS0tIGEvbmV0L2RzYS9LY29uZmlnCisrKyBiL25ldC9kc2EvS2NvbmZpZwpAQCAtNDEsMTIgKzQxLDEyIEBACiAJZGVmYXVsdCBuCiAKIGNvbmZpZyBORVRfRFNBX01WODhFNjEzMQotCWJvb2wgIk1hcnZlbGwgODhFNjA5NS82MDk1Ri82MTMxIGV0aGVybmV0IHN3aXRjaCBjaGlwIHN1cHBvcnQiCisJYm9vbCAiTWFydmVsbCA4OEU2MDg1LzYwOTUvNjA5NUYvNjEzMSBldGhlcm5ldCBzd2l0Y2ggY2hpcCBzdXBwb3J0IgogCXNlbGVjdCBORVRfRFNBX01WODhFNlhYWAogCXNlbGVjdCBORVRfRFNBX01WODhFNlhYWF9ORUVEX1BQVQogCXNlbGVjdCBORVRfRFNBX1RBR19EU0EKIAktLS1oZWxwLS0tCi0JICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgODhFNjA5NS82MDk1Ri82MTMxCisJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIE1hcnZlbGwgODhFNjA4NS82MDk1LzYwOTVGLzYxMzEKIAkgIGV0aGVybmV0IHN3aXRjaCBjaGlwcy4KIAogY29uZmlnIE5FVF9EU0FfTVY4OEU2MTIzXzYxXzY1CmRpZmYgLS1naXQgYS9uZXQvZHNhL212ODhlNjEzMS5jIGIvbmV0L2RzYS9tdjg4ZTYxMzEuYwppbmRleCAzZGE0MTg4Li40NWY3NDExIDEwMDY0NAotLS0gYS9uZXQvZHNhL212ODhlNjEzMS5jCisrKyBiL25ldC9kc2EvbXY4OGU2MTMxLmMKQEAgLTIwNyw4ICsyMDcsMTUgQEAKIAkgKiBtb2RlLCBidXQgZG8gbm90IGVuYWJsZSBmb3J3YXJkaW5nIG9mIHVua25vd24gdW5pY2FzdHMuCiAJICovCiAJdmFsID0gMHgwNDMzOwotCWlmIChwID09IGRzYV91cHN0cmVhbV9wb3J0KGRzKSkKKwlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpIHsKIAkJdmFsIHw9IDB4MDEwNDsKKwkJLyoKKwkJICogT24gNjA4NSwgdW5rbm93biBtdWx0aWNhc3QgZm9yd2FyZCBpcyBjb250cm9sbGVkCisJCSAqIGhlcmUgcmF0aGVyIHRoYW4gaW4gUG9ydCBDb250cm9sIDIgcmVnaXN0ZXIuCisJCSAqLworCQlpZiAocHMtPmlkID09IElEXzYwODUpCisJCQl2YWwgfD0gMHgwMDA4OworCX0KIAlpZiAoZHMtPmRzYV9wb3J0X21hc2sgJiAoMSA8PCBwKSkKIAkJdmFsIHw9IDB4MDEwMDsKIAlSRUdfV1JJVEUoYWRkciwgMHgwNCwgdmFsKTsKQEAgLTI1MSwxMCArMjU4LDE5IEBACiAJICogSWYgdGhpcyBpcyB0aGUgdXBzdHJlYW0gcG9ydCBmb3IgdGhpcyBzd2l0Y2gsIGVuYWJsZQogCSAqIGZvcndhcmRpbmcgb2YgdW5rbm93biBtdWx0aWNhc3QgYWRkcmVzc2VzLgogCSAqLwotCXZhbCA9IDB4MDA4MCB8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKLQlpZiAocCA9PSBkc2FfdXBzdHJlYW1fcG9ydChkcykpCi0JCXZhbCB8PSAweDAwNDA7Ci0JUkVHX1dSSVRFKGFkZHIsIDB4MDgsIHZhbCk7CisJaWYgKHBzLT5pZCA9PSBJRF82MDg1KQorCQkvKgorCQkgKiBvbiA2MDg1LCBiaXRzIDM6MCBhcmUgcmVzZXJ2ZWQsIGJpdCA2IGNvbnRyb2wgQVJQCisJCSAqIG1pcnJvcmluZywgYW5kIG11bHRpY2FzdCBmb3J3YXJkIGlzIGhhbmRsZWQgaW4KKwkJICogUG9ydCBDb250cm9sIHJlZ2lzdGVyLgorCQkgKi8KKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDgsIDB4MDA4MCk7CisJZWxzZSB7CisJCXZhbCA9IDB4MDA4MCB8IGRzYV91cHN0cmVhbV9wb3J0KGRzKTsKKwkJaWYgKHAgPT0gZHNhX3Vwc3RyZWFtX3BvcnQoZHMpKQorCQkJdmFsIHw9IDB4MDA0MDsKKwkJUkVHX1dSSVRFKGFkZHIsIDB4MDgsIHZhbCk7CisJfQogCiAJLyoKIAkgKiBSYXRlIENvbnRyb2w6IGRpc2FibGUgaW5ncmVzcyByYXRlIGxpbWl0aW5nLgpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxNTQvTWFrZWZpbGUgYi9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQppbmRleCBjZTJkMzM1Li41NzYxMTg1IDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQorKysgYi9uZXQvaWVlZTgwMjE1NC9NYWtlZmlsZQpAQCAtMSw1ICsxLDMgQEAKIG9iai0kKENPTkZJR19JRUVFODAyMTU0KSArPQlpZWVlODAyMTU0Lm8gYWZfODAyMTU0Lm8KIGllZWU4MDIxNTQteQkJOj0gbmV0bGluay5vIG5sLW1hYy5vIG5sLXBoeS5vIG5sX3BvbGljeS5vIHdwYW4tY2xhc3MubwogYWZfODAyMTU0LXkJCTo9IGFmX2llZWU4MDIxNTQubyByYXcubyBkZ3JhbS5vCi0KLWNjZmxhZ3MteSArPSAtV2FsbCAtRERFQlVHCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggNTM0NWIwYi4uY2Q5Y2EwOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtMTY4MCw3ICsxNjgwLDcgQEAKIAkJcmV0dXJuOwogCiAJY25mLT5zeXNjdGwgPSBOVUxMOwotCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHQtPnN5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZSh0LT5zeXNjdGxfaGVhZGVyKTsKIAlrZnJlZSh0LT5kZXZfbmFtZSk7CiAJa2ZyZWUodCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCBlOTAxM2Q2Li41ZmU5YjhiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTE5NzgsOSArMTk3OCw2IEBACiAJdCA9IChzdHJ1Y3QgdHJpZSAqKSB0Yi0+dGJfZGF0YTsKIAltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CiAKLQlpZiAoaWQgPT0gUlRfVEFCTEVfTE9DQUwpCi0JCXByX2luZm8oIklQdjQgRklCOiBVc2luZyBMQy10cmllIHZlcnNpb24gJXNcbiIsIFZFUlNJT04pOwotCiAJcmV0dXJuIHRiOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCA2YzBiN2Y0Li4zOGYyM2U3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTczLDcgKzczLDcgQEAKIAkJICAgICAhc2syLT5za19ib3VuZF9kZXZfaWYgfHwKIAkJICAgICBzay0+c2tfYm91bmRfZGV2X2lmID09IHNrMi0+c2tfYm91bmRfZGV2X2lmKSkgewogCQkJaWYgKCFyZXVzZSB8fCAhc2syLT5za19yZXVzZSB8fAotCQkJICAgICgoMSA8PCBzazItPnNrX3N0YXRlKSAmIChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKSkgeworCQkJICAgIHNrMi0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTikgewogCQkJCWNvbnN0IF9fYmUzMiBzazJfcmN2X3NhZGRyID0gc2tfcmN2X3NhZGRyKHNrMik7CiAJCQkJaWYgKCFzazJfcmN2X3NhZGRyIHx8ICFza19yY3Zfc2FkZHIoc2spIHx8CiAJCQkJICAgIHNrMl9yY3Zfc2FkZHIgPT0gc2tfcmN2X3NhZGRyKHNrKSkKQEAgLTEyMiw4ICsxMjIsNyBAQAogCQkJCQkgICAgKHRiLT5udW1fb3duZXJzIDwgc21hbGxlc3Rfc2l6ZSB8fCBzbWFsbGVzdF9zaXplID09IC0xKSkgewogCQkJCQkJc21hbGxlc3Rfc2l6ZSA9IHRiLT5udW1fb3duZXJzOwogCQkJCQkJc21hbGxlc3Rfcm92ZXIgPSByb3ZlcjsKLQkJCQkJCWlmIChhdG9taWNfcmVhZCgmaGFzaGluZm8tPmJzb2NrZXRzKSA+IChoaWdoIC0gbG93KSArIDEgJiYKLQkJCQkJCSAgICAhaW5ldF9jc2soc2spLT5pY3NrX2FmX29wcy0+YmluZF9jb25mbGljdChzaywgdGIpKSB7CisJCQkJCQlpZiAoYXRvbWljX3JlYWQoJmhhc2hpbmZvLT5ic29ja2V0cykgPiAoaGlnaCAtIGxvdykgKyAxKSB7CiAJCQkJCQkJc3Bpbl91bmxvY2soJmhlYWQtPmxvY2spOwogCQkJCQkJCXNudW0gPSBzbWFsbGVzdF9yb3ZlcjsKIAkJCQkJCQlnb3RvIGhhdmVfc251bTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jCmluZGV4IGRkMWIyMGUuLjlkZjRlNjMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmMKKysrIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwpAQCAtMzU0LDcgKzM1NCw4IEBACiB9CiAKIC8qIE1heSBiZSBjYWxsZWQgd2l0aCBsb2NhbCBCSCBlbmFibGVkLiAqLwotc3RhdGljIHZvaWQgdW5saW5rX2Zyb21fcG9vbChzdHJ1Y3QgaW5ldF9wZWVyICpwLCBzdHJ1Y3QgaW5ldF9wZWVyX2Jhc2UgKmJhc2UpCitzdGF0aWMgdm9pZCB1bmxpbmtfZnJvbV9wb29sKHN0cnVjdCBpbmV0X3BlZXIgKnAsIHN0cnVjdCBpbmV0X3BlZXJfYmFzZSAqYmFzZSwKKwkJCSAgICAgc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKnN0YWNrW1BFRVJfTUFYREVQVEhdKQogewogCWludCBkb19mcmVlOwogCkBAIC0zNjgsNyArMzY5LDYgQEAKIAkgKiBXZSB1c2UgcmVmY250PS0xIHRvIGFsZXJ0IGxvY2tsZXNzIHJlYWRlcnMgdGhpcyBlbnRyeSBpcyBkZWxldGVkLgogCSAqLwogCWlmIChhdG9taWNfY21weGNoZygmcC0+cmVmY250LCAxLCAtMSkgPT0gMSkgewotCQlzdHJ1Y3QgaW5ldF9wZWVyIF9fcmN1ICoqc3RhY2tbUEVFUl9NQVhERVBUSF07CiAJCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKioqc3RhY2twdHIsICoqKmRlbHA7CiAJCWlmIChsb29rdXAoJnAtPmRhZGRyLCBzdGFjaywgYmFzZSkgIT0gcCkKIAkJCUJVRygpOwpAQCAtNDIyLDcgKzQyMiw3IEBACiB9CiAKIC8qIE1heSBiZSBjYWxsZWQgd2l0aCBsb2NhbCBCSCBlbmFibGVkLiAqLwotc3RhdGljIGludCBjbGVhbnVwX29uY2UodW5zaWduZWQgbG9uZyB0dGwpCitzdGF0aWMgaW50IGNsZWFudXBfb25jZSh1bnNpZ25lZCBsb25nIHR0bCwgc3RydWN0IGluZXRfcGVlciBfX3JjdSAqKnN0YWNrW1BFRVJfTUFYREVQVEhdKQogewogCXN0cnVjdCBpbmV0X3BlZXIgKnAgPSBOVUxMOwogCkBAIC00NTQsNyArNDU0LDcgQEAKIAkJICogaGFwcGVuIGJlY2F1c2Ugb2YgZW50cnkgbGltaXRzIGluIHJvdXRlIGNhY2hlLiAqLwogCQlyZXR1cm4gLTE7CiAKLQl1bmxpbmtfZnJvbV9wb29sKHAsIHBlZXJfdG9fYmFzZShwKSk7CisJdW5saW5rX2Zyb21fcG9vbChwLCBwZWVyX3RvX2Jhc2UocCksIHN0YWNrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTI0LDcgKzUyNCw3IEBACiAKIAlpZiAoYmFzZS0+dG90YWwgPj0gaW5ldF9wZWVyX3RocmVzaG9sZCkKIAkJLyogUmVtb3ZlIG9uZSBsZXNzLXJlY2VudGx5LXVzZWQgZW50cnkuICovCi0JCWNsZWFudXBfb25jZSgwKTsKKwkJY2xlYW51cF9vbmNlKDAsIHN0YWNrKTsKIAogCXJldHVybiBwOwogfQpAQCAtNTQwLDYgKzU0MCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCWludCB0dGwsIHRvdGFsOworCXN0cnVjdCBpbmV0X3BlZXIgX19yY3UgKipzdGFja1tQRUVSX01BWERFUFRIXTsKIAogCXRvdGFsID0gY29tcHV0ZV90b3RhbCgpOwogCWlmICh0b3RhbCA+PSBpbmV0X3BlZXJfdGhyZXNob2xkKQpAQCAtNTQ4LDcgKzU0OSw3IEBACiAJCXR0bCA9IGluZXRfcGVlcl9tYXh0dGwKIAkJCQktIChpbmV0X3BlZXJfbWF4dHRsIC0gaW5ldF9wZWVyX21pbnR0bCkgLyBIWiAqCiAJCQkJCXRvdGFsIC8gaW5ldF9wZWVyX3RocmVzaG9sZCAqIEhaOwotCXdoaWxlICghY2xlYW51cF9vbmNlKHR0bCkpIHsKKwl3aGlsZSAoIWNsZWFudXBfb25jZSh0dGwsIHN0YWNrKSkgewogCQlpZiAoamlmZmllcyAhPSBub3cpCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwppbmRleCBhMTE1MWI4Li5iMWQyODJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCisrKyBiL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKQEAgLTIyMywzMSArMjIzLDMwIEBACiAKIAlpZiAoKHFwLT5xLmxhc3RfaW4gJiBJTkVUX0ZSQUdfRklSU1RfSU4pICYmIHFwLT5xLmZyYWdtZW50cyAhPSBOVUxMKSB7CiAJCXN0cnVjdCBza19idWZmICpoZWFkID0gcXAtPnEuZnJhZ21lbnRzOworCQljb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaDsKKwkJaW50IGVycjsKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWhlYWQtPmRldiA9IGRldl9nZXRfYnlfaW5kZXhfcmN1KG5ldCwgcXAtPmlpZik7CiAJCWlmICghaGVhZC0+ZGV2KQogCQkJZ290byBvdXRfcmN1X3VubG9jazsKIAorCQkvKiBza2IgZHN0IGlzIHN0YWxlLCBkcm9wIGl0LCBhbmQgcGVyZm9ybSByb3V0ZSBsb29rdXAgYWdhaW4gKi8KKwkJc2tiX2RzdF9kcm9wKGhlYWQpOworCQlpcGggPSBpcF9oZHIoaGVhZCk7CisJCWVyciA9IGlwX3JvdXRlX2lucHV0X25vcmVmKGhlYWQsIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCisJCQkJCSAgIGlwaC0+dG9zLCBoZWFkLT5kZXYpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfcmN1X3VubG9jazsKKwogCQkvKgotCQkgKiBPbmx5IHNlYXJjaCByb3V0ZXIgdGFibGUgZm9yIHRoZSBoZWFkIGZyYWdtZW50LAotCQkgKiB3aGVuIGRlZnJhZ2luZyB0aW1lb3V0IGF0IFBSRV9ST1VUSU5HIEhPT0suCisJCSAqIE9ubHkgYW4gZW5kIGhvc3QgbmVlZHMgdG8gc2VuZCBhbiBJQ01QCisJCSAqICJGcmFnbWVudCBSZWFzc2VtYmx5IFRpbWVvdXQiIG1lc3NhZ2UsIHBlciBSRkM3OTIuCiAJCSAqLwotCQlpZiAocXAtPnVzZXIgPT0gSVBfREVGUkFHX0NPTk5UUkFDS19JTiAmJiAhc2tiX2RzdChoZWFkKSkgewotCQkJY29uc3Qgc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoaGVhZCk7Ci0JCQlpbnQgZXJyID0gaXBfcm91dGVfaW5wdXQoaGVhZCwgaXBoLT5kYWRkciwgaXBoLT5zYWRkciwKLQkJCQkJCSBpcGgtPnRvcywgaGVhZC0+ZGV2KTsKLQkJCWlmICh1bmxpa2VseShlcnIpKQotCQkJCWdvdG8gb3V0X3JjdV91bmxvY2s7CisJCWlmIChxcC0+dXNlciA9PSBJUF9ERUZSQUdfQ09OTlRSQUNLX0lOICYmCisJCSAgICBza2JfcnRhYmxlKGhlYWQpLT5ydF90eXBlICE9IFJUTl9MT0NBTCkKKwkJCWdvdG8gb3V0X3JjdV91bmxvY2s7CiAKLQkJCS8qCi0JCQkgKiBPbmx5IGFuIGVuZCBob3N0IG5lZWRzIHRvIHNlbmQgYW4gSUNNUAotCQkJICogIkZyYWdtZW50IFJlYXNzZW1ibHkgVGltZW91dCIgbWVzc2FnZSwgcGVyIFJGQzc5Mi4KLQkJCSAqLwotCQkJaWYgKHNrYl9ydGFibGUoaGVhZCktPnJ0X3R5cGUgIT0gUlROX0xPQ0FMKQotCQkJCWdvdG8gb3V0X3JjdV91bmxvY2s7Ci0KLQkJfQogCiAJCS8qIFNlbmQgYW4gSUNNUCAiRnJhZ21lbnQgUmVhc3NlbWJseSBUaW1lb3V0IiBtZXNzYWdlLiAqLwogCQlpY21wX3NlbmQoaGVhZCwgSUNNUF9USU1FX0VYQ0VFREVELCBJQ01QX0VYQ19GUkFHVElNRSwgMCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggMjhhNzM2Zi4uMjM5MWIyNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtMzI5LDcgKzMyOSw3IEBACiAJCQkJCXBwX3B0ciA9IG9wdHB0ciArIDI7CiAJCQkJCWdvdG8gZXJyb3I7CiAJCQkJfQotCQkJCWlmIChza2IpIHsKKwkJCQlpZiAocnQpIHsKIAkJCQkJbWVtY3B5KCZvcHRwdHJbb3B0cHRyWzJdLTFdLCAmcnQtPnJ0X3NwZWNfZHN0LCA0KTsKIAkJCQkJb3B0LT5pc19jaGFuZ2VkID0gMTsKIAkJCQl9CkBAIC0zNzEsNyArMzcxLDcgQEAKIAkJCQkJCWdvdG8gZXJyb3I7CiAJCQkJCX0KIAkJCQkJb3B0LT50cyA9IG9wdHB0ciAtIGlwaDsKLQkJCQkJaWYgKHNrYikgeworCQkJCQlpZiAocnQpICB7CiAJCQkJCQltZW1jcHkoJm9wdHB0cltvcHRwdHJbMl0tMV0sICZydC0+cnRfc3BlY19kc3QsIDQpOwogCQkJCQkJdGltZXB0ciA9IChfX2JlMzIqKSZvcHRwdHJbb3B0cHRyWzJdKzNdOwogCQkJCQl9CkBAIC02MDMsNyArNjAzLDcgQEAKIAl1bnNpZ25lZCBsb25nIG9yZWZkc3Q7CiAJaW50IGVycjsKIAotCWlmICghb3B0LT5zcnIpCisJaWYgKCFvcHQtPnNyciB8fCAhcnQpCiAJCXJldHVybiAwOwogCiAJaWYgKHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0hPU1QpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCBjMWFjZjY5Li45OWU2ZTRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9yb3V0ZS5jCisrKyBiL25ldC9pcHY0L3JvdXRlLmMKQEAgLTI2OTAsNiArMjY5MCwxMiBAQAogewogfQogCitzdGF0aWMgdTMyICppcHY0X3J0X2JsYWNraG9sZV9jb3dfbWV0cmljcyhzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBvbGQpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZHN0X29wcyBpcHY0X2RzdF9ibGFja2hvbGVfb3BzID0gewogCS5mYW1pbHkJCQk9CUFGX0lORVQsCiAJLnByb3RvY29sCQk9CWNwdV90b19iZTE2KEVUSF9QX0lQKSwKQEAgLTI2OTgsNiArMjcwNCw3IEBACiAJLmRlZmF1bHRfbXR1CQk9CWlwdjRfYmxhY2tob2xlX2RlZmF1bHRfbXR1LAogCS5kZWZhdWx0X2Fkdm1zcwkJPQlpcHY0X2RlZmF1bHRfYWR2bXNzLAogCS51cGRhdGVfcG10dQkJPQlpcHY0X3J0X2JsYWNraG9sZV91cGRhdGVfcG10dSwKKwkuY293X21ldHJpY3MJCT0JaXB2NF9ydF9ibGFja2hvbGVfY293X21ldHJpY3MsCiB9OwogCiBzdHJ1Y3QgZHN0X2VudHJ5ICppcHY0X2JsYWNraG9sZV9yb3V0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBkc3RfZW50cnkgKmRzdF9vcmlnKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCAxYTQ1NjY1Li4zMjFlNmU4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtMzExLDcgKzMxMSw2IEBACiAJCS5tb2RlCQk9IDA2NDQsCiAJCS5wcm9jX2hhbmRsZXIJPSBwcm9jX2RvX2xhcmdlX2JpdG1hcCwKIAl9LAotI2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1QKIAl7CiAJCS5wcm9jbmFtZQk9ICJpZ21wX21heF9tZW1iZXJzaGlwcyIsCiAJCS5kYXRhCQk9ICZzeXNjdGxfaWdtcF9tYXhfbWVtYmVyc2hpcHMsCkBAIC0zMTksOCArMzE4LDYgQEAKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKIAl9LAotCi0jZW5kaWYKIAl7CiAJCS5wcm9jbmFtZQk9ICJpZ21wX21heF9tc2YiLAogCQkuZGF0YQkJPSAmc3lzY3RsX2lnbXBfbWF4X21zZiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9jdWJpYy5jIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKaW5kZXggMzQzNDBjOS4uZjM3NmIwNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2N1YmljLmMKKysrIGIvbmV0L2lwdjQvdGNwX2N1YmljLmMKQEAgLTkzLDYgKzkzLDcgQEAKIAl1MzIJYWNrX2NudDsJLyogbnVtYmVyIG9mIGFja3MgKi8KIAl1MzIJdGNwX2N3bmQ7CS8qIGVzdGltYXRlZCB0Y3AgY3duZCAqLwogI2RlZmluZSBBQ0tfUkFUSU9fU0hJRlQJNAorI2RlZmluZSBBQ0tfUkFUSU9fTElNSVQgKDMydSA8PCBBQ0tfUkFUSU9fU0hJRlQpCiAJdTE2CWRlbGF5ZWRfYWNrOwkvKiBlc3RpbWF0ZSB0aGUgcmF0aW8gb2YgUGFja2V0cy9BQ0tzIDw8IDQgKi8KIAl1OAlzYW1wbGVfY250OwkvKiBudW1iZXIgb2Ygc2FtcGxlcyB0byBkZWNpZGUgY3Vycl9ydHQgKi8KIAl1OAlmb3VuZDsJCS8qIHRoZSBleGl0IHBvaW50IGlzIGZvdW5kPyAqLwpAQCAtMzk4LDggKzM5OSwxMiBAQAogCXUzMiBkZWxheTsKIAogCWlmIChpY3NrLT5pY3NrX2NhX3N0YXRlID09IFRDUF9DQV9PcGVuKSB7Ci0JCWNudCAtPSBjYS0+ZGVsYXllZF9hY2sgPj4gQUNLX1JBVElPX1NISUZUOwotCQljYS0+ZGVsYXllZF9hY2sgKz0gY250OworCQl1MzIgcmF0aW8gPSBjYS0+ZGVsYXllZF9hY2s7CisKKwkJcmF0aW8gLT0gY2EtPmRlbGF5ZWRfYWNrID4+IEFDS19SQVRJT19TSElGVDsKKwkJcmF0aW8gKz0gY250OworCisJCWNhLT5kZWxheWVkX2FjayA9IG1pbihyYXRpbywgQUNLX1JBVElPX0xJTUlUKTsKIAl9CiAKIAkvKiBTb21lIGNhbGxzIGFyZSBmb3IgZHVwbGljYXRlcyB3aXRob3V0IHRpbWV0YW1wcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfb3V0cHV0LmMgYi9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYwppbmRleCA1NzFhYTk2Li4yZDUxODQwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC94ZnJtNF9vdXRwdXQuYwpAQCAtNjksNyArNjksNyBAQAogfQogRVhQT1JUX1NZTUJPTCh4ZnJtNF9wcmVwYXJlX291dHB1dCk7CiAKLXN0YXRpYyBpbnQgeGZybTRfb3V0cHV0X2ZpbmlzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraW50IHhmcm00X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSCiAJaWYgKCFza2JfZHN0KHNrYiktPnhmcm0pIHsKQEAgLTg2LDcgKzg2LDExIEBACiAKIGludCB4ZnJtNF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHNrYik7CisJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBkc3QtPnhmcm07CisKIAlyZXR1cm4gTkZfSE9PS19DT05EKE5GUFJPVE9fSVBWNCwgTkZfSU5FVF9QT1NUX1JPVVRJTkcsIHNrYiwKLQkJCSAgICBOVUxMLCBza2JfZHN0KHNrYiktPmRldiwgeGZybTRfb3V0cHV0X2ZpbmlzaCwKKwkJCSAgICBOVUxMLCBkc3QtPmRldiwKKwkJCSAgICB4LT5vdXRlcl9tb2RlLT5hZmluZm8tPm91dHB1dF9maW5pc2gsCiAJCQkgICAgIShJUENCKHNrYiktPmZsYWdzICYgSVBTS0JfUkVST1VURUQpKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3N0YXRlLmMgYi9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCmluZGV4IDE3MTdjNjQuLjgwNWQ2M2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKKysrIGIvbmV0L2lwdjQveGZybTRfc3RhdGUuYwpAQCAtNzgsNiArNzgsNyBAQAogCS5pbml0X3RlbXBzZWwJCT0gX194ZnJtNF9pbml0X3RlbXBzZWwsCiAJLmluaXRfdGVtcHJvcAkJPSB4ZnJtNF9pbml0X3RlbXByb3AsCiAJLm91dHB1dAkJCT0geGZybTRfb3V0cHV0LAorCS5vdXRwdXRfZmluaXNoCQk9IHhmcm00X291dHB1dF9maW5pc2gsCiAJLmV4dHJhY3RfaW5wdXQJCT0geGZybTRfZXh0cmFjdF9pbnB1dCwKIAkuZXh0cmFjdF9vdXRwdXQJCT0geGZybTRfZXh0cmFjdF9vdXRwdXQsCiAJLnRyYW5zcG9ydF9maW5pc2gJPSB4ZnJtNF90cmFuc3BvcnRfZmluaXNoLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggMTQ5MzUzNC4uYTdiZGEwNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC00NTM3LDcgKzQ1MzcsNyBAQAogCiAJdCA9IHAtPnN5c2N0bDsKIAlwLT5zeXNjdGwgPSBOVUxMOwotCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHQtPnN5c2N0bF9oZWFkZXIpOworCXVucmVnaXN0ZXJfbmV0X3N5c2N0bF90YWJsZSh0LT5zeXNjdGxfaGVhZGVyKTsKIAlrZnJlZSh0LT5kZXZfbmFtZSk7CiAJa2ZyZWUodCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmMKaW5kZXggNWFhOGVjOC4uNTlkY2NmYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXNwNi5jCisrKyBiL25ldC9pcHY2L2VzcDYuYwpAQCAtMzcxLDcgKzM3MSw3IEBACiAJaXYgPSBlc3BfdG1wX2l2KGFlYWQsIHRtcCwgc2VxaGlsZW4pOwogCXJlcSA9IGVzcF90bXBfcmVxKGFlYWQsIGl2KTsKIAlhc2cgPSBlc3BfcmVxX3NnKGFlYWQsIHJlcSk7Ci0Jc2cgPSBhc2cgKyAxOworCXNnID0gYXNnICsgc2dsaXN0czsKIAogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwppbmRleCAxNjYwNTQ2Li5mMmM1YjBmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2Ni9pbmV0Nl9jb25uZWN0aW9uX3NvY2suYwpAQCAtNDQsNyArNDQsNyBAQAogCQkgICAgICFzazItPnNrX2JvdW5kX2Rldl9pZiB8fAogCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gc2syLT5za19ib3VuZF9kZXZfaWYpICYmCiAJCSAgICAoIXNrLT5za19yZXVzZSB8fCAhc2syLT5za19yZXVzZSB8fAotCQkgICAgICgoMSA8PCBzazItPnNrX3N0YXRlKSAmIChUQ1BGX0xJU1RFTiB8IFRDUEZfQ0xPU0UpKSkgJiYKKwkJICAgICBzazItPnNrX3N0YXRlID09IFRDUF9MSVNURU4pICYmCiAJCSAgICAgaXB2Nl9yY3Zfc2FkZHJfZXF1YWwoc2ssIHNrMikpCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCmluZGV4IDI4ZTc0NDguLmE1YTRjNWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCkBAIC00NSw2ICs0NSw4IEBACiAJaW50IHRjcGhvZmYsIG5lZWRzX2FjazsKIAljb25zdCBzdHJ1Y3QgaXB2NmhkciAqb2lwNmggPSBpcHY2X2hkcihvbGRza2IpOwogCXN0cnVjdCBpcHY2aGRyICppcDZoOworI2RlZmluZSBERUZBVUxUX1RPU19WQUxVRQkweDBVCisJY29uc3QgX191OCB0Y2xhc3MgPSBERUZBVUxUX1RPU19WQUxVRTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOwogCXU4IHByb3RvOwogCXN0cnVjdCBmbG93aTYgZmw2OwpAQCAtMTI0LDcgKzEyNiw3IEBACiAJc2tiX3B1dChuc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIobnNrYik7CiAJaXA2aCA9IGlwdjZfaGRyKG5za2IpOwotCWlwNmgtPnZlcnNpb24gPSA2OworCSooX19iZTMyICopaXA2aCA9ICBodG9ubCgweDYwMDAwMDAwIHwgKHRjbGFzcyA8PCAyMCkpOwogCWlwNmgtPmhvcF9saW1pdCA9IGlwNl9kc3RfaG9wbGltaXQoZHN0KTsKIAlpcDZoLT5uZXh0aGRyID0gSVBQUk9UT19UQ1A7CiAJaXB2Nl9hZGRyX2NvcHkoJmlwNmgtPnNhZGRyLCAmb2lwNmgtPmRhZGRyKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDg0MzQwNmYuLmZkMGVlYzYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtMTUzLDYgKzE1MywxMiBAQAogewogfQogCitzdGF0aWMgdTMyICppcDZfcnRfYmxhY2tob2xlX2Nvd19tZXRyaWNzKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgb2xkKQoreworCXJldHVybiBOVUxMOworfQorCiBzdGF0aWMgc3RydWN0IGRzdF9vcHMgaXA2X2RzdF9ibGFja2hvbGVfb3BzID0gewogCS5mYW1pbHkJCQk9CUFGX0lORVQ2LAogCS5wcm90b2NvbAkJPQljcHVfdG9fYmUxNihFVEhfUF9JUFY2KSwKQEAgLTE2MSw2ICsxNjcsNyBAQAogCS5kZWZhdWx0X210dQkJPQlpcDZfYmxhY2tob2xlX2RlZmF1bHRfbXR1LAogCS5kZWZhdWx0X2Fkdm1zcwkJPQlpcDZfZGVmYXVsdF9hZHZtc3MsCiAJLnVwZGF0ZV9wbXR1CQk9CWlwNl9ydF9ibGFja2hvbGVfdXBkYXRlX3BtdHUsCisJLmNvd19tZXRyaWNzCQk9CWlwNl9ydF9ibGFja2hvbGVfY293X21ldHJpY3MsCiB9OwogCiBzdGF0aWMgY29uc3QgdTMyIGlwNl90ZW1wbGF0ZV9tZXRyaWNzW1JUQVhfTUFYXSA9IHsKQEAgLTIwMTIsNyArMjAxOSw2IEBACiAJcnQtPmRzdC5vdXRwdXQgPSBpcDZfb3V0cHV0OwogCXJ0LT5ydDZpX2RldiA9IG5ldC0+bG9vcGJhY2tfZGV2OwogCXJ0LT5ydDZpX2lkZXYgPSBpZGV2OwotCWRzdF9tZXRyaWNfc2V0KCZydC0+ZHN0LCBSVEFYX0hPUExJTUlULCAtMSk7CiAJcnQtPmRzdC5vYnNvbGV0ZSA9IC0xOwogCiAJcnQtPnJ0NmlfZmxhZ3MgPSBSVEZfVVAgfCBSVEZfTk9ORVhUSE9QOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCAxNWMzNzc0Li45ZTMwNWQ3NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTEzMzUsNyArMTMzNSw3IEBACiAJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCiAJLyogQ2hlY2sgaWYgdGhlcmUgaXMgZW5vdWdoIGhlYWRyb29tIHRvIGluc2VydCBmcmFnbWVudCBoZWFkZXIuICovCi0JaWYgKChza2JfaGVhZHJvb20oc2tiKSA8IGZyYWdfaGRyX3N6KSAmJgorCWlmICgoc2tiX21hY19oZWFkZXIoc2tiKSA8IHNrYi0+aGVhZCArIGZyYWdfaGRyX3N6KSAmJgogCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgZnJhZ19oZHJfc3osIDAsIEdGUF9BVE9NSUMpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYwppbmRleCA4ZTY4OGIzLi40OWE5MWM1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKQEAgLTc5LDcgKzc5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybTZfcHJlcGFyZV9vdXRwdXQpOwogCi1zdGF0aWMgaW50IHhmcm02X291dHB1dF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYikKK2ludCB4ZnJtNl9vdXRwdXRfZmluaXNoKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUgogCUlQNkNCKHNrYiktPmZsYWdzIHw9IElQNlNLQl9YRlJNX1RSQU5TRk9STUVEOwpAQCAtOTcsOSArOTcsOSBAQAogCWlmICgoeCAmJiB4LT5wcm9wcy5tb2RlID09IFhGUk1fTU9ERV9UVU5ORUwpICYmCiAJICAgICgoc2tiLT5sZW4gPiBpcDZfc2tiX2RzdF9tdHUoc2tiKSAmJiAhc2tiX2lzX2dzbyhza2IpKSB8fAogCQlkc3RfYWxsZnJhZyhza2JfZHN0KHNrYikpKSkgewotCQkJcmV0dXJuIGlwNl9mcmFnbWVudChza2IsIHhmcm02X291dHB1dF9maW5pc2gpOworCQkJcmV0dXJuIGlwNl9mcmFnbWVudChza2IsIHgtPm91dGVyX21vZGUtPmFmaW5mby0+b3V0cHV0X2ZpbmlzaCk7CiAJfQotCXJldHVybiB4ZnJtNl9vdXRwdXRfZmluaXNoKHNrYik7CisJcmV0dXJuIHgtPm91dGVyX21vZGUtPmFmaW5mby0+b3V0cHV0X2ZpbmlzaChza2IpOwogfQogCiBpbnQgeGZybTZfb3V0cHV0KHN0cnVjdCBza19idWZmICpza2IpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCBhZmU5NDFlLi4yNDhmMGIyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTE3OCw2ICsxNzgsNyBAQAogCS50bXBsX3NvcnQJCT0gX194ZnJtNl90bXBsX3NvcnQsCiAJLnN0YXRlX3NvcnQJCT0gX194ZnJtNl9zdGF0ZV9zb3J0LAogCS5vdXRwdXQJCQk9IHhmcm02X291dHB1dCwKKwkub3V0cHV0X2ZpbmlzaAkJPSB4ZnJtNl9vdXRwdXRfZmluaXNoLAogCS5leHRyYWN0X2lucHV0CQk9IHhmcm02X2V4dHJhY3RfaW5wdXQsCiAJLmV4dHJhY3Rfb3V0cHV0CQk9IHhmcm02X2V4dHJhY3Rfb3V0cHV0LAogCS50cmFuc3BvcnRfZmluaXNoCT0geGZybTZfdHJhbnNwb3J0X2ZpbmlzaCwKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2FmX2lyZGEuYyBiL25ldC9pcmRhL2FmX2lyZGEuYwppbmRleCBjOTg5MGUyLi5jYzYxNjk3IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9hZl9pcmRhLmMKKysrIGIvbmV0L2lyZGEvYWZfaXJkYS5jCkBAIC0xMjk3LDggKzEyOTcsNyBAQAogCS8qIE5vdGUgOiBzb2NrZXQuYyBzZXQgTVNHX0VPUiBvbiBTRVFQQUNLRVQgc29ja2V0cyAqLwogCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUIHwgTVNHX0VPUiB8IE1TR19DTVNHX0NPTVBBVCB8CiAJCQkgICAgICAgTVNHX05PU0lHTkFMKSkgewotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJbG9ja19zb2NrKHNrKTsKZGlmZiAtLWdpdCBhL25ldC9sMnRwL2wydHBfaXAuYyBiL25ldC9sMnRwL2wydHBfaXAuYwppbmRleCBmY2U5YmQzLi41YzA0ZjNlIDEwMDY0NAotLS0gYS9uZXQvbDJ0cC9sMnRwX2lwLmMKKysrIGIvbmV0L2wydHAvbDJ0cF9pcC5jCkBAIC02NjcsNyArNjY3LDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiTDJUUCBvdmVyIElQIik7CiBNT0RVTEVfVkVSU0lPTigiMS4wIik7CiAKLS8qIFVzZSB0aGUgdmFsdWUgb2YgU09DS19ER1JBTSAoMikgZGlyZWN0b3J5LCBiZWNhdXNlIF9fc3RyaW5naWZ5IGRvZXMndCBsaWtlCisvKiBVc2UgdGhlIHZhbHVlIG9mIFNPQ0tfREdSQU0gKDIpIGRpcmVjdG9yeSwgYmVjYXVzZSBfX3N0cmluZ2lmeSBkb2Vzbid0IGxpa2UKICAqIGVudW1zCiAgKi8KIE1PRFVMRV9BTElBU19ORVRfUEZfUFJPVE9fVFlQRShQRl9JTkVULCAyLCBJUFBST1RPX0wyVFApOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfaW5wdXQuYyBiL25ldC9sbGMvbGxjX2lucHV0LmMKaW5kZXggMDU4ZjFlOS4uOTAzMjQyMSAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfaW5wdXQuYworKysgYi9uZXQvbGxjL2xsY19pbnB1dC5jCkBAIC0xMjEsOCArMTIxLDcgQEAKIAkJczMyIGRhdGFfc2l6ZSA9IG50b2hzKHBkdWxlbikgLSBsbGNfbGVuOwogCiAJCWlmIChkYXRhX3NpemUgPCAwIHx8Ci0JCSAgICAoKHNrYl90YWlsX3BvaW50ZXIoc2tiKSAtCi0JCSAgICAgICh1OCAqKXBkdSkgLSBsbGNfbGVuKSA8IGRhdGFfc2l6ZSkKKwkJICAgICFwc2tiX21heV9wdWxsKHNrYiwgZGF0YV9zaXplKSkKIAkJCXJldHVybiAwOwogCQlpZiAodW5saWtlbHkocHNrYl90cmltX3Jjc3VtKHNrYiwgZGF0YV9zaXplKSkpCiAJCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9jZmcuYyBiL25ldC9tYWM4MDIxMS9jZmcuYwppbmRleCAzMzQyMTM1Li40NDA0OTczIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvY2ZnLmMKKysrIGIvbmV0L21hYzgwMjExL2NmZy5jCkBAIC0xNTA0LDYgKzE1MDQsOCBAQAogCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBvbGRfcmVxOwogCWludCBlcnI7CiAKKwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZzZGF0YS0+dS5tZ2QubXR4KTsKKwogCW9sZF9yZXEgPSBzZGF0YS0+dS5tZ2QucmVxX3NtcHM7CiAJc2RhdGEtPnUubWdkLnJlcV9zbXBzID0gc21wc19tb2RlOwogCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmc19uZXRkZXYuYyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCmluZGV4IGRhY2FjZTYuLjllYTdjMGQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jCkBAIC0xNzcsOSArMTc3LDkgQEAKIAlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwltdXRleF9sb2NrKCZzZGF0YS0+dS5tZ2QubXR4KTsKIAllcnIgPSBfX2llZWU4MDIxMV9yZXF1ZXN0X3NtcHMoc2RhdGEsIHNtcHNfbW9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+dS5tZ2QubXR4KTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4MDIxMS90eC5jCmluZGV4IGNlNDU5NmUuLmJkMTIyNGYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90eC5jCisrKyBiL25ldC9tYWM4MDIxMS90eC5jCkBAIC0yMzcsNiArMjM3LDEwIEBACiAJCQkJICAgICAmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrKTsKIAl9CiAKKwkvKiBEb24ndCByZXN0YXJ0IHRoZSB0aW1lciBpZiB3ZSdyZSBub3QgZGlzYXNzb2NpYXRlZCAqLworCWlmICghaWZtZ2QtPmFzc29jaWF0ZWQpCisJCXJldHVybiBUWF9DT05USU5VRTsKKwogCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwogCQkgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2JpdG1hcF9pcG1hYy5jIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMKaW5kZXggMDBhMzMyNC4uYTI3NDMwMCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfYml0bWFwX2lwbWFjLmMKQEAgLTM0Myw2ICszNDMsMTAgQEAKIAlpcHNldF9hZHRmbiBhZHRmbiA9IHNldC0+dmFyaWFudC0+YWR0W2FkdF07CiAJc3RydWN0IGlwbWFjIGRhdGE7CiAKKwkvKiBNQUMgY2FuIGJlIHNyYyBvbmx5ICovCisJaWYgKCEoZmxhZ3MgJiBJUFNFVF9ESU1fVFdPX1NSQykpCisJCXJldHVybiAwOworCiAJZGF0YS5pZCA9IG50b2hsKGlwNGFkZHIoc2tiLCBmbGFncyAmIElQU0VUX0RJTV9PTkVfU1JDKSk7CiAJaWYgKGRhdGEuaWQgPCBtYXAtPmZpcnN0X2lwIHx8IGRhdGEuaWQgPiBtYXAtPmxhc3RfaXApCiAJCXJldHVybiAtSVBTRVRfRVJSX0JJVE1BUF9SQU5HRTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvaXBzZXQvaXBfc2V0X2NvcmUuYwppbmRleCA5MTUyZTY5Li43MmQxYWM2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwc2V0L2lwX3NldF9jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHNldC9pcF9zZXRfY29yZS5jCkBAIC0xMDIyLDggKzEwMjIsOSBAQAogCWlmIChjYi0+YXJnc1sxXSA+PSBpcF9zZXRfbWF4KQogCQlnb3RvIG91dDsKIAotCXByX2RlYnVnKCJhcmdzWzBdOiAlbGQgYXJnc1sxXTogJWxkXG4iLCBjYi0+YXJnc1swXSwgY2ItPmFyZ3NbMV0pOwogCW1heCA9IGNiLT5hcmdzWzBdID09IERVTVBfT05FID8gY2ItPmFyZ3NbMV0gKyAxIDogaXBfc2V0X21heDsKK2R1bXBfbGFzdDoKKwlwcl9kZWJ1ZygiYXJnc1swXTogJWxkIGFyZ3NbMV06ICVsZFxuIiwgY2ItPmFyZ3NbMF0sIGNiLT5hcmdzWzFdKTsKIAlmb3IgKDsgY2ItPmFyZ3NbMV0gPCBtYXg7IGNiLT5hcmdzWzFdKyspIHsKIAkJaW5kZXggPSAoaXBfc2V0X2lkX3QpIGNiLT5hcmdzWzFdOwogCQlzZXQgPSBpcF9zZXRfbGlzdFtpbmRleF07CkBAIC0xMDM4LDggKzEwMzksOCBAQAogCQkgKiBzbyB0aGF0IGxpc3RzICh1bmlvbnMgb2Ygc2V0cykgYXJlIGR1bXBlZCBsYXN0LgogCQkgKi8KIAkJaWYgKGNiLT5hcmdzWzBdICE9IERVTVBfT05FICYmCi0JCSAgICAhKChjYi0+YXJnc1swXSA9PSBEVU1QX0FMTCkgXgotCQkgICAgICAoc2V0LT50eXBlLT5mZWF0dXJlcyAmIElQU0VUX0RVTVBfTEFTVCkpKQorCQkgICAgKChjYi0+YXJnc1swXSA9PSBEVU1QX0FMTCkgPT0KKwkJICAgICAhIShzZXQtPnR5cGUtPmZlYXR1cmVzICYgSVBTRVRfRFVNUF9MQVNUKSkpCiAJCQljb250aW51ZTsKIAkJcHJfZGVidWcoIkxpc3Qgc2V0OiAlc1xuIiwgc2V0LT5uYW1lKTsKIAkJaWYgKCFjYi0+YXJnc1syXSkgewpAQCAtMTA4Myw2ICsxMDg0LDEyIEBACiAJCQlnb3RvIHJlbGVhc2VfcmVmY291bnQ7CiAJCX0KIAl9CisJLyogSWYgd2UgZHVtcCBhbGwgc2V0cywgY29udGludWUgd2l0aCBkdW1waW5nIGxhc3Qgb25lcyAqLworCWlmIChjYi0+YXJnc1swXSA9PSBEVU1QX0FMTCkgeworCQljYi0+YXJnc1swXSA9IERVTVBfTEFTVDsKKwkJY2ItPmFyZ3NbMV0gPSAwOworCQlnb3RvIGR1bXBfbGFzdDsKKwl9CiAJZ290byBvdXQ7CiAKIG5sYV9wdXRfZmFpbHVyZToKQEAgLTEwOTMsMTEgKzExMDAsNiBAQAogCQlwcl9kZWJ1ZygicmVsZWFzZSBzZXQgJXNcbiIsIGlwX3NldF9saXN0W2luZGV4XS0+bmFtZSk7CiAJCWlwX3NldF9wdXRfYnlpbmRleChpbmRleCk7CiAJfQotCi0JLyogSWYgd2UgZHVtcCBhbGwgc2V0cywgY29udGludWUgd2l0aCBkdW1waW5nIGxhc3Qgb25lcyAqLwotCWlmIChjYi0+YXJnc1swXSA9PSBEVU1QX0FMTCAmJiBjYi0+YXJnc1sxXSA+PSBtYXggJiYgIWNiLT5hcmdzWzJdKQotCQljYi0+YXJnc1swXSA9IERVTVBfTEFTVDsKLQogb3V0OgogCWlmIChubGgpIHsKIAkJbmxtc2dfZW5kKHNrYiwgbmxoKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19hcHAuYwppbmRleCAyZGM2ZGUxLi4wNTlhZjMxIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfYXBwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2FwcC5jCkBAIC01NzIsMTEgKzU3MiwxMSBAQAogCS5vcGVuCSA9IGlwX3ZzX2FwcF9vcGVuLAogCS5yZWFkCSA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2FwcF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK2ludCBfX25ldF9pbml0IF9faXBfdnNfYXBwX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMobmV0KTsKIApAQCAtNTg1LDI2ICs1ODUsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2FwcF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2FwcF9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXBfdnNfYXBwIik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfdnNfYXBwX29wcyA9IHsKLQkuaW5pdCA9IF9faXBfdnNfYXBwX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX2FwcF9jbGVhbnVwLAotfTsKLQogaW50IF9faW5pdCBpcF92c19hcHBfaW5pdCh2b2lkKQogewotCWludCBydjsKLQotCXJ2ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBfdnNfYXBwX29wcyk7Ci0JcmV0dXJuIHJ2OworCXJldHVybiAwOwogfQogCiAKIHZvaWQgaXBfdnNfYXBwX2NsZWFudXAodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwX3ZzX2FwcF9vcHMpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKaW5kZXggYzk3YmQ0NS4uYmYyOGFjMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCkBAIC0xMDQ2LDcgKzEwNDYsNyBAQAogCS5vcGVuICAgID0gaXBfdnNfY29ubl9vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICppcF92c19vcmlnaW5fbmFtZSh1bnNpZ25lZCBmbGFncykKQEAgLTExMTQsNyArMTExNCw3IEBACiAJLm9wZW4gICAgPSBpcF92c19jb25uX3N5bmNfb3BlbiwKIAkucmVhZCAgICA9IHNlcV9yZWFkLAogCS5sbHNlZWsgID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2VxX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCiAjZW5kaWYKQEAgLTEyNTgsMjIgKzEyNTgsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2Nvbm5fY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9fbmV0X2V4aXQgX19pcF92c19jb25uX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewogCS8qIGZsdXNoIGFsbCB0aGUgY29ubmVjdGlvbiBlbnRyaWVzIGZpcnN0ICovCiAJaXBfdnNfY29ubl9mbHVzaChuZXQpOwogCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcF92c19jb25uIik7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwX3ZzX2Nvbm5fc3luYyIpOwogfQotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHZzX2Nvbm5fb3BzID0gewotCS5pbml0ID0gX19pcF92c19jb25uX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX2Nvbm5fY2xlYW51cCwKLX07CiAKIGludCBfX2luaXQgaXBfdnNfY29ubl9pbml0KHZvaWQpCiB7CiAJaW50IGlkeDsKLQlpbnQgcmV0YzsKIAogCS8qIENvbXB1dGUgc2l6ZSBhbmQgbWFzayAqLwogCWlwX3ZzX2Nvbm5fdGFiX3NpemUgPSAxIDw8IGlwX3ZzX2Nvbm5fdGFiX2JpdHM7CkBAIC0xMzA5LDE3ICsxMzA0LDE0IEBACiAJCXJ3bG9ja19pbml0KCZfX2lwX3ZzX2Nvbm50YmxfbG9ja19hcnJheVtpZHhdLmwpOwogCX0KIAotCXJldGMgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2Nvbm5fb3BzKTsKLQogCS8qIGNhbGN1bGF0ZSB0aGUgcmFuZG9tIHZhbHVlIGZvciBjb25uZWN0aW9uIGhhc2ggKi8KIAlnZXRfcmFuZG9tX2J5dGVzKCZpcF92c19jb25uX3JuZCwgc2l6ZW9mKGlwX3ZzX2Nvbm5fcm5kKSk7CiAKLQlyZXR1cm4gcmV0YzsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpcF92c19jb25uX2NsZWFudXAodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29ubl9vcHMpOwogCS8qIFJlbGVhc2UgdGhlIGVtcHR5IGNhY2hlICovCiAJa21lbV9jYWNoZV9kZXN0cm95KGlwX3ZzX2Nvbm5fY2FjaGVwKTsKIAl2ZnJlZShpcF92c19jb25uX3RhYik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCAwN2FjY2Y2Li5hNzRkYWU2IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTExMTMsNiArMTExMyw5IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKIAluZXQgPSBza2JfbmV0KHNrYik7CisJaWYgKCFuZXRfaXB2cyhuZXQpLT5lbmFibGUpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKIAlpcF92c19maWxsX2lwaGRyKGFmLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgJmlwaCk7CiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAlpZiAoYWYgPT0gQUZfSU5FVDYpIHsKQEAgLTEzNDMsNiArMTM0Niw3IEBACiAJCXJldHVybiBORl9BQ0NFUFQ7IC8qIFRoZSBwYWNrZXQgbG9va3Mgd3JvbmcsIGlnbm9yZSAqLwogCiAJbmV0ID0gc2tiX25ldChza2IpOworCiAJcGQgPSBpcF92c19wcm90b19kYXRhX2dldChuZXQsIGNpaC0+cHJvdG9jb2wpOwogCWlmICghcGQpCiAJCXJldHVybiBORl9BQ0NFUFQ7CkBAIC0xNTI5LDYgKzE1MzMsMTEgQEAKIAkJCSAgICAgIElQX1ZTX0RCR19BRERSKGFmLCAmaXBoLmRhZGRyKSwgaG9va251bSk7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQorCS8qIGlwdnMgZW5hYmxlZCBpbiB0aGlzIG5ldG5zID8gKi8KKwluZXQgPSBza2JfbmV0KHNrYik7CisJaWYgKCFuZXRfaXB2cyhuZXQpLT5lbmFibGUpCisJCXJldHVybiBORl9BQ0NFUFQ7CisKIAlpcF92c19maWxsX2lwaGRyKGFmLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgJmlwaCk7CiAKIAkvKiBCYWQuLi4gRG8gbm90IGJyZWFrIHJhdyBzb2NrZXRzICovCkBAIC0xNTYyLDcgKzE1NzEsNiBAQAogCQkJaXBfdnNfZmlsbF9pcGhkcihhZiwgc2tiX25ldHdvcmtfaGVhZGVyKHNrYiksICZpcGgpOwogCQl9CiAKLQluZXQgPSBza2JfbmV0KHNrYik7CiAJLyogUHJvdG9jb2wgc3VwcG9ydGVkPyAqLwogCXBkID0gaXBfdnNfcHJvdG9fZGF0YV9nZXQobmV0LCBpcGgucHJvdG9jb2wpOwogCWlmICh1bmxpa2VseSghcGQpKQpAQCAtMTU4OCw3ICsxNTk2LDYgQEAKIAl9CiAKIAlJUF9WU19EQkdfUEtUKDExLCBhZiwgcHAsIHNrYiwgMCwgIkluY29taW5nIHBhY2tldCIpOwotCW5ldCA9IHNrYl9uZXQoc2tiKTsKIAlpcHZzID0gbmV0X2lwdnMobmV0KTsKIAkvKiBDaGVjayB0aGUgc2VydmVyIHN0YXR1cyAqLwogCWlmIChjcC0+ZGVzdCAmJiAhKGNwLT5kZXN0LT5mbGFncyAmIElQX1ZTX0RFU1RfRl9BVkFJTEFCTEUpKSB7CkBAIC0xNzQzLDEwICsxNzUwLDE2IEBACiAJCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewogCWludCByOworCXN0cnVjdCBuZXQgKm5ldDsKIAogCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgIT0gSVBQUk9UT19JQ01QKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCisJLyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqLworCW5ldCA9IHNrYl9uZXQoc2tiKTsKKwlpZiAoIW5ldF9pcHZzKG5ldCktPmVuYWJsZSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwogCXJldHVybiBpcF92c19pbl9pY21wKHNrYiwgJnIsIGhvb2tudW0pOwogfQogCkBAIC0xNzU3LDEwICsxNzcwLDE2IEBACiAJCSAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewogCWludCByOworCXN0cnVjdCBuZXQgKm5ldDsKIAogCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyICE9IElQUFJPVE9fSUNNUFY2KQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCisJLyogaXB2cyBlbmFibGVkIGluIHRoaXMgbmV0bnMgPyAqLworCW5ldCA9IHNrYl9uZXQoc2tiKTsKKwlpZiAoIW5ldF9pcHZzKG5ldCktPmVuYWJsZSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKwogCXJldHVybiBpcF92c19pbl9pY21wX3Y2KHNrYiwgJnIsIGhvb2tudW0pOwogfQogI2VuZGlmCkBAIC0xODg0LDE5ICsxOTAzLDcwIEBACiAJCXByX2VycigiJXMoKTogbm8gbWVtb3J5LlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CisJLyogSG9sZCB0aGUgYmVhc3QgdW50aWwgYSBzZXJ2aWNlIGlzIHJlZ2lzdGVyZCAqLworCWlwdnMtPmVuYWJsZSA9IDA7CiAJaXB2cy0+bmV0ID0gbmV0OwogCS8qIENvdW50ZXJzIHVzZWQgZm9yIGNyZWF0aW5nIHVuaXF1ZSBuYW1lcyAqLwogCWlwdnMtPmdlbiA9IGF0b21pY19yZWFkKCZpcHZzX25ldG5zX2NudCk7CiAJYXRvbWljX2luYygmaXB2c19uZXRuc19jbnQpOwogCW5ldC0+aXB2cyA9IGlwdnM7CisKKwlpZiAoX19pcF92c19lc3RpbWF0b3JfaW5pdChuZXQpIDwgMCkKKwkJZ290byBlc3RpbWF0b3JfZmFpbDsKKworCWlmIChfX2lwX3ZzX2NvbnRyb2xfaW5pdChuZXQpIDwgMCkKKwkJZ290byBjb250cm9sX2ZhaWw7CisKKwlpZiAoX19pcF92c19wcm90b2NvbF9pbml0KG5ldCkgPCAwKQorCQlnb3RvIHByb3RvY29sX2ZhaWw7CisKKwlpZiAoX19pcF92c19hcHBfaW5pdChuZXQpIDwgMCkKKwkJZ290byBhcHBfZmFpbDsKKworCWlmIChfX2lwX3ZzX2Nvbm5faW5pdChuZXQpIDwgMCkKKwkJZ290byBjb25uX2ZhaWw7CisKKwlpZiAoX19pcF92c19zeW5jX2luaXQobmV0KSA8IDApCisJCWdvdG8gc3luY19mYWlsOworCiAJcHJpbnRrKEtFUk5fSU5GTyAiSVBWUzogQ3JlYXRpbmcgbmV0bnMgc2l6ZT0lenUgaWQ9JWRcbiIsCiAJCQkgc2l6ZW9mKHN0cnVjdCBuZXRuc19pcHZzKSwgaXB2cy0+Z2VuKTsKIAlyZXR1cm4gMDsKKy8qCisgKiBFcnJvciBoYW5kbGluZworICovCisKK3N5bmNfZmFpbDoKKwlfX2lwX3ZzX2Nvbm5fY2xlYW51cChuZXQpOworY29ubl9mYWlsOgorCV9faXBfdnNfYXBwX2NsZWFudXAobmV0KTsKK2FwcF9mYWlsOgorCV9faXBfdnNfcHJvdG9jb2xfY2xlYW51cChuZXQpOworcHJvdG9jb2xfZmFpbDoKKwlfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cChuZXQpOworY29udHJvbF9mYWlsOgorCV9faXBfdnNfZXN0aW1hdG9yX2NsZWFudXAobmV0KTsKK2VzdGltYXRvcl9mYWlsOgorCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IF9faXBfdnNfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JSVBfVlNfREJHKDEwLCAiaXB2cyBuZXRucyAlZCByZWxlYXNlZFxuIiwgbmV0X2lwdnMobmV0KS0+Z2VuKTsKKwlfX2lwX3ZzX3NlcnZpY2VfY2xlYW51cChuZXQpOwkvKiBpcF92c19mbHVzaCgpIHdpdGggbG9ja3MgKi8KKwlfX2lwX3ZzX2Nvbm5fY2xlYW51cChuZXQpOworCV9faXBfdnNfYXBwX2NsZWFudXAobmV0KTsKKwlfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAobmV0KTsKKwlfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cChuZXQpOworCV9faXBfdnNfZXN0aW1hdG9yX2NsZWFudXAobmV0KTsKKwlJUF9WU19EQkcoMiwgImlwdnMgbmV0bnMgJWQgcmVsZWFzZWRcbiIsIG5ldF9pcHZzKG5ldCktPmdlbik7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgX19pcF92c19kZXZfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJRW50ZXJGdW5jdGlvbigyKTsKKwluZXRfaXB2cyhuZXQpLT5lbmFibGUgPSAwOwkvKiBEaXNhYmxlIHBhY2tldCByZWNlcHRpb24gKi8KKwlfX2lwX3ZzX3N5bmNfY2xlYW51cChuZXQpOworCUxlYXZlRnVuY3Rpb24oMik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2c19jb3JlX29wcyA9IHsKQEAgLTE5MDYsNiArMTk3NiwxMCBAQAogCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBuZXRuc19pcHZzKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2c19jb3JlX2Rldl9vcHMgPSB7CisJLmV4aXQgPSBfX2lwX3ZzX2Rldl9jbGVhbnVwLAorfTsKKwogLyoKICAqCUluaXRpYWxpemUgSVAgVmlydHVhbCBTZXJ2ZXIKICAqLwpAQCAtMTkxMywxMCArMTk4Nyw2IEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29yZV9vcHMpOwkvKiBBbGxvYyBpcF92cyBzdHJ1Y3QgKi8KLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQogCWlwX3ZzX2VzdGltYXRvcl9pbml0KCk7CiAJcmV0ID0gaXBfdnNfY29udHJvbF9pbml0KCk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTE5NDQsMTUgKzIwMTQsMjggQEAKIAkJZ290byBjbGVhbnVwX2Nvbm47CiAJfQogCisJcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb3JlX29wcyk7CS8qIEFsbG9jIGlwX3ZzIHN0cnVjdCAqLworCWlmIChyZXQgPCAwKQorCQlnb3RvIGNsZWFudXBfc3luYzsKKworCXJldCA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwdnNfY29yZV9kZXZfb3BzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBjbGVhbnVwX3N1YjsKKwogCXJldCA9IG5mX3JlZ2lzdGVyX2hvb2tzKGlwX3ZzX29wcywgQVJSQVlfU0laRShpcF92c19vcHMpKTsKIAlpZiAocmV0IDwgMCkgewogCQlwcl9lcnIoImNhbid0IHJlZ2lzdGVyIGhvb2tzLlxuIik7Ci0JCWdvdG8gY2xlYW51cF9zeW5jOworCQlnb3RvIGNsZWFudXBfZGV2OwogCX0KIAogCXByX2luZm8oImlwdnMgbG9hZGVkLlxuIik7CisKIAlyZXR1cm4gcmV0OwogCitjbGVhbnVwX2RldjoKKwl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwdnNfY29yZV9kZXZfb3BzKTsKK2NsZWFudXBfc3ViOgorCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb3JlX29wcyk7CiBjbGVhbnVwX3N5bmM6CiAJaXBfdnNfc3luY19jbGVhbnVwKCk7CiAgIGNsZWFudXBfY29ubjoKQEAgLTE5NjQsMjAgKzIwNDcsMjAgQEAKIAlpcF92c19jb250cm9sX2NsZWFudXAoKTsKICAgY2xlYW51cF9lc3RpbWF0b3I6CiAJaXBfdnNfZXN0aW1hdG9yX2NsZWFudXAoKTsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfY29yZV9vcHMpOwkvKiBmcmVlIGlwX3ZzIHN0cnVjdCAqLwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcF92c19jbGVhbnVwKHZvaWQpCiB7CiAJbmZfdW5yZWdpc3Rlcl9ob29rcyhpcF92c19vcHMsIEFSUkFZX1NJWkUoaXBfdnNfb3BzKSk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcHZzX2NvcmVfZGV2X29wcyk7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvcmVfb3BzKTsJLyogZnJlZSBpcF92cyBzdHJ1Y3QgKi8KIAlpcF92c19zeW5jX2NsZWFudXAoKTsKIAlpcF92c19jb25uX2NsZWFudXAoKTsKIAlpcF92c19hcHBfY2xlYW51cCgpOwogCWlwX3ZzX3Byb3RvY29sX2NsZWFudXAoKTsKIAlpcF92c19jb250cm9sX2NsZWFudXAoKTsKIAlpcF92c19lc3RpbWF0b3JfY2xlYW51cCgpOwotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb3JlX29wcyk7CS8qIGZyZWUgaXBfdnMgc3RydWN0ICovCiAJcHJfaW5mbygiaXB2cyB1bmxvYWRlZC5cbiIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKaW5kZXggYWU0NzA5MC4uMzc4OTBmMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwpAQCAtNjksNiArNjksMTEgQEAKIH0KICNlbmRpZgogCisKKy8qICBQcm90b3MgKi8KK3N0YXRpYyB2b2lkIF9faXBfdnNfZGVsX3NlcnZpY2Uoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yyk7CisKKwogI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CiAvKiBUYWtlbiBmcm9tIHJ0Nl9maWxsX25vZGUoKSBpbiBuZXQvaXB2Ni9yb3V0ZS5jLCBpcyB0aGVyZSBhIGJldHRlciB3YXk/ICovCiBzdGF0aWMgaW50IF9faXBfdnNfYWRkcl9pc19sb2NhbF92NihzdHJ1Y3QgbmV0ICpuZXQsCkBAIC0xMjE0LDYgKzEyMTksOCBAQAogCXdyaXRlX3VubG9ja19iaCgmX19pcF92c19zdmNfbG9jayk7CiAKIAkqc3ZjX3AgPSBzdmM7CisJLyogTm93IHRoZXJlIGlzIGEgc2VydmljZSAtIGZ1bGwgdGhyb3R0bGUgKi8KKwlpcHZzLT5lbmFibGUgPSAxOwogCXJldHVybiAwOwogCiAKQEAgLTE0NzIsNiArMTQ3OSw4NCBAQAogCXJldHVybiAwOwogfQogCisvKgorICoJRGVsZXRlIHNlcnZpY2UgYnkge25ldG5zfSBpbiB0aGUgc2VydmljZSB0YWJsZS4KKyAqCUNhbGxlZCBieSBfX2lwX3ZzX2NsZWFudXAoKQorICovCit2b2lkIF9faXBfdnNfc2VydmljZV9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlFbnRlckZ1bmN0aW9uKDIpOworCS8qIENoZWNrIGZvciAiZnVsbCIgYWRkcmVzc2VkIGVudHJpZXMgKi8KKwltdXRleF9sb2NrKCZfX2lwX3ZzX211dGV4KTsKKwlpcF92c19mbHVzaChuZXQpOworCW11dGV4X3VubG9jaygmX19pcF92c19tdXRleCk7CisJTGVhdmVGdW5jdGlvbigyKTsKK30KKy8qCisgKiBSZWxlYXNlIGRzdCBob2xkIGJ5IGRzdF9jYWNoZQorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK19faXBfdnNfZGV2X3Jlc2V0KHN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXNwaW5fbG9ja19iaCgmZGVzdC0+ZHN0X2xvY2spOworCWlmIChkZXN0LT5kc3RfY2FjaGUgJiYgZGVzdC0+ZHN0X2NhY2hlLT5kZXYgPT0gZGV2KSB7CisJCUlQX1ZTX0RCR19CVUYoMywgIlJlc2V0IGRldjolcyBkZXN0ICVzOiV1ICxkZXN0LT5yZWZjbnQ9JWRcbiIsCisJCQkgICAgICBkZXYtPm5hbWUsCisJCQkgICAgICBJUF9WU19EQkdfQUREUihkZXN0LT5hZiwgJmRlc3QtPmFkZHIpLAorCQkJICAgICAgbnRvaHMoZGVzdC0+cG9ydCksCisJCQkgICAgICBhdG9taWNfcmVhZCgmZGVzdC0+cmVmY250KSk7CisJCWlwX3ZzX2RzdF9yZXNldChkZXN0KTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJmRlc3QtPmRzdF9sb2NrKTsKKworfQorLyoKKyAqIE5ldGRldiBldmVudCByZWNlaXZlcgorICogQ3VycmVudGx5IG9ubHkgTkVUREVWX1VOUkVHSVNURVIgaXMgaGFuZGxlZCwgaS5lLiBpZiB3ZSBob2xkIGEgcmVmZXJlbmNlIHRvCisgKiBhIGRldmljZSB0aGF0IGlzICJ1bnJlZ2lzdGVyIiBpdCBtdXN0IGJlIHJlbGVhc2VkLgorICovCitzdGF0aWMgaW50IGlwX3ZzX2RzdF9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsIHVuc2lnbmVkIGxvbmcgZXZlbnQsCisJCQkgICAgdm9pZCAqcHRyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CisJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOworCXN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmM7CisJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3Q7CisJdW5zaWduZWQgaW50IGlkeDsKKworCWlmIChldmVudCAhPSBORVRERVZfVU5SRUdJU1RFUikKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCUlQX1ZTX0RCRygzLCAiJXMoKSBkZXY9JXNcbiIsIF9fZnVuY19fLCBkZXYtPm5hbWUpOworCUVudGVyRnVuY3Rpb24oMik7CisJbXV0ZXhfbG9jaygmX19pcF92c19tdXRleCk7CisJZm9yIChpZHggPSAwOyBpZHggPCBJUF9WU19TVkNfVEFCX1NJWkU7IGlkeCsrKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ZjLCAmaXBfdnNfc3ZjX3RhYmxlW2lkeF0sIHNfbGlzdCkgeworCQkJaWYgKG5ldF9lcShzdmMtPm5ldCwgbmV0KSkgeworCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzdCwgJnN2Yy0+ZGVzdGluYXRpb25zLAorCQkJCQkJICAgIG5fbGlzdCkgeworCQkJCQlfX2lwX3ZzX2Rldl9yZXNldChkZXN0LCBkZXYpOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ZjLCAmaXBfdnNfc3ZjX2Z3bV90YWJsZVtpZHhdLCBmX2xpc3QpIHsKKwkJCWlmIChuZXRfZXEoc3ZjLT5uZXQsIG5ldCkpIHsKKwkJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc3QsICZzdmMtPmRlc3RpbmF0aW9ucywKKwkJCQkJCSAgICBuX2xpc3QpIHsKKwkJCQkJX19pcF92c19kZXZfcmVzZXQoZGVzdCwgZGV2KTsKKwkJCQl9CisJCQl9CisKKwkJfQorCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzdCwgJm5ldF9pcHZzKG5ldCktPmRlc3RfdHJhc2gsIG5fbGlzdCkgeworCQlfX2lwX3ZzX2Rldl9yZXNldChkZXN0LCBkZXYpOworCX0KKwltdXRleF91bmxvY2soJl9faXBfdnNfbXV0ZXgpOworCUxlYXZlRnVuY3Rpb24oMik7CisJcmV0dXJuIE5PVElGWV9ET05FOworfQogCiAvKgogICoJWmVybyBjb3VudGVycyBpbiBhIHNlcnZpY2Ugb3IgYWxsIHNlcnZpY2VzCkBAIC0xOTgxLDcgKzIwNjYsNyBAQAogCS5vcGVuICAgID0gaXBfdnNfaW5mb19vcGVuLAogCS5yZWFkICAgID0gc2VxX3JlYWQsCiAJLmxsc2VlayAgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9wcml2YXRlLAorCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfbmV0LAogfTsKIAogI2VuZGlmCkBAIC0yMDI0LDcgKzIxMDksNyBAQAogCS5vcGVuID0gaXBfdnNfc3RhdHNfc2VxX29wZW4sCiAJLnJlYWQgPSBzZXFfcmVhZCwKIAkubGxzZWVrID0gc2VxX2xzZWVrLAotCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZV9uZXQsCiB9OwogCiBzdGF0aWMgaW50IGlwX3ZzX3N0YXRzX3BlcmNwdV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMjA5Myw3ICsyMTc4LDcgQEAKIAkub3BlbiA9IGlwX3ZzX3N0YXRzX3BlcmNwdV9zZXFfb3BlbiwKIAkucmVhZCA9IHNlcV9yZWFkLAogCS5sbHNlZWsgPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlX25ldCwKIH07CiAjZW5kaWYKIApAQCAtMzU4OCw2ICszNjczLDEwIEBACiAKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGlwX3ZzX2RzdF9ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IGlwX3ZzX2RzdF9ldmVudCwKK307CisKIGludCBfX25ldF9pbml0IF9faXBfdnNfY29udHJvbF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgaWR4OwpAQCAtMzYyNiw3ICszNzE1LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9fbmV0X2V4aXQgX19pcF92c19jb250cm9sX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMobmV0KTsKIApAQCAtMzYzOSwxMSArMzcyOCw2IEBACiAJZnJlZV9wZXJjcHUoaXB2cy0+dG90X3N0YXRzLmNwdXN0YXRzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHZzX2NvbnRyb2xfb3BzID0gewotCS5pbml0ID0gX19pcF92c19jb250cm9sX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX2NvbnRyb2xfY2xlYW51cCwKLX07Ci0KIGludCBfX2luaXQgaXBfdnNfY29udHJvbF9pbml0KHZvaWQpCiB7CiAJaW50IGlkeDsKQEAgLTM2NTcsMzMgKzM3NDEsMzIgQEAKIAkJSU5JVF9MSVNUX0hFQUQoJmlwX3ZzX3N2Y19md21fdGFibGVbaWR4XSk7CiAJfQogCi0JcmV0ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb250cm9sX29wcyk7Ci0JaWYgKHJldCkgewotCQlwcl9lcnIoImNhbm5vdCByZWdpc3RlciBuYW1lc3BhY2UuXG4iKTsKLQkJZ290byBlcnI7Ci0JfQotCiAJc21wX3dtYigpOwkvKiBEbyB3ZSByZWFsbHkgbmVlZCBpdCBub3cgPyAqLwogCiAJcmV0ID0gbmZfcmVnaXN0ZXJfc29ja29wdCgmaXBfdnNfc29ja29wdHMpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgc29ja29wdC5cbiIpOwotCQlnb3RvIGVycl9uZXQ7CisJCWdvdG8gZXJyX3NvY2s7CiAJfQogCiAJcmV0ID0gaXBfdnNfZ2VubF9yZWdpc3RlcigpOwogCWlmIChyZXQpIHsKIAkJcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgR2VuZXJpYyBOZXRsaW5rIGludGVyZmFjZS5cbiIpOwotCQluZl91bnJlZ2lzdGVyX3NvY2tvcHQoJmlwX3ZzX3NvY2tvcHRzKTsKLQkJZ290byBlcnJfbmV0OworCQlnb3RvIGVycl9nZW5sOwogCX0KIAorCXJldCA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaXBfdnNfZHN0X25vdGlmaWVyKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfbm90ZjsKKwogCUxlYXZlRnVuY3Rpb24oMik7CiAJcmV0dXJuIDA7CiAKLWVycl9uZXQ6Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX2NvbnRyb2xfb3BzKTsKLWVycjoKK2Vycl9ub3RmOgorCWlwX3ZzX2dlbmxfdW5yZWdpc3RlcigpOworZXJyX2dlbmw6CisJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CitlcnJfc29jazoKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zNjkxLDcgKzM3NzQsNiBAQAogdm9pZCBpcF92c19jb250cm9sX2NsZWFudXAodm9pZCkKIHsKIAlFbnRlckZ1bmN0aW9uKDIpOwotCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB2c19jb250cm9sX29wcyk7CiAJaXBfdnNfZ2VubF91bnJlZ2lzdGVyKCk7CiAJbmZfdW5yZWdpc3Rlcl9zb2Nrb3B0KCZpcF92c19zb2Nrb3B0cyk7CiAJTGVhdmVGdW5jdGlvbigyKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19lc3QuYwppbmRleCA4Yzg3NjZjLi41MDhjY2U5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZXN0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2VzdC5jCkBAIC0xOTIsNyArMTkyLDcgQEAKIAlkc3QtPm91dGJwcyA9IChlLT5vdXRicHMgKyAweEYpID4+IDU7CiB9CiAKLXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX2VzdGltYXRvcl9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK2ludCBfX25ldF9pbml0IF9faXBfdnNfZXN0aW1hdG9yX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gbmV0X2lwdnMobmV0KTsKIApAQCAtMjAzLDI0ICsyMDMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2VzdGltYXRvcl9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlkZWxfdGltZXJfc3luYygmbmV0X2lwdnMobmV0KS0+ZXN0X3RpbWVyKTsKIH0KLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXBfdnNfYXBwX29wcyA9IHsKLQkuaW5pdCA9IF9faXBfdnNfZXN0aW1hdG9yX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX2VzdGltYXRvcl9leGl0LAotfTsKIAogaW50IF9faW5pdCBpcF92c19lc3RpbWF0b3JfaW5pdCh2b2lkKQogewotCWludCBydjsKLQotCXJ2ID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXBfdnNfYXBwX29wcyk7Ci0JcmV0dXJuIHJ2OworCXJldHVybiAwOwogfQogCiB2b2lkIGlwX3ZzX2VzdGltYXRvcl9jbGVhbnVwKHZvaWQpCiB7Ci0JdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcF92c19hcHBfb3BzKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKaW5kZXggMTc0ODRhNC4uZWI4NjAyOCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKQEAgLTMxNiw3ICszMTYsNyBAQAogLyoKICAqIHBlciBuZXR3b3JrIG5hbWUtc3BhY2UgaW5pdAogICovCi1zdGF0aWMgaW50IF9fbmV0X2luaXQgX19pcF92c19wcm90b2NvbF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK2ludCBfX25ldF9pbml0IF9faXBfdnNfcHJvdG9jb2xfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAjaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX1RDUAogCXJlZ2lzdGVyX2lwX3ZzX3Byb3RvX25ldG5zKG5ldCwgJmlwX3ZzX3Byb3RvY29sX3RjcCk7CkBAIC0zMzYsNyArMzM2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQordm9pZCBfX25ldF9leGl0IF9faXBfdnNfcHJvdG9jb2xfY2xlYW51cChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCXN0cnVjdCBpcF92c19wcm90b19kYXRhICpwZDsKQEAgLTM0OSwxMSArMzQ5LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB2c19wcm90b19vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX3Byb3RvY29sX2luaXQsCi0JLmV4aXQgPSBfX2lwX3ZzX3Byb3RvY29sX2NsZWFudXAsCi19OwotCiBpbnQgX19pbml0IGlwX3ZzX3Byb3RvY29sX2luaXQodm9pZCkKIHsKIAljaGFyIHByb3RvY29sc1s2NF07CkBAIC0zODIsNyArMzc3LDYgQEAKIAlSRUdJU1RFUl9QUk9UT0NPTCgmaXBfdnNfcHJvdG9jb2xfZXNwKTsKICNlbmRpZgogCXByX2luZm8oIlJlZ2lzdGVyZWQgcHJvdG9jb2xzICglcylcbiIsICZwcm90b2NvbHNbMl0pOwotCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX3Byb3RvX29wcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5Myw3ICszODcsNiBAQAogCXN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7CiAJaW50IGk7CiAKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfcHJvdG9fb3BzKTsKIAkvKiB1bnJlZ2lzdGVyIGFsbCB0aGUgaXB2cyBwcm90b2NvbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgSVBfVlNfUFJPVE9fVEFCX1NJWkU7IGkrKykgewogCQl3aGlsZSAoKHBwID0gaXBfdnNfcHJvdG9fdGFibGVbaV0pICE9IE5VTEwpCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwppbmRleCAzZTc5NjFlLi5lMjkyZTViIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKQEAgLTEzMDMsMTMgKzEzMDMsMTggQEAKIAlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwogCWludCByZXN1bHQ7CiAKLQkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgKi8KLQlyZXN1bHQgPSBfX3NvY2tfY3JlYXRlKG5ldCwgUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrLCAxKTsKKwkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgbW92ZSBpdCB0byByaWdodCBuYW1lIHNwYWNlIGxhdGVyICovCisJcmVzdWx0ID0gc29ja19jcmVhdGVfa2VybihQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgJnNvY2spOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCXByX2VycigiRXJyb3IgZHVyaW5nIGNyZWF0aW9uIG9mIHNvY2tldDsgdGVybWluYXRpbmdcbiIpOwogCQlyZXR1cm4gRVJSX1BUUihyZXN1bHQpOwogCX0KLQorCS8qCisJICogS2VybmVsIHNvY2tldHMgdGhhdCBhcmUgYSBwYXJ0IG9mIGEgbmFtZXNwYWNlLCBzaG91bGQgbm90CisJICogaG9sZCBhIHJlZmVyZW5jZSB0byBhIG5hbWVzcGFjZSBpbiBvcmRlciB0byBhbGxvdyB0byBzdG9wIGl0LgorCSAqIEFmdGVyIHNrX2NoYW5nZV9uZXQgc2hvdWxkIGJlIHJlbGVhc2VkIHVzaW5nIHNrX3JlbGVhc2Vfa2VybmVsLgorCSAqLworCXNrX2NoYW5nZV9uZXQoc29jay0+c2ssIG5ldCk7CiAJcmVzdWx0ID0gc2V0X21jYXN0X2lmKHNvY2stPnNrLCBpcHZzLT5tYXN0ZXJfbWNhc3RfaWZuKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlwcl9lcnIoIkVycm9yIHNldHRpbmcgb3V0Ym91bmQgbWNhc3QgaW50ZXJmYWNlXG4iKTsKQEAgLTEzMzQsOCArMTMzOSw4IEBACiAKIAlyZXR1cm4gc29jazsKIAotICBlcnJvcjoKLQlzb2NrX3JlbGVhc2Uoc29jayk7CitlcnJvcjoKKwlza19yZWxlYXNlX2tlcm5lbChzb2NrLT5zayk7CiAJcmV0dXJuIEVSUl9QVFIocmVzdWx0KTsKIH0KIApAQCAtMTM1MCwxMiArMTM1NSwxNyBAQAogCWludCByZXN1bHQ7CiAKIAkvKiBGaXJzdCBjcmVhdGUgYSBzb2NrZXQgKi8KLQlyZXN1bHQgPSBfX3NvY2tfY3JlYXRlKG5ldCwgUEZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICZzb2NrLCAxKTsKKwlyZXN1bHQgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLCAmc29jayk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJfZXJyKCJFcnJvciBkdXJpbmcgY3JlYXRpb24gb2Ygc29ja2V0OyB0ZXJtaW5hdGluZ1xuIik7CiAJCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiAJfQotCisJLyoKKwkgKiBLZXJuZWwgc29ja2V0cyB0aGF0IGFyZSBhIHBhcnQgb2YgYSBuYW1lc3BhY2UsIHNob3VsZCBub3QKKwkgKiBob2xkIGEgcmVmZXJlbmNlIHRvIGEgbmFtZXNwYWNlIGluIG9yZGVyIHRvIGFsbG93IHRvIHN0b3AgaXQuCisJICogQWZ0ZXIgc2tfY2hhbmdlX25ldCBzaG91bGQgYmUgcmVsZWFzZWQgdXNpbmcgc2tfcmVsZWFzZV9rZXJuZWwuCisJICovCisJc2tfY2hhbmdlX25ldChzb2NrLT5zaywgbmV0KTsKIAkvKiBpdCBpcyBlcXVpdmFsZW50IHRvIHRoZSBSRVVTRUFERFIgb3B0aW9uIGluIHVzZXItc3BhY2UgKi8KIAlzb2NrLT5zay0+c2tfcmV1c2UgPSAxOwogCkBAIC0xMzc3LDggKzEzODcsOCBAQAogCiAJcmV0dXJuIHNvY2s7CiAKLSAgZXJyb3I6Ci0Jc29ja19yZWxlYXNlKHNvY2spOworZXJyb3I6CisJc2tfcmVsZWFzZV9rZXJuZWwoc29jay0+c2spOwogCXJldHVybiBFUlJfUFRSKHJlc3VsdCk7CiB9CiAKQEAgLTE0NzMsNyArMTQ4Myw3IEBACiAJCWlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTsKIAogCS8qIHJlbGVhc2UgdGhlIHNlbmRpbmcgbXVsdGljYXN0IHNvY2tldCAqLwotCXNvY2tfcmVsZWFzZSh0aW5mby0+c29jayk7CisJc2tfcmVsZWFzZV9rZXJuZWwodGluZm8tPnNvY2stPnNrKTsKIAlrZnJlZSh0aW5mbyk7CiAKIAlyZXR1cm4gMDsKQEAgLTE1MTMsNyArMTUyMyw3IEBACiAJfQogCiAJLyogcmVsZWFzZSB0aGUgc2VuZGluZyBtdWx0aWNhc3Qgc29ja2V0ICovCi0Jc29ja19yZWxlYXNlKHRpbmZvLT5zb2NrKTsKKwlza19yZWxlYXNlX2tlcm5lbCh0aW5mby0+c29jay0+c2spOwogCWtmcmVlKHRpbmZvLT5idWYpOwogCWtmcmVlKHRpbmZvKTsKIApAQCAtMTYwMSw3ICsxNjExLDcgQEAKIG91dGJ1ZjoKIAlrZnJlZShidWYpOwogb3V0c29ja2V0OgotCXNvY2tfcmVsZWFzZShzb2NrKTsKKwlza19yZWxlYXNlX2tlcm5lbChzb2NrLT5zayk7CiBvdXQ6CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2MTAsNiArMTYyMCw3IEBACiBpbnQgc3RvcF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0ICpuZXQsIGludCBzdGF0ZSkKIHsKIAlzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG5ldF9pcHZzKG5ldCk7CisJaW50IHJldGMgPSAtRUlOVkFMOwogCiAJSVBfVlNfREJHKDcsICIlcygpOiBwaWQgJWRcbiIsIF9fZnVuY19fLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7CiAKQEAgLTE2MjksNyArMTY0MCw3IEBACiAJCXNwaW5fbG9ja19iaCgmaXB2cy0+c3luY19sb2NrKTsKIAkJaXB2cy0+c3luY19zdGF0ZSAmPSB+SVBfVlNfU1RBVEVfTUFTVEVSOwogCQlzcGluX3VubG9ja19iaCgmaXB2cy0+c3luY19sb2NrKTsKLQkJa3RocmVhZF9zdG9wKGlwdnMtPm1hc3Rlcl90aHJlYWQpOworCQlyZXRjID0ga3RocmVhZF9zdG9wKGlwdnMtPm1hc3Rlcl90aHJlYWQpOwogCQlpcHZzLT5tYXN0ZXJfdGhyZWFkID0gTlVMTDsKIAl9IGVsc2UgaWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX0JBQ0tVUCkgewogCQlpZiAoIWlwdnMtPmJhY2t1cF90aHJlYWQpCkBAIC0xNjM5LDIyICsxNjUwLDIwIEBACiAJCQl0YXNrX3BpZF9ucihpcHZzLT5iYWNrdXBfdGhyZWFkKSk7CiAKIAkJaXB2cy0+c3luY19zdGF0ZSAmPSB+SVBfVlNfU1RBVEVfQkFDS1VQOwotCQlrdGhyZWFkX3N0b3AoaXB2cy0+YmFja3VwX3RocmVhZCk7CisJCXJldGMgPSBrdGhyZWFkX3N0b3AoaXB2cy0+YmFja3VwX3RocmVhZCk7CiAJCWlwdnMtPmJhY2t1cF90aHJlYWQgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIGRlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50ICovCiAJaXBfdnNfdXNlX2NvdW50X2RlYygpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldGM7CiB9CiAKIC8qCiAgKiBJbml0aWFsaXplIGRhdGEgc3RydWN0IGZvciBlYWNoIG5ldG5zCiAgKi8KLXN0YXRpYyBpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX3N5bmNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCBfX2lwX3ZzX3N5bmNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSBuZXRfaXB2cyhuZXQpOwogCkBAIC0xNjY4LDI0ICsxNjc3LDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9faXBfdnNfc3luY19jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19pcF92c19zeW5jX2NsZWFudXAoc3RydWN0IG5ldCAqbmV0KQogewotCXN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9NQVNURVIpOwotCXN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9CQUNLVVApOworCWludCByZXRjOworCisJcmV0YyA9IHN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9NQVNURVIpOworCWlmIChyZXRjICYmIHJldGMgIT0gLUVTUkNIKQorCQlwcl9lcnIoIkZhaWxlZCB0byBzdG9wIE1hc3RlciBEYWVtb25cbiIpOworCisJcmV0YyA9IHN0b3Bfc3luY190aHJlYWQobmV0LCBJUF9WU19TVEFURV9CQUNLVVApOworCWlmIChyZXRjICYmIHJldGMgIT0gLUVTUkNIKQorCQlwcl9lcnIoIkZhaWxlZCB0byBzdG9wIEJhY2t1cCBEYWVtb25cbiIpOwogfQogCi1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdnNfc3luY19vcHMgPSB7Ci0JLmluaXQgPSBfX2lwX3ZzX3N5bmNfaW5pdCwKLQkuZXhpdCA9IF9faXBfdnNfc3luY19jbGVhbnVwLAotfTsKLQotCiBpbnQgX19pbml0IGlwX3ZzX3N5bmNfaW5pdCh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcHZzX3N5bmNfb3BzKTsKKwlyZXR1cm4gMDsKIH0KIAogdm9pZCBpcF92c19zeW5jX2NsZWFudXAodm9pZCkKIHsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdnNfc3luY19vcHMpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDMwYmY4YTEuLjQ4MmU5MGMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTEzMzQsNiArMTMzNCw3IEBACiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CisJc3RydWN0IG5mX2Nvbm5fdHN0YW1wICp0c3RhbXA7CiAKIAljdCA9IG5mX2Nvbm50cmFja19hbGxvYyhuZXQsIHpvbmUsIG90dXBsZSwgcnR1cGxlLCBHRlBfQVRPTUlDKTsKIAlpZiAoSVNfRVJSKGN0KSkKQEAgLTE0NTEsNiArMTQ1Miw5IEBACiAJCV9fc2V0X2JpdChJUFNfRVhQRUNURURfQklULCAmY3QtPnN0YXR1cyk7CiAJCWN0LT5tYXN0ZXIgPSBtYXN0ZXJfY3Q7CiAJfQorCXRzdGFtcCA9IG5mX2Nvbm5fdHN0YW1wX2ZpbmQoY3QpOworCWlmICh0c3RhbXApCisJCXRzdGFtcC0+c3RhcnQgPSBrdGltZV90b19ucyhrdGltZV9nZXRfcmVhbCgpKTsKIAogCWFkZF90aW1lcigmY3QtPnRpbWVvdXQpOwogCW5mX2Nvbm50cmFja19oYXNoX2luc2VydChjdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKaW5kZXggYTlhZGY0Yy4uOGEwMjVhNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYwpAQCAtNDU1LDYgKzQ1NSw3IEBACiAJCXZmcmVlKHh0W2FmXS5jb21wYXRfdGFiKTsKIAkJeHRbYWZdLmNvbXBhdF90YWIgPSBOVUxMOwogCQl4dFthZl0ubnVtYmVyID0gMDsKKwkJeHRbYWZdLmN1ciA9IDA7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X2ZsdXNoX29mZnNldHMpOwpAQCAtNDczLDggKzQ3NCw3IEBACiAJCWVsc2UKIAkJCXJldHVybiBtaWQgPyB0bXBbbWlkIC0gMV0uZGVsdGEgOiAwOwogCX0KLQlXQVJOX09OX09OQ0UoMSk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGxlZnQgPyB0bXBbbGVmdCAtIDFdLmRlbHRhIDogMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF9jYWxjX2p1bXApOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X0RTQ1AuYyBiL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCmluZGV4IDBhMjI5MTkuLmFlODI3MTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfRFNDUC5jCkBAIC05OSw3ICs5OSw3IEBACiAJdV9pbnQ4X3Qgb3JpZywgbnY7CiAKIAlvcmlnID0gaXB2Nl9nZXRfZHNmaWVsZChpcGgpOwotCW52ICAgPSAob3JpZyAmIGluZm8tPnRvc19tYXNrKSBeIGluZm8tPnRvc192YWx1ZTsKKwludiAgID0gKG9yaWcgJiB+aW5mby0+dG9zX21hc2spIF4gaW5mby0+dG9zX3ZhbHVlOwogCiAJaWYgKG9yaWcgIT0gbnYpIHsKIAkJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5jCmluZGV4IDQ4MWE4NmYuLjYxODA1ZDcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9jb25udHJhY2suYwpAQCAtMjcyLDExICsyNzIsNiBAQAogewogCWludCByZXQ7CiAKLQlpZiAoc3RyY21wKHBhci0+dGFibGUsICJyYXciKSA9PSAwKSB7Ci0JCXByX2luZm8oInN0YXRlIGlzIHVuZGV0ZXJtaW5lZCBhdCB0aGUgdGltZSBvZiByYXcgdGFibGVcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlyZXQgPSBuZl9jdF9sM3Byb3RvX3RyeV9tb2R1bGVfZ2V0KHBhci0+ZmFtaWx5KTsKIAlpZiAocmV0IDwgMCkKIAkJcHJfaW5mbygiY2Fubm90IGxvYWQgY29ubnRyYWNrIHN1cHBvcnQgZm9yIHByb3RvPSV1XG4iLApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9zZXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfc2V0LmMKaW5kZXggMDYxZDQ4Yy4uYjNiYWJhZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9zZXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3NldC5jCkBAIC04MSw2ICs4MSw3IEBACiAJaWYgKGluZm8tPm1hdGNoX3NldC51LmZsYWdzW0lQU0VUX0RJTV9NQVgtMV0gIT0gMCkgewogCQlwcl93YXJuaW5nKCJQcm90b2NvbCBlcnJvcjogc2V0IG1hdGNoIGRpbWVuc2lvbiAiCiAJCQkgICAiaXMgb3ZlciB0aGUgbGltaXQhXG4iKTsKKwkJaXBfc2V0X25mbmxfcHV0KGluZm8tPm1hdGNoX3NldC5pbmRleCk7CiAJCXJldHVybiAtRVJBTkdFOwogCX0KIApAQCAtMTM1LDYgKzEzNiw4IEBACiAJCWlmIChpbmRleCA9PSBJUFNFVF9JTlZBTElEX0lEKSB7CiAJCQlwcl93YXJuaW5nKCJDYW5ub3QgZmluZCBkZWxfc2V0IGluZGV4ICV1IGFzIHRhcmdldFxuIiwKIAkJCQkgICBpbmZvLT5kZWxfc2V0LmluZGV4KTsKKwkJCWlmIChpbmZvLT5hZGRfc2V0LmluZGV4ICE9IElQU0VUX0lOVkFMSURfSUQpCisJCQkJaXBfc2V0X25mbmxfcHV0KGluZm8tPmFkZF9zZXQuaW5kZXgpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAl9CkBAIC0xNDIsNiArMTQ1LDEwIEBACiAJICAgIGluZm8tPmRlbF9zZXQudS5mbGFnc1tJUFNFVF9ESU1fTUFYLTFdICE9IDApIHsKIAkJcHJfd2FybmluZygiUHJvdG9jb2wgZXJyb3I6IFNFVCB0YXJnZXQgZGltZW5zaW9uICIKIAkJCSAgICJpcyBvdmVyIHRoZSBsaW1pdCFcbiIpOworCQlpZiAoaW5mby0+YWRkX3NldC5pbmRleCAhPSBJUFNFVF9JTlZBTElEX0lEKQorCQkJaXBfc2V0X25mbmxfcHV0KGluZm8tPmFkZF9zZXQuaW5kZXgpOworCQlpZiAoaW5mby0+ZGVsX3NldC5pbmRleCAhPSBJUFNFVF9JTlZBTElEX0lEKQorCQkJaXBfc2V0X25mbmxfcHV0KGluZm8tPmRlbF9zZXQuaW5kZXgpOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKQEAgLTE5Miw2ICsxOTksNyBAQAogCWlmIChpbmZvLT5tYXRjaF9zZXQuZGltID4gSVBTRVRfRElNX01BWCkgewogCQlwcl93YXJuaW5nKCJQcm90b2NvbCBlcnJvcjogc2V0IG1hdGNoIGRpbWVuc2lvbiAiCiAJCQkgICAiaXMgb3ZlciB0aGUgbGltaXQhXG4iKTsKKwkJaXBfc2V0X25mbmxfcHV0KGluZm8tPm1hdGNoX3NldC5pbmRleCk7CiAJCXJldHVybiAtRVJBTkdFOwogCX0KIApAQCAtMjE5LDcgKzIyNyw3IEBACiAJaWYgKGluZm8tPmRlbF9zZXQuaW5kZXggIT0gSVBTRVRfSU5WQUxJRF9JRCkKIAkJaXBfc2V0X2RlbChpbmZvLT5kZWxfc2V0LmluZGV4LAogCQkJICAgc2tiLCBwYXItPmZhbWlseSwKLQkJCSAgIGluZm8tPmFkZF9zZXQuZGltLAorCQkJICAgaW5mby0+ZGVsX3NldC5kaW0sCiAJCQkgICBpbmZvLT5kZWxfc2V0LmZsYWdzKTsKIAogCXJldHVybiBYVF9DT05USU5VRTsKQEAgLTI0NSwxMyArMjUzLDE5IEBACiAJCWlmIChpbmRleCA9PSBJUFNFVF9JTlZBTElEX0lEKSB7CiAJCQlwcl93YXJuaW5nKCJDYW5ub3QgZmluZCBkZWxfc2V0IGluZGV4ICV1IGFzIHRhcmdldFxuIiwKIAkJCQkgICBpbmZvLT5kZWxfc2V0LmluZGV4KTsKKwkJCWlmIChpbmZvLT5hZGRfc2V0LmluZGV4ICE9IElQU0VUX0lOVkFMSURfSUQpCisJCQkJaXBfc2V0X25mbmxfcHV0KGluZm8tPmFkZF9zZXQuaW5kZXgpOwogCQkJcmV0dXJuIC1FTk9FTlQ7CiAJCX0KIAl9CiAJaWYgKGluZm8tPmFkZF9zZXQuZGltID4gSVBTRVRfRElNX01BWCB8fAotCSAgICBpbmZvLT5kZWxfc2V0LmZsYWdzID4gSVBTRVRfRElNX01BWCkgeworCSAgICBpbmZvLT5kZWxfc2V0LmRpbSA+IElQU0VUX0RJTV9NQVgpIHsKIAkJcHJfd2FybmluZygiUHJvdG9jb2wgZXJyb3I6IFNFVCB0YXJnZXQgZGltZW5zaW9uICIKIAkJCSAgICJpcyBvdmVyIHRoZSBsaW1pdCFcbiIpOworCQlpZiAoaW5mby0+YWRkX3NldC5pbmRleCAhPSBJUFNFVF9JTlZBTElEX0lEKQorCQkJaXBfc2V0X25mbmxfcHV0KGluZm8tPmFkZF9zZXQuaW5kZXgpOworCQlpZiAoaW5mby0+ZGVsX3NldC5pbmRleCAhPSBJUFNFVF9JTlZBTElEX0lEKQorCQkJaXBfc2V0X25mbmxfcHV0KGluZm8tPmRlbF9zZXQuaW5kZXgpOwogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zY3RwL2Fzc29jaW9sYS5jIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKaW5kZXggMDY5OGNhZC4uMWEyMWM1NyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvYXNzb2Npb2xhLmMKKysrIGIvbmV0L3NjdHAvYXNzb2Npb2xhLmMKQEAgLTU2OSw2ICs1NjksOCBAQAogCQlzY3RwX2Fzc29jX3NldF9wcmltYXJ5KGFzb2MsIHRyYW5zcG9ydCk7CiAJaWYgKGFzb2MtPnBlZXIuYWN0aXZlX3BhdGggPT0gcGVlcikKIAkJYXNvYy0+cGVlci5hY3RpdmVfcGF0aCA9IHRyYW5zcG9ydDsKKwlpZiAoYXNvYy0+cGVlci5yZXRyYW5fcGF0aCA9PSBwZWVyKQorCQlhc29jLT5wZWVyLnJldHJhbl9wYXRoID0gdHJhbnNwb3J0OwogCWlmIChhc29jLT5wZWVyLmxhc3RfZGF0YV9mcm9tID09IHBlZXIpCiAJCWFzb2MtPnBlZXIubGFzdF9kYXRhX2Zyb20gPSB0cmFuc3BvcnQ7CiAKQEAgLTEzMjMsNiArMTMyNSw4IEBACiAKIAlpZiAodCkKIAkJYXNvYy0+cGVlci5yZXRyYW5fcGF0aCA9IHQ7CisJZWxzZQorCQl0ID0gYXNvYy0+cGVlci5yZXRyYW5fcGF0aDsKIAogCVNDVFBfREVCVUdfUFJJTlRLX0lQQUREUigic2N0cF9hc3NvY191cGRhdGVfcmV0cmFuX3BhdGg6YXNzb2NpYXRpb24iCiAJCQkJICIgJXAgYWRkcjogIiwKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3VscGV2ZW50LmMgYi9uZXQvc2N0cC91bHBldmVudC5jCmluZGV4IGRmZjI3ZDUuLjYxYjFmNWEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3VscGV2ZW50LmMKKysrIGIvbmV0L3NjdHAvdWxwZXZlbnQuYwpAQCAtNTU0LDcgKzU1NCw3IEBACiAJbWVtY3B5KCZzc2YtPnNzZl9pbmZvLCAmY2h1bmstPnNpbmZvLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwogCiAJLyogUGVyIFRTVldHIGRpc2N1c3Npb24gd2l0aCBSYW5keS4gQWxsb3cgdGhlIGFwcGxpY2F0aW9uIHRvCi0JICogcmVzZW1ibGUgYSBmcmFnbWVudGVkIG1lc3NhZ2UuCisJICogcmVhc3NlbWJsZSBhIGZyYWdtZW50ZWQgbWVzc2FnZS4KIAkgKi8KIAlzc2YtPnNzZl9pbmZvLnNpbmZvX2ZsYWdzID0gY2h1bmstPmNodW5rX2hkci0+ZmxhZ3M7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvS2NvbmZpZyBiL25ldC9zdW5ycGMvS2NvbmZpZwppbmRleCA4ODczZmQ4Li5iMjE5OGU2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL0tjb25maWcKKysrIGIvbmV0L3N1bnJwYy9LY29uZmlnCkBAIC0xOCwxNCArMTgsMTMgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBSUENTRUNfR1NTX0tSQjUKLQl0cmlzdGF0ZQorCXRyaXN0YXRlICJTZWN1cmUgUlBDOiBLZXJiZXJvcyBWIG1lY2hhbmlzbSIKIAlkZXBlbmRzIG9uIFNVTlJQQyAmJiBDUllQVE8KLQlwcm9tcHQgIlNlY3VyZSBSUEM6IEtlcmJlcm9zIFYgbWVjaGFuaXNtIiBpZiAhKE5GU19WNCB8fCBORlNEX1Y0KQorCWRlcGVuZHMgb24gQ1JZUFRPX01ENSAmJiBDUllQVE9fREVTICYmIENSWVBUT19DQkMgJiYgQ1JZUFRPX0NUUworCWRlcGVuZHMgb24gQ1JZUFRPX0VDQiAmJiBDUllQVE9fSE1BQyAmJiBDUllQVE9fU0hBMSAmJiBDUllQVE9fQUVTCisJZGVwZW5kcyBvbiBDUllQVE9fQVJDNAogCWRlZmF1bHQgeQogCXNlbGVjdCBTVU5SUENfR1NTCi0Jc2VsZWN0IENSWVBUT19NRDUKLQlzZWxlY3QgQ1JZUFRPX0RFUwotCXNlbGVjdCBDUllQVE9fQ0JDCiAJaGVscAogCSAgQ2hvb3NlIFkgaGVyZSB0byBlbmFibGUgU2VjdXJlIFJQQyB1c2luZyB0aGUgS2VyYmVyb3MgdmVyc2lvbiA1CiAJICBHU1MtQVBJIG1lY2hhbmlzbSAoUkZDIDE5NjQpLgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCmluZGV4IGYzOTE0ZDAuLjMzOWJhNjQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKQEAgLTUyMCw3ICs1MjAsNyBAQAogCQl3YXJuX2dzc2QoKTsKIAkJdGFzay0+dGtfdGltZW91dCA9IDE1KkhaOwogCQlycGNfc2xlZXBfb24oJnBpcGVfdmVyc2lvbl9ycGNfd2FpdHF1ZXVlLCB0YXNrLCBOVUxMKTsKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAlpZiAoSVNfRVJSKGdzc19tc2cpKSB7CiAJCWVyciA9IFBUUl9FUlIoZ3NzX21zZyk7CkBAIC01NjMsMTAgKzU2MywxMiBAQAogCWlmIChQVFJfRVJSKGdzc19tc2cpID09IC1FQUdBSU4pIHsKIAkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocGlwZV92ZXJzaW9uX3dhaXRxdWV1ZSwKIAkJCQlwaXBlX3ZlcnNpb24gPj0gMCwgMTUqSFopOworCQlpZiAocGlwZV92ZXJzaW9uIDwgMCkgeworCQkJd2Fybl9nc3NkKCk7CisJCQllcnIgPSAtRUFDQ0VTOworCQl9CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJaWYgKHBpcGVfdmVyc2lvbiA8IDApCi0JCQl3YXJuX2dzc2QoKTsKIAkJZ290byByZXRyeTsKIAl9CiAJaWYgKElTX0VSUihnc3NfbXNnKSkgewpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jbG50LmMgYi9uZXQvc3VucnBjL2NsbnQuYwppbmRleCBlN2E5NmU0Li44ZDgzZjlkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NsbnQuYworKysgYi9uZXQvc3VucnBjL2NsbnQuYwpAQCAtMTUwOCw3ICsxNTA4LDEwIEBACiAJCWlmIChjbG50LT5jbF9jaGF0dHkpCiAJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBzZXJ2ZXIgJXMgbm90IHJlc3BvbmRpbmcsIHRpbWVkIG91dFxuIiwKIAkJCQljbG50LT5jbF9wcm90bmFtZSwgY2xudC0+Y2xfc2VydmVyKTsKLQkJcnBjX2V4aXQodGFzaywgLUVJTyk7CisJCWlmICh0YXNrLT50a19mbGFncyAmIFJQQ19UQVNLX1RJTUVPVVQpCisJCQlycGNfZXhpdCh0YXNrLCAtRVRJTUVET1VUKTsKKwkJZWxzZQorCQkJcnBjX2V4aXQodGFzaywgLUVJTyk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMKaW5kZXggOTQ5NGMzNy4uY2U1ZWI2OCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMKQEAgLTkwNiw2ICs5MDYsNyBAQAogCX0KIAogCWRwcmludGsoIlJQQzogJTV1IHhtaXQgY29tcGxldGVcbiIsIHRhc2stPnRrX3BpZCk7CisJdGFzay0+dGtfZmxhZ3MgfD0gUlBDX1RBU0tfU0VOVDsKIAlzcGluX2xvY2tfYmgoJnhwcnQtPnRyYW5zcG9ydF9sb2NrKTsKIAogCXhwcnQtPm9wcy0+c2V0X3JldHJhbnNfdGltZW91dCh0YXNrKTsKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCAzYTQzYTgzLi5iMWQ3NWJlIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC01MjQsNiArNTI0LDggQEAKIAkJCSAgICAgIGludCwgaW50KTsKIHN0YXRpYyBpbnQgdW5peF9zZXFwYWNrZXRfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKiwgc3RydWN0IHNvY2tldCAqLAogCQkJCSAgc3RydWN0IG1zZ2hkciAqLCBzaXplX3QpOworc3RhdGljIGludCB1bml4X3NlcXBhY2tldF9yZWN2bXNnKHN0cnVjdCBraW9jYiAqLCBzdHJ1Y3Qgc29ja2V0ICosCisJCQkJICBzdHJ1Y3QgbXNnaGRyICosIHNpemVfdCwgaW50KTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdW5peF9zdHJlYW1fb3BzID0gewogCS5mYW1pbHkgPQlQRl9VTklYLApAQCAtNTgzLDcgKzU4NSw3IEBACiAJLnNldHNvY2tvcHQgPQlzb2NrX25vX3NldHNvY2tvcHQsCiAJLmdldHNvY2tvcHQgPQlzb2NrX25vX2dldHNvY2tvcHQsCiAJLnNlbmRtc2cgPQl1bml4X3NlcXBhY2tldF9zZW5kbXNnLAotCS5yZWN2bXNnID0JdW5peF9kZ3JhbV9yZWN2bXNnLAorCS5yZWN2bXNnID0JdW5peF9zZXFwYWNrZXRfcmVjdm1zZywKIAkubW1hcCA9CQlzb2NrX25vX21tYXAsCiAJLnNlbmRwYWdlID0Jc29ja19ub19zZW5kcGFnZSwKIH07CkBAIC0xNjk5LDYgKzE3MDEsMTggQEAKIAlyZXR1cm4gdW5peF9kZ3JhbV9zZW5kbXNnKGtpb2NiLCBzb2NrLCBtc2csIGxlbik7CiB9CiAKK3N0YXRpYyBpbnQgdW5peF9zZXFwYWNrZXRfcmVjdm1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCQkgICAgICBzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBzaXplLAorCQkJICAgICAgaW50IGZsYWdzKQoreworCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOworCisJaWYgKHNrLT5za19zdGF0ZSAhPSBUQ1BfRVNUQUJMSVNIRUQpCisJCXJldHVybiAtRU5PVENPTk47CisKKwlyZXR1cm4gdW5peF9kZ3JhbV9yZWN2bXNnKGlvY2IsIHNvY2ssIG1zZywgc2l6ZSwgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCB1bml4X2NvcHlfYWRkcihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgdW5peF9zb2NrICp1ID0gdW5peF9zayhzayk7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCAxNTc5MmQ4Li5iNGQ3NDVlIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTE0MDYsNiArMTQwNiw3IEBACiAJc3RydWN0IG5ldCAqbmV0ID0geHBfbmV0KHBvbGljeSk7CiAJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHhmcm1fbW9kZSAqaW5uZXJfbW9kZTsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfcHJldiA9IE5VTEw7CiAJc3RydWN0IGRzdF9lbnRyeSAqZHN0MCA9IE5VTEw7CiAJaW50IGkgPSAwOwpAQCAtMTQzNiw2ICsxNDM3LDE3IEBACiAJCQlnb3RvIHB1dF9zdGF0ZXM7CiAJCX0KIAorCQlpZiAoeGZybVtpXS0+c2VsLmZhbWlseSA9PSBBRl9VTlNQRUMpIHsKKwkJCWlubmVyX21vZGUgPSB4ZnJtX2lwMmlubmVyX21vZGUoeGZybVtpXSwKKwkJCQkJCQl4ZnJtX2FmMnByb3RvKGZhbWlseSkpOworCQkJaWYgKCFpbm5lcl9tb2RlKSB7CisJCQkJZXJyID0gLUVBRk5PU1VQUE9SVDsKKwkJCQlkc3RfcmVsZWFzZShkc3QpOworCQkJCWdvdG8gcHV0X3N0YXRlczsKKwkJCX0KKwkJfSBlbHNlCisJCQlpbm5lcl9tb2RlID0geGZybVtpXS0+aW5uZXJfbW9kZTsKKwogCQlpZiAoIWRzdF9wcmV2KQogCQkJZHN0MCA9IGRzdDE7CiAJCWVsc2UgewpAQCAtMTQ2NCw3ICsxNDc2LDcgQEAKIAkJZHN0MS0+bGFzdHVzZSA9IG5vdzsKIAogCQlkc3QxLT5pbnB1dCA9IGRzdF9kaXNjYXJkOwotCQlkc3QxLT5vdXRwdXQgPSB4ZnJtW2ldLT5vdXRlcl9tb2RlLT5hZmluZm8tPm91dHB1dDsKKwkJZHN0MS0+b3V0cHV0ID0gaW5uZXJfbW9kZS0+YWZpbmZvLT5vdXRwdXQ7CiAKIAkJZHN0MS0+bmV4dCA9IGRzdF9wcmV2OwogCQlkc3RfcHJldiA9IGRzdDE7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3JlcGxheS5jIGIvbmV0L3hmcm0veGZybV9yZXBsYXkuYwppbmRleCBmMjE4Mzg1Li40N2YxYjg2IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3JlcGxheS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcmVwbGF5LmMKQEAgLTUzMiw5ICs1MzIsMTIgQEAKIAogCWlmIChyZXBsYXlfZXNuKSB7CiAJCWlmIChyZXBsYXlfZXNuLT5yZXBsYXlfd2luZG93ID4KLQkJICAgIHJlcGxheV9lc24tPmJtcF9sZW4gKiBzaXplb2YoX191MzIpKQorCQkgICAgcmVwbGF5X2Vzbi0+Ym1wX2xlbiAqIHNpemVvZihfX3UzMikgKiA4KQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9FU04pICYmIHJlcGxheV9lc24tPnJlcGxheV93aW5kb3cgPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAoKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9FU04pICYmIHgtPnJlcGxheV9lc24pCiAJCXgtPnJlcGwgPSAmeGZybV9yZXBsYXlfZXNuOwogCWVsc2UKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggNWQxZDYwZC4uYzY1OGNiMyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTEyNCw2ICsxMjQsOSBAQAogewogCXN0cnVjdCBubGF0dHIgKnJ0ID0gYXR0cnNbWEZSTUFfUkVQTEFZX0VTTl9WQUxdOwogCisJaWYgKChwLT5mbGFncyAmIFhGUk1fU1RBVEVfRVNOKSAmJiAhcnQpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKCFydCkKIAkJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQgYi9zY3JpcHRzL01ha2VmaWxlLmJ1aWxkCmluZGV4IGQ1ZjkyNWEuLjYxNjU2MjIgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuYnVpbGQKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5idWlsZApAQCAtMjQ0LDE0ICsyNDQsMTkgQEAKIAogaWZkZWYgQ09ORklHX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiBpZmRlZiBCVUlMRF9DX1JFQ09SRE1DT1VOVAoraWZlcSAoIiQob3JpZ2luIFJFQ09SRE1DT1VOVF9XQVJOKSIsICJjb21tYW5kIGxpbmUiKQorICBSRUNPUkRNQ09VTlRfRkxBR1MgPSAtdworZW5kaWYKICMgRHVlIHRvIHJlY3Vyc2lvbiwgd2UgbXVzdCBza2lwIGVtcHR5Lm8uCiAjIFRoZSBlbXB0eS5vIGZpbGUgaXMgY3JlYXRlZCBpbiB0aGUgbWFrZSBwcm9jZXNzIGluIG9yZGVyIHRvIGRldGVybWluZQogIyAgdGhlIHRhcmdldCBlbmRpYW5uZXNzIGFuZCB3b3JkIHNpemUuIEl0IGlzIG1hZGUgYmVmb3JlIGFsbCBvdGhlciBDCiAjICBmaWxlcywgaW5jbHVkaW5nIHJlY29yZG1jb3VudC4KIHN1Yl9jbWRfcmVjb3JkX21jb3VudCA9CQkJCQlcCiAJaWYgWyAkKEApICE9ICJzY3JpcHRzL21vZC9lbXB0eS5vIiBdOyB0aGVuCVwKLQkJJChvYmp0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudCAiJChAKSI7CVwKKwkJJChvYmp0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudCAkKFJFQ09SRE1DT1VOVF9GTEFHUykgIiQoQCkiOwlcCiAJZmk7CityZWNvcmRtY291bnRfc291cmNlIDo9ICQoc3JjdHJlZSkvc2NyaXB0cy9yZWNvcmRtY291bnQuYyBcCisJCSAgICAkKHNyY3RyZWUpL3NjcmlwdHMvcmVjb3JkbWNvdW50LmgKIGVsc2UKIHN1Yl9jbWRfcmVjb3JkX21jb3VudCA9IHNldCAtZSA7IHBlcmwgJChzcmN0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCAiJChBUkNIKSIgXAogCSIkKGlmICQoQ09ORklHX0NQVV9CSUdfRU5ESUFOKSxiaWcsbGl0dGxlKSIgXApAQCAtMjU5LDYgKzI2NCw3IEBACiAJIiQoT0JKRFVNUCkiICIkKE9CSkNPUFkpIiAiJChDQykgJChLQlVJTERfQ0ZMQUdTKSIgXAogCSIkKExEKSIgIiQoTk0pIiAiJChSTSkiICIkKE1WKSIgXAogCSIkKGlmICQocGFydC1vZi1tb2R1bGUpLDEsMCkiICIkKEApIjsKK3JlY29yZG1jb3VudF9zb3VyY2UgOj0gJChzcmN0cmVlKS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbAogZW5kaWYKIGNtZF9yZWNvcmRfbWNvdW50ID0gCQkJCQkJXAogCWlmIFsgIiQoZmluZHN0cmluZyAtcGcsJChfY19mbGFncykpIiA9ICItcGciIF07IHRoZW4JXApAQCAtMjc5LDEzICsyODUsMTMgQEAKIGVuZGVmCiAKICMgQnVpbHQtaW4gYW5kIGNvbXBvc2l0ZSBtb2R1bGUgcGFydHMKLSQob2JqKS8lLm86ICQoc3JjKS8lLmMgRk9SQ0UKKyQob2JqKS8lLm86ICQoc3JjKS8lLmMgJChyZWNvcmRtY291bnRfc291cmNlKSBGT1JDRQogCSQoY2FsbCBjbWQsZm9yY2VfY2hlY2tzcmMpCiAJJChjYWxsIGlmX2NoYW5nZWRfcnVsZSxjY19vX2MpCiAKICMgU2luZ2xlLXBhcnQgbW9kdWxlcyBhcmUgc3BlY2lhbCBzaW5jZSB3ZSBuZWVkIHRvIG1hcmsgdGhlbSBpbiAkKE1PRFZFUkRJUikKIAotJChzaW5nbGUtdXNlZC1tKTogJChvYmopLyUubzogJChzcmMpLyUuYyBGT1JDRQorJChzaW5nbGUtdXNlZC1tKTogJChvYmopLyUubzogJChzcmMpLyUuYyAkKHJlY29yZG1jb3VudF9zb3VyY2UpIEZPUkNFCiAJJChjYWxsIGNtZCxmb3JjZV9jaGVja3NyYykKIAkkKGNhbGwgaWZfY2hhbmdlZF9ydWxlLGNjX29fYykKIAlAeyBlY2hvICQoQDoubz0ua28pOyBlY2hvICRAOyB9ID4gJChNT0RWRVJESVIpLyQoQEY6Lm89Lm1vZCkKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMgYi9zY3JpcHRzL2tjb25maWcvY29uZi5jCmluZGV4IDY1OTMyNmMuLjAwNmFkODEgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMva2NvbmZpZy9jb25mLmMKKysrIGIvc2NyaXB0cy9rY29uZmlnL2NvbmYuYwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJCX0KIAkJaWYgKCFjaGlsZCkKIAkJCWNvbnRpbnVlOwotCQlpZiAobGluZVtzdHJsZW4obGluZSkgLSAxXSA9PSAnPycpIHsKKwkJaWYgKGxpbmVbMF0gJiYgbGluZVtzdHJsZW4obGluZSkgLSAxXSA9PSAnPycpIHsKIAkJCXByaW50X2hlbHAoY2hpbGQpOwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvbW9kL21vZHBvc3QuYyBiL3NjcmlwdHMvbW9kL21vZHBvc3QuYwppbmRleCBjZDEwNGFmLi40MTNjNTM2IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmMKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5jCkBAIC00MjAsMTEgKzQyMCwxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoaGRyLT5lX3NobnVtID09IDApIHsKKwlpZiAoaGRyLT5lX3NobnVtID09IFNITl9VTkRFRikgewogCQkvKgogCQkgKiBUaGVyZSBhcmUgbW9yZSB0aGFuIDY0ayBzZWN0aW9ucywKIAkJICogcmVhZCBjb3VudCBmcm9tIC5zaF9zaXplLgotCQkgKiBub3RlOiBpdCBkb2Vzbid0IG5lZWQgc2huZHgyc2VjaW5kZXgoKQogCQkgKi8KIAkJaW5mby0+bnVtX3NlY3Rpb25zID0gVE9fTkFUSVZFKHNlY2hkcnNbMF0uc2hfc2l6ZSk7CiAJfQpAQCAtNDMyLDggKzQzMSw3IEBACiAJCWluZm8tPm51bV9zZWN0aW9ucyA9IGhkci0+ZV9zaG51bTsKIAl9CiAJaWYgKGhkci0+ZV9zaHN0cm5keCA9PSBTSE5fWElOREVYKSB7Ci0JCWluZm8tPnNlY2luZGV4X3N0cmluZ3MgPQotCQkgICAgc2huZHgyc2VjaW5kZXgoVE9fTkFUSVZFKHNlY2hkcnNbMF0uc2hfbGluaykpOworCQlpbmZvLT5zZWNpbmRleF9zdHJpbmdzID0gVE9fTkFUSVZFKHNlY2hkcnNbMF0uc2hfbGluayk7CiAJfQogCWVsc2UgewogCQlpbmZvLT5zZWNpbmRleF9zdHJpbmdzID0gaGRyLT5lX3Noc3RybmR4OwpAQCAtNDg5LDcgKzQ4Nyw3IEBACiAJCQkgICAgc2VjaGRyc1tpXS5zaF9vZmZzZXQ7CiAJCQlpbmZvLT5zeW10YWJfc3RvcCAgPSAodm9pZCAqKWhkciArCiAJCQkgICAgc2VjaGRyc1tpXS5zaF9vZmZzZXQgKyBzZWNoZHJzW2ldLnNoX3NpemU7Ci0JCQlzaF9saW5rX2lkeCA9IHNobmR4MnNlY2luZGV4KHNlY2hkcnNbaV0uc2hfbGluayk7CisJCQlzaF9saW5rX2lkeCA9IHNlY2hkcnNbaV0uc2hfbGluazsKIAkJCWluZm8tPnN0cnRhYiAgICAgICA9ICh2b2lkICopaGRyICsKIAkJCSAgICBzZWNoZHJzW3NoX2xpbmtfaWR4XS5zaF9vZmZzZXQ7CiAJCX0KQEAgLTUxNiwxMSArNTE0LDkgQEAKIAogCWlmIChzeW10YWJfc2huZHhfaWR4ICE9IH4wVSkgewogCQlFbGYzMl9Xb3JkICpwOwotCQlpZiAoc3ltdGFiX2lkeCAhPQotCQkgICAgc2huZHgyc2VjaW5kZXgoc2VjaGRyc1tzeW10YWJfc2huZHhfaWR4XS5zaF9saW5rKSkKKwkJaWYgKHN5bXRhYl9pZHggIT0gc2VjaGRyc1tzeW10YWJfc2huZHhfaWR4XS5zaF9saW5rKQogCQkJZmF0YWwoIiVzOiBTWU1UQUJfU0hORFggaGFzIGJhZCBzaF9saW5rOiAldSE9JXVcbiIsCi0JCQkgICAgICBmaWxlbmFtZSwKLQkJCSAgICAgIHNobmR4MnNlY2luZGV4KHNlY2hkcnNbc3ltdGFiX3NobmR4X2lkeF0uc2hfbGluayksCisJCQkgICAgICBmaWxlbmFtZSwgc2VjaGRyc1tzeW10YWJfc2huZHhfaWR4XS5zaF9saW5rLAogCQkJICAgICAgc3ltdGFiX2lkeCk7CiAJCS8qIEZpeCBlbmRpYW5uZXNzICovCiAJCWZvciAocCA9IGluZm8tPnN5bXRhYl9zaG5keF9zdGFydDsgcCA8IGluZm8tPnN5bXRhYl9zaG5keF9zdG9wOwpAQCAtMTQ0Niw3ICsxNDQyLDcgQEAKIAkJCQkgICAgRWxmX1NoZHIgKnNlY2hkciwgRWxmX1JlbGEgKnIpCiB7CiAJRWxmX1NoZHIgKnNlY2hkcnMgPSBlbGYtPnNlY2hkcnM7Ci0JaW50IHNlY3Rpb24gPSBzaG5keDJzZWNpbmRleChzZWNoZHItPnNoX2luZm8pOworCWludCBzZWN0aW9uID0gc2VjaGRyLT5zaF9pbmZvOwogCiAJcmV0dXJuICh2b2lkICopZWxmLT5oZHIgKyBzZWNoZHJzW3NlY3Rpb25dLnNoX29mZnNldCArCiAJCXItPnJfb2Zmc2V0OwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9tb2QvbW9kcG9zdC5oIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCmluZGV4IDAzODhjZmNjLi4yMDMxMTE5IDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZC9tb2Rwb3N0LmgKKysrIGIvc2NyaXB0cy9tb2QvbW9kcG9zdC5oCkBAIC0xNDUsMzMgKzE0NSwyMiBAQAogCXJldHVybiBpICE9IFNITl9YSU5ERVggJiYgaSA+PSBTSE5fTE9SRVNFUlZFICYmIGkgPD0gU0hOX0hJUkVTRVJWRTsKIH0KIAotLyogc2huZHggaXMgaW4gWzAuLlNITl9MT1JFU0VSVkUpIFUgKFNITl9ISVJFU0VSVkUsIDB4ZmZmZmZmZl0sIHRodXM6Ci0gKiBzaG5keCA9PSAwICAgICAgICAgICAgICAgPD0+IHNlY2hkcnNbMF0KLSAqIC4uLi4uLgotICogc2huZHggPT0gU0hOX0xPUkVTRVJWRS0xIDw9PiBzZWNoZHJzW1NITl9MT1JFU0VSVkUtMV0KLSAqIHNobmR4ID09IFNITl9ISVJFU0VSVkUrMSA8PT4gc2VjaGRyc1tTSE5fTE9SRVNFUlZFXQotICogc2huZHggPT0gU0hOX0hJUkVTRVJWRSsyIDw9PiBzZWNoZHJzW1NITl9MT1JFU0VSVkUrMV0KLSAqIC4uLi4uLgotICogZnlpOiBzeW0tPnN0X3NobmR4IGlzIHVpbnQxNiwgU0hOX0xPUkVTRVJWRSA9IGZmMDAsIFNITl9ISVJFU0VSVkUgPSBmZmZmLAotICogc28gYmFzaWNhbGx5IHdlIG1hcCAgMDAwMC4uZmVmZiAtPiAwMDAwLi5mZWZmCi0gKiAgICAgICAgICAgICAgICAgICAgICBmZjAwLi5mZmZmIC0+ICh5b3UgYXJlIGEgYmFkIGJveSwgZG9udCBkbyBpdCkKLSAqICAgICAgICAgICAgICAgICAgICAgMTAwMDAuLnh4eHggLT4gZmYwMC4uKHh4eHgtMHgxMDApCisvKgorICogTW92ZSByZXNlcnZlZCBzZWN0aW9uIGluZGljZXMgU0hOX0xPUkVTRVJWRS4uU0hOX0hJUkVTRVJWRSBvdXQgb2YKKyAqIHRoZSB3YXkgdG8gLTI1Ni4uLTEsIHRvIGF2b2lkIGNvbmZsaWN0aW5nIHdpdGggcmVhbCBzZWN0aW9uCisgKiBpbmRpY2VzLgogICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzaG5keDJzZWNpbmRleCh1bnNpZ25lZCBpbnQgaSkKLXsKLQlpZiAoaSA8PSBTSE5fSElSRVNFUlZFKQotCQlyZXR1cm4gaTsKLQlyZXR1cm4gaSAtIChTSE5fSElSRVNFUlZFICsgMSAtIFNITl9MT1JFU0VSVkUpOwotfQorI2RlZmluZSBTUEVDSUFMKGkpICgoaSkgLSAoU0hOX0hJUkVTRVJWRSArIDEpKQogCiAvKiBBY2Nlc3NvciBmb3Igc3ltLT5zdF9zaG5keCwgaGlkZXMgdWdsaW5lc3Mgb2YgIjY0ayBzZWN0aW9ucyIgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdldF9zZWNpbmRleChjb25zdCBzdHJ1Y3QgZWxmX2luZm8gKmluZm8sCiAJCQkJCWNvbnN0IEVsZl9TeW0gKnN5bSkKIHsKKwlpZiAoaXNfc2huZHhfc3BlY2lhbChzeW0tPnN0X3NobmR4KSkKKwkJcmV0dXJuIFNQRUNJQUwoc3ltLT5zdF9zaG5keCk7CiAJaWYgKHN5bS0+c3Rfc2huZHggIT0gU0hOX1hJTkRFWCkKIAkJcmV0dXJuIHN5bS0+c3Rfc2huZHg7Ci0JcmV0dXJuIHNobmR4MnNlY2luZGV4KGluZm8tPnN5bXRhYl9zaG5keF9zdGFydFtzeW0gLQotCQkJCQkJICAgICAgIGluZm8tPnN5bXRhYl9zdGFydF0pOworCXJldHVybiBpbmZvLT5zeW10YWJfc2huZHhfc3RhcnRbc3ltIC0gaW5mby0+c3ltdGFiX3N0YXJ0XTsKIH0KIAogLyogZmlsZTJhbGlhcy5jICovCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZHVsZS1jb21tb24ubGRzIGIvc2NyaXB0cy9tb2R1bGUtY29tbW9uLmxkcwppbmRleCA0N2ExZjlhLi4wODY1YjNlIDEwMDY0NAotLS0gYS9zY3JpcHRzL21vZHVsZS1jb21tb24ubGRzCisrKyBiL3NjcmlwdHMvbW9kdWxlLWNvbW1vbi5sZHMKQEAgLTUsNCArNSwxNSBAQAogICovCiBTRUNUSU9OUyB7CiAJL0RJU0NBUkQvIDogeyAqKC5kaXNjYXJkKSB9CisKKwlfX2tzeW10YWIJCTogeyAqKFNPUlQoX19fa3N5bXRhYisqKSkgfQorCV9fa3N5bXRhYl9ncGwJCTogeyAqKFNPUlQoX19fa3N5bXRhYl9ncGwrKikpIH0KKwlfX2tzeW10YWJfdW51c2VkCTogeyAqKFNPUlQoX19fa3N5bXRhYl91bnVzZWQrKikpIH0KKwlfX2tzeW10YWJfdW51c2VkX2dwbAk6IHsgKihTT1JUKF9fX2tzeW10YWJfdW51c2VkX2dwbCsqKSkgfQorCV9fa3N5bXRhYl9ncGxfZnV0dXJlCTogeyAqKFNPUlQoX19fa3N5bXRhYl9ncGxfZnV0dXJlKyopKSB9CisJX19rY3JjdGFiCQk6IHsgKihTT1JUKF9fX2tjcmN0YWIrKikpIH0KKwlfX2tjcmN0YWJfZ3BsCQk6IHsgKihTT1JUKF9fX2tjcmN0YWJfZ3BsKyopKSB9CisJX19rY3JjdGFiX3VudXNlZAk6IHsgKihTT1JUKF9fX2tjcmN0YWJfdW51c2VkKyopKSB9CisJX19rY3JjdGFiX3VudXNlZF9ncGwJOiB7ICooU09SVChfX19rY3JjdGFiX3VudXNlZF9ncGwrKikpIH0KKwlfX2tjcmN0YWJfZ3BsX2Z1dHVyZQk6IHsgKihTT1JUKF9fX2tjcmN0YWJfZ3BsX2Z1dHVyZSsqKSkgfQogfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQuYyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LmMKaW5kZXggZjlmNmY1Mi4uZWU1MmNiOCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9yZWNvcmRtY291bnQuYworKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgogI2luY2x1ZGUgPGVsZi5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c2V0am1wLmg+CkBAIC0zOSw2ICs0MCw3IEBACiBzdGF0aWMgc3RydWN0IHN0YXQgc2I7CS8qIFJlbWVtYmVyIC5zdF9zaXplLCBldGMuICovCiBzdGF0aWMgam1wX2J1ZiBqbXBlbnY7CS8qIHNldGptcC9sb25nam1wIHBlci1maWxlIGVycm9yIGVzY2FwZSAqLwogc3RhdGljIGNvbnN0IGNoYXIgKmFsdG1jb3VudDsJLyogYWx0ZXJuYXRlIG1jb3VudCBzeW1ib2wgbmFtZSAqLworc3RhdGljIGludCB3YXJuX29uX25vdHJhY2Vfc2VjdDsgLyogd2FybiB3aGVuIHNlY3Rpb24gaGFzIG1jb3VudCBub3QgYmVpbmcgcmVjb3JkZWQgKi8KIAogLyogc2V0am1wKCkgcmV0dXJuIHZhbHVlcyAqLwogZW51bSB7CkBAIC03OCw3ICs4MCw3IEBACiB1bHNlZWsoaW50IGNvbnN0IGZkLCBvZmZfdCBjb25zdCBvZmZzZXQsIGludCBjb25zdCB3aGVuY2UpCiB7CiAJb2ZmX3QgY29uc3QgdyA9IGxzZWVrKGZkLCBvZmZzZXQsIHdoZW5jZSk7Ci0JaWYgKChvZmZfdCktMSA9PSB3KSB7CisJaWYgKHcgPT0gKG9mZl90KS0xKSB7CiAJCXBlcnJvcigibHNlZWsiKTsKIAkJZmFpbF9maWxlKCk7CiAJfQpAQCAtMTExLDEzICsxMTMsNDEgQEAKIHVtYWxsb2Moc2l6ZV90IHNpemUpCiB7CiAJdm9pZCAqY29uc3QgYWRkciA9IG1hbGxvYyhzaXplKTsKLQlpZiAoMCA9PSBhZGRyKSB7CisJaWYgKGFkZHIgPT0gMCkgewogCQlmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsZWQ6ICV6dSBieXRlc1xuIiwgc2l6ZSk7CiAJCWZhaWxfZmlsZSgpOwogCX0KIAlyZXR1cm4gYWRkcjsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGNoYXIgaWRlYWxfbm9wNV94ODZfNjRbNV0gPSB7IDB4MGYsIDB4MWYsIDB4NDQsIDB4MDAsIDB4MDAgfTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGlkZWFsX25vcDVfeDg2XzMyWzVdID0geyAweDNlLCAweDhkLCAweDc0LCAweDI2LCAweDAwIH07CitzdGF0aWMgdW5zaWduZWQgY2hhciAqaWRlYWxfbm9wOworCitzdGF0aWMgY2hhciByZWxfdHlwZV9ub3A7CisKK3N0YXRpYyBpbnQgKCptYWtlX25vcCkodm9pZCAqbWFwLCBzaXplX3QgY29uc3Qgb2Zmc2V0KTsKKworc3RhdGljIGludCBtYWtlX25vcF94ODYodm9pZCAqbWFwLCBzaXplX3QgY29uc3Qgb2Zmc2V0KQoreworCXVpbnQzMl90ICpwdHI7CisJdW5zaWduZWQgY2hhciAqb3A7CisKKwkvKiBDb25maXJtIHdlIGhhdmUgMHhlOCAweDAgMHgwIDB4MCAweDAgKi8KKwlwdHIgPSBtYXAgKyBvZmZzZXQ7CisJaWYgKCpwdHIgIT0gMCkKKwkJcmV0dXJuIC0xOworCisJb3AgPSBtYXAgKyBvZmZzZXQgLSAxOworCWlmICgqb3AgIT0gMHhlOCkKKwkJcmV0dXJuIC0xOworCisJLyogY29udmVydCB0byBub3AgKi8KKwl1bHNlZWsoZmRfbWFwLCBvZmZzZXQgLSAxLCBTRUVLX1NFVCk7CisJdXdyaXRlKGZkX21hcCwgaWRlYWxfbm9wLCA1KTsKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIEdldCB0aGUgd2hvbGUgZmlsZSBhcyBhIHByb2dyYW1taW5nIGNvbnZlbmllbmNlIGluIG9yZGVyIHRvIGF2b2lkCiAgKiBtYWxsb2MrbHNlZWsrcmVhZCtmcmVlIG9mIG1hbnkgcGllY2VzLiAgSWYgc3VjY2Vzc2Z1bCwgdGhlbiBtbWFwCkBAIC0xMzYsNyArMTY2LDcgQEAKIAl2b2lkICphZGRyOwogCiAJZmRfbWFwID0gb3BlbihmbmFtZSwgT19SRFdSKTsKLQlpZiAoMCA+IGZkX21hcCB8fCAwID4gZnN0YXQoZmRfbWFwLCAmc2IpKSB7CisJaWYgKGZkX21hcCA8IDAgfHwgZnN0YXQoZmRfbWFwLCAmc2IpIDwgMCkgewogCQlwZXJyb3IoZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKIAl9CkBAIC0xNDcsNyArMTc3LDcgQEAKIAlhZGRyID0gbW1hcCgwLCBzYi5zdF9zaXplLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX1BSSVZBVEUsCiAJCSAgICBmZF9tYXAsIDApOwogCW1tYXBfZmFpbGVkID0gMDsKLQlpZiAoTUFQX0ZBSUxFRCA9PSBhZGRyKSB7CisJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewogCQltbWFwX2ZhaWxlZCA9IDE7CiAJCWFkZHIgPSB1bWFsbG9jKHNiLnN0X3NpemUpOwogCQl1cmVhZChmZF9tYXAsIGFkZHIsIHNiLnN0X3NpemUpOwpAQCAtMjA2LDEyICsyMzYsMTMgQEAKIHN0YXRpYyBpbnQKIGlzX21jb3VudGVkX3NlY3Rpb25fbmFtZShjaGFyIGNvbnN0ICpjb25zdCB0eHRuYW1lKQogewotCXJldHVybiAwID09IHN0cmNtcCgiLnRleHQiLCAgICAgICAgICAgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi5yZWYudGV4dCIsICAgICAgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi5zY2hlZC50ZXh0IiwgICAgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi5zcGlubG9jay50ZXh0IiwgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi5pcnFlbnRyeS50ZXh0IiwgdHh0bmFtZSkgfHwKLQkJMCA9PSBzdHJjbXAoIi50ZXh0LnVubGlrZWx5IiwgdHh0bmFtZSk7CisJcmV0dXJuIHN0cmNtcCgiLnRleHQiLCAgICAgICAgICAgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5yZWYudGV4dCIsICAgICAgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5zY2hlZC50ZXh0IiwgICAgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5zcGlubG9jay50ZXh0IiwgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5pcnFlbnRyeS50ZXh0IiwgdHh0bmFtZSkgPT0gMCB8fAorCQlzdHJjbXAoIi5rcHJvYmVzLnRleHQiLCB0eHRuYW1lKSA9PSAwIHx8CisJCXN0cmNtcCgiLnRleHQudW5saWtlbHkiLCB0eHRuYW1lKSA9PSAwOwogfQogCiAvKiAzMiBiaXQgYW5kIDY0IGJpdCBhcmUgdmVyeSBzaW1pbGFyICovCkBAIC0yNjQsNDMgKzI5NSw0OCBAQAogCXc4ID0gdzhuYXQ7CiAJc3dpdGNoIChlaGRyLT5lX2lkZW50W0VJX0RBVEFdKSB7CiAJCXN0YXRpYyB1bnNpZ25lZCBpbnQgY29uc3QgZW5kaWFuID0gMTsKLQlkZWZhdWx0OiB7CisJZGVmYXVsdDoKIAkJZnByaW50ZihzdGRlcnIsICJ1bnJlY29nbml6ZWQgRUxGIGRhdGEgZW5jb2RpbmcgJWQ6ICVzXG4iLAogCQkJZWhkci0+ZV9pZGVudFtFSV9EQVRBXSwgZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKLQl9IGJyZWFrOwotCWNhc2UgRUxGREFUQTJMU0I6IHsKLQkJaWYgKDEgIT0gKih1bnNpZ25lZCBjaGFyIGNvbnN0ICopJmVuZGlhbikgeworCQlicmVhazsKKwljYXNlIEVMRkRBVEEyTFNCOgorCQlpZiAoKih1bnNpZ25lZCBjaGFyIGNvbnN0ICopJmVuZGlhbiAhPSAxKSB7CiAJCQkvKiBtYWluKCkgaXMgYmlnIGVuZGlhbiwgZmlsZS5vIGlzIGxpdHRsZSBlbmRpYW4uICovCiAJCQl3ID0gdzRyZXY7CiAJCQl3MiA9IHcycmV2OwogCQkJdzggPSB3OHJldjsKIAkJfQotCX0gYnJlYWs7Ci0JY2FzZSBFTEZEQVRBMk1TQjogewotCQlpZiAoMCAhPSAqKHVuc2lnbmVkIGNoYXIgY29uc3QgKikmZW5kaWFuKSB7CisJCWJyZWFrOworCWNhc2UgRUxGREFUQTJNU0I6CisJCWlmICgqKHVuc2lnbmVkIGNoYXIgY29uc3QgKikmZW5kaWFuICE9IDApIHsKIAkJCS8qIG1haW4oKSBpcyBsaXR0bGUgZW5kaWFuLCBmaWxlLm8gaXMgYmlnIGVuZGlhbi4gKi8KIAkJCXcgPSB3NHJldjsKIAkJCXcyID0gdzJyZXY7CiAJCQl3OCA9IHc4cmV2OwogCQl9Ci0JfSBicmVhazsKKwkJYnJlYWs7CiAJfSAgLyogZW5kIHN3aXRjaCAqLwotCWlmICgwICE9IG1lbWNtcChFTEZNQUcsIGVoZHItPmVfaWRlbnQsIFNFTEZNQUcpCi0JfHwgIEVUX1JFTCAhPSB3MihlaGRyLT5lX3R5cGUpCi0JfHwgIEVWX0NVUlJFTlQgIT0gZWhkci0+ZV9pZGVudFtFSV9WRVJTSU9OXSkgeworCWlmIChtZW1jbXAoRUxGTUFHLCBlaGRyLT5lX2lkZW50LCBTRUxGTUFHKSAhPSAwCisJfHwgIHcyKGVoZHItPmVfdHlwZSkgIT0gRVRfUkVMCisJfHwgIGVoZHItPmVfaWRlbnRbRUlfVkVSU0lPTl0gIT0gRVZfQ1VSUkVOVCkgewogCQlmcHJpbnRmKHN0ZGVyciwgInVucmVjb2duaXplZCBFVF9SRUwgZmlsZSAlc1xuIiwgZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKIAl9CiAKIAlncGZ4ID0gMDsKIAlzd2l0Y2ggKHcyKGVoZHItPmVfbWFjaGluZSkpIHsKLQlkZWZhdWx0OiB7CisJZGVmYXVsdDoKIAkJZnByaW50ZihzdGRlcnIsICJ1bnJlY29nbml6ZWQgZV9tYWNoaW5lICVkICVzXG4iLAogCQkJdzIoZWhkci0+ZV9tYWNoaW5lKSwgZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKLQl9IGJyZWFrOwotCWNhc2UgRU1fMzg2OgkgcmVsdHlwZSA9IFJfMzg2XzMyOyAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJYnJlYWs7CisJY2FzZSBFTV8zODY6CisJCXJlbHR5cGUgPSBSXzM4Nl8zMjsKKwkJbWFrZV9ub3AgPSBtYWtlX25vcF94ODY7CisJCWlkZWFsX25vcCA9IGlkZWFsX25vcDVfeDg2XzMyOworCQltY291bnRfYWRqdXN0XzMyID0gLTE7CisJCWJyZWFrOwogCWNhc2UgRU1fQVJNOgkgcmVsdHlwZSA9IFJfQVJNX0FCUzMyOwogCQkJIGFsdG1jb3VudCA9ICJfX2dudV9tY291bnRfbmMiOwogCQkJIGJyZWFrOwpAQCAtMzExLDY3ICszNDcsOTEgQEAKIAljYXNlIEVNX1MzOTA6ICAgIC8qIHJlbHR5cGU6IGVfY2xhc3MgICAgKi8gZ3BmeCA9ICdfJzsgYnJlYWs7CiAJY2FzZSBFTV9TSDoJIHJlbHR5cGUgPSBSX1NIX0RJUjMyOyAgICAgICAgICAgICAgICAgYnJlYWs7CiAJY2FzZSBFTV9TUEFSQ1Y5OiByZWx0eXBlID0gUl9TUEFSQ182NDsgICAgIGdwZnggPSAnXyc7IGJyZWFrOwotCWNhc2UgRU1fWDg2XzY0OgkgcmVsdHlwZSA9IFJfWDg2XzY0XzY0OyAgICAgICAgICAgICAgICBicmVhazsKKwljYXNlIEVNX1g4Nl82NDoKKwkJbWFrZV9ub3AgPSBtYWtlX25vcF94ODY7CisJCWlkZWFsX25vcCA9IGlkZWFsX25vcDVfeDg2XzY0OworCQlyZWx0eXBlID0gUl9YODZfNjRfNjQ7CisJCW1jb3VudF9hZGp1c3RfNjQgPSAtMTsKKwkJYnJlYWs7CiAJfSAgLyogZW5kIHN3aXRjaCAqLwogCiAJc3dpdGNoIChlaGRyLT5lX2lkZW50W0VJX0NMQVNTXSkgewotCWRlZmF1bHQ6IHsKKwlkZWZhdWx0OgogCQlmcHJpbnRmKHN0ZGVyciwgInVucmVjb2duaXplZCBFTEYgY2xhc3MgJWQgJXNcbiIsCiAJCQllaGRyLT5lX2lkZW50W0VJX0NMQVNTXSwgZm5hbWUpOwogCQlmYWlsX2ZpbGUoKTsKLQl9IGJyZWFrOwotCWNhc2UgRUxGQ0xBU1MzMjogewotCQlpZiAoc2l6ZW9mKEVsZjMyX0VoZHIpICE9IHcyKGVoZHItPmVfZWhzaXplKQotCQl8fCAgc2l6ZW9mKEVsZjMyX1NoZHIpICE9IHcyKGVoZHItPmVfc2hlbnRzaXplKSkgeworCQlicmVhazsKKwljYXNlIEVMRkNMQVNTMzI6CisJCWlmICh3MihlaGRyLT5lX2Voc2l6ZSkgIT0gc2l6ZW9mKEVsZjMyX0VoZHIpCisJCXx8ICB3MihlaGRyLT5lX3NoZW50c2l6ZSkgIT0gc2l6ZW9mKEVsZjMyX1NoZHIpKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwKIAkJCQkidW5yZWNvZ25pemVkIEVUX1JFTCBmaWxlOiAlc1xuIiwgZm5hbWUpOwogCQkJZmFpbF9maWxlKCk7CiAJCX0KLQkJaWYgKEVNX1MzOTAgPT0gdzIoZWhkci0+ZV9tYWNoaW5lKSkKKwkJaWYgKHcyKGVoZHItPmVfbWFjaGluZSkgPT0gRU1fUzM5MCkgewogCQkJcmVsdHlwZSA9IFJfMzkwXzMyOwotCQlpZiAoRU1fTUlQUyA9PSB3MihlaGRyLT5lX21hY2hpbmUpKSB7CisJCQltY291bnRfYWRqdXN0XzMyID0gLTQ7CisJCX0KKwkJaWYgKHcyKGVoZHItPmVfbWFjaGluZSkgPT0gRU1fTUlQUykgewogCQkJcmVsdHlwZSA9IFJfTUlQU18zMjsKIAkJCWlzX2Zha2VfbWNvdW50MzIgPSBNSVBTMzJfaXNfZmFrZV9tY291bnQ7CiAJCX0KIAkJZG8zMihlaGRyLCBmbmFtZSwgcmVsdHlwZSk7Ci0JfSBicmVhazsKKwkJYnJlYWs7CiAJY2FzZSBFTEZDTEFTUzY0OiB7CiAJCUVsZjY0X0VoZHIgKmNvbnN0IGdoZHIgPSAoRWxmNjRfRWhkciAqKWVoZHI7Ci0JCWlmIChzaXplb2YoRWxmNjRfRWhkcikgIT0gdzIoZ2hkci0+ZV9laHNpemUpCi0JCXx8ICBzaXplb2YoRWxmNjRfU2hkcikgIT0gdzIoZ2hkci0+ZV9zaGVudHNpemUpKSB7CisJCWlmICh3MihnaGRyLT5lX2Voc2l6ZSkgIT0gc2l6ZW9mKEVsZjY0X0VoZHIpCisJCXx8ICB3MihnaGRyLT5lX3NoZW50c2l6ZSkgIT0gc2l6ZW9mKEVsZjY0X1NoZHIpKSB7CiAJCQlmcHJpbnRmKHN0ZGVyciwKIAkJCQkidW5yZWNvZ25pemVkIEVUX1JFTCBmaWxlOiAlc1xuIiwgZm5hbWUpOwogCQkJZmFpbF9maWxlKCk7CiAJCX0KLQkJaWYgKEVNX1MzOTAgPT0gdzIoZ2hkci0+ZV9tYWNoaW5lKSkKKwkJaWYgKHcyKGdoZHItPmVfbWFjaGluZSkgPT0gRU1fUzM5MCkgewogCQkJcmVsdHlwZSA9IFJfMzkwXzY0OwotCQlpZiAoRU1fTUlQUyA9PSB3MihnaGRyLT5lX21hY2hpbmUpKSB7CisJCQltY291bnRfYWRqdXN0XzY0ID0gLTg7CisJCX0KKwkJaWYgKHcyKGdoZHItPmVfbWFjaGluZSkgPT0gRU1fTUlQUykgewogCQkJcmVsdHlwZSA9IFJfTUlQU182NDsKIAkJCUVsZjY0X3Jfc3ltID0gTUlQUzY0X3Jfc3ltOwogCQkJRWxmNjRfcl9pbmZvID0gTUlQUzY0X3JfaW5mbzsKIAkJCWlzX2Zha2VfbWNvdW50NjQgPSBNSVBTNjRfaXNfZmFrZV9tY291bnQ7CiAJCX0KIAkJZG82NChnaGRyLCBmbmFtZSwgcmVsdHlwZSk7Ci0JfSBicmVhazsKKwkJYnJlYWs7CisJfQogCX0gIC8qIGVuZCBzd2l0Y2ggKi8KIAogCWNsZWFudXAoKTsKIH0KIAogaW50Ci1tYWluKGludCBhcmdjLCBjaGFyIGNvbnN0ICphcmd2W10pCittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7CiAJY29uc3QgY2hhciBmdHJhY2VbXSA9ICIvZnRyYWNlLm8iOwogCWludCBmdHJhY2Vfc2l6ZSA9IHNpemVvZihmdHJhY2UpIC0gMTsKIAlpbnQgbl9lcnJvciA9IDA7ICAvKiBnY2MtNC4zLjAgZmFsc2UgcG9zaXRpdmUgY29tcGxhaW50ICovCisJaW50IGM7CisJaW50IGk7CiAKLQlpZiAoYXJnYyA8PSAxKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAidXNhZ2U6IHJlY29yZG1jb3VudCBmaWxlLm8uLi5cbiIpOworCXdoaWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAidyIpKSA+PSAwKSB7CisJCXN3aXRjaCAoYykgeworCQljYXNlICd3JzoKKwkJCXdhcm5fb25fbm90cmFjZV9zZWN0ID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogcmVjb3JkbWNvdW50IFstd10gZmlsZS5vLi4uXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCisJaWYgKChhcmdjIC0gb3B0aW5kKSA8IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJ1c2FnZTogcmVjb3JkbWNvdW50IFstd10gZmlsZS5vLi4uXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJLyogUHJvY2VzcyBlYWNoIGZpbGUgaW4gdHVybiwgYWxsb3dpbmcgZGVlcCBmYWlsdXJlLiAqLwotCWZvciAoLS1hcmdjLCArK2FyZ3Y7IDAgPCBhcmdjOyAtLWFyZ2MsICsrYXJndikgeworCWZvciAoaSA9IG9wdGluZDsgaSA8IGFyZ2M7IGkrKykgeworCQljaGFyICpmaWxlID0gYXJndltpXTsKIAkJaW50IGNvbnN0IHNqdmFsID0gc2V0am1wKGptcGVudik7CiAJCWludCBsZW47CiAKQEAgLTM4MCwyOSArNDQwLDI5IEBACiAJCSAqIGZ1bmN0aW9uIGJ1dCBkb2VzIG5vdCBjYWxsIGl0LiBTaW5jZSBmdHJhY2UubyBzaG91bGQKIAkJICogbm90IGJlIHRyYWNlZCBhbnl3YXksIHdlIGp1c3Qgc2tpcCBpdC4KIAkJICovCi0JCWxlbiA9IHN0cmxlbihhcmd2WzBdKTsKKwkJbGVuID0gc3RybGVuKGZpbGUpOwogCQlpZiAobGVuID49IGZ0cmFjZV9zaXplICYmCi0JCSAgICBzdHJjbXAoYXJndlswXSArIChsZW4gLSBmdHJhY2Vfc2l6ZSksIGZ0cmFjZSkgPT0gMCkKKwkJICAgIHN0cmNtcChmaWxlICsgKGxlbiAtIGZ0cmFjZV9zaXplKSwgZnRyYWNlKSA9PSAwKQogCQkJY29udGludWU7CiAKIAkJc3dpdGNoIChzanZhbCkgewotCQlkZWZhdWx0OiB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgImludGVybmFsIGVycm9yOiAlc1xuIiwgYXJndlswXSk7CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwgImludGVybmFsIGVycm9yOiAlc1xuIiwgZmlsZSk7CiAJCQlleGl0KDEpOwotCQl9IGJyZWFrOwotCQljYXNlIFNKX1NFVEpNUDogeyAgLyogbm9ybWFsIHNlcXVlbmNlICovCisJCQlicmVhazsKKwkJY2FzZSBTSl9TRVRKTVA6ICAgIC8qIG5vcm1hbCBzZXF1ZW5jZSAqLwogCQkJLyogQXZvaWQgcHJvYmxlbXMgaWYgZWFybHkgY2xlYW51cCgpICovCiAJCQlmZF9tYXAgPSAtMTsKIAkJCWVoZHJfY3VyciA9IE5VTEw7CiAJCQltbWFwX2ZhaWxlZCA9IDE7Ci0JCQlkb19maWxlKGFyZ3ZbMF0pOwotCQl9IGJyZWFrOwotCQljYXNlIFNKX0ZBSUw6IHsgIC8qIGVycm9yIGluIGRvX2ZpbGUgb3IgYmVsb3cgKi8KKwkJCWRvX2ZpbGUoZmlsZSk7CisJCQlicmVhazsKKwkJY2FzZSBTSl9GQUlMOiAgICAvKiBlcnJvciBpbiBkb19maWxlIG9yIGJlbG93ICovCiAJCQkrK25fZXJyb3I7Ci0JCX0gYnJlYWs7Ci0JCWNhc2UgU0pfU1VDQ0VFRDogeyAgLyogcHJlbWF0dXJlIHN1Y2Nlc3MgKi8KKwkJCWJyZWFrOworCQljYXNlIFNKX1NVQ0NFRUQ6ICAgIC8qIHByZW1hdHVyZSBzdWNjZXNzICovCiAJCQkvKiBkbyBub3RoaW5nICovCi0JCX0gYnJlYWs7CisJCQlicmVhazsKIAkJfSAgLyogZW5kIHN3aXRjaCAqLwogCX0KIAlyZXR1cm4gISFuX2Vycm9yOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWNvcmRtY291bnQuaCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LmgKaW5kZXggYmFmMTg3Yi4uNGJlNjAzNiAxMDA2NDQKLS0tIGEvc2NyaXB0cy9yZWNvcmRtY291bnQuaAorKysgYi9zY3JpcHRzL3JlY29yZG1jb3VudC5oCkBAIC0yMiwxMSArMjIsMTUgQEAKICN1bmRlZiBpc19mYWtlX21jb3VudAogI3VuZGVmIGZuX2lzX2Zha2VfbWNvdW50CiAjdW5kZWYgTUlQU19pc19mYWtlX21jb3VudAorI3VuZGVmIG1jb3VudF9hZGp1c3QKICN1bmRlZiBzaWZ0X3JlbF9tY291bnQKKyN1bmRlZiBub3BfbWNvdW50CiAjdW5kZWYgZmluZF9zZWNzeW1fbmR4CiAjdW5kZWYgX19oYXNfcmVsX21jb3VudAogI3VuZGVmIGhhc19yZWxfbWNvdW50CiAjdW5kZWYgdG90X3JlbHNpemUKKyN1bmRlZiBnZXRfbWNvdW50c3ltCisjdW5kZWYgZ2V0X3N5bV9zdHJfYW5kX3JlbHAKICN1bmRlZiBkb19mdW5jCiAjdW5kZWYgRWxmX0FkZHIKICN1bmRlZiBFbGZfRWhkcgpAQCAtNDksMTQgKzUzLDE4IEBACiAjaWZkZWYgUkVDT1JEX01DT1VOVF82NAogIyBkZWZpbmUgYXBwZW5kX2Z1bmMJCWFwcGVuZDY0CiAjIGRlZmluZSBzaWZ0X3JlbF9tY291bnQJc2lmdDY0X3JlbF9tY291bnQKKyMgZGVmaW5lIG5vcF9tY291bnQJCW5vcF9tY291bnRfNjQKICMgZGVmaW5lIGZpbmRfc2Vjc3ltX25keAlmaW5kNjRfc2Vjc3ltX25keAogIyBkZWZpbmUgX19oYXNfcmVsX21jb3VudAlfX2hhczY0X3JlbF9tY291bnQKICMgZGVmaW5lIGhhc19yZWxfbWNvdW50CQloYXM2NF9yZWxfbWNvdW50CiAjIGRlZmluZSB0b3RfcmVsc2l6ZQkJdG90NjRfcmVsc2l6ZQorIyBkZWZpbmUgZ2V0X3N5bV9zdHJfYW5kX3JlbHAJZ2V0X3N5bV9zdHJfYW5kX3JlbHBfNjQKICMgZGVmaW5lIGRvX2Z1bmMJCWRvNjQKKyMgZGVmaW5lIGdldF9tY291bnRzeW0JCWdldF9tY291bnRzeW1fNjQKICMgZGVmaW5lIGlzX2Zha2VfbWNvdW50CQlpc19mYWtlX21jb3VudDY0CiAjIGRlZmluZSBmbl9pc19mYWtlX21jb3VudAlmbl9pc19mYWtlX21jb3VudDY0CiAjIGRlZmluZSBNSVBTX2lzX2Zha2VfbWNvdW50CU1JUFM2NF9pc19mYWtlX21jb3VudAorIyBkZWZpbmUgbWNvdW50X2FkanVzdAkJbWNvdW50X2FkanVzdF82NAogIyBkZWZpbmUgRWxmX0FkZHIJCUVsZjY0X0FkZHIKICMgZGVmaW5lIEVsZl9FaGRyCQlFbGY2NF9FaGRyCiAjIGRlZmluZSBFbGZfU2hkcgkJRWxmNjRfU2hkcgpAQCAtNzcsMTQgKzg1LDE4IEBACiAjZWxzZQogIyBkZWZpbmUgYXBwZW5kX2Z1bmMJCWFwcGVuZDMyCiAjIGRlZmluZSBzaWZ0X3JlbF9tY291bnQJc2lmdDMyX3JlbF9tY291bnQKKyMgZGVmaW5lIG5vcF9tY291bnQJCW5vcF9tY291bnRfMzIKICMgZGVmaW5lIGZpbmRfc2Vjc3ltX25keAlmaW5kMzJfc2Vjc3ltX25keAogIyBkZWZpbmUgX19oYXNfcmVsX21jb3VudAlfX2hhczMyX3JlbF9tY291bnQKICMgZGVmaW5lIGhhc19yZWxfbWNvdW50CQloYXMzMl9yZWxfbWNvdW50CiAjIGRlZmluZSB0b3RfcmVsc2l6ZQkJdG90MzJfcmVsc2l6ZQorIyBkZWZpbmUgZ2V0X3N5bV9zdHJfYW5kX3JlbHAJZ2V0X3N5bV9zdHJfYW5kX3JlbHBfMzIKICMgZGVmaW5lIGRvX2Z1bmMJCWRvMzIKKyMgZGVmaW5lIGdldF9tY291bnRzeW0JCWdldF9tY291bnRzeW1fMzIKICMgZGVmaW5lIGlzX2Zha2VfbWNvdW50CQlpc19mYWtlX21jb3VudDMyCiAjIGRlZmluZSBmbl9pc19mYWtlX21jb3VudAlmbl9pc19mYWtlX21jb3VudDMyCiAjIGRlZmluZSBNSVBTX2lzX2Zha2VfbWNvdW50CU1JUFMzMl9pc19mYWtlX21jb3VudAorIyBkZWZpbmUgbWNvdW50X2FkanVzdAkJbWNvdW50X2FkanVzdF8zMgogIyBkZWZpbmUgRWxmX0FkZHIJCUVsZjMyX0FkZHIKICMgZGVmaW5lIEVsZl9FaGRyCQlFbGYzMl9FaGRyCiAjIGRlZmluZSBFbGZfU2hkcgkJRWxmMzJfU2hkcgpAQCAtMTIzLDYgKzEzNSw4IEBACiB9CiBzdGF0aWMgdm9pZCAoKkVsZl9yX2luZm8pKEVsZl9SZWwgKmNvbnN0IHJwLCB1bnNpZ25lZCBzeW0sIHVuc2lnbmVkIHR5cGUpID0gZm5fRUxGX1JfSU5GTzsKIAorc3RhdGljIGludCBtY291bnRfYWRqdXN0ID0gMDsKKwogLyoKICAqIE1JUFMgbWNvdW50IGxvbmcgY2FsbCBoYXMgMiBfbWNvdW50IHN5bWJvbHMsIG9ubHkgdGhlIHBvc2l0aW9uIG9mIHRoZSAxc3QKICAqIF9tY291bnQgc3ltYm9sIGlzIG5lZWRlZCBmb3IgZHluYW1pYyBmdW5jdGlvbiB0cmFjZXIsIHdpdGggaXQsIHRvIGRpc2FibGUKQEAgLTIzNCw2ICsyNDgsNDkgQEAKIAl1d3JpdGUoZmRfbWFwLCBlaGRyLCBzaXplb2YoKmVoZHIpKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGdldF9tY291bnRzeW0oRWxmX1N5bSBjb25zdCAqY29uc3Qgc3ltMCwKKwkJCSAgICAgIEVsZl9SZWwgY29uc3QgKnJlbHAsCisJCQkgICAgICBjaGFyIGNvbnN0ICpjb25zdCBzdHIwKQoreworCXVuc2lnbmVkIG1jb3VudHN5bSA9IDA7CisKKwlFbGZfU3ltIGNvbnN0ICpjb25zdCBzeW1wID0KKwkJJnN5bTBbRWxmX3Jfc3ltKHJlbHApXTsKKwljaGFyIGNvbnN0ICpzeW1uYW1lID0gJnN0cjBbdyhzeW1wLT5zdF9uYW1lKV07CisJY2hhciBjb25zdCAqbWNvdW50ID0gZ3BmeCA9PSAnXycgPyAiX21jb3VudCIgOiAibWNvdW50IjsKKworCWlmIChzeW1uYW1lWzBdID09ICcuJykKKwkJKytzeW1uYW1lOyAgLyogcHBjNjQgaGFjayAqLworCWlmIChzdHJjbXAobWNvdW50LCBzeW1uYW1lKSA9PSAwIHx8CisJICAgIChhbHRtY291bnQgJiYgc3RyY21wKGFsdG1jb3VudCwgc3ltbmFtZSkgPT0gMCkpCisJCW1jb3VudHN5bSA9IEVsZl9yX3N5bShyZWxwKTsKKworCXJldHVybiBtY291bnRzeW07Cit9CisKK3N0YXRpYyB2b2lkIGdldF9zeW1fc3RyX2FuZF9yZWxwKEVsZl9TaGRyIGNvbnN0ICpjb25zdCByZWxoZHIsCisJCQkJIEVsZl9FaGRyIGNvbnN0ICpjb25zdCBlaGRyLAorCQkJCSBFbGZfU3ltIGNvbnN0ICoqc3ltMCwKKwkJCQkgY2hhciBjb25zdCAqKnN0cjAsCisJCQkJIEVsZl9SZWwgY29uc3QgKipyZWxwKQoreworCUVsZl9TaGRyICpjb25zdCBzaGRyMCA9IChFbGZfU2hkciAqKShfdyhlaGRyLT5lX3Nob2ZmKQorCQkrICh2b2lkICopZWhkcik7CisJdW5zaWduZWQgY29uc3Qgc3ltc2VjX3NoX2xpbmsgPSB3KHJlbGhkci0+c2hfbGluayk7CisJRWxmX1NoZHIgY29uc3QgKmNvbnN0IHN5bXNlYyA9ICZzaGRyMFtzeW1zZWNfc2hfbGlua107CisJRWxmX1NoZHIgY29uc3QgKmNvbnN0IHN0cnNlYyA9ICZzaGRyMFt3KHN5bXNlYy0+c2hfbGluayldOworCUVsZl9SZWwgY29uc3QgKmNvbnN0IHJlbDAgPSAoRWxmX1JlbCBjb25zdCAqKShfdyhyZWxoZHItPnNoX29mZnNldCkKKwkJKyAodm9pZCAqKWVoZHIpOworCisJKnN5bTAgPSAoRWxmX1N5bSBjb25zdCAqKShfdyhzeW1zZWMtPnNoX29mZnNldCkKKwkJCQkgICsgKHZvaWQgKillaGRyKTsKKworCSpzdHIwID0gKGNoYXIgY29uc3QgKikoX3coc3Ryc2VjLT5zaF9vZmZzZXQpCisJCQkgICAgICAgKyAodm9pZCAqKWVoZHIpOworCisJKnJlbHAgPSByZWwwOworfQorCiAvKgogICogTG9vayBhdCB0aGUgcmVsb2NhdGlvbnMgaW4gb3JkZXIgdG8gZmluZCB0aGUgY2FsbHMgdG8gbWNvdW50LgogICogQWNjdW11bGF0ZSB0aGUgc2VjdGlvbiBvZmZzZXRzIHRoYXQgYXJlIGZvdW5kLCBhbmQgdGhlaXIgcmVsb2NhdGlvbiBpbmZvLApAQCAtMjUwLDQ3ICszMDcsMjcgQEAKIHsKIAl1aW50X3QgKmNvbnN0IG1sb2MwID0gbWxvY3A7CiAJRWxmX1JlbCAqbXJlbHAgPSAqbXJlbHBwOwotCUVsZl9TaGRyICpjb25zdCBzaGRyMCA9IChFbGZfU2hkciAqKShfdyhlaGRyLT5lX3Nob2ZmKQotCQkrICh2b2lkICopZWhkcik7Ci0JdW5zaWduZWQgY29uc3Qgc3ltc2VjX3NoX2xpbmsgPSB3KHJlbGhkci0+c2hfbGluayk7Ci0JRWxmX1NoZHIgY29uc3QgKmNvbnN0IHN5bXNlYyA9ICZzaGRyMFtzeW1zZWNfc2hfbGlua107Ci0JRWxmX1N5bSBjb25zdCAqY29uc3Qgc3ltMCA9IChFbGZfU3ltIGNvbnN0ICopKF93KHN5bXNlYy0+c2hfb2Zmc2V0KQotCQkrICh2b2lkICopZWhkcik7Ci0KLQlFbGZfU2hkciBjb25zdCAqY29uc3Qgc3Ryc2VjID0gJnNoZHIwW3coc3ltc2VjLT5zaF9saW5rKV07Ci0JY2hhciBjb25zdCAqY29uc3Qgc3RyMCA9IChjaGFyIGNvbnN0ICopKF93KHN0cnNlYy0+c2hfb2Zmc2V0KQotCQkrICh2b2lkICopZWhkcik7Ci0KLQlFbGZfUmVsIGNvbnN0ICpjb25zdCByZWwwID0gKEVsZl9SZWwgY29uc3QgKikoX3cocmVsaGRyLT5zaF9vZmZzZXQpCi0JCSsgKHZvaWQgKillaGRyKTsKKwlFbGZfU3ltIGNvbnN0ICpzeW0wOworCWNoYXIgY29uc3QgKnN0cjA7CisJRWxmX1JlbCBjb25zdCAqcmVscDsKIAl1bnNpZ25lZCByZWxfZW50c2l6ZSA9IF93KHJlbGhkci0+c2hfZW50c2l6ZSk7CiAJdW5zaWduZWQgY29uc3QgbnJlbCA9IF93KHJlbGhkci0+c2hfc2l6ZSkgLyByZWxfZW50c2l6ZTsKLQlFbGZfUmVsIGNvbnN0ICpyZWxwID0gcmVsMDsKLQogCXVuc2lnbmVkIG1jb3VudHN5bSA9IDA7CiAJdW5zaWduZWQgdDsKIAotCWZvciAodCA9IG5yZWw7IHQ7IC0tdCkgewotCQlpZiAoIW1jb3VudHN5bSkgewotCQkJRWxmX1N5bSBjb25zdCAqY29uc3Qgc3ltcCA9Ci0JCQkJJnN5bTBbRWxmX3Jfc3ltKHJlbHApXTsKLQkJCWNoYXIgY29uc3QgKnN5bW5hbWUgPSAmc3RyMFt3KHN5bXAtPnN0X25hbWUpXTsKLQkJCWNoYXIgY29uc3QgKm1jb3VudCA9ICdfJyA9PSBncGZ4ID8gIl9tY291bnQiIDogIm1jb3VudCI7CisJZ2V0X3N5bV9zdHJfYW5kX3JlbHAocmVsaGRyLCBlaGRyLCAmc3ltMCwgJnN0cjAsICZyZWxwKTsKIAotCQkJaWYgKCcuJyA9PSBzeW1uYW1lWzBdKQotCQkJCSsrc3ltbmFtZTsgIC8qIHBwYzY0IGhhY2sgKi8KLQkJCWlmICgwID09IHN0cmNtcChtY291bnQsIHN5bW5hbWUpIHx8Ci0JCQkgICAgKGFsdG1jb3VudCAmJiAwID09IHN0cmNtcChhbHRtY291bnQsIHN5bW5hbWUpKSkKLQkJCQltY291bnRzeW0gPSBFbGZfcl9zeW0ocmVscCk7Ci0JCX0KKwlmb3IgKHQgPSBucmVsOyB0OyAtLXQpIHsKKwkJaWYgKCFtY291bnRzeW0pCisJCQltY291bnRzeW0gPSBnZXRfbWNvdW50c3ltKHN5bTAsIHJlbHAsIHN0cjApOwogCiAJCWlmIChtY291bnRzeW0gPT0gRWxmX3Jfc3ltKHJlbHApICYmICFpc19mYWtlX21jb3VudChyZWxwKSkgewotCQkJdWludF90IGNvbnN0IGFkZGVuZCA9IF93KF93KHJlbHAtPnJfb2Zmc2V0KSAtIHJlY3ZhbCk7Ci0KKwkJCXVpbnRfdCBjb25zdCBhZGRlbmQgPQorCQkJCV93KF93KHJlbHAtPnJfb2Zmc2V0KSAtIHJlY3ZhbCArIG1jb3VudF9hZGp1c3QpOwogCQkJbXJlbHAtPnJfb2Zmc2V0ID0gX3cob2ZmYmFzZQogCQkJCSsgKCh2b2lkICopbWxvY3AgLSAodm9pZCAqKW1sb2MwKSk7CiAJCQlFbGZfcl9pbmZvKG1yZWxwLCByZWNzeW0sIHJlbHR5cGUpOwotCQkJaWYgKHNpemVvZihFbGZfUmVsYSkgPT0gcmVsX2VudHNpemUpIHsKKwkJCWlmIChyZWxfZW50c2l6ZSA9PSBzaXplb2YoRWxmX1JlbGEpKSB7CiAJCQkJKChFbGZfUmVsYSAqKW1yZWxwKS0+cl9hZGRlbmQgPSBhZGRlbmQ7CiAJCQkJKm1sb2NwKysgPSAwOwogCQkJfSBlbHNlCkBAIC0zMDQsNiArMzQxLDYzIEBACiAJcmV0dXJuIG1sb2NwOwogfQogCisvKgorICogUmVhZCB0aGUgcmVsb2NhdGlvbiB0YWJsZSBhZ2FpbiwgYnV0IHRoaXMgdGltZSBpdHMgY2FsbGVkIG9uIHNlY3Rpb25zCisgKiB0aGF0IGFyZSBub3QgZ29pbmcgdG8gYmUgdHJhY2VkLiBUaGUgbWNvdW50IGNhbGxzIGhlcmUgd2lsbCBiZSBjb252ZXJ0ZWQKKyAqIGludG8gbm9wcy4KKyAqLworc3RhdGljIHZvaWQgbm9wX21jb3VudChFbGZfU2hkciBjb25zdCAqY29uc3QgcmVsaGRyLAorCQkgICAgICAgRWxmX0VoZHIgY29uc3QgKmNvbnN0IGVoZHIsCisJCSAgICAgICBjb25zdCBjaGFyICpjb25zdCB0eHRuYW1lKQoreworCUVsZl9TaGRyICpjb25zdCBzaGRyMCA9IChFbGZfU2hkciAqKShfdyhlaGRyLT5lX3Nob2ZmKQorCQkrICh2b2lkICopZWhkcik7CisJRWxmX1N5bSBjb25zdCAqc3ltMDsKKwljaGFyIGNvbnN0ICpzdHIwOworCUVsZl9SZWwgY29uc3QgKnJlbHA7CisJRWxmX1NoZHIgY29uc3QgKmNvbnN0IHNoZHIgPSAmc2hkcjBbdyhyZWxoZHItPnNoX2luZm8pXTsKKwl1bnNpZ25lZCByZWxfZW50c2l6ZSA9IF93KHJlbGhkci0+c2hfZW50c2l6ZSk7CisJdW5zaWduZWQgY29uc3QgbnJlbCA9IF93KHJlbGhkci0+c2hfc2l6ZSkgLyByZWxfZW50c2l6ZTsKKwl1bnNpZ25lZCBtY291bnRzeW0gPSAwOworCXVuc2lnbmVkIHQ7CisJaW50IG9uY2UgPSAwOworCisJZ2V0X3N5bV9zdHJfYW5kX3JlbHAocmVsaGRyLCBlaGRyLCAmc3ltMCwgJnN0cjAsICZyZWxwKTsKKworCWZvciAodCA9IG5yZWw7IHQ7IC0tdCkgeworCQlpbnQgcmV0ID0gLTE7CisKKwkJaWYgKCFtY291bnRzeW0pCisJCQltY291bnRzeW0gPSBnZXRfbWNvdW50c3ltKHN5bTAsIHJlbHAsIHN0cjApOworCisJCWlmIChtY291bnRzeW0gPT0gRWxmX3Jfc3ltKHJlbHApICYmICFpc19mYWtlX21jb3VudChyZWxwKSkgeworCQkJaWYgKG1ha2Vfbm9wKQorCQkJCXJldCA9IG1ha2Vfbm9wKCh2b2lkICopZWhkciwgc2hkci0+c2hfb2Zmc2V0ICsgcmVscC0+cl9vZmZzZXQpOworCQkJaWYgKHdhcm5fb25fbm90cmFjZV9zZWN0ICYmICFvbmNlKSB7CisJCQkJcHJpbnRmKCJTZWN0aW9uICVzIGhhcyBtY291bnQgY2FsbGVycyBiZWluZyBpZ25vcmVkXG4iLAorCQkJCSAgICAgICB0eHRuYW1lKTsKKwkJCQlvbmNlID0gMTsKKwkJCQkvKiBqdXN0IHdhcm4/ICovCisJCQkJaWYgKCFtYWtlX25vcCkKKwkJCQkJcmV0dXJuOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogSWYgd2Ugc3VjY2Vzc2Z1bGx5IHJlbW92ZWQgdGhlIG1jb3VudCwgbWFyayB0aGUgcmVsb2NhdGlvbgorCQkgKiBhcyBhIG5vcCAoZG9uJ3QgZG8gYW55dGhpbmcgd2l0aCBpdCkuCisJCSAqLworCQlpZiAoIXJldCkgeworCQkJRWxmX1JlbCByZWw7CisJCQlyZWwgPSAqKEVsZl9SZWwgKilyZWxwOworCQkJRWxmX3JfaW5mbygmcmVsLCBFbGZfcl9zeW0ocmVscCksIHJlbF90eXBlX25vcCk7CisJCQl1bHNlZWsoZmRfbWFwLCAodm9pZCAqKXJlbHAgLSAodm9pZCAqKWVoZHIsIFNFRUtfU0VUKTsKKwkJCXV3cml0ZShmZF9tYXAsICZyZWwsIHNpemVvZihyZWwpKTsKKwkJfQorCQlyZWxwID0gKEVsZl9SZWwgY29uc3QgKikocmVsX2VudHNpemUgKyAodm9pZCAqKXJlbHApOworCX0KK30KKwogCiAvKgogICogRmluZCBhIHN5bWJvbCBpbiB0aGUgZ2l2ZW4gc2VjdGlvbiwgdG8gYmUgdXNlZCBhcyB0aGUgYmFzZSBmb3IgcmVsb2NhdGluZwpAQCAtMzU0LDEzICs0NDgsMTMgQEAKIAlFbGZfU2hkciBjb25zdCAqY29uc3QgdHh0aGRyID0gJnNoZHIwW3cocmVsaGRyLT5zaF9pbmZvKV07CiAJY2hhciBjb25zdCAqY29uc3QgdHh0bmFtZSA9ICZzaHN0cnRhYlt3KHR4dGhkci0+c2hfbmFtZSldOwogCi0JaWYgKDAgPT0gc3RyY21wKCJfX21jb3VudF9sb2MiLCB0eHRuYW1lKSkgeworCWlmIChzdHJjbXAoIl9fbWNvdW50X2xvYyIsIHR4dG5hbWUpID09IDApIHsKIAkJZnByaW50ZihzdGRlcnIsICJ3YXJuaW5nOiBfX21jb3VudF9sb2MgYWxyZWFkeSBleGlzdHM6ICVzXG4iLAogCQkJZm5hbWUpOwogCQlzdWNjZWVkX2ZpbGUoKTsKIAl9Ci0JaWYgKFNIVF9QUk9HQklUUyAhPSB3KHR4dGhkci0+c2hfdHlwZSkgfHwKLQkgICAgIWlzX21jb3VudGVkX3NlY3Rpb25fbmFtZSh0eHRuYW1lKSkKKwlpZiAodyh0eHRoZHItPnNoX3R5cGUpICE9IFNIVF9QUk9HQklUUyB8fAorCSAgICAhKHcodHh0aGRyLT5zaF9mbGFncykgJiBTSEZfRVhFQ0lOU1RSKSkKIAkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIHR4dG5hbWU7CiB9CkBAIC0zNzAsNyArNDY0LDcgQEAKIAkJCQkgIGNoYXIgY29uc3QgKmNvbnN0IHNoc3RydGFiLAogCQkJCSAgY2hhciBjb25zdCAqY29uc3QgZm5hbWUpCiB7Ci0JaWYgKFNIVF9SRUwgICE9IHcocmVsaGRyLT5zaF90eXBlKSAmJiBTSFRfUkVMQSAhPSB3KHJlbGhkci0+c2hfdHlwZSkpCisJaWYgKHcocmVsaGRyLT5zaF90eXBlKSAhPSBTSFRfUkVMICYmIHcocmVsaGRyLT5zaF90eXBlKSAhPSBTSFRfUkVMQSkKIAkJcmV0dXJuIE5VTEw7CiAJcmV0dXJuIF9faGFzX3JlbF9tY291bnQocmVsaGRyLCBzaGRyMCwgc2hzdHJ0YWIsIGZuYW1lKTsKIH0KQEAgLTM4Myw5ICs0NzcsMTEgQEAKIHsKIAl1bnNpZ25lZCB0b3RyZWxzeiA9IDA7CiAJRWxmX1NoZHIgY29uc3QgKnNoZHJwID0gc2hkcjA7CisJY2hhciBjb25zdCAqdHh0bmFtZTsKIAogCWZvciAoOyBuaGRyOyAtLW5oZHIsICsrc2hkcnApIHsKLQkJaWYgKGhhc19yZWxfbWNvdW50KHNoZHJwLCBzaGRyMCwgc2hzdHJ0YWIsIGZuYW1lKSkKKwkJdHh0bmFtZSA9IGhhc19yZWxfbWNvdW50KHNoZHJwLCBzaGRyMCwgc2hzdHJ0YWIsIGZuYW1lKTsKKwkJaWYgKHR4dG5hbWUgJiYgaXNfbWNvdW50ZWRfc2VjdGlvbl9uYW1lKHR4dG5hbWUpKQogCQkJdG90cmVsc3ogKz0gX3coc2hkcnAtPnNoX3NpemUpOwogCX0KIAlyZXR1cm4gdG90cmVsc3o7CkBAIC00MjEsNyArNTE3LDcgQEAKIAlmb3IgKHJlbGhkciA9IHNoZHIwLCBrID0gbmhkcjsgazsgLS1rLCArK3JlbGhkcikgewogCQljaGFyIGNvbnN0ICpjb25zdCB0eHRuYW1lID0gaGFzX3JlbF9tY291bnQocmVsaGRyLCBzaGRyMCwKIAkJCXNoc3RydGFiLCBmbmFtZSk7Ci0JCWlmICh0eHRuYW1lKSB7CisJCWlmICh0eHRuYW1lICYmIGlzX21jb3VudGVkX3NlY3Rpb25fbmFtZSh0eHRuYW1lKSkgewogCQkJdWludF90IHJlY3ZhbCA9IDA7CiAJCQl1bnNpZ25lZCBjb25zdCByZWNzeW0gPSBmaW5kX3NlY3N5bV9uZHgoCiAJCQkJdyhyZWxoZHItPnNoX2luZm8pLCB0eHRuYW1lLCAmcmVjdmFsLApAQCAtNDMyLDYgKzUyOCwxMiBAQAogCQkJbWxvY3AgPSBzaWZ0X3JlbF9tY291bnQobWxvY3AsCiAJCQkJKHZvaWQgKiltbG9jcCAtICh2b2lkICopbWxvYzAsICZtcmVscCwKIAkJCQlyZWxoZHIsIGVoZHIsIHJlY3N5bSwgcmVjdmFsLCByZWx0eXBlKTsKKwkJfSBlbHNlIGlmICh0eHRuYW1lICYmICh3YXJuX29uX25vdHJhY2Vfc2VjdCB8fCBtYWtlX25vcCkpIHsKKwkJCS8qCisJCQkgKiBUaGlzIHNlY3Rpb24gaXMgaWdub3JlZCBieSBmdHJhY2UsIGJ1dCBzdGlsbAorCQkJICogaGFzIG1jb3VudCBjYWxscy4gQ29udmVydCB0aGVtIHRvIG5vcHMgbm93LgorCQkJICovCisJCQlub3BfbWNvdW50KHJlbGhkciwgZWhkciwgdHh0bmFtZSk7CiAJCX0KIAl9CiAJaWYgKG1sb2MwICE9IG1sb2NwKSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL3JlY29yZG1jb3VudC5wbCBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCmluZGV4IDRiZTBkZWUuLjg1ODk2NmEgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCisrKyBiL3NjcmlwdHMvcmVjb3JkbWNvdW50LnBsCkBAIC0xMzQsNiArMTM0LDcgQEAKICAgICAgIi5zY2hlZC50ZXh0IiA9PiAxLAogICAgICAiLnNwaW5sb2NrLnRleHQiID0+IDEsCiAgICAgICIuaXJxZW50cnkudGV4dCIgPT4gMSwKKyAgICAgIi5rcHJvYmVzLnRleHQiID0+IDEsCiAgICAgICIudGV4dC51bmxpa2VseSIgPT4gMSwKICk7CiAKQEAgLTIyMiw2ICsyMjMsNyBAQAogICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTouKlxcc21jb3VudChbKy1dMHhbMC05YS16QS1aXSspP1wkIjsKICAgICAkdHlwZSA9ICIucXVhZCI7CiAgICAgJGFsaWdubWVudCA9IDg7CisgICAgJG1jb3VudF9hZGp1c3QgPSAtMTsKIAogICAgICMgZm9yY2UgZmxhZ3MgZm9yIHRoaXMgYXJjaAogICAgICRsZCAuPSAiIC1tIGVsZl94ODZfNjQiOwpAQCAtMjMxLDYgKzIzMyw3IEBACiAKIH0gZWxzaWYgKCRhcmNoIGVxICJpMzg2IikgewogICAgICRhbGlnbm1lbnQgPSA0OworICAgICRtY291bnRfYWRqdXN0ID0gLTE7CiAKICAgICAjIGZvcmNlIGZsYWdzIGZvciB0aGlzIGFyY2gKICAgICAkbGQgLj0gIiAtbSBlbGZfaTM4NiI7CkBAIC0yNDAsMTIgKzI0MywxNCBAQAogCiB9IGVsc2lmICgkYXJjaCBlcSAiczM5MCIgJiYgJGJpdHMgPT0gMzIpIHsKICAgICAkbWNvdW50X3JlZ2V4ID0gIl5cXHMqKFswLTlhLWZBLUZdKyk6XFxzKlJfMzkwXzMyXFxzK19tY291bnRcJCI7CisgICAgJG1jb3VudF9hZGp1c3QgPSAtNDsKICAgICAkYWxpZ25tZW50ID0gNDsKICAgICAkbGQgLj0gIiAtbSBlbGZfczM5MCI7CiAgICAgJGNjIC49ICIgLW0zMSI7CiAKIH0gZWxzaWYgKCRhcmNoIGVxICJzMzkwIiAmJiAkYml0cyA9PSA2NCkgewogICAgICRtY291bnRfcmVnZXggPSAiXlxccyooWzAtOWEtZkEtRl0rKTpcXHMqUl8zOTBfKFBDfFBMVCkzMkRCTFxccytfbWNvdW50XFwrMHgyXCQiOworICAgICRtY291bnRfYWRqdXN0ID0gLTg7CiAgICAgJGFsaWdubWVudCA9IDg7CiAgICAgJHR5cGUgPSAiLnF1YWQiOwogICAgICRsZCAuPSAiIC1tIGVsZjY0X3MzOTAiOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCmluZGV4IDI5ODRlYTQuLmJiYjUxMTUgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYworKysgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKQEAgLTE4MSw3ICsxODEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNhcF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQorc3RhdGljIGludCBjYXBfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaywgdW5zaWduZWQgZmxhZ3MpCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCAxMDExNDIzLi40YmE2ZDRjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTUxOCwxNiArNTE4LDE0IEBACiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzayk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgMCk7CiB9CiAKIGludCBzZWN1cml0eV9pbm9kZV9leGVjX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCiAJCXJldHVybiAwOwotCWlmIChmbGFncykKLQkJcmV0dXJuIC1FQ0hJTEQ7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfcGVybWlzc2lvbihpbm9kZSwgTUFZX0VYRUMpOworCXJldHVybiBzZWN1cml0eV9vcHMtPmlub2RlX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9FWEVDLCBmbGFncyk7CiB9CiAKIGludCBzZWN1cml0eV9pbm9kZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKaW5kZXggOWRhNjQyMC4uMWQwMjdlMiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCkBAIC00NzEsNiArNDcxLDcgQEAKICAqIEBhdmQ6IGFjY2VzcyB2ZWN0b3IgZGVjaXNpb25zCiAgKiBAcmVzdWx0OiByZXN1bHQgZnJvbSBhdmNfaGFzX3Blcm1fbm9hdWRpdAogICogQGE6ICBhdXhpbGlhcnkgYXVkaXQgZGF0YQorICogQGZsYWdzOiBWRlMgd2FsayBmbGFncwogICoKICAqIEF1ZGl0IHRoZSBncmFudGluZyBvciBkZW5pYWwgb2YgcGVybWlzc2lvbnMgaW4gYWNjb3JkYW5jZQogICogd2l0aCB0aGUgcG9saWN5LiAgVGhpcyBmdW5jdGlvbiBpcyB0eXBpY2FsbHkgY2FsbGVkIGJ5CkBAIC00ODEsOSArNDgyLDEwIEBACiAgKiBiZSBwZXJmb3JtZWQgdW5kZXIgYSBsb2NrLCB0byBhbGxvdyB0aGUgbG9jayB0byBiZSByZWxlYXNlZAogICogYmVmb3JlIGNhbGxpbmcgdGhlIGF1ZGl0aW5nIGNvZGUuCiAgKi8KLXZvaWQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKK2ludCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAogCSAgICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCSAgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwgaW50IHJlc3VsdCwgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphKQorCSAgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwgaW50IHJlc3VsdCwgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphLAorCSAgICAgICB1bnNpZ25lZCBmbGFncykKIHsKIAlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgc3RhY2tfZGF0YTsKIAl1MzIgZGVuaWVkLCBhdWRpdGVkOwpAQCAtNTE1LDExICs1MTcsMjQgQEAKIAllbHNlCiAJCWF1ZGl0ZWQgPSByZXF1ZXN0ZWQgJiBhdmQtPmF1ZGl0YWxsb3c7CiAJaWYgKCFhdWRpdGVkKQotCQlyZXR1cm47CisJCXJldHVybiAwOworCiAJaWYgKCFhKSB7CiAJCWEgPSAmc3RhY2tfZGF0YTsKIAkJQ09NTU9OX0FVRElUX0RBVEFfSU5JVChhLCBOT05FKTsKIAl9CisKKwkvKgorCSAqIFdoZW4gaW4gYSBSQ1Ugd2FsayBkbyB0aGUgYXVkaXQgb24gdGhlIFJDVSByZXRyeS4gIFRoaXMgaXMgYmVjYXVzZQorCSAqIHRoZSBjb2xsZWN0aW9uIG9mIHRoZSBkbmFtZSBpbiBhbiBpbm9kZSBhdWRpdCBtZXNzYWdlIGlzIG5vdCBSQ1UKKwkgKiBzYWZlLiAgTm90ZSB0aGlzIG1heSBkcm9wIHNvbWUgYXVkaXRzIHdoZW4gdGhlIHNpdHVhdGlvbiBjaGFuZ2VzCisJICogZHVyaW5nIHJldHJ5LiBIb3dldmVyIHRoaXMgaXMgbG9naWNhbGx5IGp1c3QgYXMgaWYgdGhlIG9wZXJhdGlvbgorCSAqIGhhcHBlbmVkIGEgbGl0dGxlIGxhdGVyLgorCSAqLworCWlmICgoYS0+dHlwZSA9PSBMU01fQVVESVRfREFUQV9GUykgJiYKKwkgICAgKGZsYWdzICYgSVBFUk1fRkxBR19SQ1UpKQorCQlyZXR1cm4gLUVDSElMRDsKKwogCWEtPnNlbGludXhfYXVkaXRfZGF0YS50Y2xhc3MgPSB0Y2xhc3M7CiAJYS0+c2VsaW51eF9hdWRpdF9kYXRhLnJlcXVlc3RlZCA9IHJlcXVlc3RlZDsKIAlhLT5zZWxpbnV4X2F1ZGl0X2RhdGEuc3NpZCA9IHNzaWQ7CkBAIC01MjksNiArNTQ0LDcgQEAKIAlhLT5sc21fcHJlX2F1ZGl0ID0gYXZjX2F1ZGl0X3ByZV9jYWxsYmFjazsKIAlhLT5sc21fcG9zdF9hdWRpdCA9IGF2Y19hdWRpdF9wb3N0X2NhbGxiYWNrOwogCWNvbW1vbl9sc21fYXVkaXQoYSk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtNzkzLDYgKzgwOSw3IEBACiAgKiBAdGNsYXNzOiB0YXJnZXQgc2VjdXJpdHkgY2xhc3MKICAqIEByZXF1ZXN0ZWQ6IHJlcXVlc3RlZCBwZXJtaXNzaW9ucywgaW50ZXJwcmV0ZWQgYmFzZWQgb24gQHRjbGFzcwogICogQGF1ZGl0ZGF0YTogYXV4aWxpYXJ5IGF1ZGl0IGRhdGEKKyAqIEBmbGFnczogVkZTIHdhbGsgZmxhZ3MKICAqCiAgKiBDaGVjayB0aGUgQVZDIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBAcmVxdWVzdGVkIHBlcm1pc3Npb25zIGFyZSBncmFudGVkCiAgKiBmb3IgdGhlIFNJRCBwYWlyIChAc3NpZCwgQHRzaWQpLCBpbnRlcnByZXRpbmcgdGhlIHBlcm1pc3Npb25zCkBAIC04MDIsMTQgKzgxOSwxOSBAQAogICogcGVybWlzc2lvbnMgYXJlIGdyYW50ZWQsIC0lRUFDQ0VTIGlmIGFueSBwZXJtaXNzaW9ucyBhcmUgZGVuaWVkLCBvcgogICogYW5vdGhlciAtZXJybm8gdXBvbiBvdGhlciBlcnJvcnMuCiAgKi8KLWludCBhdmNfaGFzX3Blcm0odTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzLAotCQkgdTMyIHJlcXVlc3RlZCwgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphdWRpdGRhdGEpCitpbnQgYXZjX2hhc19wZXJtX2ZsYWdzKHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywKKwkJICAgICAgIHUzMiByZXF1ZXN0ZWQsIHN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSAqYXVkaXRkYXRhLAorCQkgICAgICAgdW5zaWduZWQgZmxhZ3MpCiB7CiAJc3RydWN0IGF2X2RlY2lzaW9uIGF2ZDsKLQlpbnQgcmM7CisJaW50IHJjLCByYzI7CiAKIAlyYyA9IGF2Y19oYXNfcGVybV9ub2F1ZGl0KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAwLCAmYXZkKTsKLQlhdmNfYXVkaXQoc3NpZCwgdHNpZCwgdGNsYXNzLCByZXF1ZXN0ZWQsICZhdmQsIHJjLCBhdWRpdGRhdGEpOworCisJcmMyID0gYXZjX2F1ZGl0KHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCAmYXZkLCByYywgYXVkaXRkYXRhLAorCQkJZmxhZ3MpOworCWlmIChyYzIpCisJCXJldHVybiByYzI7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggZjljMzc2NC4uOGZiMjQ4OCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtMTQ0Niw4ICsxNDQ2LDExIEBACiAJfQogCiAJcmMgPSBhdmNfaGFzX3Blcm1fbm9hdWRpdChzaWQsIHNpZCwgc2NsYXNzLCBhdiwgMCwgJmF2ZCk7Ci0JaWYgKGF1ZGl0ID09IFNFQ1VSSVRZX0NBUF9BVURJVCkKLQkJYXZjX2F1ZGl0KHNpZCwgc2lkLCBzY2xhc3MsIGF2LCAmYXZkLCByYywgJmFkKTsKKwlpZiAoYXVkaXQgPT0gU0VDVVJJVFlfQ0FQX0FVRElUKSB7CisJCWludCByYzIgPSBhdmNfYXVkaXQoc2lkLCBzaWQsIHNjbGFzcywgYXYsICZhdmQsIHJjLCAmYWQsIDApOworCQlpZiAocmMyKQorCQkJcmV0dXJuIHJjMjsKKwl9CiAJcmV0dXJuIHJjOwogfQogCkBAIC0xNDY3LDcgKzE0NzAsOCBAQAogc3RhdGljIGludCBpbm9kZV9oYXNfcGVybShjb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCwKIAkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgdTMyIHBlcm1zLAotCQkJICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmFkcCkKKwkJCSAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphZHAsCisJCQkgIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWM7CiAJc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhIGFkOwpAQCAtMTQ4Nyw3ICsxNDkxLDcgQEAKIAkJYWQudS5mcy5pbm9kZSA9IGlub2RlOwogCX0KIAotCXJldHVybiBhdmNfaGFzX3Blcm0oc2lkLCBpc2VjLT5zaWQsIGlzZWMtPnNjbGFzcywgcGVybXMsIGFkcCk7CisJcmV0dXJuIGF2Y19oYXNfcGVybV9mbGFncyhzaWQsIGlzZWMtPnNpZCwgaXNlYy0+c2NsYXNzLCBwZXJtcywgYWRwLCBmbGFncyk7CiB9CiAKIC8qIFNhbWUgYXMgaW5vZGVfaGFzX3Blcm0sIGJ1dCBwYXNzIGV4cGxpY2l0IGF1ZGl0IGRhdGEgY29udGFpbmluZwpAQCAtMTUwNCw3ICsxNTA4LDcgQEAKIAlDT01NT05fQVVESVRfREFUQV9JTklUKCZhZCwgRlMpOwogCWFkLnUuZnMucGF0aC5tbnQgPSBtbnQ7CiAJYWQudS5mcy5wYXRoLmRlbnRyeSA9IGRlbnRyeTsKLQlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIGF2LCAmYWQpOworCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgYXYsICZhZCwgMCk7CiB9CiAKIC8qIENoZWNrIHdoZXRoZXIgYSB0YXNrIGNhbiB1c2UgYW4gb3BlbiBmaWxlIGRlc2NyaXB0b3IgdG8KQEAgLTE1NDAsNyArMTU0NCw3IEBACiAJLyogYXYgaXMgemVybyBpZiBvbmx5IGNoZWNraW5nIGFjY2VzcyB0byB0aGUgZGVzY3JpcHRvci4gKi8KIAlyYyA9IDA7CiAJaWYgKGF2KQotCQlyYyA9IGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBhdiwgJmFkKTsKKwkJcmMgPSBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgYXYsICZhZCwgMCk7CiAKIG91dDoKIAlyZXR1cm4gcmM7CkBAIC0xNTc0LDcgKzE1NzgsOCBAQAogCQlyZXR1cm4gcmM7CiAKIAlpZiAoIW5ld3NpZCB8fCAhKHNic2VjLT5mbGFncyAmIFNFX1NCTEFCRUxTVVBQKSkgewotCQlyYyA9IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHNpZCwgZHNlYy0+c2lkLCB0Y2xhc3MsIE5VTEwsICZuZXdzaWQpOworCQlyYyA9IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHNpZCwgZHNlYy0+c2lkLCB0Y2xhc3MsCisJCQkJCSAgICAgJmRlbnRyeS0+ZF9uYW1lLCAmbmV3c2lkKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwogCX0KQEAgLTIxMDMsNyArMjEwOCw3IEBACiAJCQlmaWxlID0gZmlsZV9wcml2LT5maWxlOwogCQkJaW5vZGUgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwogCQkJaWYgKGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLAotCQkJCQkgICBGSUxFX19SRUFEIHwgRklMRV9fV1JJVEUsIE5VTEwpKSB7CisJCQkJCSAgIEZJTEVfX1JFQUQgfCBGSUxFX19XUklURSwgTlVMTCwgMCkpIHsKIAkJCQlkcm9wX3R0eSA9IDE7CiAJCQl9CiAJCX0KQEAgLTI2MzUsNyArMjY0MCw3IEBACiAJcmV0dXJuIGRlbnRyeV9oYXNfcGVybShjcmVkLCBOVUxMLCBkZW50cnksIEZJTEVfX1JFQUQpOwogfQogCi1zdGF0aWMgaW50IHNlbGludXhfaW5vZGVfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3N0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCB1bnNpZ25lZCBmbGFncykKIHsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwogCXN0cnVjdCBjb21tb25fYXVkaXRfZGF0YSBhZDsKQEAgLTI2NTcsNyArMjY2Miw3IEBACiAKIAlwZXJtcyA9IGZpbGVfbWFza190b19hdihpbm9kZS0+aV9tb2RlLCBtYXNrKTsKIAotCXJldHVybiBpbm9kZV9oYXNfcGVybShjcmVkLCBpbm9kZSwgcGVybXMsICZhZCk7CisJcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBwZXJtcywgJmFkLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgc2VsaW51eF9pbm9kZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKQEAgLTMyMDUsNyArMzIxMCw3IEBACiAJICogbmV3IGlub2RlIGxhYmVsIG9yIG5ldyBwb2xpY3kuCiAJICogVGhpcyBjaGVjayBpcyBub3QgcmVkdW5kYW50IC0gZG8gbm90IHJlbW92ZS4KIAkgKi8KLQlyZXR1cm4gaW5vZGVfaGFzX3Blcm0oY3JlZCwgaW5vZGUsIG9wZW5fZmlsZV90b19hdihmaWxlKSwgTlVMTCk7CisJcmV0dXJuIGlub2RlX2hhc19wZXJtKGNyZWQsIGlub2RlLCBvcGVuX2ZpbGVfdG9fYXYoZmlsZSksIE5VTEwsIDApOwogfQogCiAvKiB0YXNrIHNlY3VyaXR5IG9wZXJhdGlvbnMgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaCBiL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9hdmMuaAppbmRleCA1NjE1MDgxLi5lNzdiMmFjIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2luY2x1ZGUvYXZjLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL2F2Yy5oCkBAIC01NCwxMSArNTQsMTEgQEAKIAogdm9pZCBfX2luaXQgYXZjX2luaXQodm9pZCk7CiAKLXZvaWQgYXZjX2F1ZGl0KHUzMiBzc2lkLCB1MzIgdHNpZCwKK2ludCBhdmNfYXVkaXQodTMyIHNzaWQsIHUzMiB0c2lkLAogCSAgICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAogCSAgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwKIAkgICAgICAgaW50IHJlc3VsdCwKLQkgICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphKTsKKwkgICAgICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmEsIHVuc2lnbmVkIGZsYWdzKTsKIAogI2RlZmluZSBBVkNfU1RSSUNUIDEgLyogSWdub3JlIHBlcm1pc3NpdmUgbW9kZS4gKi8KIGludCBhdmNfaGFzX3Blcm1fbm9hdWRpdCh1MzIgc3NpZCwgdTMyIHRzaWQsCkBAIC02Niw5ICs2NiwxNyBAQAogCQkJIHVuc2lnbmVkIGZsYWdzLAogCQkJIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKTsKIAotaW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsCi0JCSB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCQkgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphdWRpdGRhdGEpOworaW50IGF2Y19oYXNfcGVybV9mbGFncyh1MzIgc3NpZCwgdTMyIHRzaWQsCisJCSAgICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAorCQkgICAgICAgc3RydWN0IGNvbW1vbl9hdWRpdF9kYXRhICphdWRpdGRhdGEsCisJCSAgICAgICB1bnNpZ25lZCk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGF2Y19oYXNfcGVybSh1MzIgc3NpZCwgdTMyIHRzaWQsCisJCQkgICAgICAgdTE2IHRjbGFzcywgdTMyIHJlcXVlc3RlZCwKKwkJCSAgICAgICBzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgKmF1ZGl0ZGF0YSkKK3sKKwlyZXR1cm4gYXZjX2hhc19wZXJtX2ZsYWdzKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCBhdWRpdGRhdGEsIDApOworfQogCiB1MzIgYXZjX3BvbGljeV9zZXFubyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCmluZGV4IGU3Yjg1MGEuLjcxMDI0NTcgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKQEAgLTUwMiw3ICs1MDIsNyBAQAogCQlnb3RvIG91dDsKIAogCXJjID0gZmxleF9hcnJheV9wcmVhbGxvYyhwLT50eXBlX3ZhbF90b19zdHJ1Y3RfYXJyYXksIDAsCi0JCQkJIHAtPnBfdHlwZXMubnByaW0gLSAxLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJCQkJIHAtPnBfdHlwZXMubnByaW0sIEdGUF9LRVJORUwgfCBfX0dGUF9aRVJPKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCkBAIC01MTksNyArNTE5LDcgQEAKIAkJCWdvdG8gb3V0OwogCiAJCXJjID0gZmxleF9hcnJheV9wcmVhbGxvYyhwLT5zeW1fdmFsX3RvX25hbWVbaV0sCi0JCQkJCSAwLCBwLT5zeW10YWJbaV0ubnByaW0gLSAxLAorCQkJCQkgMCwgcC0+c3ltdGFiW2ldLm5wcmltLAogCQkJCQkgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKQEAgLTE4MTksOCArMTgxOSw2IEBACiAJCWdvdG8gb3V0OwogCW5lbCA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBuZWw9JWRcbiIsIF9fZnVuY19fLCBuZWwpOwotCiAJbGFzdCA9IHAtPmZpbGVuYW1lX3RyYW5zOwogCXdoaWxlIChsYXN0ICYmIGxhc3QtPm5leHQpCiAJCWxhc3QgPSBsYXN0LT5uZXh0OwpAQCAtMTg1Nyw4ICsxODU1LDYgQEAKIAkJCWdvdG8gb3V0OwogCQluYW1lW2xlbl0gPSAwOwogCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZ0PSVwIGZ0LT5uYW1lPSVwIGZ0LT5uYW1lPSVzXG4iLCBfX2Z1bmNfXywgZnQsIGZ0LT5uYW1lLCBmdC0+bmFtZSk7Ci0KIAkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpICogNCk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OwpAQCAtMjM3NSw3ICsyMzcxLDcgQEAKIAkJZ290byBiYWQ7CiAKIAkvKiBwcmVhbGxvY2F0ZSBzbyB3ZSBkb24ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoZSBwdXQgZXZlciBmYWlsaW5nICovCi0JcmMgPSBmbGV4X2FycmF5X3ByZWFsbG9jKHAtPnR5cGVfYXR0cl9tYXBfYXJyYXksIDAsIHAtPnBfdHlwZXMubnByaW0gLSAxLAorCXJjID0gZmxleF9hcnJheV9wcmVhbGxvYyhwLT50eXBlX2F0dHJfbWFwX2FycmF5LCAwLCBwLT5wX3R5cGVzLm5wcmltLAogCQkJCSBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAJaWYgKHJjKQogCQlnb3RvIGJhZDsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKaW5kZXggYzZmOGZjYS4uNDAwYTVkNSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKKysrIGIvc2VjdXJpdHkvc21hY2svc21hY2tfbHNtLmMKQEAgLTY4Niw3ICs2ODYsNyBAQAogICoKICAqIFJldHVybnMgMCBpZiBhY2Nlc3MgaXMgcGVybWl0dGVkLCAtRUFDQ0VTIG90aGVyd2lzZQogICovCi1zdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCitzdGF0aWMgaW50IHNtYWNrX2lub2RlX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHVuc2lnbmVkIGZsYWdzKQogewogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKIApAQCAtNjk2LDYgKzY5NiwxMCBAQAogCSAqLwogCWlmIChtYXNrID09IDApCiAJCXJldHVybiAwOworCisJLyogTWF5IGJlIGRyb3BwYWJsZSBhZnRlciBhdWRpdCAqLworCWlmIChmbGFncyAmIElQRVJNX0ZMQUdfUkNVKQorCQlyZXR1cm4gLUVDSElMRDsKIAlzbWtfYWRfaW5pdCgmYWQsIF9fZnVuY19fLCBMU01fQVVESVRfREFUQV9GUyk7CiAJc21rX2FkX3NldGZpZWxkX3VfZnNfaW5vZGUoJmFkLCBpbm9kZSk7CiAJcmV0dXJuIHNta19jdXJhY2Moc21rX29mX2lub2RlKGlub2RlKSwgbWFzaywgJmFkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMgYi9zb3VuZC9hb2EvY29kZWNzL3Rhcy5jCmluZGV4IDU4ODA0YzcuLmZkMjE4OGMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2FvYS9jb2RlY3MvdGFzLmMKKysrIGIvc291bmQvYW9hL2NvZGVjcy90YXMuYwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJLyogYW5hbHlzaW5nIHRoZSB2b2x1bWUgYW5kIG1peGVyIHRhYmxlcyBzaG93cwogCSAqIHRoYXQgdGhleSBhcmUgc2ltaWxhciBlbm91Z2ggd2hlbiB3ZSBzaGlmdAogCSAqIHRoZSBtaXhlciB0YWJsZSBkb3duIGJ5IDQgYml0cy4gVGhlIGVycm9yCi0JICogaXMgbWludXNjdWxlLCBpbiBqdXN0IG9uZSBpdGVtIHRoZSBlcnJvcgorCSAqIGlzIG1pbmlzY3VsZSwgaW4ganVzdCBvbmUgaXRlbSB0aGUgZXJyb3IKIAkgKiBpcyAxLCBhdCBhIHZhbHVlIG9mIDB4MDdmMTdiIChtaXhlciB0YWJsZQogCSAqIHZhbHVlIGlzIDB4MDdmMTdhKSAqLwogCXRtcCA9IHRhc19nYWludGFibGVbbGVmdF07CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYXU4OHgwL2F1ODh4MF9wY20uYyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jCmluZGV4IDMzZjBiYTUuLjYyZTk1OTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jCisrKyBiL3NvdW5kL3BjaS9hdTg4eDAvYXU4OHgwX3BjbS5jCkBAIC00NCwxMCArNDQsMTAgQEAKIAkuY2hhbm5lbHNfbWluID0gMSwKIAkuY2hhbm5lbHNfbWF4ID0gMiwKIAkuYnVmZmVyX2J5dGVzX21heCA9IDB4MTAwMDAsCi0JLnBlcmlvZF9ieXRlc19taW4gPSAweDEsCisJLnBlcmlvZF9ieXRlc19taW4gPSAweDIwLAogCS5wZXJpb2RfYnl0ZXNfbWF4ID0gMHgxMDAwLAogCS5wZXJpb2RzX21pbiA9IDIsCi0JLnBlcmlvZHNfbWF4ID0gMzIsCisJLnBlcmlvZHNfbWF4ID0gMTAyNCwKIH07CiAKICNpZm5kZWYgQ0hJUF9BVTg4MjAKQEAgLTE0MCw2ICsxNDAsOSBAQAogCQkJCQlTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EX0JZVEVTKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJc25kX3BjbV9od19jb25zdHJhaW50X3N0ZXAocnVudGltZSwgMCwKKwkJCQkJU05EUlZfUENNX0hXX1BBUkFNX0JVRkZFUl9CWVRFUywgNjQpOworCiAJaWYgKFZPUlRFWF9QQ01fVFlQRShzdWJzdHJlYW0tPnBjbSkgIT0gVk9SVEVYX1BDTV9XVCkgewogI2lmbmRlZiBDSElQX0FVODgyMAogCQlpZiAoVk9SVEVYX1BDTV9UWVBFKHN1YnN0cmVhbS0+cGNtKSA9PSBWT1JURVhfUENNX0EzRCkgewpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYyBiL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKaW5kZXggNDMwZjQxZC4uNzU5YWRlMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYworKysgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCkBAIC05MzcsNiArOTM3LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfc2h1dHVwX3BpbnMpOwogCisjaWZkZWYgU05EX0hEQV9ORUVEU19SRVNVTUUKIC8qIFJlc3RvcmUgdGhlIHBpbiBjb250cm9scyBjbGVhcmVkIHByZXZpb3VzbHkgdmlhIHNuZF9oZGFfc2h1dHVwX3BpbnMoKSAqLwogc3RhdGljIHZvaWQgcmVzdG9yZV9zaHV0dXBfcGlucyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKQEAgLTk1Myw2ICs5NTQsNyBAQAogCX0KIAljb2RlYy0+cGluc19zaHV0dXAgPSAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGluaXRfaGRhX2NhY2hlKHN0cnVjdCBoZGFfY2FjaGVfcmVjICpjYWNoZSwKIAkJCSAgIHVuc2lnbmVkIGludCByZWNvcmRfc2l6ZSk7CkBAIC0xMzI5LDYgKzEzMzEsNyBAQAogCX0KIH0KIAorI2lmZGVmIFNORF9IREFfTkVFRFNfUkVTVU1FCiAvKiBjbGVhbiB1cCBhbGwgc3RyZWFtczsgY2FsbGVkIGZyb20gc3VzcGVuZCAqLwogc3RhdGljIHZvaWQgaGRhX2NsZWFudXBfYWxsX3N0cmVhbXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CkBAIC0xMzQwLDYgKzEzNDMsNyBAQAogCQkJcmVhbGx5X2NsZWFudXBfc3RyZWFtKGNvZGVjLCBwKTsKIAl9CiB9CisjZW5kaWYKIAogLyoKICAqIGFtcCBhY2Nlc3MgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IDUyOTI4ZDkuLmM4Mjk3OWEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC0xNzA0LDExICsxNzA0LDExIEBACiAJCQkJICAgY29kZWMtPmNoaXBfbmFtZSwgZml4LT50eXBlKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmICghZml4W2lkXS5jaGFpbmVkKQorCQlpZiAoIWZpeC0+Y2hhaW5lZCkKIAkJCWJyZWFrOwogCQlpZiAoKytkZXB0aCA+IDEwKQogCQkJYnJlYWs7Ci0JCWlkID0gZml4W2lkXS5jaGFpbl9pZDsKKwkJaWQgPSBmaXgtPmNoYWluX2lkOwogCX0KIH0KIApAQCAtNTY0NSw2ICs1NjQ1LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBiZWVwX3doaXRlX2xpc3RbXSA9IHsKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MjlmLCAiQVNVUyIsIDEpLAogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzY2UsICJFZWVQQyIsIDEpLAorCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgzMWEsICJFZWVQQyIsIDEpLAogCVNORF9QQ0lfUVVJUksoMHg4MDg2LCAweGQ2MTMsICJJbnRlbCIsIDEpLAogCXt9CiB9OwpAQCAtOTg2Myw2ICs5ODY0LDcgQEAKIAlTTkRfUENJX1FVSVJLKDB4MTA3MSwgMHg4MjU4LCAiRXZlc2hhbSBWb3lhZWdlciIsIEFMQzg4M19MQVBUT1BfRUFQRCksCiAJU05EX1BDSV9RVUlSSygweDEwZjEsIDB4MjM1MCwgIlRZQU4tUzIzNTAiLCBBTEM4ODhfNlNUX0RFTEwpLAogCVNORF9QQ0lfUVVJUksoMHgxMDhlLCAweDUzNGQsIE5VTEwsIEFMQzg4M18zU1RfNmNoKSwKKwlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgUDM1IERTM1IiLCBBTEM4ODJfNlNUX0RJRyksCiAKIAlTTkRfUENJX1FVSVJLKDB4MTQ2MiwgMHgwMzQ5LCAiTVNJIiwgQUxDODgzX1RBUkdBXzJjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNDYyLCAweDA0MGQsICJNU0kiLCBBTEM4ODNfVEFSR0FfMmNoX0RJRyksCkBAIC0xMDY5OSw3ICsxMDcwMSw2IEBACiAJUElORklYX0xFTk9WT19ZNTMwLAogCVBJTkZJWF9QQl9NNTIxMCwKIAlQSU5GSVhfQUNFUl9BU1BJUkVfNzczNiwKLQlQSU5GSVhfR0lHQUJZVEVfODgwR00sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFsY19maXh1cCBhbGM4ODJfZml4dXBzW10gPSB7CkBAIC0xMDczMSwxMyArMTA3MzIsNiBAQAogCQkudHlwZSA9IEFMQ19GSVhVUF9TS1UsCiAJCS52LnNrdSA9IEFMQ19GSVhVUF9TS1VfSUdOT1JFLAogCX0sCi0JW1BJTkZJWF9HSUdBQllURV84ODBHTV0gPSB7Ci0JCS50eXBlID0gQUxDX0ZJWFVQX1BJTlMsCi0JCS52LnBpbnMgPSAoY29uc3Qgc3RydWN0IGFsY19waW5jZmdbXSkgewotCQkJeyAweDE0LCAweDExMTQ0MTAgfSwgLyogc2V0IGFzIHNwZWFrZXIgKi8KLQkJCXsgfQotCQl9Ci0JfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBhbGM4ODJfZml4dXBfdGJsW10gPSB7CkBAIC0xMDc0NSw3ICsxMDczOSw2IEBACiAJU05EX1BDSV9RVUlSSygweDE3YWEsIDB4M2EwZCwgIkxlbm92byBZNTMwIiwgUElORklYX0xFTk9WT19ZNTMwKSwKIAlTTkRfUENJX1FVSVJLKDB4MTQ3YiwgMHgxMDdhLCAiQWJpdCBBVzlELU1BWCIsIFBJTkZJWF9BQklUX0FXOURfTUFYKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyNSwgMHgwMjk2LCAiQWNlciBBc3BpcmUgNzczNnoiLCBQSU5GSVhfQUNFUl9BU1BJUkVfNzczNiksCi0JU05EX1BDSV9RVUlSSygweDE0NTgsIDB4YTAwMiwgIkdpZ2FieXRlIiwgUElORklYX0dJR0FCWVRFXzg4MEdNKSwKIAl7fQogfTsKIApAQCAtMTQ4NjgsNiArMTQ4NjEsMjMgQEAKIAlhbGNfd3JpdGVfY29lZl9pZHgoY29kZWMsIDB4MWUsIGNvZWYgfCAweDgwKTsKIH0KIAorc3RhdGljIHZvaWQgYWxjMjcxX2ZpeHVwX2RtaWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwICpmaXgsIGludCBhY3Rpb24pCit7CisJc3RhdGljIHN0cnVjdCBoZGFfdmVyYiB2ZXJic1tdID0geworCQl7MHgyMCwgQUNfVkVSQl9TRVRfQ09FRl9JTkRFWCwgMHgwZH0sCisJCXsweDIwLCBBQ19WRVJCX1NFVF9QUk9DX0NPRUYsIDB4NDAwMH0sCisJCXt9CisJfTsKKwl1bnNpZ25lZCBpbnQgY2ZnOworCisJaWYgKHN0cmNtcChjb2RlYy0+Y2hpcF9uYW1lLCAiQUxDMjcxWCIpKQorCQlyZXR1cm47CisJY2ZnID0gc25kX2hkYV9jb2RlY19nZXRfcGluY2ZnKGNvZGVjLCAweDEyKTsKKwlpZiAoZ2V0X2RlZmNmZ19jb25uZWN0KGNmZykgPT0gQUNfSkFDS19QT1JUX0ZJWEVEKQorCQlzbmRfaGRhX3NlcXVlbmNlX3dyaXRlKGNvZGVjLCB2ZXJicyk7Cit9CisKIGVudW0gewogCUFMQzI2OV9GSVhVUF9TT05ZX1ZBSU8sCiAJQUxDMjc1X0ZJWFVQX1NPTllfVkFJT19HUElPMiwKQEAgLTE0ODc2LDYgKzE0ODg2LDcgQEAKIAlBTEMyNjlfRklYVVBfQVNVU19HNzNKVywKIAlBTEMyNjlfRklYVVBfTEVOT1ZPX0VBUEQsCiAJQUxDMjc1X0ZJWFVQX1NPTllfSFdFUSwKKwlBTEMyNzFfRklYVVBfRE1JQywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgYWxjX2ZpeHVwIGFsYzI2OV9maXh1cHNbXSA9IHsKQEAgLTE0OTI5LDcgKzE0OTQwLDExIEBACiAJCS52LmZ1bmMgPSBhbGMyNjlfZml4dXBfaHdlcSwKIAkJLmNoYWluZWQgPSB0cnVlLAogCQkuY2hhaW5faWQgPSBBTEMyNzVfRklYVVBfU09OWV9WQUlPX0dQSU8yCi0JfQorCX0sCisJW0FMQzI3MV9GSVhVUF9ETUlDXSA9IHsKKwkJLnR5cGUgPSBBTENfRklYVVBfRlVOQywKKwkJLnYuZnVuYyA9IGFsYzI3MV9maXh1cF9kbWljLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjMjY5X2ZpeHVwX3RibFtdID0gewpAQCAtMTQ5MzgsNiArMTQ5NTMsNyBAQAogCVNORF9QQ0lfUVVJUksoMHgxMDRkLCAweDkwODQsICJTb255IFZBSU8iLCBBTEMyNzVfRklYVVBfU09OWV9IV0VRKSwKIAlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwNGQsICJTb255IFZBSU8iLCBBTEMyNjlfRklYVVBfU09OWV9WQUlPKSwKIAlTTkRfUENJX1FVSVJLKDB4MTAyOCwgMHgwNDcwLCAiRGVsbCBNMTAxeiIsIEFMQzI2OV9GSVhVUF9ERUxMX00xMDFaKSwKKwlTTkRfUENJX1FVSVJLX1ZFTkRPUigweDEwMjUsICJBY2VyIEFzcGlyZSIsIEFMQzI3MV9GSVhVUF9ETUlDKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgyMGYyLCAiVGhpbmtwYWQgU0w0MTAvNTEwIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxNWUsICJUaGlua3BhZCBMNTEyIiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDIxYjgsICJUaGlua3BhZCBFZGdlIDE0IiwgQUxDMjY5X0ZJWFVQX1NLVV9JR05PUkUpLApAQCAtMTg3ODIsNiArMTg3OTgsOCBAQAogCQkgICAgICBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxMTc5LCAweGZmNmUsICJUb3NoaWJhIE5CMjB4IiwgQUxDNjYyX0FVVE8pLAogCVNORF9QQ0lfUVVJUksoMHgxNDRkLCAweGNhMDAsICJTYW1zdW5nIE5DMTAiLCBBTEMyNzJfU0FNU1VOR19OQzEwKSwKKwlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUgOTQ1R0NNLVMyTCIsCisJCSAgICAgIEFMQzY2Ml8zU1RfNmNoX0RJRyksCiAJU05EX1BDSV9RVUlSSygweDE1MmQsIDB4MjMwNCwgIlF1YW50YSBXSDEiLCBBTEM2NjNfQVNVU19IMTMpLAogCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGYsICJCaW9zdGFyIFRBNzgwRyBNMisiLCBBTEM2NjJfM1NUXzZjaF9ESUcpLAogCVNORF9QQ0lfUVVJUksoMHgxNjMxLCAweGMxMGMsICJQQiBSUzY1IiwgQUxDNjYzX0FTVVNfTTUxVkEpLApAQCAtMTk0NTUsNyArMTk0NzMsNyBAQAogCUFMQzY2Ml9GSVhVUF9JREVBUEFELAogCUFMQzI3Ml9GSVhVUF9NQVJJTywKIAlBTEM2NjJfRklYVVBfQ1pDX1AxMFQsCi0JQUxDNjYyX0ZJWFVQX0dJR0FCWVRFLAorCUFMQzY2Ml9GSVhVUF9TS1VfSUdOT1JFLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBhbGNfZml4dXAgYWxjNjYyX2ZpeHVwc1tdID0gewpAQCAtMTk0ODQsMjAgKzE5NTAyLDE3IEBACiAJCQl7fQogCQl9CiAJfSwKLQlbQUxDNjYyX0ZJWFVQX0dJR0FCWVRFXSA9IHsKLQkJLnR5cGUgPSBBTENfRklYVVBfUElOUywKLQkJLnYucGlucyA9IChjb25zdCBzdHJ1Y3QgYWxjX3BpbmNmZ1tdKSB7Ci0JCQl7IDB4MTQsIDB4MTExNDQxMCB9LCAvKiBzZXQgYXMgc3BlYWtlciAqLwotCQkJeyB9Ci0JCX0KKwlbQUxDNjYyX0ZJWFVQX1NLVV9JR05PUkVdID0geworCQkudHlwZSA9IEFMQ19GSVhVUF9TS1UsCisJCS52LnNrdSA9IEFMQ19GSVhVUF9TS1VfSUdOT1JFLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgYWxjNjYyX2ZpeHVwX3RibFtdID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzMDgsICJBY2VyIEFzcGlyZSA4OTQyRyIsIEFMQzY2Ml9GSVhVUF9BU1BJUkUpLAorCVNORF9QQ0lfUVVJUksoMHgxMDI1LCAweDAzMWMsICJHYXRld2F5IE5WNzkiLCBBTEM2NjJfRklYVVBfU0tVX0lHTk9SRSksCiAJU05EX1BDSV9RVUlSSygweDEwMjUsIDB4MDM4YiwgIkFjZXIgQXNwaXJlIDg5NDNHIiwgQUxDNjYyX0ZJWFVQX0FTUElSRSksCiAJU05EX1BDSV9RVUlSSygweDE0NGQsIDB4YzA1MSwgIlNhbXN1bmcgUjcyMCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKLQlTTkRfUENJX1FVSVJLKDB4MTQ1OCwgMHhhMDAyLCAiR2lnYWJ5dGUiLCBBTEM2NjJfRklYVVBfR0lHQUJZVEUpLAogCVNORF9QQ0lfUVVJUksoMHgxN2FhLCAweDM4YWYsICJMZW5vdm8gSWRlYXBhZCBZNTUwUCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MTdhYSwgMHgzYTBkLCAiTGVub3ZvIElkZWFwYWQgWTU1MCIsIEFMQzY2Ml9GSVhVUF9JREVBUEFEKSwKIAlTTkRfUENJX1FVSVJLKDB4MWIzNSwgMHgyMjA2LCAiQ1pDIFAxMFQiLCBBTEM2NjJfRklYVVBfQ1pDX1AxMFQpLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfdmlhLmMKaW5kZXggMTM3MWI1Ny4uMDk5NzAzMSAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9wYXRjaF92aWEuYworKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX3ZpYS5jCkBAIC0xMjkyLDE0ICsxMjkyLDE4IEBACiB7CiAJaW50IGk7CiAJc3RydWN0IHNuZF9jdGxfZWxlbV9pZCBpZDsKLQljb25zdCBjaGFyICpsYWJlbHNbXSA9IHsiTWljIiwgIkZyb250IE1pYyIsICJMaW5lIn07CisJY29uc3QgY2hhciAqbGFiZWxzW10gPSB7Ik1pYyIsICJGcm9udCBNaWMiLCAiTGluZSIsICJSZWFyIE1pYyJ9OworCXN0cnVjdCBzbmRfa2NvbnRyb2wgKmN0bDsKIAogCW1lbXNldCgmaWQsIDAsIHNpemVvZihpZCkpOwogCWlkLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVI7CiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobGFiZWxzKTsgaSsrKSB7CiAJCXNwcmludGYoaWQubmFtZSwgIiVzIFBsYXliYWNrIFZvbHVtZSIsIGxhYmVsc1tpXSk7Ci0JCXNuZF9jdGxfbm90aWZ5KGNvZGVjLT5idXMtPmNhcmQsIFNORFJWX0NUTF9FVkVOVF9NQVNLX1ZBTFVFLAotCQkJICAgICAgICZpZCk7CisJCWN0bCA9IHNuZF9oZGFfZmluZF9taXhlcl9jdGwoY29kZWMsIGlkLm5hbWUpOworCQlpZiAoY3RsKQorCQkJc25kX2N0bF9ub3RpZnkoY29kZWMtPmJ1cy0+Y2FyZCwKKwkJCQkJU05EUlZfQ1RMX0VWRU5UX01BU0tfVkFMVUUsCisJCQkJCSZjdGwtPmlkKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvano0NzQwLmMgYi9zb3VuZC9zb2MvY29kZWNzL2p6NDc0MC5jCmluZGV4IGY3Y2QzNDYuLmY1Y2NkYmYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvano0NzQwLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy9qejQ3NDAuYwpAQCAtMzA4LDggKzMwOCw2IEBACiAJc25kX3NvY19kYXBtX2FkZF9yb3V0ZXMoZGFwbSwgano0NzQwX2NvZGVjX2RhcG1fcm91dGVzLAogCQlBUlJBWV9TSVpFKGp6NDc0MF9jb2RlY19kYXBtX3JvdXRlcykpOwogCi0Jc25kX3NvY19kYXBtX25ld193aWRnZXRzKGNvZGVjKTsKLQogCWp6NDc0MF9jb2RlY19zZXRfYmlhc19sZXZlbChjb2RlYywgU05EX1NPQ19CSUFTX1NUQU5EQlkpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3NuOTUwMzEuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5jCmluZGV4IGE1NGQyYTUuLjRkOWZiMjcgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvc245NTAzMS5jCkBAIC05MjcsNyArOTI3LDcgQEAKIAkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlCQk9IHNuOTUwMzFfZGV2aWNlX3Byb2JlLAotCS5yZW1vdmUJCT0gc245NTAzMV9kZXZpY2VfcmVtb3ZlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc245NTAzMV9kZXZpY2VfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNuOTUwMzFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy9zc20yNjAyLmMgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwppbmRleCAyNzI3YmVmLi5iMDRkMjgwIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3NzbTI2MDIuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiBTT0NfRE9VQkxFX1IoIkNhcHR1cmUgU3dpdGNoIiwgU1NNMjYwMl9MSU5WT0wsIFNTTTI2MDJfUklOVk9MLCA3LCAxLCAxKSwKIAogU09DX1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikiLCBTU00yNjAyX0FQQU5BLCAwLCAxLCAwKSwKLVNPQ19TSU5HTEUoIk1pYyBCb29zdDIgKCsyMGRCKSIsIFNTTTI2MDJfQVBBTkEsIDcsIDEsIDApLAorU09DX1NJTkdMRSgiTWljIEJvb3N0MiAoKzIwZEIpIiwgU1NNMjYwMl9BUEFOQSwgOCwgMSwgMCksCiBTT0NfU0lOR0xFKCJNaWMgU3dpdGNoIiwgU1NNMjYwMl9BUEFOQSwgMSwgMSwgMSksCiAKIFNPQ19TSU5HTEUoIlNpZGV0b25lIFBsYXliYWNrIFZvbHVtZSIsIFNTTTI2MDJfQVBBTkEsIDYsIDMsIDEpLApAQCAtNjAyLDcgKzYwMiw3IEBACiAJLnJlYWQgPSBzc20yNjAyX3JlYWRfcmVnX2NhY2hlLAogCS53cml0ZSA9IHNzbTI2MDJfd3JpdGUsCiAJLnNldF9iaWFzX2xldmVsID0gc3NtMjYwMl9zZXRfYmlhc19sZXZlbCwKLQkucmVnX2NhY2hlX3NpemUgPSBzaXplb2Yoc3NtMjYwMl9yZWcpLAorCS5yZWdfY2FjaGVfc2l6ZSA9IEFSUkFZX1NJWkUoc3NtMjYwMl9yZWcpLAogCS5yZWdfd29yZF9zaXplID0gc2l6ZW9mKHUxNiksCiAJLnJlZ19jYWNoZV9kZWZhdWx0ID0gc3NtMjYwMl9yZWcsCiB9OwpAQCAtNjE0LDcgKzYxNCw3IEBACiAgKiAgICBsb3cgID0gMHgxYQogICogICAgaGlnaCA9IDB4MWIKICAqLwotc3RhdGljIGludCBzc20yNjAyX2kyY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorc3RhdGljIGludCBfX2RldmluaXQgc3NtMjYwMl9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKIAkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzc20yNjAyX3ByaXYgKnNzbTI2MDI7CkBAIC02MzUsNyArNjM1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNzbTI2MDJfaTJjX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmV4aXQgc3NtMjYwMl9pMmNfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc25kX3NvY191bnJlZ2lzdGVyX2NvZGVjKCZjbGllbnQtPmRldik7CiAJa2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwpAQCAtNjU1LDcgKzY1NSw3IEBACiAJCS5vd25lciA9IFRISVNfTU9EVUxFLAogCX0sCiAJLnByb2JlID0gc3NtMjYwMl9pMmNfcHJvYmUsCi0JLnJlbW92ZSA9IHNzbTI2MDJfaTJjX3JlbW92ZSwKKwkucmVtb3ZlID0gX19kZXZleGl0X3Aoc3NtMjYwMl9pMmNfcmVtb3ZlKSwKIAkuaWRfdGFibGUgPSBzc20yNjAyX2kyY19pZCwKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM0eC5jIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKaW5kZXggNDhmZmQ0MC4uYTdiOGYzMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKKysrIGIvc291bmQvc29jL2NvZGVjcy91ZGExMzR4LmMKQEAgLTYwMSw5ICs2MDEsNyBAQAogCS5yZWdfY2FjaGVfc3RlcCA9IDEsCiAJLnJlYWQgPSB1ZGExMzR4X3JlYWRfcmVnX2NhY2hlLAogCS53cml0ZSA9IHVkYTEzNHhfd3JpdGUsCi0jaWZkZWYgUE9XRVJfT0ZGX09OX1NUQU5EQlkKIAkuc2V0X2JpYXNfbGV2ZWwgPSB1ZGExMzR4X3NldF9iaWFzX2xldmVsLAotI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCB1ZGExMzR4X2NvZGVjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jIGIvc291bmQvc29jL2NvZGVjcy93bTg5MDMuYwppbmRleCBhZTFjYWRmLi44MjRkMWM4IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODkwMy5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTAzLmMKQEAgLTI0Nyw4ICsyNDcsNiBAQAogCWNhc2UgV004OTAzX1JFVklTSU9OX05VTUJFUjoKIAljYXNlIFdNODkwM19JTlRFUlJVUFRfU1RBVFVTXzE6CiAJY2FzZSBXTTg5MDNfV1JJVEVfU0VRVUVOQ0VSXzQ6Ci0JY2FzZSBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8zOgotCWNhc2UgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMjoKIAljYXNlIFdNODkwM19EQ19TRVJWT19SRUFEQkFDS18xOgogCWNhc2UgV004OTAzX0RDX1NFUlZPX1JFQURCQUNLXzI6CiAJY2FzZSBXTTg5MDNfRENfU0VSVk9fUkVBREJBQ0tfMzoKQEAgLTY5NCw3ICs2OTIsNyBAQAogU09DX1NJTkdMRV9UTFYoIkRSQyBTdGFydHVwIFZvbHVtZSIsIFdNODkwM19EUkNfMCwgNiwgMTgsIDAsIGRyY190bHZfc3RhcnR1cCksCiAKIFNPQ19ET1VCTEVfUl9UTFYoIkRpZ2l0YWwgQ2FwdHVyZSBWb2x1bWUiLCBXTTg5MDNfQURDX0RJR0lUQUxfVk9MVU1FX0xFRlQsCi0JCSBXTTg5MDNfQURDX0RJR0lUQUxfVk9MVU1FX1JJR0hULCAxLCA5NiwgMCwgZGlnaXRhbF90bHYpLAorCQkgV004OTAzX0FEQ19ESUdJVEFMX1ZPTFVNRV9SSUdIVCwgMSwgMTIwLCAwLCBkaWdpdGFsX3RsdiksCiBTT0NfRU5VTSgiQURDIENvbXBhbmRpbmcgTW9kZSIsIGFkY19jb21wYW5kaW5nKSwKIFNPQ19TSU5HTEUoIkFEQyBDb21wYW5kaW5nIFN3aXRjaCIsIFdNODkwM19BVURJT19JTlRFUkZBQ0VfMCwgMywgMSwgMCksCiAKQEAgLTg3NSwzNCArODczLDQwIEBACiBTTkRfU09DX0RBUE1fTUlYRVIoIlJpZ2h0IFNwZWFrZXIgTWl4ZXIiLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF80LCAwLCAwLAogCQkgICByaWdodF9zcGVha2VyX21peGVyLCBBUlJBWV9TSVpFKHJpZ2h0X3NwZWFrZXJfbWl4ZXIpKSwKIAotU05EX1NPQ19EQVBNX1BHQV9TKCJMZWZ0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX0FOQUxPR1VFX0hQXzAsCi0JCSAgIDQsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJSaWdodCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19BTkFMT0dVRV9IUF8wLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMZWZ0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMiwKKwkJICAgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIlJpZ2h0IEhlYWRwaG9uZSBPdXRwdXQgUEdBIiwgMCwgV004OTAzX1BPV0VSX01BTkFHRU1FTlRfMiwKIAkJICAgMCwgMCwgTlVMTCwgMCksCiAKLVNORF9TT0NfREFQTV9QR0FfUygiTGVmdCBMaW5lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCA0LCAwLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMZWZ0IExpbmUgT3V0cHV0IFBHQSIsIDAsIFdNODkwM19QT1dFUl9NQU5BR0VNRU5UXzMsIDEsIDAsCiAJCSAgIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJSaWdodCBMaW5lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAwLCAwLAorU05EX1NPQ19EQVBNX1BHQV9TKCJSaWdodCBMaW5lIE91dHB1dCBQR0EiLCAwLCBXTTg5MDNfUE9XRVJfTUFOQUdFTUVOVF8zLCAwLCAwLAogCQkgICBOVUxMLCAwKSwKIAogU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfUk1WX1NIT1JUIiwgNCwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDcsIDAsIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfRU5BX09VVFAiLCAzLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgNiwgMCwgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkhQTF9FTkFfRExZIiwgMSwgV004OTAzX0FOQUxPR1VFX0hQXzAsIDUsIDAsIE5VTEwsIDApLAorU05EX1NPQ19EQVBNX1BHQV9TKCJIUExfRU5BX0RMWSIsIDIsIFdNODkwM19BTkFMT0dVRV9IUF8wLCA1LCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBMX0VOQSIsIDEsIFdNODkwM19BTkFMT0dVRV9IUF8wLCA0LCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiSFBSX1JNVl9TSE9SVCIsIDQsIFdNODkwM19BTkFMT0dVRV9IUF8wLCAzLCAwLCBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiSFBSX0VOQV9PVVRQIiwgMywgV004OTAzX0FOQUxPR1VFX0hQXzAsIDIsIDAsIE5VTEwsIDApLAotU05EX1NPQ19EQVBNX1BHQV9TKCJIUFJfRU5BX0RMWSIsIDEsIFdNODkwM19BTkFMT0dVRV9IUF8wLCAxLCAwLCBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiSFBSX0VOQV9ETFkiLCAyLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgMSwgMCwgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkhQUl9FTkEiLCAxLCBXTTg5MDNfQU5BTE9HVUVfSFBfMCwgMCwgMCwgTlVMTCwgMCksCiAKIFNORF9TT0NfREFQTV9QR0FfUygiTElORU9VVExfUk1WX1NIT1JUIiwgNCwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNywgMCwKIAkJICAgTlVMTCwgMCksCiBTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRMX0VOQV9PVVRQIiwgMywgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNiwgMCwKIAkJICAgTlVMTCwgMCksCi1TTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRMX0VOQV9ETFkiLCAxLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCA1LCAwLAorU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUTF9FTkFfRExZIiwgMiwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgNSwgMCwKKwkJICAgTlVMTCwgMCksCitTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRMX0VOQSIsIDEsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDQsIDAsCiAJCSAgIE5VTEwsIDApLAogU05EX1NPQ19EQVBNX1BHQV9TKCJMSU5FT1VUUl9STVZfU0hPUlQiLCA0LCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAzLCAwLAogCQkgICBOVUxMLCAwKSwKIFNORF9TT0NfREFQTV9QR0FfUygiTElORU9VVFJfRU5BX09VVFAiLCAzLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAyLCAwLAogCQkgICBOVUxMLCAwKSwKLVNORF9TT0NfREFQTV9QR0FfUygiTElORU9VVFJfRU5BX0RMWSIsIDEsIFdNODkwM19BTkFMT0dVRV9MSU5FT1VUXzAsIDEsIDAsCitTTkRfU09DX0RBUE1fUEdBX1MoIkxJTkVPVVRSX0VOQV9ETFkiLCAyLCBXTTg5MDNfQU5BTE9HVUVfTElORU9VVF8wLCAxLCAwLAorCQkgICBOVUxMLCAwKSwKK1NORF9TT0NfREFQTV9QR0FfUygiTElORU9VVFJfRU5BIiwgMSwgV004OTAzX0FOQUxPR1VFX0xJTkVPVVRfMCwgMCwgMCwKIAkJICAgTlVMTCwgMCksCiAKIFNORF9TT0NfREFQTV9TVVBQTFkoIkRDUyBNYXN0ZXIiLCBXTTg5MDNfRENfU0VSVk9fMCwgNCwgMCwgTlVMTCwgMCksCkBAIC0xMDM3LDEwICsxMDQxLDE0IEBACiAJeyAiTGVmdCBTcGVha2VyIFBHQSIsIE5VTEwsICJMZWZ0IFNwZWFrZXIgTWl4ZXIiIH0sCiAJeyAiUmlnaHQgU3BlYWtlciBQR0EiLCBOVUxMLCAiUmlnaHQgU3BlYWtlciBNaXhlciIgfSwKIAotCXsgIkhQTF9FTkFfRExZIiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE91dHB1dCBQR0EiIH0sCi0JeyAiSFBSX0VOQV9ETFkiLCBOVUxMLCAiUmlnaHQgSGVhZHBob25lIE91dHB1dCBQR0EiIH0sCi0JeyAiTElORU9VVExfRU5BX0RMWSIsIE5VTEwsICJMZWZ0IExpbmUgT3V0cHV0IFBHQSIgfSwKLQl7ICJMSU5FT1VUUl9FTkFfRExZIiwgTlVMTCwgIlJpZ2h0IExpbmUgT3V0cHV0IFBHQSIgfSwKKwl7ICJIUExfRU5BIiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE91dHB1dCBQR0EiIH0sCisJeyAiSFBSX0VOQSIsIE5VTEwsICJSaWdodCBIZWFkcGhvbmUgT3V0cHV0IFBHQSIgfSwKKwl7ICJIUExfRU5BX0RMWSIsIE5VTEwsICJIUExfRU5BIiB9LAorCXsgIkhQUl9FTkFfRExZIiwgTlVMTCwgIkhQUl9FTkEiIH0sCisJeyAiTElORU9VVExfRU5BIiwgTlVMTCwgIkxlZnQgTGluZSBPdXRwdXQgUEdBIiB9LAorCXsgIkxJTkVPVVRSX0VOQSIsIE5VTEwsICJSaWdodCBMaW5lIE91dHB1dCBQR0EiIH0sCisJeyAiTElORU9VVExfRU5BX0RMWSIsIE5VTEwsICJMSU5FT1VUTF9FTkEiIH0sCisJeyAiTElORU9VVFJfRU5BX0RMWSIsIE5VTEwsICJMSU5FT1VUUl9FTkEiIH0sCiAKIAl7ICJIUExfRENTIiwgTlVMTCwgIkRDUyBNYXN0ZXIiIH0sCiAJeyAiSFBSX0RDUyIsIE5VTEwsICJEQ1MgTWFzdGVyIiB9LApkaWZmIC0tZ2l0IGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTk0LmMKaW5kZXggMzI5MDMzMy4uODRlMWJkMSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bTg5OTQuYworKysgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5NC5jCkBAIC0zMjYxLDIwICszMjYxLDM2IEBACiAJd204OTk0X3NldF9iaWFzX2xldmVsKGNvZGVjLCBTTkRfU09DX0JJQVNfU1RBTkRCWSk7CiAKIAkvKiBMYXRjaCB2b2x1bWUgdXBkYXRlcyAocmlnaHQgb25seTsgd2UgYWx3YXlzIGRvIGxlZnQgdGhlbiByaWdodCkuICovCisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfREFDMV9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMURBQzFfVlUsIFdNODk5NF9BSUYxREFDMV9WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfREFDMV9SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0FJRjFEQUMxX1ZVLCBXTTg5OTRfQUlGMURBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzJfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFEQUMyX1ZVLCBXTTg5OTRfQUlGMURBQzJfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0RBQzJfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9BSUYxREFDMl9WVSwgV004OTk0X0FJRjFEQUMyX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9EQUNfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjJEQUNfVlUsIFdNODk5NF9BSUYyREFDX1ZVKTsKIAlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9EQUNfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9BSUYyREFDX1ZVLCBXTTg5OTRfQUlGMkRBQ19WVSk7CisJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQURDMV9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfQUlGMUFEQzFfVlUsIFdNODk5NF9BSUYxQURDMV9WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjFfQURDMV9SSUdIVF9WT0xVTUUsCiAJCQkgICAgV004OTk0X0FJRjFBREMxX1ZVLCBXTTg5OTRfQUlGMUFEQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0FEQzJfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjFBREMyX1ZVLCBXTTg5OTRfQUlGMUFEQzJfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9BSUYxX0FEQzJfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9BSUYxQURDMl9WVSwgV004OTk0X0FJRjFBREMyX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfQUlGMl9BRENfTEVGVF9WT0xVTUUsCisJCQkgICAgV004OTk0X0FJRjJBRENfVlUsIFdNODk5NF9BSUYxQURDMl9WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0FJRjJfQURDX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfQUlGMkFEQ19WVSwgV004OTk0X0FJRjFBREMyX1ZVKTsKKwlzbmRfc29jX3VwZGF0ZV9iaXRzKGNvZGVjLCBXTTg5OTRfREFDMV9MRUZUX1ZPTFVNRSwKKwkJCSAgICBXTTg5OTRfREFDMV9WVSwgV004OTk0X0RBQzFfVlUpOwogCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9EQUMxX1JJR0hUX1ZPTFVNRSwKIAkJCSAgICBXTTg5OTRfREFDMV9WVSwgV004OTk0X0RBQzFfVlUpOworCXNuZF9zb2NfdXBkYXRlX2JpdHMoY29kZWMsIFdNODk5NF9EQUMyX0xFRlRfVk9MVU1FLAorCQkJICAgIFdNODk5NF9EQUMyX1ZVLCBXTTg5OTRfREFDMl9WVSk7CiAJc25kX3NvY191cGRhdGVfYml0cyhjb2RlYywgV004OTk0X0RBQzJfUklHSFRfVk9MVU1FLAogCQkJICAgIFdNODk5NF9EQUMyX1ZVLCBXTTg5OTRfREFDMl9WVSk7CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd21faHVicy5jIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKaW5kZXggN2I2YjNjMS4uNDAwNWU5YSAxMDA2NDQKLS0tIGEvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKKysrIGIvc291bmQvc29jL2NvZGVjcy93bV9odWJzLmMKQEAgLTc0MCwxMiArNzQwLDEyIEBACiAKIAl7ICJTUEtMIiwgIklucHV0IFN3aXRjaCIsICJNSVhJTkwiIH0sCiAJeyAiU1BLTCIsICJJTjFMUCBTd2l0Y2giLCAiSU4xTFAiIH0sCi0JeyAiU1BLTCIsICJPdXRwdXQgU3dpdGNoIiwgIkxlZnQgT3V0cHV0IE1peGVyIiB9LAorCXsgIlNQS0wiLCAiT3V0cHV0IFN3aXRjaCIsICJMZWZ0IE91dHB1dCBQR0EiIH0sCiAJeyAiU1BLTCIsIE5VTEwsICJUT0NMSyIgfSwKIAogCXsgIlNQS1IiLCAiSW5wdXQgU3dpdGNoIiwgIk1JWElOUiIgfSwKIAl7ICJTUEtSIiwgIklOMVJQIFN3aXRjaCIsICJJTjFSUCIgfSwKLQl7ICJTUEtSIiwgIk91dHB1dCBTd2l0Y2giLCAiUmlnaHQgT3V0cHV0IE1peGVyIiB9LAorCXsgIlNQS1IiLCAiT3V0cHV0IFN3aXRjaCIsICJSaWdodCBPdXRwdXQgUEdBIiB9LAogCXsgIlNQS1IiLCBOVUxMLCAiVE9DTEsiIH0sCiAKIAl7ICJTUEtMIEJvb3N0IiwgIkRpcmVjdCBWb2ljZSBTd2l0Y2giLCAiRGlyZWN0IFZvaWNlIiB9LApAQCAtNzY3LDggKzc2Nyw4IEBACiAJeyAiU1BLT1VUUlAiLCBOVUxMLCAiU1BLUiBEcml2ZXIiIH0sCiAJeyAiU1BLT1VUUk4iLCBOVUxMLCAiU1BLUiBEcml2ZXIiIH0sCiAKLQl7ICJMZWZ0IEhlYWRwaG9uZSBNdXgiLCAiTWl4ZXIiLCAiTGVmdCBPdXRwdXQgTWl4ZXIiIH0sCi0JeyAiUmlnaHQgSGVhZHBob25lIE11eCIsICJNaXhlciIsICJSaWdodCBPdXRwdXQgTWl4ZXIiIH0sCisJeyAiTGVmdCBIZWFkcGhvbmUgTXV4IiwgIk1peGVyIiwgIkxlZnQgT3V0cHV0IFBHQSIgfSwKKwl7ICJSaWdodCBIZWFkcGhvbmUgTXV4IiwgIk1peGVyIiwgIlJpZ2h0IE91dHB1dCBQR0EiIH0sCiAKIAl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIkxlZnQgSGVhZHBob25lIE11eCIgfSwKIAl7ICJIZWFkcGhvbmUgUEdBIiwgTlVMTCwgIlJpZ2h0IEhlYWRwaG9uZSBNdXgiIH0sCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMgYi9zb3VuZC9zb2MvZGF2aW5jaS9kYXZpbmNpLW1jYXNwLmMKaW5kZXggYTVhZjgzNC4uNGRkYzZkMyAxMDA2NDQKLS0tIGEvc291bmQvc29jL2RhdmluY2kvZGF2aW5jaS1tY2FzcC5jCisrKyBiL3NvdW5kL3NvYy9kYXZpbmNpL2RhdmluY2ktbWNhc3AuYwpAQCAtNDM0LDE3ICs0MzQsMjEgQEAKIAkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHLCBBQ0xLUkUpOwogCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywgQUZTUkUpOwogCi0JCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLCAoMHg3IDw8IDI2KSk7CisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLAorCQkJCUFDTEtYIHwgQUhDTEtYIHwgQUZTWCk7CiAJCWJyZWFrOwogCWNhc2UgU05EX1NPQ19EQUlGTVRfQ0JNX0NGUzoKIAkJLyogY29kZWMgaXMgY2xvY2sgbWFzdGVyIGFuZCBmcmFtZSBzbGF2ZSAqLwotCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLWENUTF9SRUcsIEFDTEtYRSk7CisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtYQ1RMX1JFRywgQUNMS1hFKTsKIAkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfVFhGTUNUTF9SRUcsIEFGU1hFKTsKIAotCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9BQ0xLUkNUTF9SRUcsIEFDTEtSRSk7CisJCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX0FDTEtSQ1RMX1JFRywgQUNMS1JFKTsKIAkJbWNhc3Bfc2V0X2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUlhGTUNUTF9SRUcsIEFGU1JFKTsKIAotCQltY2FzcF9zZXRfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywgKDB4MmQgPDwgMjYpKTsKKwkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfUERJUl9SRUcsCisJCQkJQUNMS1ggfCBBQ0xLUik7CisJCW1jYXNwX3NldF9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLAorCQkJCUFGU1ggfCBBRlNSKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRfU09DX0RBSUZNVF9DQk1fQ0ZNOgogCQkvKiBjb2RlYyBpcyBjbG9jayBhbmQgZnJhbWUgbWFzdGVyICovCkBAIC00NTQsNyArNDU4LDggQEAKIAkJbWNhc3BfY2xyX2JpdHMoYmFzZSArIERBVklOQ0lfTUNBU1BfQUNMS1JDVExfUkVHLCBBQ0xLUkUpOwogCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywgQUZTUkUpOwogCi0JCW1jYXNwX2Nscl9iaXRzKGJhc2UgKyBEQVZJTkNJX01DQVNQX1BESVJfUkVHLCAoMHgzZiA8PCAyNikpOworCQltY2FzcF9jbHJfYml0cyhiYXNlICsgREFWSU5DSV9NQ0FTUF9QRElSX1JFRywKKwkJCQlBQ0xLWCB8IEFIQ0xLWCB8IEFGU1ggfCBBQ0xLUiB8IEFIQ0xLUiB8IEFGU1IpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC02NDQsNyArNjQ5LDcgQEAKIAkJbWNhc3Bfc2V0X3JlZyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYVERNX1JFRywgbWFzayk7CiAJCW1jYXNwX3NldF9iaXRzKGRldi0+YmFzZSArIERBVklOQ0lfTUNBU1BfVFhGTVRfUkVHLCBUWE9SRCk7CiAKLQkJaWYgKChkZXYtPnRkbV9zbG90cyA+PSAyKSB8fCAoZGV2LT50ZG1fc2xvdHMgPD0gMzIpKQorCQlpZiAoKGRldi0+dGRtX3Nsb3RzID49IDIpICYmIChkZXYtPnRkbV9zbG90cyA8PSAzMikpCiAJCQltY2FzcF9tb2RfYml0cyhkZXYtPmJhc2UgKyBEQVZJTkNJX01DQVNQX1RYRk1DVExfUkVHLAogCQkJCQlGU1hNT0QoZGV2LT50ZG1fc2xvdHMpLCBGU1hNT0QoMHgxRkYpKTsKIAkJZWxzZQpAQCAtNjYwLDcgKzY2NSw3IEBACiAJCQkJQUhDTEtSRSk7CiAJCW1jYXNwX3NldF9yZWcoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWFRETV9SRUcsIG1hc2spOwogCi0JCWlmICgoZGV2LT50ZG1fc2xvdHMgPj0gMikgfHwgKGRldi0+dGRtX3Nsb3RzIDw9IDMyKSkKKwkJaWYgKChkZXYtPnRkbV9zbG90cyA+PSAyKSAmJiAoZGV2LT50ZG1fc2xvdHMgPD0gMzIpKQogCQkJbWNhc3BfbW9kX2JpdHMoZGV2LT5iYXNlICsgREFWSU5DSV9NQ0FTUF9SWEZNQ1RMX1JFRywKIAkJCQkJRlNSTU9EKGRldi0+dGRtX3Nsb3RzKSwgRlNSTU9EKDB4MUZGKSk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9qejQ3NDAvano0NzQwLWkycy5jIGIvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtaTJzLmMKaW5kZXggNDE5YmY0Zi4uY2QyMmE1NCAxMDA2NDQKLS0tIGEvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtaTJzLmMKKysrIGIvc291bmQvc29jL2p6NDc0MC9qejQ3NDAtaTJzLmMKQEAgLTEzMyw3ICsxMzMsNyBAQAogCXN0cnVjdCBqejQ3NDBfaTJzICppMnMgPSBzbmRfc29jX2RhaV9nZXRfZHJ2ZGF0YShkYWkpOwogCXVpbnQzMl90IGNvbmY7CiAKLQlpZiAoIWRhaS0+YWN0aXZlKQorCWlmIChkYWktPmFjdGl2ZSkKIAkJcmV0dXJuOwogCiAJY29uZiA9IGp6NDc0MF9pMnNfcmVhZChpMnMsIEpaX1JFR19BSUNfQ09ORik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvbWlkLXg4Ni9zc3RfcGxhdGZvcm0uYyBiL3NvdW5kL3NvYy9taWQteDg2L3NzdF9wbGF0Zm9ybS5jCmluZGV4IGIyZTkxOTguLjZiMWY5ZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9taWQteDg2L3NzdF9wbGF0Zm9ybS5jCisrKyBiL3NvdW5kL3NvYy9taWQteDg2L3NzdF9wbGF0Zm9ybS5jCkBAIC0xMTYsMTggKzExNiwyMCBAQAogc3RhdGljIGlubGluZSB2b2lkIHNzdF9zZXRfc3RyZWFtX3N0YXR1cyhzdHJ1Y3Qgc3N0X3J1bnRpbWVfc3RyZWFtICpzdHJlYW0sCiAJCQkJCWludCBzdGF0ZSkKIHsKLQlzcGluX2xvY2soJnN0cmVhbS0+c3RhdHVzX2xvY2spOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnN0cmVhbS0+c3RhdHVzX2xvY2ssIGZsYWdzKTsKIAlzdHJlYW0tPnN0cmVhbV9zdGF0dXMgPSBzdGF0ZTsKLQlzcGluX3VubG9jaygmc3RyZWFtLT5zdGF0dXNfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RyZWFtLT5zdGF0dXNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzc3RfZ2V0X3N0cmVhbV9zdGF0dXMoc3RydWN0IHNzdF9ydW50aW1lX3N0cmVhbSAqc3RyZWFtKQogewogCWludCBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZzdHJlYW0tPnN0YXR1c19sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc3RyZWFtLT5zdGF0dXNfbG9jaywgZmxhZ3MpOwogCXN0YXRlID0gc3RyZWFtLT5zdHJlYW1fc3RhdHVzOwotCXNwaW5fdW5sb2NrKCZzdHJlYW0tPnN0YXR1c19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdHJlYW0tPnN0YXR1c19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHN0YXRlOwogfQogCkBAIC0zNzQsNiArMzc2LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc3N0X3BsYXRmb3JtX3BjbV9od19mcmVlKHN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQoreworCXJldHVybiBzbmRfcGNtX2xpYl9mcmVlX3BhZ2VzKHN1YnN0cmVhbSk7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9vcHMgc3N0X3BsYXRmb3JtX29wcyA9IHsKIAkub3BlbiA9IHNzdF9wbGF0Zm9ybV9vcGVuLAogCS5jbG9zZSA9IHNzdF9wbGF0Zm9ybV9jbG9zZSwKQEAgLTM4Miw2ICszODksNyBAQAogCS50cmlnZ2VyID0gc3N0X3BsYXRmb3JtX3BjbV90cmlnZ2VyLAogCS5wb2ludGVyID0gc3N0X3BsYXRmb3JtX3BjbV9wb2ludGVyLAogCS5od19wYXJhbXMgPSBzc3RfcGxhdGZvcm1fcGNtX2h3X3BhcmFtcywKKwkuaHdfZnJlZSA9IHNzdF9wbGF0Zm9ybV9wY21faHdfZnJlZSwKIH07CiAKIHN0YXRpYyB2b2lkIHNzdF9wY21fZnJlZShzdHJ1Y3Qgc25kX3BjbSAqcGNtKQpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYyBiL3NvdW5kL3NvYy9zYW1zdW5nL2dvbmlfd204OTk0LmMKaW5kZXggZjZiM2EzYy4uMGU4MGRhZSAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvZ29uaV93bTg5OTQuYworKysgYi9zb3VuZC9zb2Mvc2Ftc3VuZy9nb25pX3dtODk5NC5jCkBAIC0yMzYsMTggKzIzNiwxOCBAQAogCS5uYW1lID0gIldNODk5NCIsCiAJLnN0cmVhbV9uYW1lID0gIldNODk5NCBIaUZpIiwKIAkuY3B1X2RhaV9uYW1lID0gInNhbXN1bmctaTJzLjAiLAotCS5jb2RlY19kYWlfbmFtZSA9ICJ3bTg5OTQtaGlmaSIsCisJLmNvZGVjX2RhaV9uYW1lID0gIndtODk5NC1haWYxIiwKIAkucGxhdGZvcm1fbmFtZSA9ICJzYW1zdW5nLWF1ZGlvIiwKLQkuY29kZWNfbmFtZSA9ICJ3bTg5OTQtY29kZWMuMC0weDFhIiwKKwkuY29kZWNfbmFtZSA9ICJ3bTg5OTQtY29kZWMuMC0wMDFhIiwKIAkuaW5pdCA9IGdvbmlfd204OTk0X2luaXQsCiAJLm9wcyA9ICZnb25pX2hpZmlfb3BzLAogfSwgewogCS5uYW1lID0gIldNODk5NCBWb2ljZSIsCiAJLnN0cmVhbV9uYW1lID0gIlZvaWNlIiwKIAkuY3B1X2RhaV9uYW1lID0gImdvbmktdm9pY2UtZGFpIiwKLQkuY29kZWNfZGFpX25hbWUgPSAid204OTk0LXZvaWNlIiwKKwkuY29kZWNfZGFpX25hbWUgPSAid204OTk0LWFpZjIiLAogCS5wbGF0Zm9ybV9uYW1lID0gInNhbXN1bmctYXVkaW8iLAotCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYy4wLTB4MWEiLAorCS5jb2RlY19uYW1lID0gIndtODk5NC1jb2RlYy4wLTAwMWEiLAogCS5vcHMgPSAmZ29uaV92b2ljZV9vcHMsCiB9LAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zYW1zdW5nL3BjbS5jIGIvc291bmQvc29jL3NhbXN1bmcvcGNtLmMKaW5kZXggMzhhYWM3ZC4uOWM3ZThiNCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NhbXN1bmcvcGNtLmMKKysrIGIvc291bmQvc29jL3NhbXN1bmcvcGNtLmMKQEAgLTM1MCw4ICszNTAsOCBAQAogCWN0bCA9IHJlYWRsKHJlZ3MgKyBTM0NfUENNX0NUTCk7CiAKIAlzd2l0Y2ggKGZtdCAmIFNORF9TT0NfREFJRk1UX0lOVl9NQVNLKSB7Ci0JY2FzZSBTTkRfU09DX0RBSUZNVF9OQl9ORjoKLQkJLyogTm90aGluZyB0byBkbywgTkJfTkYgYnkgZGVmYXVsdCAqLworCWNhc2UgU05EX1NPQ19EQUlGTVRfSUJfTkY6CisJCS8qIE5vdGhpbmcgdG8gZG8sIElCX05GIGJ5IGRlZmF1bHQgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGV2X2VycihwY20tPmRldiwgIlVuc3VwcG9ydGVkIGNsb2NrIGludmVyc2lvbiFcbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL2ZzaS5jIGIvc291bmQvc29jL3NoL2ZzaS5jCmluZGV4IDBjOTk5N2UuLjIzYzBlODMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zaC9mc2kuYworKysgYi9zb3VuZC9zb2Mvc2gvZnNpLmMKQEAgLTEyMDAsMTAgKzEyMDAsMTEgQEAKIAltYXN0ZXItPmZzaWIubWFzdGVyCT0gbWFzdGVyOwogCiAJcG1fcnVudGltZV9lbmFibGUoJnBkZXYtPmRldik7Ci0JcG1fcnVudGltZV9yZXN1bWUoJnBkZXYtPmRldik7CiAJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIG1hc3Rlcik7CiAKKwlwbV9ydW50aW1lX2dldF9zeW5jKCZwZGV2LT5kZXYpOwogCWZzaV9zb2Z0X2FsbF9yZXNldChtYXN0ZXIpOworCXBtX3J1bnRpbWVfcHV0X3N5bmMoJnBkZXYtPmRldik7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShpcnEsICZmc2lfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAogCQkJICBpZF9lbnRyeS0+bmFtZSwgbWFzdGVyKTsKQEAgLTEyMTgsOCArMTIxOSwxNyBAQAogCQlnb3RvIGV4aXRfZnJlZV9pcnE7CiAJfQogCi0JcmV0dXJuIHNuZF9zb2NfcmVnaXN0ZXJfZGFpcygmcGRldi0+ZGV2LCBmc2lfc29jX2RhaSwgQVJSQVlfU0laRShmc2lfc29jX2RhaSkpOworCXJldCA9IHNuZF9zb2NfcmVnaXN0ZXJfZGFpcygmcGRldi0+ZGV2LCBmc2lfc29jX2RhaSwKKwkJCQkgICAgQVJSQVlfU0laRShmc2lfc29jX2RhaSkpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBzbmQgZGFpIHJlZ2lzdGVyXG4iKTsKKwkJZ290byBleGl0X3NuZF9zb2M7CisJfQogCisJcmV0dXJuIHJldDsKKworZXhpdF9zbmRfc29jOgorCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2KTsKIGV4aXRfZnJlZV9pcnE6CiAJZnJlZV9pcnEoaXJxLCBtYXN0ZXIpOwogZXhpdF9pb3VubWFwOgpAQCAtMTIzOCwxMiArMTI0OCwxMSBAQAogCiAJbWFzdGVyID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCi0Jc25kX3NvY191bnJlZ2lzdGVyX2RhaXMoJnBkZXYtPmRldiwgQVJSQVlfU0laRShmc2lfc29jX2RhaSkpOwotCXNuZF9zb2NfdW5yZWdpc3Rlcl9wbGF0Zm9ybSgmcGRldi0+ZGV2KTsKLQorCWZyZWVfaXJxKG1hc3Rlci0+aXJxLCBtYXN0ZXIpOwogCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKIAotCWZyZWVfaXJxKG1hc3Rlci0+aXJxLCBtYXN0ZXIpOworCXNuZF9zb2NfdW5yZWdpc3Rlcl9kYWlzKCZwZGV2LT5kZXYsIEFSUkFZX1NJWkUoZnNpX3NvY19kYWkpKTsKKwlzbmRfc29jX3VucmVnaXN0ZXJfcGxhdGZvcm0oJnBkZXYtPmRldik7CiAKIAlpb3VubWFwKG1hc3Rlci0+YmFzZSk7CiAJa2ZyZWUobWFzdGVyKTsKQEAgLTEzMjEsMyArMTMzMCw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlN1cGVySCBvbmNoaXAgRlNJIGF1ZGlvIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPiIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpmc2ktcGNtLWF1ZGlvIik7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGI3NmI3NGQuLmRkNTVkMTAgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC02MjksNiArNjI5LDcgQEAKIAkJCXJ1bnRpbWUtPmh3LnJhdGVzIHw9IGNvZGVjX2RhaV9kcnYtPmNhcHR1cmUucmF0ZXM7CiAJfQogCisJcmV0ID0gLUVJTlZBTDsKIAlzbmRfcGNtX2xpbWl0X2h3X3JhdGVzKHJ1bnRpbWUpOwogCWlmICghcnVudGltZS0+aHcucmF0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiAlcyA8LT4gJXMgTm8gbWF0Y2hpbmcgcmF0ZXNcbiIsCkBAIC02NDAsNyArNjQxLDggQEAKIAkJCWNvZGVjX2RhaS0+bmFtZSwgY3B1X2RhaS0+bmFtZSk7CiAJCWdvdG8gY29uZmlnX2VycjsKIAl9Ci0JaWYgKCFydW50aW1lLT5ody5jaGFubmVsc19taW4gfHwgIXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21heCkgeworCWlmICghcnVudGltZS0+aHcuY2hhbm5lbHNfbWluIHx8ICFydW50aW1lLT5ody5jaGFubmVsc19tYXggfHwKKwkgICAgcnVudGltZS0+aHcuY2hhbm5lbHNfbWluID4gcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogJXMgPC0+ICVzIE5vIG1hdGNoaW5nIGNoYW5uZWxzXG4iLAogCQkJCWNvZGVjX2RhaS0+bmFtZSwgY3B1X2RhaS0+bmFtZSk7CiAJCWdvdG8gY29uZmlnX2VycjsKQEAgLTIwNjAsNiArMjA2Miw3IEBACiAJLnJlc3VtZSA9IHNuZF9zb2NfcmVzdW1lLAogCS5wb3dlcm9mZiA9IHNuZF9zb2NfcG93ZXJvZmYsCiB9OworRVhQT1JUX1NZTUJPTF9HUEwoc25kX3NvY19wbV9vcHMpOwogCiAvKiBBU29DIHBsYXRmb3JtIGRyaXZlciAqLwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc29jX2RyaXZlciA9IHsKQEAgLTMyODgsNiArMzI5MSw4IEBACiAJaWYgKCFjYXJkLT5uYW1lIHx8ICFjYXJkLT5kZXYpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZGV2X3NldF9kcnZkYXRhKGNhcmQtPmRldiwgY2FyZCk7CisKIAlzbmRfc29jX2luaXRpYWxpemVfY2FyZF9saXN0cyhjYXJkKTsKIAogCXNvY19pbml0X2NhcmRfZGVidWdmcyhjYXJkKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy90ZWdyYS9oYXJtb255LmMgYi9zb3VuZC9zb2MvdGVncmEvaGFybW9ueS5jCmluZGV4IDg1ODU5NTcuLjU1NmE1NzEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy90ZWdyYS9oYXJtb255LmMKKysrIGIvc291bmQvc29jL3RlZ3JhL2hhcm1vbnkuYwpAQCAtMzcwLDYgKzM3MCw3IEBACiAJLmRyaXZlciA9IHsKIAkJLm5hbWUgPSBEUlZfTkFNRSwKIAkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJCS5wbSA9ICZzbmRfc29jX3BtX29wcywKIAl9LAogCS5wcm9iZSA9IHRlZ3JhX3NuZF9oYXJtb255X3Byb2JlLAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh0ZWdyYV9zbmRfaGFybW9ueV9yZW1vdmUpLApkaWZmIC0tZ2l0IGEvc291bmQvdXNiL2Zvcm1hdC5jIGIvc291bmQvdXNiL2Zvcm1hdC5jCmluZGV4IDViNzkyZDIuLmYwNzliNWUgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9mb3JtYXQuYworKysgYi9zb3VuZC91c2IvZm9ybWF0LmMKQEAgLTE3Niw5ICsxNzYsMTEgQEAKIAkJCWlmICghcmF0ZSkKIAkJCQljb250aW51ZTsKIAkJCS8qIEMtTWVkaWEgQ002NTAxIG1pc2xhYmVscyBpdHMgOTYga0h6IGFsdHNldHRpbmcgKi8KKwkJCS8qIFRlcnJhdGVjIEF1cmVvbiA3LjEgVVNCIEMtTWVkaWEgNjIwNiwgdG9vICovCiAJCQlpZiAocmF0ZSA9PSA0ODAwMCAmJiBucl9yYXRlcyA9PSAxICYmCiAJCQkgICAgKGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwZDhjLCAweDAyMDEpIHx8Ci0JCQkgICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwZDhjLCAweDAxMDIpKSAmJgorCQkJICAgICBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MGQ4YywgMHgwMTAyKSB8fAorCQkJICAgICBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MGNjZCwgMHgwMGIxKSkgJiYKIAkJCSAgICBmcC0+YWx0c2V0dGluZyA9PSA1ICYmIGZwLT5tYXhwYWNrc2l6ZSA9PSAzOTIpCiAJCQkJcmF0ZSA9IDk2MDAwOwogCQkJLyogQ3JlYXRpdmUgVkYwNDcwIExpdmUgQ2FtIHJlcG9ydHMgMTYga0h6IGluc3RlYWQgb2YgOGtIeiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3F1aXJrcy5jIGIvc291bmQvdXNiL3F1aXJrcy5jCmluZGV4IGVjMDdlNjIuLjFiOTRlYzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi9xdWlya3MuYworKysgYi9zb3VuZC91c2IvcXVpcmtzLmMKQEAgLTUzMyw2ICs1MzMsNyBAQAogCiAJY2FzZSBVU0JfSUQoMHgwZDhjLCAweDAxMDIpOgogCQkvKiBDLU1lZGlhIENNNjIwNiAvIENNMTA2LUxpa2UgU291bmQgRGV2aWNlICovCisJY2FzZSBVU0JfSUQoMHgwY2NkLCAweDAwYjEpOiAvKiBUZXJyYXRlYyBBdXJlb24gNy4xIFVTQiAqLwogCQlyZXR1cm4gc25kX3VzYl9jbTYyMDZfYm9vdF9xdWlyayhkZXYpOwogCiAJY2FzZSBVU0JfSUQoMHgxMzNlLCAweDA4MTUpOgpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LXBlcmwudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LXBlcmwudHh0CmluZGV4IDViYjQxZTUuLjMxNTJjY2EgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC1wZXJsLnR4dAorKysgYi90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQtcGVybC50eHQKQEAgLTYzLDcgKzYzLDYgQEAKICAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CiAgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7CiAgICAgICAgIGZpZWxkOmludCBjb21tb25fcGlkOwotICAgICAgICBmaWVsZDppbnQgY29tbW9uX2xvY2tfZGVwdGg7CiAKICAgICAgICAgZmllbGQ6Y2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOwogICAgICAgICBmaWVsZDpwaWRfdCBwaWQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQtcHl0aG9uLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC1weXRob24udHh0CmluZGV4IDM2YjM4MjcuLjQ3MTAyMjAgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC1weXRob24udHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC1weXRob24udHh0CkBAIC00NjMsNyArNDYzLDYgQEAKICAgICAgICAgZmllbGQ6dW5zaWduZWQgY2hhciBjb21tb25fZmxhZ3M7CiAgICAgICAgIGZpZWxkOnVuc2lnbmVkIGNoYXIgY29tbW9uX3ByZWVtcHRfY291bnQ7CiAgICAgICAgIGZpZWxkOmludCBjb21tb25fcGlkOwotICAgICAgICBmaWVsZDppbnQgY29tbW9uX2xvY2tfZGVwdGg7CiAKICAgICAgICAgZmllbGQ6Y2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOwogICAgICAgICBmaWVsZDpwaWRfdCBwaWQ7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQudHh0IGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtc2NyaXB0LnR4dAppbmRleCA2NmYwNDBiLi44NmM4N2UyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1zY3JpcHQudHh0CisrKyBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXNjcmlwdC50eHQKQEAgLTExMywxMyArMTEzLDYxIEBACiAgICAgICAgIERvIHZhcmlvdXMgY2hlY2tzIGxpa2Ugc2FtcGxlcyBvcmRlcmluZyBhbmQgbG9zdCBldmVudHMuCiAKIC1mOjoKLS0tZmllbGRzCistLWZpZWxkczo6CiAgICAgICAgIENvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGZpZWxkcyB0byBwcmludC4gT3B0aW9ucyBhcmU6CiAgICAgICAgIGNvbW0sIHRpZCwgcGlkLCB0aW1lLCBjcHUsIGV2ZW50LCB0cmFjZSwgc3ltLiBGaWVsZAotICAgICAgICBsaXN0IG11c3QgYmUgcHJlcGVuZGVkIHdpdGggdGhlIHR5cGUsIHRyYWNlLCBzdyBvciBodywKKyAgICAgICAgbGlzdCBjYW4gYmUgcHJlcGVuZGVkIHdpdGggdGhlIHR5cGUsIHRyYWNlLCBzdyBvciBodywKICAgICAgICAgdG8gaW5kaWNhdGUgdG8gd2hpY2ggZXZlbnQgdHlwZSB0aGUgZmllbGQgbGlzdCBhcHBsaWVzLgogICAgICAgICBlLmcuLCAtZiBzdzpjb21tLHRpZCx0aW1lLHN5bSAgYW5kIC1mIHRyYWNlOnRpbWUsY3B1LHRyYWNlCiAKKwkJcGVyZiBzY3JpcHQgLWYgPGZpZWxkcz4KKworCWlzIGVxdWl2YWxlbnQgdG86CisKKwkJcGVyZiBzY3JpcHQgLWYgdHJhY2U6PGZpZWxkcz4gLWYgc3c6PGZpZWxkcz4gLWYgaHc6PGZpZWxkcz4KKyAgICAKKwlpLmUuLCB0aGUgc3BlY2lmaWVkIGZpZWxkcyBhcHBseSB0byBhbGwgZXZlbnQgdHlwZXMgaWYgdGhlIHR5cGUgc3RyaW5nCisJaXMgbm90IGdpdmVuLgorICAgIAorCVRoZSBhcmd1bWVudHMgYXJlIHByb2Nlc3NlZCBpbiB0aGUgb3JkZXIgcmVjZWl2ZWQuIEEgbGF0ZXIgdXNhZ2UgY2FuCisJcmVzZXQgYSBwcmlvciByZXF1ZXN0LiBlLmcuOgorICAgIAorCQktZiB0cmFjZTogLWYgY29tbSx0aWQsdGltZSxzeW0KKyAgICAKKwlUaGUgZmlyc3QgLWYgc3VwcHJlc3NlcyB0cmFjZSBldmVudHMgKGZpZWxkIGxpc3QgaXMgIiIpLCBidXQgdGhlbiB0aGUKKwlzZWNvbmQgaW52b2NhdGlvbiBzZXRzIHRoZSBmaWVsZHMgdG8gY29tbSx0aWQsdGltZSxzeW0uIEluIHRoaXMgY2FzZSBhCisJd2FybmluZyBpcyBnaXZlbiB0byB0aGUgdXNlcjoKKyAgICAKKwkJIk92ZXJyaWRpbmcgcHJldmlvdXMgZmllbGQgcmVxdWVzdCBmb3IgYWxsIGV2ZW50cy4iCisgICAgCisJQWx0ZXJuYXRpdmV5LCBjb25zaWRlciB0aGUgb3JkZXI6CisgICAgCisJCS1mIGNvbW0sdGlkLHRpbWUsc3ltIC1mIHRyYWNlOgorICAgIAorCVRoZSBmaXJzdCAtZiBzZXRzIHRoZSBmaWVsZHMgZm9yIGFsbCBldmVudHMgYW5kIHRoZSBzZWNvbmQgLWYKKwlzdXBwcmVzc2VzIHRyYWNlIGV2ZW50cy4gVGhlIHVzZXIgaXMgZ2l2ZW4gYSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQKKwl0aGUgb3ZlcnJpZGUsIGFuZCB0aGUgcmVzdWx0IG9mIHRoZSBhYm92ZSBpcyB0aGF0IG9ubHkgUy9XIGFuZCBIL1cKKwlldmVudHMgYXJlIGRpc3BsYXllZCB3aXRoIHRoZSBnaXZlbiBmaWVsZHMuCisgICAgCisJRm9yIHRoZSAnd2lsZGNhcmQnIG9wdGlvbiBpZiBhIHVzZXIgc2VsZWN0ZWQgZmllbGQgaXMgaW52YWxpZCBmb3IgYW4KKwlldmVudCB0eXBlLCBhIG1lc3NhZ2UgaXMgZGlzcGxheWVkIHRvIHRoZSB1c2VyIHRoYXQgdGhlIG9wdGlvbiBpcworCWlnbm9yZWQgZm9yIHRoYXQgdHlwZS4gRm9yIGV4YW1wbGU6CisgICAgCisJCSQgcGVyZiBzY3JpcHQgLWYgY29tbSx0aWQsdHJhY2UKKwkJJ3RyYWNlJyBub3QgdmFsaWQgZm9yIGhhcmR3YXJlIGV2ZW50cy4gSWdub3JpbmcuCisJCSd0cmFjZScgbm90IHZhbGlkIGZvciBzb2Z0d2FyZSBldmVudHMuIElnbm9yaW5nLgorICAgIAorCUFsdGVybmF0aXZlbHksIGlmIHRoZSB0eXBlIGlzIGdpdmVuIGFuIGludmFsaWQgZmllbGQgaXMgc3BlY2lmaWVkIGl0CisJaXMgYW4gZXJyb3IuIEZvciBleGFtcGxlOgorICAgIAorICAgICAgICBwZXJmIHNjcmlwdCAtdiAtZiBzdzpjb21tLHRpZCx0cmFjZQorICAgICAgICAndHJhY2UnIG5vdCB2YWxpZCBmb3Igc29mdHdhcmUgZXZlbnRzLgorICAgIAorCUF0IHRoaXMgcG9pbnQgdXNhZ2UgaXMgZGlzcGxheWVkLCBhbmQgcGVyZi1zY3JpcHQgZXhpdHMuCisgICAgCisJRmluYWxseSwgYSB1c2VyIG1heSBub3Qgc2V0IGZpZWxkcyB0byBub25lIGZvciBhbGwgZXZlbnQgdHlwZXMuCisJaS5lLiwgLWYgIiIgaXMgbm90IGFsbG93ZWQuCisKIC1rOjoKIC0tdm1saW51eD08ZmlsZT46OgogICAgICAgICB2bWxpbnV4IHBhdGhuYW1lCmRpZmYgLS1naXQgYS90b29scy9wZXJmL01ha2VmaWxlIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQppbmRleCAyMDdkZWU1Li4xNDU1NDEzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL01ha2VmaWxlCisrKyBiL3Rvb2xzL3BlcmYvTWFrZWZpbGUKQEAgLTUsNiArNSw4IEBACiAjIFRoZSBkZWZhdWx0IHRhcmdldCBvZiB0aGlzIE1ha2VmaWxlIGlzLi4uCiBhbGw6CiAKK2luY2x1ZGUgY29uZmlnL3V0aWxpdGllcy5tYWsKKwogaWZuZXEgKCQoT1VUUFVUKSwpCiAjIGNoZWNrIHRoYXQgdGhlIG91dHB1dCBkaXJlY3RvcnkgYWN0dWFsbHkgZXhpc3RzCiBPVVRESVIgOj0gJChzaGVsbCBjZCAkKE9VVFBVVCkgJiYgL2Jpbi9wd2QpCkBAIC0xMyw2ICsxNSwxMiBAQAogCiAjIERlZmluZSBWIHRvIGhhdmUgYSBtb3JlIHZlcmJvc2UgY29tcGlsZS4KICMKKyMgRGVmaW5lIFBZVEhPTiB0byBwb2ludCB0byB0aGUgcHl0aG9uIGJpbmFyeSBpZiB0aGUgZGVmYXVsdAorIyBgcHl0aG9uJyBpcyBub3QgY29ycmVjdDsgZm9yIGV4YW1wbGU6IFBZVEhPTj1weXRob24yCisjCisjIERlZmluZSBQWVRIT05fQ09ORklHIHRvIHBvaW50IHRvIHRoZSBweXRob24tY29uZmlnIGJpbmFyeSBpZgorIyB0aGUgZGVmYXVsdCBgJChQWVRIT04pLWNvbmZpZycgaXMgbm90IGNvcnJlY3QuCisjCiAjIERlZmluZSBBU0NJSURPQzggaWYgeW91IHdhbnQgdG8gZm9ybWF0IGRvY3VtZW50YXRpb24gd2l0aCBBc2NpaURvYyA4CiAjCiAjIERlZmluZSBET0NCT09LX1hTTF8xNzIgaWYgeW91IHdhbnQgdG8gZm9ybWF0IG1hbiBwYWdlcyB3aXRoIERvY0Jvb2sgWFNMIHYxLjcyLgpAQCAtMzUsMTUgKzQzLDIxIEBACiAJCQkJICAtZSBzL3BwYy4qL3Bvd2VycGMvIC1lIHMvbWlwcy4qL21pcHMvIFwKIAkJCQkgIC1lIHMvc2hbMjM0XS4qL3NoLyApCiAKK0NDID0gJChDUk9TU19DT01QSUxFKWdjYworQVIgPSAkKENST1NTX0NPTVBJTEUpYXIKKwogIyBBZGRpdGlvbmFsIEFSQ0ggc2V0dGluZ3MgZm9yIHg4NgogaWZlcSAoJChBUkNIKSxpMzg2KQogICAgICAgICBBUkNIIDo9IHg4NgogZW5kaWYKIGlmZXEgKCQoQVJDSCkseDg2XzY0KQotCVJBV19BUkNIIDo9IHg4Nl82NAotICAgICAgICBBUkNIIDo9IHg4NgotCUFSQ0hfQ0ZMQUdTIDo9IC1EQVJDSF9YODZfNjQKLQlBUkNIX0lOQ0xVREUgPSAuLi8uLi9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKKwlBUkNIIDo9IHg4NgorCUlTX1g4Nl82NCA6PSAkKHNoZWxsIGVjaG8gX194ODZfNjRfXyB8ICR7Q0N9IC1FIC14YyAtIHwgdGFpbCAtbiAxKQorCWlmZXEgKCR7SVNfWDg2XzY0fSwgMSkKKwkJUkFXX0FSQ0ggOj0geDg2XzY0CisJCUFSQ0hfQ0ZMQUdTIDo9IC1EQVJDSF9YODZfNjQKKwkJQVJDSF9JTkNMVURFID0gLi4vLi4vYXJjaC94ODYvbGliL21lbWNweV82NC5TCisJZW5kaWYKIGVuZGlmCiAKICMKQEAgLTExOSw4ICsxMzMsNiBAQAogCiBleHBvcnQgcHJlZml4IGJpbmRpciBzaGFyZWRpciBzeXNjb25mZGlyCiAKLUNDID0gJChDUk9TU19DT01QSUxFKWdjYwotQVIgPSAkKENST1NTX0NPTVBJTEUpYXIKIFJNID0gcm0gLWYKIE1LRElSID0gbWtkaXIKIEZJTkQgPSBmaW5kCkBAIC0xMzAsNyArMTQyLDcgQEAKICMgZXhwbGljaXRseSB3aGF0IGFyY2hpdGVjdHVyZSB0byBjaGVjayBmb3IuIEZpeCB0aGlzIHVwIGZvciB5b3Vycy4uCiBTUEFSU0VfRkxBR1MgPSAtRF9fQklHX0VORElBTl9fIC1EX19wb3dlcnBjX18KIAotLWluY2x1ZGUgZmVhdHVyZS10ZXN0cy5tYWsKKy1pbmNsdWRlIGNvbmZpZy9mZWF0dXJlLXRlc3RzLm1hawogCiBpZmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX0hFTExPKSwtV2Vycm9yIC1mc3RhY2stcHJvdGVjdG9yLWFsbCkseSkKIAlDRkxBR1MgOj0gJChDRkxBR1MpIC1mc3RhY2stcHJvdGVjdG9yLWFsbApAQCAtMTY1LDEyICsxNzcsMTAgQEAKIHN0cmlwLWxpYnMgPSAkKGZpbHRlci1vdXQgLWwlLCQoMSkpCiAKICQoT1VUUFVUKXB5dGhvbi9wZXJmLnNvOiAkKFBZUkZfT0JKUykKLQkkKFFVSUVUX0dFTikoIFwKLQkJZXhwb3J0IENGTEFHUz0iJChCQVNJQ19DRkxBR1MpIjsgXAotCQlweXRob24gdXRpbC9zZXR1cC5weSAtLXF1aWV0ICBidWlsZF9leHQgLS1idWlsZC1saWI9JyQoT1VUUFVUKXB5dGhvbicgXAotCQkJLS1idWlsZC10ZW1wPSckKE9VVFBVVClweXRob24vdGVtcCcgXAotCSkKLQorCSQoUVVJRVRfR0VOKUNGTEFHUz0nJChCQVNJQ19DRkxBR1MpJyAkKFBZVEhPTl9XT1JEKSB1dGlsL3NldHVwLnB5IFwKKwkgIC0tcXVpZXQgYnVpbGRfZXh0IFwKKwkgIC0tYnVpbGQtbGliPSckKE9VVFBVVClweXRob24nIFwKKwkgIC0tYnVpbGQtdGVtcD0nJChPVVRQVVQpcHl0aG9uL3RlbXAnCiAjCiAjIE5vIFBlcmwgc2NyaXB0cyByaWdodCBub3c6CiAjCkBAIC00NzUsMjQgKzQ4NSw3NCBAQAogCWVuZGlmCiBlbmRpZgogCi1pZmRlZiBOT19MSUJQWVRIT04KLQlCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQWVRIT04KK2Rpc2FibGUtcHl0aG9uID0gJChldmFsICQoZGlzYWJsZS1weXRob25fY29kZSkpCitkZWZpbmUgZGlzYWJsZS1weXRob25fY29kZQorICBCQVNJQ19DRkxBR1MgKz0gLUROT19MSUJQWVRIT04KKyAgJChpZiAkKDEpLCQod2FybmluZyBObyAkKDEpIHdhcyBmb3VuZCkpCisgICQod2FybmluZyBQeXRob24gc3VwcG9ydCB3b24ndCBiZSBidWlsdCkKK2VuZGVmCisKK292ZXJyaWRlIFBZVEhPTiA6PSBcCisgICQoY2FsbCBnZXQtZXhlY3V0YWJsZS1vci1kZWZhdWx0LFBZVEhPTixweXRob24pCisKK2lmbmRlZiBQWVRIT04KKyAgJChjYWxsIGRpc2FibGUtcHl0aG9uLHB5dGhvbiBpbnRlcnByZXRlcikKKyAgcHl0aG9uLWNsZWFuIDo9CiBlbHNlCi0gICAgICAgUFlUSE9OX0VNQkVEX0xET1BUUyA9ICQoc2hlbGwgcHl0aG9uLWNvbmZpZyAtLWxkZmxhZ3MgMj4vZGV2L251bGwpCi0gICAgICAgUFlUSE9OX0VNQkVEX0xERkxBR1MgPSAkKGNhbGwgc3RyaXAtbGlicywkKFBZVEhPTl9FTUJFRF9MRE9QVFMpKQotICAgICAgIFBZVEhPTl9FTUJFRF9MSUJBREQgPSAkKGNhbGwgZ3JlcC1saWJzLCQoUFlUSE9OX0VNQkVEX0xET1BUUykpCi0JUFlUSE9OX0VNQkVEX0NDT1BUUyA9IGBweXRob24tY29uZmlnIC0tY2ZsYWdzIDI+L2Rldi9udWxsYAotCUZMQUdTX1BZVEhPTl9FTUJFRD0kKFBZVEhPTl9FTUJFRF9DQ09QVFMpICQoUFlUSE9OX0VNQkVEX0xET1BUUykKLQlpZm5lcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9QWVRIT05fRU1CRUQpLCQoRkxBR1NfUFlUSE9OX0VNQkVEKSkseSkKLQkJbXNnIDo9ICQod2FybmluZyBObyBQeXRob24uaCBmb3VuZCwgaW5zdGFsbCBweXRob24tZGV2W2VsXSB0byBoYXZlIHB5dGhvbiBzdXBwb3J0IGluICdwZXJmIHNjcmlwdCcgYW5kIHRvIGJ1aWxkIHRoZSBweXRob24gYmluZGluZ3MpCi0JCUJBU0lDX0NGTEFHUyArPSAtRE5PX0xJQlBZVEhPTgotCWVsc2UKLSAgICAgICAgICAgICAgIEFMTF9MREZMQUdTICs9ICQoUFlUSE9OX0VNQkVEX0xERkxBR1MpCi0gICAgICAgICAgICAgICBFWFRMSUJTICs9ICQoUFlUSE9OX0VNQkVEX0xJQkFERCkKLQkJTElCX09CSlMgKz0gJChPVVRQVVQpdXRpbC9zY3JpcHRpbmctZW5naW5lcy90cmFjZS1ldmVudC1weXRob24ubwotCQlMSUJfT0JKUyArPSAkKE9VVFBVVClzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vCi0JCUxBTkdfQklORElOR1MgKz0gJChPVVRQVVQpcHl0aG9uL3BlcmYuc28KLQllbmRpZgorCisgIFBZVEhPTl9XT1JEIDo9ICQoY2FsbCBzaGVsbC13b3JkaWZ5LCQoUFlUSE9OKSkKKworICBweXRob24tY2xlYW4gOj0gJChQWVRIT05fV09SRCkgdXRpbC9zZXR1cC5weSBjbGVhbiBcCisgICAgLS1idWlsZC1saWI9JyQoT1VUUFVUKXB5dGhvbicgXAorICAgIC0tYnVpbGQtdGVtcD0nJChPVVRQVVQpcHl0aG9uL3RlbXAnCisKKyAgaWZkZWYgTk9fTElCUFlUSE9OCisgICAgJChjYWxsIGRpc2FibGUtcHl0aG9uKQorICBlbHNlCisKKyAgICBvdmVycmlkZSBQWVRIT05fQ09ORklHIDo9IFwKKyAgICAgICQoY2FsbCBnZXQtZXhlY3V0YWJsZS1vci1kZWZhdWx0LFBZVEhPTl9DT05GSUcsJChQWVRIT04pLWNvbmZpZykKKworICAgIGlmbmRlZiBQWVRIT05fQ09ORklHCisgICAgICAkKGNhbGwgZGlzYWJsZS1weXRob24scHl0aG9uLWNvbmZpZyB0b29sKQorICAgIGVsc2UKKworICAgICAgUFlUSE9OX0NPTkZJR19TUSA6PSAkKGNhbGwgc2hlbGwtc3EsJChQWVRIT05fQ09ORklHKSkKKworICAgICAgUFlUSE9OX0VNQkVEX0xET1BUUyA6PSAkKHNoZWxsICQoUFlUSE9OX0NPTkZJR19TUSkgLS1sZGZsYWdzIDI+L2Rldi9udWxsKQorICAgICAgUFlUSE9OX0VNQkVEX0xERkxBR1MgOj0gJChjYWxsIHN0cmlwLWxpYnMsJChQWVRIT05fRU1CRURfTERPUFRTKSkKKyAgICAgIFBZVEhPTl9FTUJFRF9MSUJBREQgOj0gJChjYWxsIGdyZXAtbGlicywkKFBZVEhPTl9FTUJFRF9MRE9QVFMpKQorICAgICAgUFlUSE9OX0VNQkVEX0NDT1BUUyA6PSAkKHNoZWxsICQoUFlUSE9OX0NPTkZJR19TUSkgLS1jZmxhZ3MgMj4vZGV2L251bGwpCisgICAgICBGTEFHU19QWVRIT05fRU1CRUQgOj0gJChQWVRIT05fRU1CRURfQ0NPUFRTKSAkKFBZVEhPTl9FTUJFRF9MRE9QVFMpCisKKyAgICAgIGlmbmVxICgkKGNhbGwgdHJ5LWNjLCQoU09VUkNFX1BZVEhPTl9FTUJFRCksJChGTEFHU19QWVRIT05fRU1CRUQpKSx5KQorICAgICAgICAkKGNhbGwgZGlzYWJsZS1weXRob24sUHl0aG9uLmggKGZvciBQeXRob24gMi54KSkKKyAgICAgIGVsc2UKKworICAgICAgICBpZm5lcSAoJChjYWxsIHRyeS1jYywkKFNPVVJDRV9QWVRIT05fVkVSU0lPTiksJChGTEFHU19QWVRIT05fRU1CRUQpKSx5KQorICAgICAgICAgICQod2FybmluZyBQeXRob24gMyBpcyBub3QgeWV0IHN1cHBvcnRlZDsgcGxlYXNlIHNldCkKKyAgICAgICAgICAkKHdhcm5pbmcgUFlUSE9OIGFuZC9vciBQWVRIT05fQ09ORklHIGFwcHJvcHJpYXRlbHkuKQorICAgICAgICAgICQod2FybmluZyBJZiB5b3UgYWxzbyBoYXZlIFB5dGhvbiAyIGluc3RhbGxlZCwgdGhlbikKKyAgICAgICAgICAkKHdhcm5pbmcgdHJ5IHNvbWV0aGluZyBsaWtlOikKKyAgICAgICAgICAkKHdhcm5pbmcgJChhbmQgLCkpCisgICAgICAgICAgJCh3YXJuaW5nICQoYW5kICwpICBtYWtlIFBZVEhPTj1weXRob24yKQorICAgICAgICAgICQod2FybmluZyAkKGFuZCAsKSkKKyAgICAgICAgICAkKHdhcm5pbmcgT3RoZXJ3aXNlLCBkaXNhYmxlIFB5dGhvbiBzdXBwb3J0IGVudGlyZWx5OikKKyAgICAgICAgICAkKHdhcm5pbmcgJChhbmQgLCkpCisgICAgICAgICAgJCh3YXJuaW5nICQoYW5kICwpICBtYWtlIE5PX0xJQlBZVEhPTj0xKQorICAgICAgICAgICQod2FybmluZyAkKGFuZCAsKSkKKyAgICAgICAgICAkKGVycm9yICAgJChhbmQgLCkpCisgICAgICAgIGVsc2UKKyAgICAgICAgICBBTExfTERGTEFHUyArPSAkKFBZVEhPTl9FTUJFRF9MREZMQUdTKQorICAgICAgICAgIEVYVExJQlMgKz0gJChQWVRIT05fRU1CRURfTElCQUREKQorICAgICAgICAgIExJQl9PQkpTICs9ICQoT1VUUFVUKXV0aWwvc2NyaXB0aW5nLWVuZ2luZXMvdHJhY2UtZXZlbnQtcHl0aG9uLm8KKyAgICAgICAgICBMSUJfT0JKUyArPSAkKE9VVFBVVClzY3JpcHRzL3B5dGhvbi9QZXJmLVRyYWNlLVV0aWwvQ29udGV4dC5vCisgICAgICAgICAgTEFOR19CSU5ESU5HUyArPSAkKE9VVFBVVClweXRob24vcGVyZi5zbworICAgICAgICBlbmRpZgorCisgICAgICBlbmRpZgorICAgIGVuZGlmCisgIGVuZGlmCiBlbmRpZgogCiBpZmRlZiBOT19ERU1BTkdMRQpAQCAtODMzLDggKzg5Myw3IEBACiAJJChSTSkgKi5zcGVjICoucHljICoucHlvICovKi5weWMgKi8qLnB5byAkKE9VVFBVVCljb21tb24tY21kcy5oIFRBR1MgdGFncyBjc2NvcGUqCiAJJChNQUtFKSAtQyBEb2N1bWVudGF0aW9uLyBjbGVhbgogCSQoUk0pICQoT1VUUFVUKVBFUkYtVkVSU0lPTi1GSUxFICQoT1VUUFVUKVBFUkYtQ0ZMQUdTCi0JQHB5dGhvbiB1dGlsL3NldHVwLnB5IGNsZWFuIC0tYnVpbGQtbGliPSckKE9VVFBVVClweXRob24nIFwKLQkJCQkgICAtLWJ1aWxkLXRlbXA9JyQoT1VUUFVUKXB5dGhvbi90ZW1wJworCSQocHl0aG9uLWNsZWFuKQogCiAuUEhPTlk6IGFsbCBpbnN0YWxsIGNsZWFuIHN0cmlwCiAuUEhPTlk6IHNoZWxsX2NvbXBhdGliaWxpdHlfdGVzdCBwbGVhc2Vfc2V0X1NIRUxMX1BBVEhfdG9fYV9tb3JlX21vZGVybl9zaGVsbApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXJlY29yZC5jCmluZGV4IDE3ZDFkY2IuLjA5NzRmOTUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1yZWNvcmQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tcmVjb3JkLmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSAmZXZzZWwtPmF0dHI7CiAJaW50IHRyYWNrID0gIWV2c2VsLT5pZHg7IC8qIG9ubHkgdGhlIGZpcnN0IGNvdW50ZXIgbmVlZHMgdGhlc2UgKi8KIAorCWF0dHItPmluaGVyaXQJCT0gIW5vX2luaGVyaXQ7CiAJYXR0ci0+cmVhZF9mb3JtYXQJPSBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQgfAogCQkJCSAgUEVSRl9GT1JNQVRfVE9UQUxfVElNRV9SVU5OSU5HIHwKIAkJCQkgIFBFUkZfRk9STUFUX0lEOwpAQCAtMjUxLDYgKzI1Miw5IEBACiB7CiAJc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKIAorCWlmIChldmxpc3QtPmNwdXMtPm1hcFswXSA8IDApCisJCW5vX2luaGVyaXQgPSB0cnVlOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKIAkJc3RydWN0IHBlcmZfZXZlbnRfYXR0ciAqYXR0ciA9ICZwb3MtPmF0dHI7CiAJCS8qCkBAIC0yNzEsOCArMjc1LDcgQEAKIHJldHJ5X3NhbXBsZV9pZDoKIAkJYXR0ci0+c2FtcGxlX2lkX2FsbCA9IHNhbXBsZV9pZF9hbGxfYXZhaWwgPyAxIDogMDsKIHRyeV9hZ2FpbjoKLQkJaWYgKHBlcmZfZXZzZWxfX29wZW4ocG9zLCBldmxpc3QtPmNwdXMsIGV2bGlzdC0+dGhyZWFkcywgZ3JvdXAsCi0JCQkJICAgICAhbm9faW5oZXJpdCkgPCAwKSB7CisJCWlmIChwZXJmX2V2c2VsX19vcGVuKHBvcywgZXZsaXN0LT5jcHVzLCBldmxpc3QtPnRocmVhZHMsIGdyb3VwKSA8IDApIHsKIAkJCWludCBlcnIgPSBlcnJubzsKIAogCQkJaWYgKGVyciA9PSBFUEVSTSB8fCBlcnIgPT0gRUFDQ0VTKSB7CkBAIC00MjQsNyArNDI3LDcgQEAKIHsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBldnNlbF9saXN0LT5jcHVzLT5ucjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGV2c2VsX2xpc3QtPm5yX21tYXBzOyBpKyspIHsKIAkJaWYgKGV2c2VsX2xpc3QtPm1tYXBbaV0uYmFzZSkKIAkJCW1tYXBfcmVhZCgmZXZzZWxfbGlzdC0+bW1hcFtpXSk7CiAJfQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXNjcmlwdC5jCmluZGV4IGFjNTc0ZWEuLjk3NGY2ZDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1zY3JpcHQuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tc2NyaXB0LmMKQEAgLTQ5LDU3ICs0OSwxNjkgQEAKIH07CiAKIC8qIGRlZmF1bHQgc2V0IHRvIG1haW50YWluIGNvbXBhdGliaWxpdHkgd2l0aCBjdXJyZW50IGZvcm1hdCAqLwotc3RhdGljIHU2NCBvdXRwdXRfZmllbGRzW1BFUkZfVFlQRV9NQVhdID0gewotCVtQRVJGX1RZUEVfSEFSRFdBUkVdID0gUEVSRl9PVVRQVVRfQ09NTSB8IFBFUkZfT1VUUFVUX1RJRCB8IFwKLQkJCSAgICAgICBQRVJGX09VVFBVVF9DUFUgfCBQRVJGX09VVFBVVF9USU1FIHwgXAotCQkJICAgICAgIFBFUkZfT1VUUFVUX0VWTkFNRSB8IFBFUkZfT1VUUFVUX1NZTSwKK3N0YXRpYyBzdHJ1Y3QgeworCWJvb2wgdXNlcl9zZXQ7CisJYm9vbCB3aWxkY2FyZF9zZXQ7CisJdTY0IGZpZWxkczsKKwl1NjQgaW52YWxpZF9maWVsZHM7Cit9IG91dHB1dFtQRVJGX1RZUEVfTUFYXSA9IHsKIAotCVtQRVJGX1RZUEVfU09GVFdBUkVdID0gUEVSRl9PVVRQVVRfQ09NTSB8IFBFUkZfT1VUUFVUX1RJRCB8IFwKLQkJCSAgICAgICBQRVJGX09VVFBVVF9DUFUgfCBQRVJGX09VVFBVVF9USU1FIHwgXAotCQkJICAgICAgIFBFUkZfT1VUUFVUX0VWTkFNRSB8IFBFUkZfT1VUUFVUX1NZTSwKKwlbUEVSRl9UWVBFX0hBUkRXQVJFXSA9IHsKKwkJLnVzZXJfc2V0ID0gZmFsc2UsCiAKLQlbUEVSRl9UWVBFX1RSQUNFUE9JTlRdID0gUEVSRl9PVVRQVVRfQ09NTSB8IFBFUkZfT1VUUFVUX1RJRCB8IFwKLQkJCQkgUEVSRl9PVVRQVVRfQ1BVIHwgUEVSRl9PVVRQVVRfVElNRSB8IFwKLQkJCQkgUEVSRl9PVVRQVVRfRVZOQU1FIHwgUEVSRl9PVVRQVVRfVFJBQ0UsCisJCS5maWVsZHMgPSBQRVJGX09VVFBVVF9DT01NIHwgUEVSRl9PVVRQVVRfVElEIHwKKwkJCSAgICAgIFBFUkZfT1VUUFVUX0NQVSB8IFBFUkZfT1VUUFVUX1RJTUUgfAorCQkJICAgICAgUEVSRl9PVVRQVVRfRVZOQU1FIHwgUEVSRl9PVVRQVVRfU1lNLAorCisJCS5pbnZhbGlkX2ZpZWxkcyA9IFBFUkZfT1VUUFVUX1RSQUNFLAorCX0sCisKKwlbUEVSRl9UWVBFX1NPRlRXQVJFXSA9IHsKKwkJLnVzZXJfc2V0ID0gZmFsc2UsCisKKwkJLmZpZWxkcyA9IFBFUkZfT1VUUFVUX0NPTU0gfCBQRVJGX09VVFBVVF9USUQgfAorCQkJICAgICAgUEVSRl9PVVRQVVRfQ1BVIHwgUEVSRl9PVVRQVVRfVElNRSB8CisJCQkgICAgICBQRVJGX09VVFBVVF9FVk5BTUUgfCBQRVJGX09VVFBVVF9TWU0sCisKKwkJLmludmFsaWRfZmllbGRzID0gUEVSRl9PVVRQVVRfVFJBQ0UsCisJfSwKKworCVtQRVJGX1RZUEVfVFJBQ0VQT0lOVF0gPSB7CisJCS51c2VyX3NldCA9IGZhbHNlLAorCisJCS5maWVsZHMgPSBQRVJGX09VVFBVVF9DT01NIHwgUEVSRl9PVVRQVVRfVElEIHwKKwkJCQkgIFBFUkZfT1VUUFVUX0NQVSB8IFBFUkZfT1VUUFVUX1RJTUUgfAorCQkJCSAgUEVSRl9PVVRQVVRfRVZOQU1FIHwgUEVSRl9PVVRQVVRfVFJBQ0UsCisJfSwKKworCVtQRVJGX1RZUEVfUkFXXSA9IHsKKwkJLnVzZXJfc2V0ID0gZmFsc2UsCisKKwkJLmZpZWxkcyA9IFBFUkZfT1VUUFVUX0NPTU0gfCBQRVJGX09VVFBVVF9USUQgfAorCQkJICAgICAgUEVSRl9PVVRQVVRfQ1BVIHwgUEVSRl9PVVRQVVRfVElNRSB8CisJCQkgICAgICBQRVJGX09VVFBVVF9FVk5BTUUgfCBQRVJGX09VVFBVVF9TWU0sCisKKwkJLmludmFsaWRfZmllbGRzID0gUEVSRl9PVVRQVVRfVFJBQ0UsCisJfSwKIH07CiAKLXN0YXRpYyBib29sIG91dHB1dF9zZXRfYnlfdXNlcjsKLQotI2RlZmluZSBQUklOVF9GSUVMRCh4KSAgKG91dHB1dF9maWVsZHNbYXR0ci0+dHlwZV0gJiBQRVJGX09VVFBVVF8jI3gpCi0KLXN0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19jaGVja19hdHRyKHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24sCi0JCQkJICAgIHN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIpCitzdGF0aWMgYm9vbCBvdXRwdXRfc2V0X2J5X3VzZXIodm9pZCkKIHsKKwlpbnQgajsKKwlmb3IgKGogPSAwOyBqIDwgUEVSRl9UWVBFX01BWDsgKytqKSB7CisJCWlmIChvdXRwdXRbal0udXNlcl9zZXQpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqb3V0cHV0X2ZpZWxkMnN0cihlbnVtIHBlcmZfb3V0cHV0X2ZpZWxkIGZpZWxkKQoreworCWludCBpLCBpbWF4ID0gQVJSQVlfU0laRShhbGxfb3V0cHV0X29wdGlvbnMpOworCWNvbnN0IGNoYXIgKnN0ciA9ICIiOworCisJZm9yIChpID0gMDsgaSA8IGltYXg7ICsraSkgeworCQlpZiAoYWxsX291dHB1dF9vcHRpb25zW2ldLmZpZWxkID09IGZpZWxkKSB7CisJCQlzdHIgPSBhbGxfb3V0cHV0X29wdGlvbnNbaV0uc3RyOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHN0cjsKK30KKworI2RlZmluZSBQUklOVF9GSUVMRCh4KSAgKG91dHB1dFthdHRyLT50eXBlXS5maWVsZHMgJiBQRVJGX09VVFBVVF8jI3gpCisKK3N0YXRpYyBpbnQgcGVyZl9ldmVudF9hdHRyX19jaGVja19zdHlwZShzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyLAorCQkJCSAgdTY0IHNhbXBsZV90eXBlLCBjb25zdCBjaGFyICpzYW1wbGVfbXNnLAorCQkJCSAgZW51bSBwZXJmX291dHB1dF9maWVsZCBmaWVsZCkKK3sKKwlpbnQgdHlwZSA9IGF0dHItPnR5cGU7CisJY29uc3QgY2hhciAqZXZuYW1lOworCisJaWYgKGF0dHItPnNhbXBsZV90eXBlICYgc2FtcGxlX3R5cGUpCisJCXJldHVybiAwOworCisJaWYgKG91dHB1dFt0eXBlXS51c2VyX3NldCkgeworCQlldm5hbWUgPSBfX2V2ZW50X25hbWUoYXR0ci0+dHlwZSwgYXR0ci0+Y29uZmlnKTsKKwkJcHJfZXJyKCJTYW1wbGVzIGZvciAnJXMnIGV2ZW50IGRvIG5vdCBoYXZlICVzIGF0dHJpYnV0ZSBzZXQuICIKKwkJICAgICAgICJDYW5ub3QgcHJpbnQgJyVzJyBmaWVsZC5cbiIsCisJCSAgICAgICBldm5hbWUsIHNhbXBsZV9tc2csIG91dHB1dF9maWVsZDJzdHIoZmllbGQpKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHVzZXIgZGlkIG5vdCBhc2sgZm9yIGl0IGV4cGxpY2l0bHkgc28gcmVtb3ZlIGZyb20gdGhlIGRlZmF1bHQgbGlzdCAqLworCW91dHB1dFt0eXBlXS5maWVsZHMgJj0gfmZpZWxkOworCWV2bmFtZSA9IF9fZXZlbnRfbmFtZShhdHRyLT50eXBlLCBhdHRyLT5jb25maWcpOworCXByX2RlYnVnKCJTYW1wbGVzIGZvciAnJXMnIGV2ZW50IGRvIG5vdCBoYXZlICVzIGF0dHJpYnV0ZSBzZXQuICIKKwkJICJTa2lwcGluZyAnJXMnIGZpZWxkLlxuIiwKKwkJIGV2bmFtZSwgc2FtcGxlX21zZywgb3V0cHV0X2ZpZWxkMnN0cihmaWVsZCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGVyZl9ldnNlbF9fY2hlY2tfYXR0cihzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCisJCQkJICBzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uKQoreworCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgKmF0dHIgPSAmZXZzZWwtPmF0dHI7CisKIAlpZiAoUFJJTlRfRklFTEQoVFJBQ0UpICYmCiAJCSFwZXJmX3Nlc3Npb25fX2hhc190cmFjZXMoc2Vzc2lvbiwgInJlY29yZCAtUiIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChQUklOVF9GSUVMRChTWU0pKSB7Ci0JCWlmICghKHNlc3Npb24tPnNhbXBsZV90eXBlICYgUEVSRl9TQU1QTEVfSVApKSB7Ci0JCQlwcl9lcnIoIlNhbXBsZXMgZG8gbm90IGNvbnRhaW4gSVAgZGF0YS5cbiIpOworCQlpZiAocGVyZl9ldmVudF9hdHRyX19jaGVja19zdHlwZShhdHRyLCBQRVJGX1NBTVBMRV9JUCwgIklQIiwKKwkJCQkJICAgUEVSRl9PVVRQVVRfU1lNKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQl9CisKIAkJaWYgKCFub19jYWxsY2hhaW4gJiYKLQkJICAgICEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DQUxMQ0hBSU4pKQorCQkgICAgIShhdHRyLT5zYW1wbGVfdHlwZSAmIFBFUkZfU0FNUExFX0NBTExDSEFJTikpCiAJCQlzeW1ib2xfY29uZi51c2VfY2FsbGNoYWluID0gZmFsc2U7CiAJfQogCiAJaWYgKChQUklOVF9GSUVMRChQSUQpIHx8IFBSSU5UX0ZJRUxEKFRJRCkpICYmCi0JCSEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USUQpKSB7Ci0JCXByX2VycigiU2FtcGxlcyBkbyBub3QgY29udGFpbiBUSUQvUElEIGRhdGEuXG4iKTsKKwkJcGVyZl9ldmVudF9hdHRyX19jaGVja19zdHlwZShhdHRyLCBQRVJGX1NBTVBMRV9USUQsICJUSUQiLAorCQkJCSAgICAgICBQRVJGX09VVFBVVF9USUR8UEVSRl9PVVRQVVRfUElEKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCiAJaWYgKFBSSU5UX0ZJRUxEKFRJTUUpICYmCi0JCSEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9USU1FKSkgewotCQlwcl9lcnIoIlNhbXBsZXMgZG8gbm90IGNvbnRhaW4gdGltZXN0YW1wcy5cbiIpOworCQlwZXJmX2V2ZW50X2F0dHJfX2NoZWNrX3N0eXBlKGF0dHIsIFBFUkZfU0FNUExFX1RJTUUsICJUSU1FIiwKKwkJCQkgICAgICAgUEVSRl9PVVRQVVRfVElNRSkpCiAJCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWlmIChQUklOVF9GSUVMRChDUFUpICYmCi0JCSEoc2Vzc2lvbi0+c2FtcGxlX3R5cGUgJiBQRVJGX1NBTVBMRV9DUFUpKSB7Ci0JCXByX2VycigiU2FtcGxlcyBkbyBub3QgY29udGFpbiBjcHUuXG4iKTsKKwkJcGVyZl9ldmVudF9hdHRyX19jaGVja19zdHlwZShhdHRyLCBQRVJGX1NBTVBMRV9DUFUsICJDUFUiLAorCQkJCSAgICAgICBQRVJGX09VVFBVVF9DUFUpKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCisvKgorICogdmVyaWZ5IGFsbCB1c2VyIHJlcXVlc3RlZCBldmVudHMgZXhpc3QgYW5kIHRoZSBzYW1wbGVzCisgKiBoYXZlIHRoZSBleHBlY3RlZCBkYXRhCisgKi8KK3N0YXRpYyBpbnQgcGVyZl9zZXNzaW9uX19jaGVja19vdXRwdXRfb3B0KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCit7CisJaW50IGo7CisJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOworCisJZm9yIChqID0gMDsgaiA8IFBFUkZfVFlQRV9NQVg7ICsraikgeworCQlldnNlbCA9IHBlcmZfc2Vzc2lvbl9fZmluZF9maXJzdF9ldnR5cGUoc2Vzc2lvbiwgaik7CisKKwkJLyoKKwkJICogZXZlbiBpZiBmaWVsZHMgaXMgc2V0IHRvIDAgKGllLiwgc2hvdyBub3RoaW5nKSBldmVudCBtdXN0CisJCSAqIGV4aXN0IGlmIHVzZXIgZXhwbGljaXRseSBpbmNsdWRlcyBpdCBvbiB0aGUgY29tbWFuZCBsaW5lCisJCSAqLworCQlpZiAoIWV2c2VsICYmIG91dHB1dFtqXS51c2VyX3NldCAmJiAhb3V0cHV0W2pdLndpbGRjYXJkX3NldCkgeworCQkJcHJfZXJyKCIlcyBldmVudHMgZG8gbm90IGV4aXN0LiAiCisJCQkgICAgICAgIlJlbW92ZSBjb3JyZXNwb25kaW5nIC1mIG9wdGlvbiB0byBwcm9jZWVkLlxuIiwKKwkJCSAgICAgICBldmVudF90eXBlKGopKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmIChldnNlbCAmJiBvdXRwdXRbal0uZmllbGRzICYmCisJCQlwZXJmX2V2c2VsX19jaGVja19hdHRyKGV2c2VsLCBzZXNzaW9uKSkKKwkJCXJldHVybiAtMTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE2OCwxMCArMjgwLDcgQEAKIHsKIAlzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyID0gJmV2c2VsLT5hdHRyOwogCi0JaWYgKG91dHB1dF9maWVsZHNbYXR0ci0+dHlwZV0gPT0gMCkKLQkJcmV0dXJuOwotCi0JaWYgKHBlcmZfc2Vzc2lvbl9fY2hlY2tfYXR0cihzZXNzaW9uLCBhdHRyKSA8IDApCisJaWYgKG91dHB1dFthdHRyLT50eXBlXS5maWVsZHMgPT0gMCkKIAkJcmV0dXJuOwogCiAJcHJpbnRfc2FtcGxlX3N0YXJ0KHNhbXBsZSwgdGhyZWFkLCBhdHRyKTsKQEAgLTQ1MSw2ICs1NjAsNyBAQAogewogCWNoYXIgKnRvazsKIAlpbnQgaSwgaW1heCA9IHNpemVvZihhbGxfb3V0cHV0X29wdGlvbnMpIC8gc2l6ZW9mKHN0cnVjdCBvdXRwdXRfb3B0aW9uKTsKKwlpbnQgajsKIAlpbnQgcmMgPSAwOwogCWNoYXIgKnN0ciA9IHN0cmR1cChhcmcpOwogCWludCB0eXBlID0gLTE7CkBAIC00NTgsNTIgKzU2OCw5OSBAQAogCWlmICghc3RyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXRvayA9IHN0cnRvayhzdHIsICI6Iik7Ci0JaWYgKCF0b2spIHsKLQkJZnByaW50ZihzdGRlcnIsCi0JCQkiSW52YWxpZCBmaWVsZCBzdHJpbmcgLSBub3QgcHJlcGVuZGVkIHdpdGggdHlwZS4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogZmlyc3Qgd29yZCBzaG91bGQgc3RhdGUgd2hpY2ggZXZlbnQgdHlwZSB1c2VyCi0JICogaXMgc3BlY2lmeWluZyB0aGUgZmllbGRzCisJLyogZmlyc3Qgd29yZCBjYW4gc3RhdGUgZm9yIHdoaWNoIGV2ZW50IHR5cGUgdGhlIHVzZXIgaXMgc3BlY2lmeWluZworCSAqIHRoZSBmaWVsZHMuIElmIG5vIHR5cGUgZXhpc3RzLCB0aGUgc3BlY2lmaWVkIGZpZWxkcyBhcHBseSB0byBhbGwKKwkgKiBldmVudCB0eXBlcyBmb3VuZCBpbiB0aGUgZmlsZSBtaW51cyB0aGUgaW52YWxpZCBmaWVsZHMgZm9yIGEgdHlwZS4KIAkgKi8KLQlpZiAoIXN0cmNtcCh0b2ssICJodyIpKQotCQl0eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFOwotCWVsc2UgaWYgKCFzdHJjbXAodG9rLCAic3ciKSkKLQkJdHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRTsKLQllbHNlIGlmICghc3RyY21wKHRvaywgInRyYWNlIikpCi0JCXR5cGUgPSBQRVJGX1RZUEVfVFJBQ0VQT0lOVDsKLQllbHNlIHsKLQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGV2ZW50IHR5cGUgaW4gZmllbGQgc3RyaW5nLiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwl0b2sgPSBzdHJjaHIoc3RyLCAnOicpOworCWlmICh0b2spIHsKKwkJKnRvayA9ICdcMCc7CisJCXRvaysrOworCQlpZiAoIXN0cmNtcChzdHIsICJodyIpKQorCQkJdHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJzdyIpKQorCQkJdHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRTsKKwkJZWxzZSBpZiAoIXN0cmNtcChzdHIsICJ0cmFjZSIpKQorCQkJdHlwZSA9IFBFUkZfVFlQRV9UUkFDRVBPSU5UOworCQllbHNlIGlmICghc3RyY21wKHN0ciwgInJhdyIpKQorCQkJdHlwZSA9IFBFUkZfVFlQRV9SQVc7CisJCWVsc2UgeworCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGV2ZW50IHR5cGUgaW4gZmllbGQgc3RyaW5nLlxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWlmIChvdXRwdXRbdHlwZV0udXNlcl9zZXQpCisJCQlwcl93YXJuaW5nKCJPdmVycmlkaW5nIHByZXZpb3VzIGZpZWxkIHJlcXVlc3QgZm9yICVzIGV2ZW50cy5cbiIsCisJCQkJICAgZXZlbnRfdHlwZSh0eXBlKSk7CisKKwkJb3V0cHV0W3R5cGVdLmZpZWxkcyA9IDA7CisJCW91dHB1dFt0eXBlXS51c2VyX3NldCA9IHRydWU7CisJCW91dHB1dFt0eXBlXS53aWxkY2FyZF9zZXQgPSBmYWxzZTsKKworCX0gZWxzZSB7CisJCXRvayA9IHN0cjsKKwkJaWYgKHN0cmxlbihzdHIpID09IDApIHsKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJDYW5ub3Qgc2V0IGZpZWxkcyB0byAnbm9uZScgZm9yIGFsbCBldmVudCB0eXBlcy5cbiIpOworCQkJcmMgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAob3V0cHV0X3NldF9ieV91c2VyKCkpCisJCQlwcl93YXJuaW5nKCJPdmVycmlkaW5nIHByZXZpb3VzIGZpZWxkIHJlcXVlc3QgZm9yIGFsbCBldmVudHMuXG4iKTsKKworCQlmb3IgKGogPSAwOyBqIDwgUEVSRl9UWVBFX01BWDsgKytqKSB7CisJCQlvdXRwdXRbal0uZmllbGRzID0gMDsKKwkJCW91dHB1dFtqXS51c2VyX3NldCA9IHRydWU7CisJCQlvdXRwdXRbal0ud2lsZGNhcmRfc2V0ID0gdHJ1ZTsKKwkJfQogCX0KIAotCW91dHB1dF9maWVsZHNbdHlwZV0gPSAwOwotCXdoaWxlICgxKSB7Ci0JCXRvayA9IHN0cnRvayhOVUxMLCAiLCIpOwotCQlpZiAoIXRvaykKLQkJCWJyZWFrOworCXRvayA9IHN0cnRvayh0b2ssICIsIik7CisJd2hpbGUgKHRvaykgewogCQlmb3IgKGkgPSAwOyBpIDwgaW1heDsgKytpKSB7Ci0JCQlpZiAoc3RyY21wKHRvaywgYWxsX291dHB1dF9vcHRpb25zW2ldLnN0cikgPT0gMCkgewotCQkJCW91dHB1dF9maWVsZHNbdHlwZV0gfD0gYWxsX291dHB1dF9vcHRpb25zW2ldLmZpZWxkOworCQkJaWYgKHN0cmNtcCh0b2ssIGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5zdHIpID09IDApCiAJCQkJYnJlYWs7Ci0JCQl9CiAJCX0KIAkJaWYgKGkgPT0gaW1heCkgewotCQkJZnByaW50ZihzdGRlcnIsICJJbnZhbGlkIGZpZWxkIHJlcXVlc3RlZC4iKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBmaWVsZCByZXF1ZXN0ZWQuXG4iKTsKIAkJCXJjID0gLUVJTlZBTDsKLQkJCWJyZWFrOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAodHlwZSA9PSAtMSkgeworCQkJLyogYWRkIHVzZXIgb3B0aW9uIHRvIGFsbCBldmVudHMgdHlwZXMgZm9yCisJCQkgKiB3aGljaCBpdCBpcyB2YWxpZAorCQkJICovCisJCQlmb3IgKGogPSAwOyBqIDwgUEVSRl9UWVBFX01BWDsgKytqKSB7CisJCQkJaWYgKG91dHB1dFtqXS5pbnZhbGlkX2ZpZWxkcyAmIGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5maWVsZCkgeworCQkJCQlwcl93YXJuaW5nKCJcJyVzXCcgbm90IHZhbGlkIGZvciAlcyBldmVudHMuIElnbm9yaW5nLlxuIiwKKwkJCQkJCSAgIGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5zdHIsIGV2ZW50X3R5cGUoaikpOworCQkJCX0gZWxzZQorCQkJCQlvdXRwdXRbal0uZmllbGRzIHw9IGFsbF9vdXRwdXRfb3B0aW9uc1tpXS5maWVsZDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChvdXRwdXRbdHlwZV0uaW52YWxpZF9maWVsZHMgJiBhbGxfb3V0cHV0X29wdGlvbnNbaV0uZmllbGQpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIlwnJXNcJyBub3QgdmFsaWQgZm9yICVzIGV2ZW50cy5cbiIsCisJCQkJCSBhbGxfb3V0cHV0X29wdGlvbnNbaV0uc3RyLCBldmVudF90eXBlKHR5cGUpKTsKKworCQkJCXJjID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCW91dHB1dFt0eXBlXS5maWVsZHMgfD0gYWxsX291dHB1dF9vcHRpb25zW2ldLmZpZWxkOworCQl9CisKKwkJdG9rID0gc3RydG9rKE5VTEwsICIsIik7CisJfQorCisJaWYgKHR5cGUgPj0gMCkgeworCQlpZiAob3V0cHV0W3R5cGVdLmZpZWxkcyA9PSAwKSB7CisJCQlwcl9kZWJ1ZygiTm8gZmllbGRzIHJlcXVlc3RlZCBmb3IgJXMgdHlwZS4gIgorCQkJCSAiRXZlbnRzIHdpbGwgbm90IGJlIGRpc3BsYXllZC5cbiIsIGV2ZW50X3R5cGUodHlwZSkpOwogCQl9CiAJfQogCi0JaWYgKG91dHB1dF9maWVsZHNbdHlwZV0gPT0gMCkgewotCQlwcl9kZWJ1ZygiTm8gZmllbGRzIHJlcXVlc3RlZCBmb3IgJXMgdHlwZS4gIgotCQkJICJFdmVudHMgd2lsbCBub3QgYmUgZGlzcGxheWVkXG4iLCBldmVudF90eXBlKHR5cGUpKTsKLQl9Ci0KLQlvdXRwdXRfc2V0X2J5X3VzZXIgPSB0cnVlOwotCitvdXQ6CiAJZnJlZShzdHIpOwogCXJldHVybiByYzsKIH0KQEAgLTgyOSw3ICs5ODYsNyBAQAogCU9QVF9TVFJJTkcoMCwgInN5bWZzIiwgJnN5bWJvbF9jb25mLnN5bWZzLCAiZGlyZWN0b3J5IiwKIAkJICAgICJMb29rIGZvciBmaWxlcyB3aXRoIHN5bWJvbHMgcmVsYXRpdmUgdG8gdGhpcyBkaXJlY3RvcnkiKSwKIAlPUFRfQ0FMTEJBQ0soJ2YnLCAiZmllbGRzIiwgTlVMTCwgInN0ciIsCi0JCSAgICAgImNvbW1hIHNlcGFyYXRlZCBvdXRwdXQgZmllbGRzIHByZXBlbmQgd2l0aCAndHlwZTonLiBWYWxpZCB0eXBlczogaHcsc3csdHJhY2UuIEZpZWxkczogY29tbSx0aWQscGlkLHRpbWUsY3B1LGV2ZW50LHRyYWNlLHN5bSIsCisJCSAgICAgImNvbW1hIHNlcGFyYXRlZCBvdXRwdXQgZmllbGRzIHByZXBlbmQgd2l0aCAndHlwZTonLiBWYWxpZCB0eXBlczogaHcsc3csdHJhY2UscmF3LiBGaWVsZHM6IGNvbW0sdGlkLHBpZCx0aW1lLGNwdSxldmVudCx0cmFjZSxzeW0iLAogCQkgICAgIHBhcnNlX291dHB1dF9maWVsZHMpLAogCiAJT1BUX0VORCgpCkBAIC0xMDIwLDcgKzExNzcsNyBAQAogCQlzdHJ1Y3Qgc3RhdCBwZXJmX3N0YXQ7CiAJCWludCBpbnB1dDsKIAotCQlpZiAob3V0cHV0X3NldF9ieV91c2VyKSB7CisJCWlmIChvdXRwdXRfc2V0X2J5X3VzZXIoKSkgewogCQkJZnByaW50ZihzdGRlcnIsCiAJCQkJImN1c3RvbSBmaWVsZHMgbm90IHN1cHBvcnRlZCBmb3IgZ2VuZXJhdGVkIHNjcmlwdHMiKTsKIAkJCXJldHVybiAtMTsKQEAgLTEwNjAsNiArMTIxNywxMSBAQAogCQlwcl9kZWJ1ZygicGVyZiBzY3JpcHQgc3RhcnRlZCB3aXRoIHNjcmlwdCAlc1xuXG4iLCBzY3JpcHRfbmFtZSk7CiAJfQogCisKKwllcnIgPSBwZXJmX3Nlc3Npb25fX2NoZWNrX291dHB1dF9vcHQoc2Vzc2lvbik7CisJaWYgKGVyciA8IDApCisJCWdvdG8gb3V0OworCiAJZXJyID0gX19jbWRfc2NyaXB0KHNlc3Npb24pOwogCiAJcGVyZl9zZXNzaW9uX19kZWxldGUoc2Vzc2lvbik7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jIGIvdG9vbHMvcGVyZi9idWlsdGluLXN0YXQuYwppbmRleCBlMjEwOWY5Li5hOWYwNjcxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2J1aWx0aW4tc3RhdC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1zdGF0LmMKQEAgLTYsMjQgKzYsMjggQEAKICAqCiAgKiBTYW1wbGUgb3V0cHV0OgogCi0gICAkIHBlcmYgc3RhdCB+L2hhY2tiZW5jaCAxMAotICAgVGltZTogMC4xMDQKKyAgICQgcGVyZiBzdGF0IC4vaGFja2JlbmNoIDEwCiAKLSAgICBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnL2hvbWUvbWluZ28vaGFja2JlbmNoJzoKKyAgVGltZTogMC4xMTgKIAotICAgICAgIDEyNTUuNTM4NjExICB0YXNrIGNsb2NrIHRpY2tzICAgICAjICAgICAgMTAuMTQzIENQVSB1dGlsaXphdGlvbiBmYWN0b3IKLSAgICAgICAgICAgICA1NDAxMSAgY29udGV4dCBzd2l0Y2hlcyAgICAgIyAgICAgICAwLjA0MyBNL3NlYwotICAgICAgICAgICAgICAgMzg1ICBDUFUgbWlncmF0aW9ucyAgICAgICAjICAgICAgIDAuMDAwIE0vc2VjCi0gICAgICAgICAgICAgMTc3NTUgIHBhZ2VmYXVsdHMgICAgICAgICAgICMgICAgICAgMC4wMTQgTS9zZWMKLSAgICAgICAgMzgwODMyMzE4NSAgQ1BVIGN5Y2xlcyAgICAgICAgICAgIyAgICAzMDMzLjIxOSBNL3NlYwotICAgICAgICAxNTc1MTExMTkwICBpbnN0cnVjdGlvbnMgICAgICAgICAjICAgIDEyNTQuNTMwIE0vc2VjCi0gICAgICAgICAgMTczNjc4OTUgIGNhY2hlIHJlZmVyZW5jZXMgICAgICMgICAgICAxMy44MzMgTS9zZWMKLSAgICAgICAgICAgNzY3NDQyMSAgY2FjaGUgbWlzc2VzICAgICAgICAgIyAgICAgICA2LjExMiBNL3NlYworICBQZXJmb3JtYW5jZSBjb3VudGVyIHN0YXRzIGZvciAnLi9oYWNrYmVuY2ggMTAnOgogCi0gICAgV2FsbC1jbG9jayB0aW1lIGVsYXBzZWQ6ICAgMTIzLjc4NjYyMCBtc2VjcworICAgICAgIDE3MDguNzYxMzIxIHRhc2stY2xvY2sgICAgICAgICAgICAgICAgIyAgIDExLjAzNyBDUFVzIHV0aWxpemVkCisgICAgICAgICAgICA0MSwxOTAgY29udGV4dC1zd2l0Y2hlcyAgICAgICAgICAjICAgIDAuMDI0IE0vc2VjCisgICAgICAgICAgICAgNiw3MzUgQ1BVLW1pZ3JhdGlvbnMgICAgICAgICAgICAjICAgIDAuMDA0IE0vc2VjCisgICAgICAgICAgICAxNywzMTggcGFnZS1mYXVsdHMgICAgICAgICAgICAgICAjICAgIDAuMDEwIE0vc2VjCisgICAgIDUsMjA1LDIwMiwyNDMgY3ljbGVzICAgICAgICAgICAgICAgICAgICAjICAgIDMuMDQ2IEdIegorICAgICAzLDg1Niw0MzYsOTIwIHN0YWxsZWQtY3ljbGVzLWZyb250ZW5kICAgIyAgIDc0LjA5JSBmcm9udGVuZCBjeWNsZXMgaWRsZQorICAgICAxLDYwMCw3OTAsODcxIHN0YWxsZWQtY3ljbGVzLWJhY2tlbmQgICAgIyAgIDMwLjc1JSBiYWNrZW5kICBjeWNsZXMgaWRsZQorICAgICAyLDYwMyw1MDEsMjQ3IGluc3RydWN0aW9ucyAgICAgICAgICAgICAgIyAgICAwLjUwICBpbnNucyBwZXIgY3ljbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgICAgMS40OCAgc3RhbGxlZCBjeWNsZXMgcGVyIGluc24KKyAgICAgICA0ODQsMzU3LDQ5OCBicmFuY2hlcyAgICAgICAgICAgICAgICAgICMgIDI4My40NTUgTS9zZWMKKyAgICAgICAgIDYsMzg4LDkzNCBicmFuY2gtbWlzc2VzICAgICAgICAgICAgICMgICAgMS4zMiUgb2YgYWxsIGJyYW5jaGVzCisKKyAgICAgICAgMC4xNTQ4MjI5NzggIHNlY29uZHMgdGltZSBlbGFwc2VkCiAKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIFJlZCBIYXQgSW5jLCBJbmdvIE1vbG5hciA8bWluZ29AcmVkaGF0LmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDExLCBSZWQgSGF0IEluYywgSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhhdC5jb20+CiAgKgogICogSW1wcm92ZW1lbnRzIGFuZCBmaXhlcyBieToKICAqCkBAIC00Niw2ICs1MCw3IEBACiAjaW5jbHVkZSAidXRpbC9ldmxpc3QuaCIKICNpbmNsdWRlICJ1dGlsL2V2c2VsLmgiCiAjaW5jbHVkZSAidXRpbC9kZWJ1Zy5oIgorI2luY2x1ZGUgInV0aWwvY29sb3IuaCIKICNpbmNsdWRlICJ1dGlsL2hlYWRlci5oIgogI2luY2x1ZGUgInV0aWwvY3B1bWFwLmgiCiAjaW5jbHVkZSAidXRpbC90aHJlYWQuaCIKQEAgLTY1LDE0ICs3MCwxMDcgQEAKICAgeyAudHlwZSA9IFBFUkZfVFlQRV9TT0ZUV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMJCX0sCiAKICAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFUwkJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfRlJPTlRFTkQJfSwKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORAl9LAogICB7IC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9IV19JTlNUUlVDVElPTlMJCX0sCiAgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSEFSRFdBUkUsIC5jb25maWcgPSBQRVJGX0NPVU5UX0hXX0JSQU5DSF9JTlNUUlVDVElPTlMJfSwKICAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQlJBTkNIX01JU1NFUwkJfSwKLSAgeyAudHlwZSA9IFBFUkZfVFlQRV9IQVJEV0FSRSwgLmNvbmZpZyA9IFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVGRVJFTkNFUwl9LAotICB7IC50eXBlID0gUEVSRl9UWVBFX0hBUkRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9IV19DQUNIRV9NSVNTRVMJCX0sCiAKIH07CiAKKy8qCisgKiBEZXRhaWxlZCBzdGF0cyAoLWQpLCBjb3ZlcmluZyB0aGUgTDEgYW5kIGxhc3QgbGV2ZWwgZGF0YSBjYWNoZXM6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyIGRldGFpbGVkX2F0dHJzW10gPSB7CisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9MMUQJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCTw8IDE2KQkJCQl9LAorCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsCisgICAgLmNvbmZpZyA9CisJIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFECQk8PCAgMCAgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQJCTw8ICA4KSB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MJPDwgMTYpCQkJCX0sCisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9MTAkJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCTw8IDE2KQkJCQl9LAorCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsCisgICAgLmNvbmZpZyA9CisJIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTEwJCQk8PCAgMCAgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQJCTw8ICA4KSB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MJPDwgMTYpCQkJCX0sCit9OworCisvKgorICogVmVyeSBkZXRhaWxlZCBzdGF0cyAoLWQgLWQpLCBjb3ZlcmluZyB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgYW5kIHRoZSBUTEIgY2FjaGVzOgorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB2ZXJ5X2RldGFpbGVkX2F0dHJzW10gPSB7CisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9MMUkJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCTw8IDE2KQkJCQl9LAorCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsCisgICAgLmNvbmZpZyA9CisJIFBFUkZfQ09VTlRfSFdfQ0FDSEVfTDFJCQk8PCAgMCAgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQJCTw8ICA4KSB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MJPDwgMTYpCQkJCX0sCisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9EVExCCQk8PCAgMCAgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQJCTw8ICA4KSB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX0FDQ0VTUwk8PCAxNikJCQkJfSwKKworICB7IC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLAorICAgIC5jb25maWcgPQorCSBQRVJGX0NPVU5UX0hXX0NBQ0hFX0RUTEIJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUwk8PCAxNikJCQkJfSwKKworICB7IC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLAorICAgIC5jb25maWcgPQorCSBQRVJGX0NPVU5UX0hXX0NBQ0hFX0lUTEIJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRAkJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTCTw8IDE2KQkJCQl9LAorCisgIHsgLnR5cGUgPSBQRVJGX1RZUEVfSFdfQ0FDSEUsCisgICAgLmNvbmZpZyA9CisJIFBFUkZfQ09VTlRfSFdfQ0FDSEVfSVRMQgkJPDwgIDAgIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFECQk8PCAgOCkgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTCTw8IDE2KQkJCQl9LAorCit9OworCisvKgorICogVmVyeSwgdmVyeSBkZXRhaWxlZCBzdGF0cyAoLWQgLWQgLWQpLCBhZGRpbmcgcHJlZmV0Y2ggZXZlbnRzOgorICovCitzdGF0aWMgc3RydWN0IHBlcmZfZXZlbnRfYXR0ciB2ZXJ5X3ZlcnlfZGV0YWlsZWRfYXR0cnNbXSA9IHsKKworICB7IC50eXBlID0gUEVSRl9UWVBFX0hXX0NBQ0hFLAorICAgIC5jb25maWcgPQorCSBQRVJGX0NPVU5UX0hXX0NBQ0hFX0wxRAkJPDwgIDAgIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9QUkVGRVRDSAk8PCAgOCkgfAorCShQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9BQ0NFU1MJPDwgMTYpCQkJCX0sCisKKyAgeyAudHlwZSA9IFBFUkZfVFlQRV9IV19DQUNIRSwKKyAgICAuY29uZmlnID0KKwkgUEVSRl9DT1VOVF9IV19DQUNIRV9MMUQJCTw8ICAwICB8CisJKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUFJFRkVUQ0gJPDwgIDgpIHwKKwkoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUwk8PCAxNikJCQkJfSwKK307CisKKworCiBzdHJ1Y3QgcGVyZl9ldmxpc3QJCSpldnNlbF9saXN0OwogCiBzdGF0aWMgYm9vbAkJCXN5c3RlbV93aWRlCQkJPSAgZmFsc2U7CkBAIC04Niw2ICsxODQsOCBAQAogc3RhdGljIHBpZF90CQkJdGFyZ2V0X3RpZAkJCT0gLTE7CiBzdGF0aWMgcGlkX3QJCQljaGlsZF9waWQJCQk9IC0xOwogc3RhdGljIGJvb2wJCQludWxsX3J1bgkJCT0gIGZhbHNlOworc3RhdGljIGludAkJCWRldGFpbGVkX3J1bgkJCT0gIDA7CitzdGF0aWMgYm9vbAkJCXN5bmNfcnVuCQkJPSAgZmFsc2U7CiBzdGF0aWMgYm9vbAkJCWJpZ19udW0JCQkJPSAgdHJ1ZTsKIHN0YXRpYyBpbnQJCQliaWdfbnVtX29wdAkJCT0gIC0xOwogc3RhdGljIGNvbnN0IGNoYXIJCSpjcHVfbGlzdDsKQEAgLTE1Niw3ICsyNTYsMTUgQEAKIAogc3RydWN0IHN0YXRzCQkJcnVudGltZV9uc2Vjc19zdGF0c1tNQVhfTlJfQ1BVU107CiBzdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX2N5Y2xlc19zdGF0c1tNQVhfTlJfQ1BVU107CitzdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX3N0YWxsZWRfY3ljbGVzX2Zyb250X3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfc3RhbGxlZF9jeWNsZXNfYmFja19zdGF0c1tNQVhfTlJfQ1BVU107CiBzdHJ1Y3Qgc3RhdHMJCQlydW50aW1lX2JyYW5jaGVzX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfY2FjaGVyZWZzX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfbDFfZGNhY2hlX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfbDFfaWNhY2hlX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfbGxfY2FjaGVfc3RhdHNbTUFYX05SX0NQVVNdOworc3RydWN0IHN0YXRzCQkJcnVudGltZV9pdGxiX2NhY2hlX3N0YXRzW01BWF9OUl9DUFVTXTsKK3N0cnVjdCBzdGF0cwkJCXJ1bnRpbWVfZHRsYl9jYWNoZV9zdGF0c1tNQVhfTlJfQ1BVU107CiBzdHJ1Y3Qgc3RhdHMJCQl3YWxsdGltZV9uc2Vjc19zdGF0czsKIAogc3RhdGljIGludCBjcmVhdGVfcGVyZl9zdGF0X2NvdW50ZXIoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsKQpAQCAtMTY3LDE2ICsyNzUsMTcgQEAKIAkJYXR0ci0+cmVhZF9mb3JtYXQgPSBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX0VOQUJMRUQgfAogCQkJCSAgICBQRVJGX0ZPUk1BVF9UT1RBTF9USU1FX1JVTk5JTkc7CiAKLQlpZiAoc3lzdGVtX3dpZGUpCi0JCXJldHVybiBwZXJmX2V2c2VsX19vcGVuX3Blcl9jcHUoZXZzZWwsIGV2c2VsX2xpc3QtPmNwdXMsIGZhbHNlLCBmYWxzZSk7Ci0KIAlhdHRyLT5pbmhlcml0ID0gIW5vX2luaGVyaXQ7CisKKwlpZiAoc3lzdGVtX3dpZGUpCisJCXJldHVybiBwZXJmX2V2c2VsX19vcGVuX3Blcl9jcHUoZXZzZWwsIGV2c2VsX2xpc3QtPmNwdXMsIGZhbHNlKTsKKwogCWlmICh0YXJnZXRfcGlkID09IC0xICYmIHRhcmdldF90aWQgPT0gLTEpIHsKIAkJYXR0ci0+ZGlzYWJsZWQgPSAxOwogCQlhdHRyLT5lbmFibGVfb25fZXhlYyA9IDE7CiAJfQogCi0JcmV0dXJuIHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChldnNlbCwgZXZzZWxfbGlzdC0+dGhyZWFkcywgZmFsc2UsIGZhbHNlKTsKKwlyZXR1cm4gcGVyZl9ldnNlbF9fb3Blbl9wZXJfdGhyZWFkKGV2c2VsLCBldnNlbF9saXN0LT50aHJlYWRzLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0xOTIsNiArMzAxLDM3IEBACiB9CiAKIC8qCisgKiBVcGRhdGUgdmFyaW91cyB0cmFja2luZyB2YWx1ZXMgd2UgbWFpbnRhaW4gdG8gcHJpbnQKKyAqIG1vcmUgc2VtYW50aWMgaW5mb3JtYXRpb24gc3VjaCBhcyBtaXNzL2hpdCByYXRpb3MsCisgKiBpbnN0cnVjdGlvbiByYXRlcywgZXRjOgorICovCitzdGF0aWMgdm9pZCB1cGRhdGVfc2hhZG93X3N0YXRzKHN0cnVjdCBwZXJmX2V2c2VsICpjb3VudGVyLCB1NjQgKmNvdW50KQoreworCWlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSykpCisJCXVwZGF0ZV9zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0c1swXSwgY291bnRbMF0pOworCWVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhBUkRXQVJFLCBIV19DUFVfQ1lDTEVTKSkKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0c1swXSwgY291bnRbMF0pOworCWVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhBUkRXQVJFLCBIV19TVEFMTEVEX0NZQ0xFU19GUk9OVEVORCkpCisJCXVwZGF0ZV9zdGF0cygmcnVudGltZV9zdGFsbGVkX2N5Y2xlc19mcm9udF9zdGF0c1swXSwgY291bnRbMF0pOworCWVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhBUkRXQVJFLCBIV19TVEFMTEVEX0NZQ0xFU19CQUNLRU5EKSkKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX3N0YWxsZWRfY3ljbGVzX2JhY2tfc3RhdHNbMF0sIGNvdW50WzBdKTsKKwllbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIQVJEV0FSRSwgSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpCisJCXVwZGF0ZV9zdGF0cygmcnVudGltZV9icmFuY2hlc19zdGF0c1swXSwgY291bnRbMF0pOworCWVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhBUkRXQVJFLCBIV19DQUNIRV9SRUZFUkVOQ0VTKSkKKwkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2NhY2hlcmVmc19zdGF0c1swXSwgY291bnRbMF0pOworCWVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhXX0NBQ0hFLCBIV19DQUNIRV9MMUQpKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbDFfZGNhY2hlX3N0YXRzWzBdLCBjb3VudFswXSk7CisJZWxzZSBpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSFdfQ0FDSEUsIEhXX0NBQ0hFX0wxSSkpCisJCXVwZGF0ZV9zdGF0cygmcnVudGltZV9sMV9pY2FjaGVfc3RhdHNbMF0sIGNvdW50WzBdKTsKKwllbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIV19DQUNIRSwgSFdfQ0FDSEVfTEwpKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbGxfY2FjaGVfc3RhdHNbMF0sIGNvdW50WzBdKTsKKwllbHNlIGlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIV19DQUNIRSwgSFdfQ0FDSEVfRFRMQikpCisJCXVwZGF0ZV9zdGF0cygmcnVudGltZV9kdGxiX2NhY2hlX3N0YXRzWzBdLCBjb3VudFswXSk7CisJZWxzZSBpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSFdfQ0FDSEUsIEhXX0NBQ0hFX0lUTEIpKQorCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfaXRsYl9jYWNoZV9zdGF0c1swXSwgY291bnRbMF0pOworfQorCisvKgogICogUmVhZCBvdXQgdGhlIHJlc3VsdHMgb2YgYSBzaW5nbGUgY291bnRlcjoKICAqIGFnZ3JlZ2F0ZSBjb3VudHMgYWNyb3NzIENQVXMgaW4gc3lzdGVtLXdpZGUgbW9kZQogICovCkBAIC0yMTYsMTIgKzM1Niw3IEBACiAJLyoKIAkgKiBTYXZlIHRoZSBmdWxsIHJ1bnRpbWUgLSB0byBhbGxvdyBub3JtYWxpemF0aW9uIGR1cmluZyBwcmludG91dDoKIAkgKi8KLQlpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgU09GVFdBUkUsIFNXX1RBU0tfQ0xPQ0spKQotCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbnNlY3Nfc3RhdHNbMF0sIGNvdW50WzBdKTsKLQlpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSEFSRFdBUkUsIEhXX0NQVV9DWUNMRVMpKQotCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfY3ljbGVzX3N0YXRzWzBdLCBjb3VudFswXSk7Ci0JaWYgKHBlcmZfZXZzZWxfX21hdGNoKGNvdW50ZXIsIEhBUkRXQVJFLCBIV19CUkFOQ0hfSU5TVFJVQ1RJT05TKSkKLQkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2JyYW5jaGVzX3N0YXRzWzBdLCBjb3VudFswXSk7CisJdXBkYXRlX3NoYWRvd19zdGF0cyhjb3VudGVyLCBjb3VudCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI0MSwxMiArMzc2LDcgQEAKIAogCQljb3VudCA9IGNvdW50ZXItPmNvdW50cy0+Y3B1W2NwdV0udmFsdWVzOwogCi0JCWlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBTT0ZUV0FSRSwgU1dfVEFTS19DTE9DSykpCi0JCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfbnNlY3Nfc3RhdHNbY3B1XSwgY291bnRbMF0pOwotCQlpZiAocGVyZl9ldnNlbF9fbWF0Y2goY291bnRlciwgSEFSRFdBUkUsIEhXX0NQVV9DWUNMRVMpKQotCQkJdXBkYXRlX3N0YXRzKCZydW50aW1lX2N5Y2xlc19zdGF0c1tjcHVdLCBjb3VudFswXSk7Ci0JCWlmIChwZXJmX2V2c2VsX19tYXRjaChjb3VudGVyLCBIQVJEV0FSRSwgSFdfQlJBTkNIX0lOU1RSVUNUSU9OUykpCi0JCQl1cGRhdGVfc3RhdHMoJnJ1bnRpbWVfYnJhbmNoZXNfc3RhdHNbY3B1XSwgY291bnRbMF0pOworCQl1cGRhdGVfc2hhZG93X3N0YXRzKGNvdW50ZXIsIGNvdW50KTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTMxNCwxMyArNDQ0LDE4IEBACiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvdW50ZXIsICZldnNlbF9saXN0LT5lbnRyaWVzLCBub2RlKSB7CiAJCWlmIChjcmVhdGVfcGVyZl9zdGF0X2NvdW50ZXIoY291bnRlcikgPCAwKSB7Ci0JCQlpZiAoZXJybm8gPT0gLUVQRVJNIHx8IGVycm5vID09IC1FQUNDRVMpIHsKKwkJCWlmIChlcnJubyA9PSBFSU5WQUwgfHwgZXJybm8gPT0gRU5PU1lTIHx8IGVycm5vID09IEVOT0VOVCkgeworCQkJCWlmICh2ZXJib3NlKQorCQkJCQl1aV9fd2FybmluZygiJXMgZXZlbnQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsLlxuIiwKKwkJCQkJCSAgICBldmVudF9uYW1lKGNvdW50ZXIpKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKGVycm5vID09IEVQRVJNIHx8IGVycm5vID09IEVBQ0NFUykgewogCQkJCWVycm9yKCJZb3UgbWF5IG5vdCBoYXZlIHBlcm1pc3Npb24gdG8gY29sbGVjdCAlc3N0YXRzLlxuIgogCQkJCSAgICAgICJcdCBDb25zaWRlciB0d2Vha2luZyIKIAkJCQkgICAgICAiIC9wcm9jL3N5cy9rZXJuZWwvcGVyZl9ldmVudF9wYXJhbm9pZCBvciBydW5uaW5nIGFzIHJvb3QuIiwKIAkJCQkgICAgICBzeXN0ZW1fd2lkZSA/ICJzeXN0ZW0td2lkZSAiIDogIiIpOwotCQkJfSBlbHNlIGlmIChlcnJubyA9PSBFTk9FTlQpIHsKLQkJCQllcnJvcigiJXMgZXZlbnQgaXMgbm90IHN1cHBvcnRlZC4gIiwgZXZlbnRfbmFtZShjb3VudGVyKSk7CiAJCQl9IGVsc2UgewogCQkJCWVycm9yKCJvcGVuX2NvdW50ZXIgcmV0dXJuZWQgd2l0aCAlZCAoJXMpLiAiCiAJCQkJICAgICAgIi9iaW4vZG1lc2cgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi5cbiIsCkBAIC0zNzEsNiArNTA2LDE2IEBACiAJcmV0dXJuIFdFWElUU1RBVFVTKHN0YXR1cyk7CiB9CiAKK3N0YXRpYyB2b2lkIHByaW50X25vaXNlX3BjdChkb3VibGUgdG90YWwsIGRvdWJsZSBhdmcpCit7CisJZG91YmxlIHBjdCA9IDAuMDsKKworCWlmIChhdmcpCisJCXBjdCA9IDEwMC4wKnRvdGFsL2F2ZzsKKworCWZwcmludGYoc3RkZXJyLCAiICAoICstJTYuMmYlJSApIiwgcGN0KTsKK30KKwogc3RhdGljIHZvaWQgcHJpbnRfbm9pc2Uoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBkb3VibGUgYXZnKQogewogCXN0cnVjdCBwZXJmX3N0YXQgKnBzOwpAQCAtMzc5LDE1ICs1MjQsMTQgQEAKIAkJcmV0dXJuOwogCiAJcHMgPSBldnNlbC0+cHJpdjsKLQlmcHJpbnRmKHN0ZGVyciwgIiAgICggKy0gJTcuM2YlJSApIiwKLQkJCTEwMCAqIHN0ZGRldl9zdGF0cygmcHMtPnJlc19zdGF0c1swXSkgLyBhdmcpOworCXByaW50X25vaXNlX3BjdChzdGRkZXZfc3RhdHMoJnBzLT5yZXNfc3RhdHNbMF0pLCBhdmcpOwogfQogCiBzdGF0aWMgdm9pZCBuc2VjX3ByaW50b3V0KGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgZG91YmxlIGF2ZykKIHsKIAlkb3VibGUgbXNlY3MgPSBhdmcgLyAxZTY7CiAJY2hhciBjcHVzdHJbMTZdID0geyAnXDAnLCB9OwotCWNvbnN0IGNoYXIgKmZtdCA9IGNzdl9vdXRwdXQgPyAiJXMlLjZmJXMlcyIgOiAiJXMlMTguNmYlcyUtMjRzIjsKKwljb25zdCBjaGFyICpmbXQgPSBjc3Zfb3V0cHV0ID8gIiVzJS42ZiVzJXMiIDogIiVzJTE4LjZmJXMlLTI1cyI7CiAKIAlpZiAobm9fYWdncikKIAkJc3ByaW50ZihjcHVzdHIsICJDUFUlKmQlcyIsCkBAIC00MDMsOCArNTQ3LDE5MSBAQAogCQlyZXR1cm47CiAKIAlpZiAocGVyZl9ldnNlbF9fbWF0Y2goZXZzZWwsIFNPRlRXQVJFLCBTV19UQVNLX0NMT0NLKSkKLQkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgQ1BVcyAiLAotCQkJCWF2ZyAvIGF2Z19zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMpKTsKKwkJZnByaW50ZihzdGRlcnIsICIgIyAlOC4zZiBDUFVzIHV0aWxpemVkICAgICAgICAgICIsIGF2ZyAvIGF2Z19zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMpKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfc3RhbGxlZF9jeWNsZXNfZnJvbnRlbmQoaW50IGNwdSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsIF9fdXNlZCwgZG91YmxlIGF2ZykKK3sKKwlkb3VibGUgdG90YWwsIHJhdGlvID0gMC4wOworCWNvbnN0IGNoYXIgKmNvbG9yOworCisJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfY3ljbGVzX3N0YXRzW2NwdV0pOworCisJaWYgKHRvdGFsKQorCQlyYXRpbyA9IGF2ZyAvIHRvdGFsICogMTAwLjA7CisKKwljb2xvciA9IFBFUkZfQ09MT1JfTk9STUFMOworCWlmIChyYXRpbyA+IDUwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9SRUQ7CisJZWxzZSBpZiAocmF0aW8gPiAzMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfTUFHRU5UQTsKKwllbHNlIGlmIChyYXRpbyA+IDEwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9ZRUxMT1c7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiAjICAiKTsKKwljb2xvcl9mcHJpbnRmKHN0ZGVyciwgY29sb3IsICIlNi4yZiUlIiwgcmF0aW8pOworCWZwcmludGYoc3RkZXJyLCAiIGZyb250ZW5kIGN5Y2xlcyBpZGxlICAgIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N0YWxsZWRfY3ljbGVzX2JhY2tlbmQoaW50IGNwdSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsIF9fdXNlZCwgZG91YmxlIGF2ZykKK3sKKwlkb3VibGUgdG90YWwsIHJhdGlvID0gMC4wOworCWNvbnN0IGNoYXIgKmNvbG9yOworCisJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfY3ljbGVzX3N0YXRzW2NwdV0pOworCisJaWYgKHRvdGFsKQorCQlyYXRpbyA9IGF2ZyAvIHRvdGFsICogMTAwLjA7CisKKwljb2xvciA9IFBFUkZfQ09MT1JfTk9STUFMOworCWlmIChyYXRpbyA+IDc1LjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9SRUQ7CisJZWxzZSBpZiAocmF0aW8gPiA1MC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfTUFHRU5UQTsKKwllbHNlIGlmIChyYXRpbyA+IDIwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9ZRUxMT1c7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiAjICAiKTsKKwljb2xvcl9mcHJpbnRmKHN0ZGVyciwgY29sb3IsICIlNi4yZiUlIiwgcmF0aW8pOworCWZwcmludGYoc3RkZXJyLCAiIGJhY2tlbmQgIGN5Y2xlcyBpZGxlICAgIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2JyYW5jaF9taXNzZXMoaW50IGNwdSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsIF9fdXNlZCwgZG91YmxlIGF2ZykKK3sKKwlkb3VibGUgdG90YWwsIHJhdGlvID0gMC4wOworCWNvbnN0IGNoYXIgKmNvbG9yOworCisJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfYnJhbmNoZXNfc3RhdHNbY3B1XSk7CisKKwlpZiAodG90YWwpCisJCXJhdGlvID0gYXZnIC8gdG90YWwgKiAxMDAuMDsKKworCWNvbG9yID0gUEVSRl9DT0xPUl9OT1JNQUw7CisJaWYgKHJhdGlvID4gMjAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX1JFRDsKKwllbHNlIGlmIChyYXRpbyA+IDEwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9NQUdFTlRBOworCWVsc2UgaWYgKHJhdGlvID4gNS4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfWUVMTE9XOworCisJZnByaW50ZihzdGRlcnIsICIgIyAgIik7CisJY29sb3JfZnByaW50ZihzdGRlcnIsIGNvbG9yLCAiJTYuMmYlJSIsIHJhdGlvKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiBvZiBhbGwgYnJhbmNoZXMgICAgICAgICIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9sMV9kY2FjaGVfbWlzc2VzKGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCBfX3VzZWQsIGRvdWJsZSBhdmcpCit7CisJZG91YmxlIHRvdGFsLCByYXRpbyA9IDAuMDsKKwljb25zdCBjaGFyICpjb2xvcjsKKworCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2wxX2RjYWNoZV9zdGF0c1tjcHVdKTsKKworCWlmICh0b3RhbCkKKwkJcmF0aW8gPSBhdmcgLyB0b3RhbCAqIDEwMC4wOworCisJY29sb3IgPSBQRVJGX0NPTE9SX05PUk1BTDsKKwlpZiAocmF0aW8gPiAyMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfUkVEOworCWVsc2UgaWYgKHJhdGlvID4gMTAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX01BR0VOVEE7CisJZWxzZSBpZiAocmF0aW8gPiA1LjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9ZRUxMT1c7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiAjICAiKTsKKwljb2xvcl9mcHJpbnRmKHN0ZGVyciwgY29sb3IsICIlNi4yZiUlIiwgcmF0aW8pOworCWZwcmludGYoc3RkZXJyLCAiIG9mIGFsbCBMMS1kY2FjaGUgaGl0cyAgIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2wxX2ljYWNoZV9taXNzZXMoaW50IGNwdSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsIF9fdXNlZCwgZG91YmxlIGF2ZykKK3sKKwlkb3VibGUgdG90YWwsIHJhdGlvID0gMC4wOworCWNvbnN0IGNoYXIgKmNvbG9yOworCisJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfbDFfaWNhY2hlX3N0YXRzW2NwdV0pOworCisJaWYgKHRvdGFsKQorCQlyYXRpbyA9IGF2ZyAvIHRvdGFsICogMTAwLjA7CisKKwljb2xvciA9IFBFUkZfQ09MT1JfTk9STUFMOworCWlmIChyYXRpbyA+IDIwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9SRUQ7CisJZWxzZSBpZiAocmF0aW8gPiAxMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfTUFHRU5UQTsKKwllbHNlIGlmIChyYXRpbyA+IDUuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX1lFTExPVzsKKworCWZwcmludGYoc3RkZXJyLCAiICMgICIpOworCWNvbG9yX2ZwcmludGYoc3RkZXJyLCBjb2xvciwgIiU2LjJmJSUiLCByYXRpbyk7CisJZnByaW50ZihzdGRlcnIsICIgb2YgYWxsIEwxLWljYWNoZSBoaXRzICAiKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfZHRsYl9jYWNoZV9taXNzZXMoaW50IGNwdSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsIF9fdXNlZCwgZG91YmxlIGF2ZykKK3sKKwlkb3VibGUgdG90YWwsIHJhdGlvID0gMC4wOworCWNvbnN0IGNoYXIgKmNvbG9yOworCisJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfZHRsYl9jYWNoZV9zdGF0c1tjcHVdKTsKKworCWlmICh0b3RhbCkKKwkJcmF0aW8gPSBhdmcgLyB0b3RhbCAqIDEwMC4wOworCisJY29sb3IgPSBQRVJGX0NPTE9SX05PUk1BTDsKKwlpZiAocmF0aW8gPiAyMC4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfUkVEOworCWVsc2UgaWYgKHJhdGlvID4gMTAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX01BR0VOVEE7CisJZWxzZSBpZiAocmF0aW8gPiA1LjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9ZRUxMT1c7CisKKwlmcHJpbnRmKHN0ZGVyciwgIiAjICAiKTsKKwljb2xvcl9mcHJpbnRmKHN0ZGVyciwgY29sb3IsICIlNi4yZiUlIiwgcmF0aW8pOworCWZwcmludGYoc3RkZXJyLCAiIG9mIGFsbCBkVExCIGNhY2hlIGhpdHMgIik7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2l0bGJfY2FjaGVfbWlzc2VzKGludCBjcHUsIHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCBfX3VzZWQsIGRvdWJsZSBhdmcpCit7CisJZG91YmxlIHRvdGFsLCByYXRpbyA9IDAuMDsKKwljb25zdCBjaGFyICpjb2xvcjsKKworCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX2l0bGJfY2FjaGVfc3RhdHNbY3B1XSk7CisKKwlpZiAodG90YWwpCisJCXJhdGlvID0gYXZnIC8gdG90YWwgKiAxMDAuMDsKKworCWNvbG9yID0gUEVSRl9DT0xPUl9OT1JNQUw7CisJaWYgKHJhdGlvID4gMjAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX1JFRDsKKwllbHNlIGlmIChyYXRpbyA+IDEwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9NQUdFTlRBOworCWVsc2UgaWYgKHJhdGlvID4gNS4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfWUVMTE9XOworCisJZnByaW50ZihzdGRlcnIsICIgIyAgIik7CisJY29sb3JfZnByaW50ZihzdGRlcnIsIGNvbG9yLCAiJTYuMmYlJSIsIHJhdGlvKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiBvZiBhbGwgaVRMQiBjYWNoZSBoaXRzICIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9sbF9jYWNoZV9taXNzZXMoaW50IGNwdSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsIF9fdXNlZCwgZG91YmxlIGF2ZykKK3sKKwlkb3VibGUgdG90YWwsIHJhdGlvID0gMC4wOworCWNvbnN0IGNoYXIgKmNvbG9yOworCisJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfbGxfY2FjaGVfc3RhdHNbY3B1XSk7CisKKwlpZiAodG90YWwpCisJCXJhdGlvID0gYXZnIC8gdG90YWwgKiAxMDAuMDsKKworCWNvbG9yID0gUEVSRl9DT0xPUl9OT1JNQUw7CisJaWYgKHJhdGlvID4gMjAuMCkKKwkJY29sb3IgPSBQRVJGX0NPTE9SX1JFRDsKKwllbHNlIGlmIChyYXRpbyA+IDEwLjApCisJCWNvbG9yID0gUEVSRl9DT0xPUl9NQUdFTlRBOworCWVsc2UgaWYgKHJhdGlvID4gNS4wKQorCQljb2xvciA9IFBFUkZfQ09MT1JfWUVMTE9XOworCisJZnByaW50ZihzdGRlcnIsICIgIyAgIik7CisJY29sb3JfZnByaW50ZihzdGRlcnIsIGNvbG9yLCAiJTYuMmYlJSIsIHJhdGlvKTsKKwlmcHJpbnRmKHN0ZGVyciwgIiBvZiBhbGwgTEwtY2FjaGUgaGl0cyAgICIpOwogfQogCiBzdGF0aWMgdm9pZCBhYnNfcHJpbnRvdXQoaW50IGNwdSwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLCBkb3VibGUgYXZnKQpAQCAtNDE2LDkgKzc0Myw5IEBACiAJaWYgKGNzdl9vdXRwdXQpCiAJCWZtdCA9ICIlcyUuMGYlcyVzIjsKIAllbHNlIGlmIChiaWdfbnVtKQotCQlmbXQgPSAiJXMlJzE4LjBmJXMlLTI0cyI7CisJCWZtdCA9ICIlcyUnMTguMGYlcyUtMjVzIjsKIAllbHNlCi0JCWZtdCA9ICIlcyUxOC4wZiVzJS0yNHMiOworCQlmbXQgPSAiJXMlMTguMGYlcyUtMjVzIjsKIAogCWlmIChub19hZ2dyKQogCQlzcHJpbnRmKGNwdXN0ciwgIkNQVSUqZCVzIiwKQEAgLTQ0MSwyMyArNzY4LDgzIEBACiAJCWlmICh0b3RhbCkKIAkJCXJhdGlvID0gYXZnIC8gdG90YWw7CiAKLQkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgSVBDICAiLCByYXRpbyk7CisJCWZwcmludGYoc3RkZXJyLCAiICMgICAlNS4yZiAgaW5zbnMgcGVyIGN5Y2xlICAgICAgICAiLCByYXRpbyk7CisKKwkJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfc3RhbGxlZF9jeWNsZXNfZnJvbnRfc3RhdHNbY3B1XSk7CisJCXRvdGFsID0gbWF4KHRvdGFsLCBhdmdfc3RhdHMoJnJ1bnRpbWVfc3RhbGxlZF9jeWNsZXNfYmFja19zdGF0c1tjcHVdKSk7CisKKwkJaWYgKHRvdGFsICYmIGF2ZykgeworCQkJcmF0aW8gPSB0b3RhbCAvIGF2ZzsKKwkJCWZwcmludGYoc3RkZXJyLCAiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgJTUuMmYgIHN0YWxsZWQgY3ljbGVzIHBlciBpbnNuIiwgcmF0aW8pOworCQl9CisKIAl9IGVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCBIQVJEV0FSRSwgSFdfQlJBTkNIX01JU1NFUykgJiYKIAkJCXJ1bnRpbWVfYnJhbmNoZXNfc3RhdHNbY3B1XS5uICE9IDApIHsKLQkJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfYnJhbmNoZXNfc3RhdHNbY3B1XSk7CisJCXByaW50X2JyYW5jaF9taXNzZXMoY3B1LCBldnNlbCwgYXZnKTsKKwl9IGVsc2UgaWYgKAorCQlldnNlbC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSAmJgorCQlldnNlbC0+YXR0ci5jb25maWcgPT0gICggUEVSRl9DT1VOVF9IV19DQUNIRV9MMUQgfAorCQkJCQkoKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRCkgPDwgOCkgfAorCQkJCQkoKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MpIDw8IDE2KSkgJiYKKwkJCXJ1bnRpbWVfbDFfZGNhY2hlX3N0YXRzW2NwdV0ubiAhPSAwKSB7CisJCXByaW50X2wxX2RjYWNoZV9taXNzZXMoY3B1LCBldnNlbCwgYXZnKTsKKwl9IGVsc2UgaWYgKAorCQlldnNlbC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSAmJgorCQlldnNlbC0+YXR0ci5jb25maWcgPT0gICggUEVSRl9DT1VOVF9IV19DQUNIRV9MMUkgfAorCQkJCQkoKFBFUkZfQ09VTlRfSFdfQ0FDSEVfT1BfUkVBRCkgPDwgOCkgfAorCQkJCQkoKFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MpIDw8IDE2KSkgJiYKKwkJCXJ1bnRpbWVfbDFfaWNhY2hlX3N0YXRzW2NwdV0ubiAhPSAwKSB7CisJCXByaW50X2wxX2ljYWNoZV9taXNzZXMoY3B1LCBldnNlbCwgYXZnKTsKKwl9IGVsc2UgaWYgKAorCQlldnNlbC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSAmJgorCQlldnNlbC0+YXR0ci5jb25maWcgPT0gICggUEVSRl9DT1VOVF9IV19DQUNIRV9EVExCIHwKKwkJCQkJKChQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQpIDw8IDgpIHwKKwkJCQkJKChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTKSA8PCAxNikpICYmCisJCQlydW50aW1lX2R0bGJfY2FjaGVfc3RhdHNbY3B1XS5uICE9IDApIHsKKwkJcHJpbnRfZHRsYl9jYWNoZV9taXNzZXMoY3B1LCBldnNlbCwgYXZnKTsKKwl9IGVsc2UgaWYgKAorCQlldnNlbC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSAmJgorCQlldnNlbC0+YXR0ci5jb25maWcgPT0gICggUEVSRl9DT1VOVF9IV19DQUNIRV9JVExCIHwKKwkJCQkJKChQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX1JFQUQpIDw8IDgpIHwKKwkJCQkJKChQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NSVNTKSA8PCAxNikpICYmCisJCQlydW50aW1lX2l0bGJfY2FjaGVfc3RhdHNbY3B1XS5uICE9IDApIHsKKwkJcHJpbnRfaXRsYl9jYWNoZV9taXNzZXMoY3B1LCBldnNlbCwgYXZnKTsKKwl9IGVsc2UgaWYgKAorCQlldnNlbC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV9IV19DQUNIRSAmJgorCQlldnNlbC0+YXR0ci5jb25maWcgPT0gICggUEVSRl9DT1VOVF9IV19DQUNIRV9MTCB8CisJCQkJCSgoUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9SRUFEKSA8PCA4KSB8CisJCQkJCSgoUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUlTUykgPDwgMTYpKSAmJgorCQkJcnVudGltZV9sbF9jYWNoZV9zdGF0c1tjcHVdLm4gIT0gMCkgeworCQlwcmludF9sbF9jYWNoZV9taXNzZXMoY3B1LCBldnNlbCwgYXZnKTsKKwl9IGVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCBIQVJEV0FSRSwgSFdfQ0FDSEVfTUlTU0VTKSAmJgorCQkJcnVudGltZV9jYWNoZXJlZnNfc3RhdHNbY3B1XS5uICE9IDApIHsKKwkJdG90YWwgPSBhdmdfc3RhdHMoJnJ1bnRpbWVfY2FjaGVyZWZzX3N0YXRzW2NwdV0pOwogCiAJCWlmICh0b3RhbCkKIAkJCXJhdGlvID0gYXZnICogMTAwIC8gdG90YWw7CiAKLQkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgJSUgICAgIiwgcmF0aW8pOworCQlmcHJpbnRmKHN0ZGVyciwgIiAjICU4LjNmICUlIG9mIGFsbCBjYWNoZSByZWZzICAgICIsIHJhdGlvKTsKIAorCX0gZWxzZSBpZiAocGVyZl9ldnNlbF9fbWF0Y2goZXZzZWwsIEhBUkRXQVJFLCBIV19TVEFMTEVEX0NZQ0xFU19GUk9OVEVORCkpIHsKKwkJcHJpbnRfc3RhbGxlZF9jeWNsZXNfZnJvbnRlbmQoY3B1LCBldnNlbCwgYXZnKTsKKwl9IGVsc2UgaWYgKHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCBIQVJEV0FSRSwgSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORCkpIHsKKwkJcHJpbnRfc3RhbGxlZF9jeWNsZXNfYmFja2VuZChjcHUsIGV2c2VsLCBhdmcpOworCX0gZWxzZSBpZiAocGVyZl9ldnNlbF9fbWF0Y2goZXZzZWwsIEhBUkRXQVJFLCBIV19DUFVfQ1lDTEVTKSkgeworCQl0b3RhbCA9IGF2Z19zdGF0cygmcnVudGltZV9uc2Vjc19zdGF0c1tjcHVdKTsKKworCQlpZiAodG90YWwpCisJCQlyYXRpbyA9IDEuMCAqIGF2ZyAvIHRvdGFsOworCisJCWZwcmludGYoc3RkZXJyLCAiICMgJTguM2YgR0h6ICAgICAgICAgICAgICAgICAgICAiLCByYXRpbyk7CiAJfSBlbHNlIGlmIChydW50aW1lX25zZWNzX3N0YXRzW2NwdV0ubiAhPSAwKSB7CiAJCXRvdGFsID0gYXZnX3N0YXRzKCZydW50aW1lX25zZWNzX3N0YXRzW2NwdV0pOwogCiAJCWlmICh0b3RhbCkKIAkJCXJhdGlvID0gMTAwMC4wICogYXZnIC8gdG90YWw7CiAKLQkJZnByaW50ZihzdGRlcnIsICIgIyAlMTAuM2YgTS9zZWMiLCByYXRpbyk7CisJCWZwcmludGYoc3RkZXJyLCAiICMgJTguM2YgTS9zZWMgICAgICAgICAgICAgICAgICAiLCByYXRpbyk7CisJfSBlbHNlIHsKKwkJZnByaW50ZihzdGRlcnIsICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOwogCX0KIH0KIApAQCAtNTA0LDggKzg5MSw3IEBACiAJCWF2Z19lbmFibGVkID0gYXZnX3N0YXRzKCZwcy0+cmVzX3N0YXRzWzFdKTsKIAkJYXZnX3J1bm5pbmcgPSBhdmdfc3RhdHMoJnBzLT5yZXNfc3RhdHNbMl0pOwogCi0JCWZwcmludGYoc3RkZXJyLCAiICAoc2NhbGVkIGZyb20gJS4yZiUlKSIsCi0JCQkJMTAwICogYXZnX3J1bm5pbmcgLyBhdmdfZW5hYmxlZCk7CisJCWZwcmludGYoc3RkZXJyLCAiIFslNS4yZiUlXSIsIDEwMCAqIGF2Z19ydW5uaW5nIC8gYXZnX2VuYWJsZWQpOwogCX0KIAlmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiB9CkBAIC01NDcsMTAgKzkzMyw4IEBACiAJCWlmICghY3N2X291dHB1dCkgewogCQkJcHJpbnRfbm9pc2UoY291bnRlciwgMS4wKTsKIAotCQkJaWYgKHJ1biAhPSBlbmEpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgKHNjYWxlZCBmcm9tICUuMmYlJSkiLAotCQkJCQkxMDAuMCAqIHJ1biAvIGVuYSk7Ci0JCQl9CisJCQlpZiAocnVuICE9IGVuYSkKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiAgKCUuMmYlJSkiLCAxMDAuMCAqIHJ1biAvIGVuYSk7CiAJCX0KIAkJZnB1dGMoJ1xuJywgc3RkZXJyKTsKIAl9CkBAIC01OTAsMTMgKzk3NCwxNCBAQAogCX0KIAogCWlmICghY3N2X291dHB1dCkgewotCQlmcHJpbnRmKHN0ZGVyciwgIlxuIik7Ci0JCWZwcmludGYoc3RkZXJyLCAiICUxOC45ZiAgc2Vjb25kcyB0aW1lIGVsYXBzZWQiLAorCQlpZiAoIW51bGxfcnVuKQorCQkJZnByaW50ZihzdGRlcnIsICJcbiIpOworCQlmcHJpbnRmKHN0ZGVyciwgIiAlMTcuOWYgc2Vjb25kcyB0aW1lIGVsYXBzZWQiLAogCQkJCWF2Z19zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMpLzFlOSk7CiAJCWlmIChydW5fY291bnQgPiAxKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiAgICggKy0gJTcuM2YlJSApIiwKLQkJCQkxMDAqc3RkZGV2X3N0YXRzKCZ3YWxsdGltZV9uc2Vjc19zdGF0cykgLwotCQkJCWF2Z19zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMpKTsKKwkJCWZwcmludGYoc3RkZXJyLCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpOworCQkJcHJpbnRfbm9pc2VfcGN0KHN0ZGRldl9zdGF0cygmd2FsbHRpbWVfbnNlY3Nfc3RhdHMpLAorCQkJCQlhdmdfc3RhdHMoJndhbGx0aW1lX25zZWNzX3N0YXRzKSk7CiAJCX0KIAkJZnByaW50ZihzdGRlcnIsICJcblxuIik7CiAJfQpAQCAtNjU4LDYgKzEwNDMsMTAgQEAKIAkJICAgICJyZXBlYXQgY29tbWFuZCBhbmQgcHJpbnQgYXZlcmFnZSArIHN0ZGRldiAobWF4OiAxMDApIiksCiAJT1BUX0JPT0xFQU4oJ24nLCAibnVsbCIsICZudWxsX3J1biwKIAkJICAgICJudWxsIHJ1biAtIGRvbnQgc3RhcnQgYW55IGNvdW50ZXJzIiksCisJT1BUX0lOQ1IoJ2QnLCAiZGV0YWlsZWQiLCAmZGV0YWlsZWRfcnVuLAorCQkgICAgImRldGFpbGVkIHJ1biAtIHN0YXJ0IGEgbG90IG9mIGV2ZW50cyIpLAorCU9QVF9CT09MRUFOKCdTJywgInN5bmMiLCAmc3luY19ydW4sCisJCSAgICAiY2FsbCBzeW5jKCkgYmVmb3JlIHN0YXJ0aW5nIGEgcnVuIiksCiAJT1BUX0NBTExCQUNLX05PT1BUKCdCJywgImJpZy1udW0iLCBOVUxMLCBOVUxMLCAKIAkJCSAgICJwcmludCBsYXJnZSBudW1iZXJzIHdpdGggdGhvdXNhbmRzXCcgc2VwYXJhdG9ycyIsCiAJCQkgICBzdGF0X19zZXRfYmlnX251bSksCkBAIC02NzMsNiArMTA2Miw3MCBAQAogCU9QVF9FTkQoKQogfTsKIAorLyoKKyAqIEFkZCBkZWZhdWx0IGF0dHJpYnV0ZXMsIGlmIHRoZXJlIHdlcmUgbm8gYXR0cmlidXRlcyBzcGVjaWZpZWQgb3IKKyAqIGlmIC1kLy0tZGV0YWlsZWQsIC1kIC1kIG9yIC1kIC1kIC1kIGlzIHVzZWQ6CisgKi8KK3N0YXRpYyBpbnQgYWRkX2RlZmF1bHRfYXR0cmlidXRlcyh2b2lkKQoreworCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CisJc2l6ZV90IGF0dHJfbnIgPSAwOworCXNpemVfdCBjOworCisJLyogU2V0IGF0dHJzIGlmIG5vIGV2ZW50IGlzIHNlbGVjdGVkIGFuZCAhbnVsbF9ydW46ICovCisJaWYgKG51bGxfcnVuKQorCQlyZXR1cm4gMDsKKworCWlmICghZXZzZWxfbGlzdC0+bnJfZW50cmllcykgeworCQlmb3IgKGMgPSAwOyBjIDwgQVJSQVlfU0laRShkZWZhdWx0X2F0dHJzKTsgYysrKSB7CisJCQlwb3MgPSBwZXJmX2V2c2VsX19uZXcoZGVmYXVsdF9hdHRycyArIGMsIGMgKyBhdHRyX25yKTsKKwkJCWlmIChwb3MgPT0gTlVMTCkKKwkJCQlyZXR1cm4gLTE7CisJCQlwZXJmX2V2bGlzdF9fYWRkKGV2c2VsX2xpc3QsIHBvcyk7CisJCX0KKwkJYXR0cl9uciArPSBjOworCX0KKworCS8qIERldGFpbGVkIGV2ZW50cyBnZXQgYXBwZW5kZWQgdG8gdGhlIGV2ZW50IGxpc3Q6ICovCisKKwlpZiAoZGV0YWlsZWRfcnVuIDwgIDEpCisJCXJldHVybiAwOworCisJLyogQXBwZW5kIGRldGFpbGVkIHJ1biBleHRyYSBhdHRyaWJ1dGVzOiAqLworCWZvciAoYyA9IDA7IGMgPCBBUlJBWV9TSVpFKGRldGFpbGVkX2F0dHJzKTsgYysrKSB7CisJCXBvcyA9IHBlcmZfZXZzZWxfX25ldyhkZXRhaWxlZF9hdHRycyArIGMsIGMgKyBhdHRyX25yKTsKKwkJaWYgKHBvcyA9PSBOVUxMKQorCQkJcmV0dXJuIC0xOworCQlwZXJmX2V2bGlzdF9fYWRkKGV2c2VsX2xpc3QsIHBvcyk7CisJfQorCWF0dHJfbnIgKz0gYzsKKworCWlmIChkZXRhaWxlZF9ydW4gPCAyKQorCQlyZXR1cm4gMDsKKworCS8qIEFwcGVuZCB2ZXJ5IGRldGFpbGVkIHJ1biBleHRyYSBhdHRyaWJ1dGVzOiAqLworCWZvciAoYyA9IDA7IGMgPCBBUlJBWV9TSVpFKHZlcnlfZGV0YWlsZWRfYXR0cnMpOyBjKyspIHsKKwkJcG9zID0gcGVyZl9ldnNlbF9fbmV3KHZlcnlfZGV0YWlsZWRfYXR0cnMgKyBjLCBjICsgYXR0cl9ucik7CisJCWlmIChwb3MgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwkJcGVyZl9ldmxpc3RfX2FkZChldnNlbF9saXN0LCBwb3MpOworCX0KKworCWlmIChkZXRhaWxlZF9ydW4gPCAzKQorCQlyZXR1cm4gMDsKKworCS8qIEFwcGVuZCB2ZXJ5LCB2ZXJ5IGRldGFpbGVkIHJ1biBleHRyYSBhdHRyaWJ1dGVzOiAqLworCWZvciAoYyA9IDA7IGMgPCBBUlJBWV9TSVpFKHZlcnlfdmVyeV9kZXRhaWxlZF9hdHRycyk7IGMrKykgeworCQlwb3MgPSBwZXJmX2V2c2VsX19uZXcodmVyeV92ZXJ5X2RldGFpbGVkX2F0dHJzICsgYywgYyArIGF0dHJfbnIpOworCQlpZiAocG9zID09IE5VTEwpCisJCQlyZXR1cm4gLTE7CisJCXBlcmZfZXZsaXN0X19hZGQoZXZzZWxfbGlzdCwgcG9zKTsKKwl9CisKKworCXJldHVybiAwOworfQorCiBpbnQgY21kX3N0YXQoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewogCXN0cnVjdCBwZXJmX2V2c2VsICpwb3M7CkBAIC03MTgsMTcgKzExNzEsOCBAQAogCQl1c2FnZV93aXRoX29wdGlvbnMoc3RhdF91c2FnZSwgb3B0aW9ucyk7CiAJfQogCi0JLyogU2V0IGF0dHJzIGFuZCBucl9jb3VudGVycyBpZiBubyBldmVudCBpcyBzZWxlY3RlZCBhbmQgIW51bGxfcnVuICovCi0JaWYgKCFudWxsX3J1biAmJiAhZXZzZWxfbGlzdC0+bnJfZW50cmllcykgewotCQlzaXplX3QgYzsKLQotCQlmb3IgKGMgPSAwOyBjIDwgQVJSQVlfU0laRShkZWZhdWx0X2F0dHJzKTsgKytjKSB7Ci0JCQlwb3MgPSBwZXJmX2V2c2VsX19uZXcoJmRlZmF1bHRfYXR0cnNbY10sIGMpOwotCQkJaWYgKHBvcyA9PSBOVUxMKQotCQkJCWdvdG8gb3V0OwotCQkJcGVyZl9ldmxpc3RfX2FkZChldnNlbF9saXN0LCBwb3MpOwotCQl9Ci0JfQorCWlmIChhZGRfZGVmYXVsdF9hdHRyaWJ1dGVzKCkpCisJCWdvdG8gb3V0OwogCiAJaWYgKHRhcmdldF9waWQgIT0gLTEpCiAJCXRhcmdldF90aWQgPSB0YXJnZXRfcGlkOwpAQCAtNzcyLDYgKzEyMTYsMTAgQEAKIAlmb3IgKHJ1bl9pZHggPSAwOyBydW5faWR4IDwgcnVuX2NvdW50OyBydW5faWR4KyspIHsKIAkJaWYgKHJ1bl9jb3VudCAhPSAxICYmIHZlcmJvc2UpCiAJCQlmcHJpbnRmKHN0ZGVyciwgIlsgcGVyZiBzdGF0OiBleGVjdXRpbmcgcnVuICMlZCAuLi4gXVxuIiwgcnVuX2lkeCArIDEpOworCisJCWlmIChzeW5jX3J1bikKKwkJCXN5bmMoKTsKKwogCQlzdGF0dXMgPSBydW5fcGVyZl9zdGF0KGFyZ2MsIGFyZ3YpOwogCX0KIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10ZXN0LmMKaW5kZXggMWIyMTA2Yy4uMmY5YTMzNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRlc3QuYworKysgYi90b29scy9wZXJmL2J1aWx0aW4tdGVzdC5jCkBAIC0yOTAsNyArMjkwLDcgQEAKIAkJZ290byBvdXRfdGhyZWFkX21hcF9kZWxldGU7CiAJfQogCi0JaWYgKHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChldnNlbCwgdGhyZWFkcywgZmFsc2UsIGZhbHNlKSA8IDApIHsKKwlpZiAocGVyZl9ldnNlbF9fb3Blbl9wZXJfdGhyZWFkKGV2c2VsLCB0aHJlYWRzLCBmYWxzZSkgPCAwKSB7CiAJCXByX2RlYnVnKCJmYWlsZWQgdG8gb3BlbiBjb3VudGVyOiAlcywgIgogCQkJICJ0d2VhayAvcHJvYy9zeXMva2VybmVsL3BlcmZfZXZlbnRfcGFyYW5vaWQ/XG4iLAogCQkJIHN0cmVycm9yKGVycm5vKSk7CkBAIC0zMDMsNyArMzAzLDcgQEAKIAl9CiAKIAlpZiAocGVyZl9ldnNlbF9fcmVhZF9vbl9jcHUoZXZzZWwsIDAsIDApIDwgMCkgewotCQlwcl9kZWJ1ZygicGVyZl9ldnNlbF9fb3Blbl9yZWFkX29uX2NwdVxuIik7CisJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19yZWFkX29uX2NwdVxuIik7CiAJCWdvdG8gb3V0X2Nsb3NlX2ZkOwogCX0KIApAQCAtMzY1LDcgKzM2NSw3IEBACiAJCWdvdG8gb3V0X3RocmVhZF9tYXBfZGVsZXRlOwogCX0KIAotCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzLCBmYWxzZSwgZmFsc2UpIDwgMCkgeworCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzLCBmYWxzZSkgPCAwKSB7CiAJCXByX2RlYnVnKCJmYWlsZWQgdG8gb3BlbiBjb3VudGVyOiAlcywgIgogCQkJICJ0d2VhayAvcHJvYy9zeXMva2VybmVsL3BlcmZfZXZlbnRfcGFyYW5vaWQ/XG4iLAogCQkJIHN0cmVycm9yKGVycm5vKSk7CkBAIC00MTgsNyArNDE4LDcgQEAKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChwZXJmX2V2c2VsX19yZWFkX29uX2NwdShldnNlbCwgY3B1LCAwKSA8IDApIHsKLQkJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19vcGVuX3JlYWRfb25fY3B1XG4iKTsKKwkJCXByX2RlYnVnKCJwZXJmX2V2c2VsX19yZWFkX29uX2NwdVxuIik7CiAJCQllcnIgPSAtMTsKIAkJCWJyZWFrOwogCQl9CkBAIC01MjksNyArNTI5LDcgQEAKIAogCQlwZXJmX2V2bGlzdF9fYWRkKGV2bGlzdCwgZXZzZWxzW2ldKTsKIAotCQlpZiAocGVyZl9ldnNlbF9fb3BlbihldnNlbHNbaV0sIGNwdXMsIHRocmVhZHMsIGZhbHNlLCBmYWxzZSkgPCAwKSB7CisJCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2Vsc1tpXSwgY3B1cywgdGhyZWFkcywgZmFsc2UpIDwgMCkgewogCQkJcHJfZGVidWcoImZhaWxlZCB0byBvcGVuIGNvdW50ZXI6ICVzLCAiCiAJCQkJICJ0d2VhayAvcHJvYy9zeXMva2VybmVsL3BlcmZfZXZlbnRfcGFyYW5vaWQ/XG4iLAogCQkJCSBzdHJlcnJvcihlcnJubykpOwpAQCAtNTQ5LDcgKzU0OSw3IEBACiAJCQkrK2ZvbzsKIAkJfQogCi0Jd2hpbGUgKChldmVudCA9IHBlcmZfZXZsaXN0X19yZWFkX29uX2NwdShldmxpc3QsIDApKSAhPSBOVUxMKSB7CisJd2hpbGUgKChldmVudCA9IHBlcmZfZXZsaXN0X19tbWFwX3JlYWQoZXZsaXN0LCAwKSkgIT0gTlVMTCkgewogCQlzdHJ1Y3QgcGVyZl9zYW1wbGUgc2FtcGxlOwogCiAJCWlmIChldmVudC0+aGVhZGVyLnR5cGUgIT0gUEVSRl9SRUNPUkRfU0FNUExFKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMgYi90b29scy9wZXJmL2J1aWx0aW4tdG9wLmMKaW5kZXggZmMxMjczZS4uZWJmYzdjZiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi9idWlsdGluLXRvcC5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi10b3AuYwpAQCAtODAxLDEyICs4MDEsMTIgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBlcmZfc2Vzc2lvbl9fbW1hcF9yZWFkX2NwdShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZWxmLCBpbnQgY3B1KQorc3RhdGljIHZvaWQgcGVyZl9zZXNzaW9uX19tbWFwX3JlYWRfaWR4KHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlbGYsIGludCBpZHgpCiB7CiAJc3RydWN0IHBlcmZfc2FtcGxlIHNhbXBsZTsKIAl1bmlvbiBwZXJmX2V2ZW50ICpldmVudDsKIAotCXdoaWxlICgoZXZlbnQgPSBwZXJmX2V2bGlzdF9fcmVhZF9vbl9jcHUodG9wLmV2bGlzdCwgY3B1KSkgIT0gTlVMTCkgeworCXdoaWxlICgoZXZlbnQgPSBwZXJmX2V2bGlzdF9fbW1hcF9yZWFkKHRvcC5ldmxpc3QsIGlkeCkpICE9IE5VTEwpIHsKIAkJcGVyZl9zZXNzaW9uX19wYXJzZV9zYW1wbGUoc2VsZiwgZXZlbnQsICZzYW1wbGUpOwogCiAJCWlmIChldmVudC0+aGVhZGVyLnR5cGUgPT0gUEVSRl9SRUNPUkRfU0FNUExFKQpAQCAtODIwLDggKzgyMCw4IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgdG9wLmV2bGlzdC0+Y3B1cy0+bnI7IGkrKykKLQkJcGVyZl9zZXNzaW9uX19tbWFwX3JlYWRfY3B1KHNlbGYsIGkpOworCWZvciAoaSA9IDA7IGkgPCB0b3AuZXZsaXN0LT5ucl9tbWFwczsgaSsrKQorCQlwZXJmX3Nlc3Npb25fX21tYXBfcmVhZF9pZHgoc2VsZiwgaSk7CiB9CiAKIHN0YXRpYyB2b2lkIHN0YXJ0X2NvdW50ZXJzKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0KQpAQCAtODQ1LDkgKzg0NSwxMCBAQAogCQl9CiAKIAkJYXR0ci0+bW1hcCA9IDE7CisJCWF0dHItPmluaGVyaXQgPSBpbmhlcml0OwogdHJ5X2FnYWluOgogCQlpZiAocGVyZl9ldnNlbF9fb3Blbihjb3VudGVyLCB0b3AuZXZsaXN0LT5jcHVzLAotCQkJCSAgICAgdG9wLmV2bGlzdC0+dGhyZWFkcywgZ3JvdXAsIGluaGVyaXQpIDwgMCkgeworCQkJCSAgICAgdG9wLmV2bGlzdC0+dGhyZWFkcywgZ3JvdXApIDwgMCkgewogCQkJaW50IGVyciA9IGVycm5vOwogCiAJCQlpZiAoZXJyID09IEVQRVJNIHx8IGVyciA9PSBFQUNDRVMpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvZmVhdHVyZS10ZXN0cy5tYWsgYi90b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLXRlc3RzLm1hawpzaW1pbGFyaXR5IGluZGV4IDg1JQpyZW5hbWUgZnJvbSB0b29scy9wZXJmL2ZlYXR1cmUtdGVzdHMubWFrCnJlbmFtZSB0byB0b29scy9wZXJmL2NvbmZpZy9mZWF0dXJlLXRlc3RzLm1hawppbmRleCBiMDQxY2E2Li42MTcwZmQyIDEwMDY0NAotLS0gYS90b29scy9wZXJmL2ZlYXR1cmUtdGVzdHMubWFrCisrKyBiL3Rvb2xzL3BlcmYvY29uZmlnL2ZlYXR1cmUtdGVzdHMubWFrCkBAIC03OSw5ICs3OSwxNSBAQAogZW5kaWYKIAogaWZuZGVmIE5PX0xJQlBZVEhPTgorZGVmaW5lIFNPVVJDRV9QWVRIT05fVkVSU0lPTgorI2luY2x1ZGUgPFB5dGhvbi5oPgorI2lmIFBZX1ZFUlNJT05fSEVYID49IDB4MDMwMDAwMDAKKwkjZXJyb3IKKyNlbmRpZgoraW50IG1haW4odm9pZCl7fQorZW5kZWYKIGRlZmluZSBTT1VSQ0VfUFlUSE9OX0VNQkVECiAjaW5jbHVkZSA8UHl0aG9uLmg+Ci0KIGludCBtYWluKHZvaWQpCiB7CiAJUHlfSW5pdGlhbGl6ZSgpOwpAQCAtMTIwLDExICsxMjYsMyBAQAogCXJldHVybiAwOwogfQogZW5kZWYKLQotIyB0cnktY2MKLSMgVXNhZ2U6IG9wdGlvbiA9ICQoY2FsbCB0cnktY2MsIHNvdXJjZS10by1idWlsZCwgY2Mtb3B0aW9ucykKLXRyeS1jYyA9ICQoc2hlbGwgc2ggLWMJCQkJCQkgIFwKLQknVE1QPSIkKE9VVFBVVCkkKFRNUE9VVCkuJCQkJCI7CQkJCSAgXAotCSBlY2hvICIkKDEpIiB8CQkJCQkJICBcCi0JICQoQ0MpIC14IGMgLSAkKDIpIC1vICIkJFRNUCIgPiAvZGV2L251bGwgMj4mMSAmJiBlY2hvIHk7IFwKLQkgcm0gLWYgIiQkVE1QIicpCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2NvbmZpZy91dGlsaXRpZXMubWFrIGIvdG9vbHMvcGVyZi9jb25maWcvdXRpbGl0aWVzLm1hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDQ2MTgyCi0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvcGVyZi9jb25maWcvdXRpbGl0aWVzLm1hawpAQCAtMCwwICsxLDE4OCBAQAorIyBUaGlzIGFsbG93cyB1cyB0byB3b3JrIHdpdGggdGhlIG5ld2xpbmUgY2hhcmFjdGVyOgorZGVmaW5lIG5ld2xpbmUKKworCitlbmRlZgorbmV3bGluZSA6PSAkKG5ld2xpbmUpCisKKyMgbmwtZXNjYXBlCisjCisjIFVzYWdlOiBlc2NhcGUgPSAkKGNhbGwgbmwtZXNjYXBlWyxlc2NhcGVdKQorIworIyBUaGlzIGlzIHVzZWQgYXMgdGhlIGNvbW1vbiB3YXkgdG8gc3BlY2lmeQorIyB3aGF0IHNob3VsZCByZXBsYWNlIGEgbmV3bGluZSB3aGVuIGVzY2FwaW5nCisjIG5ld2xpbmVzOyB0aGUgZGVmYXVsdCBpcyBhIGJpemFycmUgc3RyaW5nLgorIworbmwtZXNjYXBlID0gJChvciAkKDEpLG04MjJkZjMwMjB3NmE0NGlkMzRidDU3NGN0YWM0NGViOWY0bikKKworIyBlc2NhcGUtbmwKKyMKKyMgVXNhZ2U6IGVzY2FwZWQtdGV4dCA9ICQoY2FsbCBlc2NhcGUtbmwsdGV4dFssZXNjYXBlXSkKKyMKKyMgR05VIG1ha2UncyAkKHNoZWxsIC4uLikgZnVuY3Rpb24gY29udmVydHMgdG8gYQorIyBzaW5nbGUgc3BhY2UgZWFjaCBuZXdsaW5lIGNoYXJhY3RlciBpbiB0aGUgb3V0cHV0CisjIHByb2R1Y2VkIGR1cmluZyB0aGUgZXhwYW5zaW9uOyB0aGlzIG1heSBub3QgYmUKKyMgZGVzaXJhYmxlLgorIworIyBUaGUgb25seSBzb2x1dGlvbiBpcyB0byBjaGFuZ2UgZWFjaCBuZXdsaW5lIGludG8KKyMgc29tZXRoaW5nIHRoYXQgd29uJ3QgYmUgY29udmVydGVkLCBzbyB0aGF0IHRoZQorIyBpbmZvcm1hdGlvbiBjYW4gYmUgcmVjb3ZlcmVkIGxhdGVyIHdpdGgKKyMgJChjYWxsIHVuZXNjYXBlLW5sLi4uKQorIworZXNjYXBlLW5sID0gJChzdWJzdCAkKG5ld2xpbmUpLCQoY2FsbCBubC1lc2NhcGUsJCgyKSksJCgxKSkKKworIyB1bmVzY2FwZS1ubAorIworIyBVc2FnZTogdGV4dCA9ICQoY2FsbCB1bmVzY2FwZS1ubCxlc2NhcGVkLXRleHRbLGVzY2FwZV0pCisjCisjIFNlZSBlc2NhcGUtbmwuCisjCit1bmVzY2FwZS1ubCA9ICQoc3Vic3QgJChjYWxsIG5sLWVzY2FwZSwkKDIpKSwkKG5ld2xpbmUpLCQoMSkpCisKKyMgc2hlbGwtZXNjYXBlLW5sCisjCisjIFVzYWdlOiAkKHNoZWxsIHNvbWUtY29tbWFuZCB8ICQoY2FsbCBzaGVsbC1lc2NhcGUtbmxbLGVzY2FwZV0pKQorIworIyBVc2UgdGhpcyB0byBlc2NhcGUgbmV3bGluZXMgZnJvbSB3aXRoaW4gYSBzaGVsbCBjYWxsOworIyB0aGUgZGVmYXVsdCBlc2NhcGUgaXMgYSBiaXphcnJlIHN0cmluZy4KKyMKKyMgTk9URTogVGhlIGVzY2FwZSBpcyB1c2VkIGRpcmVjdGx5IGFzIGEgc3RyaW5nIGNvbnN0YW50CisjICAgICAgIGluIGFuIGBhd2snIHByb2dyYW0gdGhhdCBpcyBkZWxpbWl0ZWQgYnkgc2hlbGwKKyMgICAgICAgc2luZ2xlLXF1b3Rlcywgc28gYmUgd2FyeSBvZiB0aGUgY2hhcmFjdGVycworIyAgICAgICB0aGF0IGFyZSBjaG9zZW4uCisjCitkZWZpbmUgc2hlbGwtZXNjYXBlLW5sCithd2sgJ05SPT0xIHt0PSQkMH0gTlI+MSB7dD10ICIkKG5sLWVzY2FwZSkiICQkMH0gRU5EIHtwcmludGYgdH0nCitlbmRlZgorCisjIHNoZWxsLXVuZXNjYXBlLW5sCisjCisjIFVzYWdlOiAkKHNoZWxsIHNvbWUtY29tbWFuZCB8ICQoY2FsbCBzaGVsbC11bmVzY2FwZS1ubFssZXNjYXBlXSkpCisjCisjIFVzZSB0aGlzIHRvIHVuZXNjYXBlIG5ld2xpbmVzIGZyb20gd2l0aGluIGEgc2hlbGwgY2FsbDsKKyMgdGhlIGRlZmF1bHQgZXNjYXBlIGlzIGEgYml6YXJyZSBzdHJpbmcuCisjCisjIE5PVEU6IFRoZSBlc2NhcGUgaXMgdXNlZCBkaXJlY3RseSBhcyBhbiBleHRlbmRlZCByZWd1bGFyCisjICAgICAgIGV4cHJlc3Npb24gY29uc3RhbnQgaW4gYW4gYGF3aycgcHJvZ3JhbSB0aGF0IGlzCisjICAgICAgIGRlbGltaXRlZCBieSBzaGVsbCBzaW5nbGUtcXVvdGVzLCBzbyBiZSB3YXJ5CisjICAgICAgIG9mIHRoZSBjaGFyYWN0ZXJzIHRoYXQgYXJlIGNob3Nlbi4KKyMKKyMgKFRoZSBiYXNoIHNoZWxsIGhhcyBhIGJ1ZyB3aGVyZSBge2dzdWIoLi4uKSwuLi59JyBpcworIyAgbWlzaW50ZXJwcmV0ZWQgYXMgYSBicmFjZSBleHBhbnNpb247IHRoaXMgY2FuIGJlCisjICBvdmVyY29tZSBieSBwdXR0aW5nIGEgc3BhY2UgYmV0d2VlbiBgeycgYW5kIGBnc3ViJykuCisjCitkZWZpbmUgc2hlbGwtdW5lc2NhcGUtbmwKK2F3ayAnTlI9PTEge3Q9JCQwfSBOUj4xIHt0PXQgIlxuIiAkJDB9IEVORCB7IGdzdWIoLyQobmwtZXNjYXBlKS8sIlxuIix0KTsgcHJpbnRmIHQgfScKK2VuZGVmCisKKyMgZXNjYXBlLWZvci1zaGVsbC1zcQorIworIyBVc2FnZTogZW1iZWRkYWJsZS10ZXh0ID0gJChjYWxsIGVzY2FwZS1mb3Itc2hlbGwtc3EsdGV4dCkKKyMKKyMgVGhpcyBmdW5jdGlvbiBwcm9kdWNlcyB0ZXh0IHRoYXQgaXMgc3VpdGFibGUgZm9yCisjIGVtYmVkZGluZyBpbiBhIHNoZWxsIHN0cmluZyB0aGF0IGlzIGRlbGltaXRlZCBieQorIyBzaW5nbGUtcXVvdGVzLgorIworZXNjYXBlLWZvci1zaGVsbC1zcSA9ICAkKHN1YnN0ICcsJ1wnJywkKDEpKQorCisjIHNoZWxsLXNxCisjCisjIFVzYWdlOiBzaW5nbGUtcXVvdGVkLWFuZC1lc2NhcGVkLXRleHQgPSAkKGNhbGwgc2hlbGwtc3EsdGV4dCkKKyMKK3NoZWxsLXNxID0gJyQoZXNjYXBlLWZvci1zaGVsbC1zcSknCisKKyMgc2hlbGwtd29yZGlmeQorIworIyBVc2FnZTogd29yZGlmaWVkLXRleHQgPSAkKGNhbGwgc2hlbGwtd29yZGlmeSx0ZXh0KQorIworIyBGb3IgaW5zdGFuY2U6CisjCisjICB8ZGVmaW5lIHRleHQKKyMgIHxoZWxsbworIyAgfHdvcmxkCisjICB8ZW5kZWYKKyMgIHwKKyMgIHx0YXJnZXQ6CisjICB8CWVjaG8gJChjYWxsIHNoZWxsLXdvcmRpZnksJCh0ZXh0KSkKKyMKKyMgQXQgbGVhc3QgR05VIG1ha2UgZ2V0cyBjb25mdXNlZCBieSBleHBhbmRpbmcgYSBuZXdsaW5lCisjIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhIGNvbW1hbmQgbGluZSBvZiBhIG1ha2VmaWxlIHJ1bGUKKyMgKHRoaXMgaXMgaW4gY29uc3RyYXN0IHRvIGEgYCQoc2hlbGwgLi4uKScgZnVuY3Rpb24gY2FsbCwKKyMgd2hpY2ggY2FuIGhhbmRsZSBpdCBqdXN0IGZpbmUpLgorIworIyBUaGlzIGZ1bmN0aW9uIGF2b2lkcyB0aGUgcHJvYmxlbSBieSBwcm9kdWNpbmcgYSBzdHJpbmcKKyMgdGhhdCB3b3JrcyBhcyBhIHNoZWxsIHdvcmQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBvcgorIyBub3QgaXQgY29udGFpbnMgYSBuZXdsaW5lLgorIworIyBJZiB0aGUgdGV4dCB0byBiZSB3b3JkaWZpZWQgY29udGFpbnMgYSBuZXdsaW5lLCB0aGVuCisjIGFuIGludHJpY3RhdGUgc2hlbGwgY29tbWFuZCBzdWJzdGl0dXRpb24gaXMgY29uc3RydWN0ZWQKKyMgdG8gcmVuZGVyIHRoZSB0ZXh0IGFzIGEgc2luZ2xlIGxpbmU7IHdoZW4gdGhlIHNoZWxsCisjIHByb2Nlc3NlcyB0aGUgcmVzdWx0aW5nIGVzY2FwZWQgdGV4dCwgaXQgdHJhbnNmb3JtcworIyBpdCBpbnRvIHRoZSBvcmlnaW5hbCB1bmVzY2FwZWQgdGV4dC4KKyMKKyMgSWYgdGhlIHRleHQgZG9lcyBub3QgY29udGFpbiBhIG5ld2xpbmUsIHRoZW4gdGhpcyBmdW5jdGlvbgorIyBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHRzIGFzIHRoZSBgJChzaGVsbC1zcSknIGZ1bmN0aW9uLgorIworc2hlbGwtd29yZGlmeSA9ICQoaWYgJChmaW5kc3RyaW5nICQobmV3bGluZSksJCgxKSksJChfc3ctZXNjLW5sKSwkKHNoZWxsLXNxKSkKK2RlZmluZSBfc3ctZXNjLW5sCisiJCQoZWNobyAkKGNhbGwgZXNjYXBlLW5sLCQoc2hlbGwtc3EpLCQoMikpIHwgJChjYWxsIHNoZWxsLXVuZXNjYXBlLW5sLCQoMikpKSIKK2VuZGVmCisKKyMgaXMtYWJzb2x1dGUKKyMKKyMgVXNhZ2U6IGJvb2wtdmFsdWUgPSAkKGNhbGwgaXMtYWJzb2x1dGUscGF0aCkKKyMKK2lzLWFic29sdXRlID0gJChzaGVsbCBlY2hvICQoc2hlbGwtc3EpIHwgZ3JlcCBeLyAtcSAmJiBlY2hvIHkpCisKKyMgbG9va3VwCisjCisjIFVzYWdlOiBhYnNvbHV0ZS1leGVjdXRhYmxlLXBhdGgtb3ItZW1wdHkgPSAkKGNhbGwgbG9va3VwLHBhdGgpCisjCisjIChJdCdzIG5lY2Vzc2FyeSB0byB1c2UgYHNoIC1jJyBiZWNhdXNlIEdOVSBtYWtlIG1lc3NlcyB1cCBieQorIyAgdHJ5aW5nIHRvbyBoYXJkIGFuZCBnZXR0aW5nIHRoaW5ncyB3cm9uZykuCisjCitsb29rdXAgPSAkKGNhbGwgdW5lc2NhcGUtbmwsJChzaGVsbCBzaCAtYyAkKF9sLXNoKSkpCitfbC1zaCA9ICQoY2FsbCBzaGVsbC1zcSxjb21tYW5kIC12ICQoc2hlbGwtc3EpIHwgJChjYWxsIHNoZWxsLWVzY2FwZS1ubCwpKQorCisjIGlzLWV4ZWN1dGFibGUKKyMKKyMgVXNhZ2U6IGJvb2wtdmFsdWUgPSAkKGNhbGwgaXMtZXhlY3V0YWJsZSxwYXRoKQorIworIyAoSXQncyBuZWNlc3NhcnkgdG8gdXNlIGBzaCAtYycgYmVjYXVzZSBHTlUgbWFrZSBtZXNzZXMgdXAgYnkKKyMgIHRyeWluZyB0b28gaGFyZCBhbmQgZ2V0dGluZyB0aGluZ3Mgd3JvbmcpLgorIworaXMtZXhlY3V0YWJsZSA9ICQoY2FsbCBfaXMtZXhlY3V0YWJsZS1oZWxwZXIsJChzaGVsbC1zcSkpCitfaXMtZXhlY3V0YWJsZS1oZWxwZXIgPSAkKHNoZWxsIHNoIC1jICQoX2lzLWV4ZWN1dGFibGUtc2gpKQorX2lzLWV4ZWN1dGFibGUtc2ggPSAkKGNhbGwgc2hlbGwtc3EsdGVzdCAtZiAkKDEpIC1hIC14ICQoMSkgJiYgZWNobyB5KQorCisjIGdldC1leGVjdXRhYmxlCisjCisjIFVzYWdlOiBhYnNvbHV0ZS1leGVjdXRhYmxlLXBhdGgtb3ItZW1wdHkgPSAkKGNhbGwgZ2V0LWV4ZWN1dGFibGUscGF0aCkKKyMKKyMgVGhlIGdvYWwgaXMgdG8gZ2V0IGFuIGFic29sdXRlIHBhdGggZm9yIGFuIGV4ZWN1dGFibGU7CisjIHRoZSBgY29tbWFuZCAtdicgaXMgZGVmaW5lZCBieSBQT1NJWCwgYnV0IGl0J3Mgbm90CisjIG5lY2Vzc2FyaWx5IHZlcnkgcG9ydGFibGUsIHNvIGl0J3Mgb25seSB1c2VkIGlmCisjIHJlbGF0aXZlIHBhdGggcmVzb2x1dGlvbiBpcyByZXF1ZXN0ZWQsIGFzIGRldGVybWluZWQKKyMgYnkgdGhlIHByZXNlbmNlIG9mIGEgbGVhZGluZyBgLycuCisjCitnZXQtZXhlY3V0YWJsZSA9ICQoaWYgJCgxKSwkKGlmICQoaXMtYWJzb2x1dGUpLCQoX2dlLWFic3BhdGgpLCQobG9va3VwKSkpCitfZ2UtYWJzcGF0aCA9ICQoaWYgJChpcy1leGVjdXRhYmxlKSwkKDEpKQorCisjIGdldC1zdXBwbGllZC1vci1kZWZhdWx0LWV4ZWN1dGFibGUKKyMKKyMgVXNhZ2U6IGFic29sdXRlLWV4ZWN1dGFibGUtcGF0aC1vci1lbXB0eSA9ICQoY2FsbCBnZXQtZXhlY3V0YWJsZS1vci1kZWZhdWx0LHZhcmlhYmxlLGRlZmF1bHQpCisjCitkZWZpbmUgZ2V0LWV4ZWN1dGFibGUtb3ItZGVmYXVsdAorJChpZiAkKCQoMSkpLCQoY2FsbCBfZ2VfYXR0ZW1wdCwkKCQoMSkpLCQoMSkpLCQoY2FsbCBfZ2VfYXR0ZW1wdCwkKDIpKSkKK2VuZGVmCitfZ2VfYXR0ZW1wdCA9ICQob3IgJChnZXQtZXhlY3V0YWJsZSksJChfZ2VhX3dhcm4pLCQoY2FsbCBfZ2VhX2VyciwkKDIpKSkKK19nZWFfd2FybiA9ICQod2FybmluZyBUaGUgcGF0aCAnJCgxKScgaXMgbm90IGV4ZWN1dGFibGUuKQorX2dlYV9lcnIgID0gJChpZiAkKDEpLCQoZXJyb3IgUGxlYXNlIHNldCAnJCgxKScgYXBwcm9wcmlhdGVseSkpCisKKyMgdHJ5LWNjCisjIFVzYWdlOiBvcHRpb24gPSAkKGNhbGwgdHJ5LWNjLCBzb3VyY2UtdG8tYnVpbGQsIGNjLW9wdGlvbnMpCit0cnktY2MgPSAkKHNoZWxsIHNoIC1jCQkJCQkJICBcCisJJ1RNUD0iJChPVVRQVVQpJChUTVBPVVQpLiQkJCQiOwkJCQkgIFwKKwkgZWNobyAiJCgxKSIgfAkJCQkJCSAgXAorCSAkKENDKSAteCBjIC0gJCgyKSAtbyAiJCRUTVAiID4gL2Rldi9udWxsIDI+JjEgJiYgZWNobyB5OyBcCisJIHJtIC1mICIkJFRNUCInKQpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jIGIvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5jCmluZGV4IGQ4NTJjZWYuLjIzZWIyMmIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlICJldmxpc3QuaCIKICNpbmNsdWRlICJldnNlbC5oIgogI2luY2x1ZGUgInV0aWwuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgogCiAjaW5jbHVkZSA8c3lzL21tYW4uaD4KIApAQCAtMTY1LDExICsxNjYsMTEgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotdW5pb24gcGVyZl9ldmVudCAqcGVyZl9ldmxpc3RfX3JlYWRfb25fY3B1KHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBpbnQgY3B1KQordW5pb24gcGVyZl9ldmVudCAqcGVyZl9ldmxpc3RfX21tYXBfcmVhZChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IGlkeCkKIHsKIAkvKiBYWFggTW92ZSB0aGlzIHRvIHBlcmYuYywgbWFraW5nIGl0IGdlbmVyYWxseSBhdmFpbGFibGUgKi8KIAl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTsKLQlzdHJ1Y3QgcGVyZl9tbWFwICptZCA9ICZldmxpc3QtPm1tYXBbY3B1XTsKKwlzdHJ1Y3QgcGVyZl9tbWFwICptZCA9ICZldmxpc3QtPm1tYXBbaWR4XTsKIAl1bnNpZ25lZCBpbnQgaGVhZCA9IHBlcmZfbW1hcF9fcmVhZF9oZWFkKG1kKTsKIAl1bnNpZ25lZCBpbnQgb2xkID0gbWQtPnByZXY7CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9IG1kLT5iYXNlICsgcGFnZV9zaXplOwpAQCAtMjM0LDM0ICsyMzUsMTI0IEBACiAKIHZvaWQgcGVyZl9ldmxpc3RfX211bm1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKIHsKLQlpbnQgY3B1OworCWludCBpOwogCisJZm9yIChpID0gMDsgaSA8IGV2bGlzdC0+bnJfbW1hcHM7IGkrKykgeworCQlpZiAoZXZsaXN0LT5tbWFwW2ldLmJhc2UgIT0gTlVMTCkgeworCQkJbXVubWFwKGV2bGlzdC0+bW1hcFtpXS5iYXNlLCBldmxpc3QtPm1tYXBfbGVuKTsKKwkJCWV2bGlzdC0+bW1hcFtpXS5iYXNlID0gTlVMTDsKKwkJfQorCX0KKworCWZyZWUoZXZsaXN0LT5tbWFwKTsKKwlldmxpc3QtPm1tYXAgPSBOVUxMOworfQorCitpbnQgcGVyZl9ldmxpc3RfX2FsbG9jX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QpCit7CisJZXZsaXN0LT5ucl9tbWFwcyA9IGV2bGlzdC0+Y3B1cy0+bnI7CisJaWYgKGV2bGlzdC0+Y3B1cy0+bWFwWzBdID09IC0xKQorCQlldmxpc3QtPm5yX21tYXBzID0gZXZsaXN0LT50aHJlYWRzLT5ucjsKKwlldmxpc3QtPm1tYXAgPSB6YWxsb2MoZXZsaXN0LT5ucl9tbWFwcyAqIHNpemVvZihzdHJ1Y3QgcGVyZl9tbWFwKSk7CisJcmV0dXJuIGV2bGlzdC0+bW1hcCAhPSBOVUxMID8gMCA6IC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgX19wZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAorCQkJICAgICAgIGludCBpZHgsIGludCBwcm90LCBpbnQgbWFzaywgaW50IGZkKQoreworCWV2bGlzdC0+bW1hcFtpZHhdLnByZXYgPSAwOworCWV2bGlzdC0+bW1hcFtpZHhdLm1hc2sgPSBtYXNrOworCWV2bGlzdC0+bW1hcFtpZHhdLmJhc2UgPSBtbWFwKE5VTEwsIGV2bGlzdC0+bW1hcF9sZW4sIHByb3QsCisJCQkJICAgICAgTUFQX1NIQVJFRCwgZmQsIDApOworCWlmIChldmxpc3QtPm1tYXBbaWR4XS5iYXNlID09IE1BUF9GQUlMRUQpIHsKKwkJaWYgKGV2bGlzdC0+Y3B1cy0+bWFwW2lkeF0gPT0gLTEgJiYgZXZzZWwtPmF0dHIuaW5oZXJpdCkKKwkJCXVpX193YXJuaW5nKCJJbmhlcml0IGlzIG5vdCBhbGxvd2VkIG9uIHBlci10YXNrICIKKwkJCQkgICAgImV2ZW50cyB1c2luZyBtbWFwLlxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlwZXJmX2V2bGlzdF9fYWRkX3BvbGxmZChldmxpc3QsIGZkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwZXJmX2V2bGlzdF9fbW1hcF9wZXJfY3B1KHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBpbnQgcHJvdCwgaW50IG1hc2spCit7CisJc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsOworCWludCBjcHUsIHRocmVhZDsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgZXZsaXN0LT5jcHVzLT5ucjsgY3B1KyspIHsKKwkJaW50IG91dHB1dCA9IC0xOworCisJCWZvciAodGhyZWFkID0gMDsgdGhyZWFkIDwgZXZsaXN0LT50aHJlYWRzLT5ucjsgdGhyZWFkKyspIHsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZzZWwsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKKwkJCQlpbnQgZmQgPSBGRChldnNlbCwgY3B1LCB0aHJlYWQpOworCisJCQkJaWYgKG91dHB1dCA9PSAtMSkgeworCQkJCQlvdXRwdXQgPSBmZDsKKwkJCQkJaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCBldnNlbCwgY3B1LAorCQkJCQkJCQlwcm90LCBtYXNrLCBvdXRwdXQpIDwgMCkKKwkJCQkJCWdvdG8gb3V0X3VubWFwOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChpb2N0bChmZCwgUEVSRl9FVkVOVF9JT0NfU0VUX09VVFBVVCwgb3V0cHV0KSAhPSAwKQorCQkJCQkJZ290byBvdXRfdW5tYXA7CisJCQkJfQorCisJCQkJaWYgKChldnNlbC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKSAmJgorCQkJCSAgICBwZXJmX2V2bGlzdF9faWRfYWRkX2ZkKGV2bGlzdCwgZXZzZWwsIGNwdSwgdGhyZWFkLCBmZCkgPCAwKQorCQkJCQlnb3RvIG91dF91bm1hcDsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworCitvdXRfdW5tYXA6CiAJZm9yIChjcHUgPSAwOyBjcHUgPCBldmxpc3QtPmNwdXMtPm5yOyBjcHUrKykgewogCQlpZiAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSAhPSBOVUxMKSB7CiAJCQltdW5tYXAoZXZsaXN0LT5tbWFwW2NwdV0uYmFzZSwgZXZsaXN0LT5tbWFwX2xlbik7CiAJCQlldmxpc3QtPm1tYXBbY3B1XS5iYXNlID0gTlVMTDsKIAkJfQogCX0KKwlyZXR1cm4gLTE7CiB9CiAKLWludCBwZXJmX2V2bGlzdF9fYWxsb2NfbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCkKK3N0YXRpYyBpbnQgcGVyZl9ldmxpc3RfX21tYXBfcGVyX3RocmVhZChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IHByb3QsIGludCBtYXNrKQogewotCWV2bGlzdC0+bW1hcCA9IHphbGxvYyhldmxpc3QtPmNwdXMtPm5yICogc2l6ZW9mKHN0cnVjdCBwZXJmX21tYXApKTsKLQlyZXR1cm4gZXZsaXN0LT5tbWFwICE9IE5VTEwgPyAwIDogLUVOT01FTTsKLX0KKwlzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWw7CisJaW50IHRocmVhZDsKIAotc3RhdGljIGludCBfX3BlcmZfZXZsaXN0X19tbWFwKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBpbnQgY3B1LCBpbnQgcHJvdCwKLQkJCSAgICAgICBpbnQgbWFzaywgaW50IGZkKQotewotCWV2bGlzdC0+bW1hcFtjcHVdLnByZXYgPSAwOwotCWV2bGlzdC0+bW1hcFtjcHVdLm1hc2sgPSBtYXNrOwotCWV2bGlzdC0+bW1hcFtjcHVdLmJhc2UgPSBtbWFwKE5VTEwsIGV2bGlzdC0+bW1hcF9sZW4sIHByb3QsCi0JCQkJICAgICAgTUFQX1NIQVJFRCwgZmQsIDApOwotCWlmIChldmxpc3QtPm1tYXBbY3B1XS5iYXNlID09IE1BUF9GQUlMRUQpCi0JCXJldHVybiAtMTsKKwlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IGV2bGlzdC0+dGhyZWFkcy0+bnI7IHRocmVhZCsrKSB7CisJCWludCBvdXRwdXQgPSAtMTsKIAotCXBlcmZfZXZsaXN0X19hZGRfcG9sbGZkKGV2bGlzdCwgZmQpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2c2VsLCAmZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCQlpbnQgZmQgPSBGRChldnNlbCwgMCwgdGhyZWFkKTsKKworCQkJaWYgKG91dHB1dCA9PSAtMSkgeworCQkJCW91dHB1dCA9IGZkOworCQkJCWlmIChfX3BlcmZfZXZsaXN0X19tbWFwKGV2bGlzdCwgZXZzZWwsIHRocmVhZCwKKwkJCQkJCQlwcm90LCBtYXNrLCBvdXRwdXQpIDwgMCkKKwkJCQkJZ290byBvdXRfdW5tYXA7CisJCQl9IGVsc2UgeworCQkJCWlmIChpb2N0bChmZCwgUEVSRl9FVkVOVF9JT0NfU0VUX09VVFBVVCwgb3V0cHV0KSAhPSAwKQorCQkJCQlnb3RvIG91dF91bm1hcDsKKwkJCX0KKworCQkJaWYgKChldnNlbC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKSAmJgorCQkJICAgIHBlcmZfZXZsaXN0X19pZF9hZGRfZmQoZXZsaXN0LCBldnNlbCwgMCwgdGhyZWFkLCBmZCkgPCAwKQorCQkJCWdvdG8gb3V0X3VubWFwOworCQl9CisJfQorCiAJcmV0dXJuIDA7CisKK291dF91bm1hcDoKKwlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IGV2bGlzdC0+dGhyZWFkcy0+bnI7IHRocmVhZCsrKSB7CisJCWlmIChldmxpc3QtPm1tYXBbdGhyZWFkXS5iYXNlICE9IE5VTEwpIHsKKwkJCW11bm1hcChldmxpc3QtPm1tYXBbdGhyZWFkXS5iYXNlLCBldmxpc3QtPm1tYXBfbGVuKTsKKwkJCWV2bGlzdC0+bW1hcFt0aHJlYWRdLmJhc2UgPSBOVUxMOworCQl9CisJfQorCXJldHVybiAtMTsKIH0KIAogLyoqIHBlcmZfZXZsaXN0X19tbWFwIC0gQ3JlYXRlIHBlciBjcHUgbWFwcyB0byByZWNlaXZlIGV2ZW50cwpAQCAtMjgyLDExICszNzMsMTEgQEAKIGludCBwZXJmX2V2bGlzdF9fbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgaW50IHBhZ2VzLCBib29sIG92ZXJ3cml0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gc3lzY29uZihfU0NfUEFHRV9TSVpFKTsKLQlpbnQgbWFzayA9IHBhZ2VzICogcGFnZV9zaXplIC0gMSwgY3B1OwotCXN0cnVjdCBwZXJmX2V2c2VsICpmaXJzdF9ldnNlbCwgKmV2c2VsOworCWludCBtYXNrID0gcGFnZXMgKiBwYWdlX3NpemUgLSAxOworCXN0cnVjdCBwZXJmX2V2c2VsICpldnNlbDsKIAljb25zdCBzdHJ1Y3QgY3B1X21hcCAqY3B1cyA9IGV2bGlzdC0+Y3B1czsKIAljb25zdCBzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcyA9IGV2bGlzdC0+dGhyZWFkczsKLQlpbnQgdGhyZWFkLCBwcm90ID0gUFJPVF9SRUFEIHwgKG92ZXJ3cml0ZSA/IDAgOiBQUk9UX1dSSVRFKTsKKwlpbnQgcHJvdCA9IFBST1RfUkVBRCB8IChvdmVyd3JpdGUgPyAwIDogUFJPVF9XUklURSk7CiAKIAlpZiAoZXZsaXN0LT5tbWFwID09IE5VTEwgJiYgcGVyZl9ldmxpc3RfX2FsbG9jX21tYXAoZXZsaXN0KSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMjk2LDQyICszODcsMTggQEAKIAogCWV2bGlzdC0+b3ZlcndyaXRlID0gb3ZlcndyaXRlOwogCWV2bGlzdC0+bW1hcF9sZW4gPSAocGFnZXMgKyAxKSAqIHBhZ2Vfc2l6ZTsKLQlmaXJzdF9ldnNlbCA9IGxpc3RfZW50cnkoZXZsaXN0LT5lbnRyaWVzLm5leHQsIHN0cnVjdCBwZXJmX2V2c2VsLCBub2RlKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZXZzZWwsICZldmxpc3QtPmVudHJpZXMsIG5vZGUpIHsKIAkJaWYgKChldnNlbC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKSAmJgogCQkgICAgZXZzZWwtPnNhbXBsZV9pZCA9PSBOVUxMICYmCiAJCSAgICBwZXJmX2V2c2VsX19hbGxvY19pZChldnNlbCwgY3B1cy0+bnIsIHRocmVhZHMtPm5yKSA8IDApCiAJCQlyZXR1cm4gLUVOT01FTTsKLQotCQlmb3IgKGNwdSA9IDA7IGNwdSA8IGNwdXMtPm5yOyBjcHUrKykgewotCQkJZm9yICh0aHJlYWQgPSAwOyB0aHJlYWQgPCB0aHJlYWRzLT5ucjsgdGhyZWFkKyspIHsKLQkJCQlpbnQgZmQgPSBGRChldnNlbCwgY3B1LCB0aHJlYWQpOwotCi0JCQkJaWYgKGV2c2VsLT5pZHggfHwgdGhyZWFkKSB7Ci0JCQkJCWlmIChpb2N0bChmZCwgUEVSRl9FVkVOVF9JT0NfU0VUX09VVFBVVCwKLQkJCQkJCSAgRkQoZmlyc3RfZXZzZWwsIGNwdSwgMCkpICE9IDApCi0JCQkJCQlnb3RvIG91dF91bm1hcDsKLQkJCQl9IGVsc2UgaWYgKF9fcGVyZl9ldmxpc3RfX21tYXAoZXZsaXN0LCBjcHUsIHByb3QsIG1hc2ssIGZkKSA8IDApCi0JCQkJCWdvdG8gb3V0X3VubWFwOwotCi0JCQkJaWYgKChldnNlbC0+YXR0ci5yZWFkX2Zvcm1hdCAmIFBFUkZfRk9STUFUX0lEKSAmJgotCQkJCSAgICBwZXJmX2V2bGlzdF9faWRfYWRkX2ZkKGV2bGlzdCwgZXZzZWwsIGNwdSwgdGhyZWFkLCBmZCkgPCAwKQotCQkJCQlnb3RvIG91dF91bm1hcDsKLQkJCX0KLQkJfQogCX0KIAotCXJldHVybiAwOworCWlmIChldmxpc3QtPmNwdXMtPm1hcFswXSA9PSAtMSkKKwkJcmV0dXJuIHBlcmZfZXZsaXN0X19tbWFwX3Blcl90aHJlYWQoZXZsaXN0LCBwcm90LCBtYXNrKTsKIAotb3V0X3VubWFwOgotCWZvciAoY3B1ID0gMDsgY3B1IDwgY3B1cy0+bnI7IGNwdSsrKSB7Ci0JCWlmIChldmxpc3QtPm1tYXBbY3B1XS5iYXNlICE9IE5VTEwpIHsKLQkJCW11bm1hcChldmxpc3QtPm1tYXBbY3B1XS5iYXNlLCBldmxpc3QtPm1tYXBfbGVuKTsKLQkJCWV2bGlzdC0+bW1hcFtjcHVdLmJhc2UgPSBOVUxMOwotCQl9Ci0JfQotCXJldHVybiAtMTsKKwlyZXR1cm4gcGVyZl9ldmxpc3RfX21tYXBfcGVyX2NwdShldmxpc3QsIHByb3QsIG1hc2spOwogfQogCiBpbnQgcGVyZl9ldmxpc3RfX2NyZWF0ZV9tYXBzKHN0cnVjdCBwZXJmX2V2bGlzdCAqZXZsaXN0LCBwaWRfdCB0YXJnZXRfcGlkLApAQCAtMzQyLDcgKzQwOSw3IEBACiAJaWYgKGV2bGlzdC0+dGhyZWFkcyA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAodGFyZ2V0X3RpZCAhPSAtMSkKKwlpZiAoY3B1X2xpc3QgPT0gTlVMTCAmJiB0YXJnZXRfdGlkICE9IC0xKQogCQlldmxpc3QtPmNwdXMgPSBjcHVfbWFwX19kdW1teV9uZXcoKTsKIAllbHNlCiAJCWV2bGlzdC0+Y3B1cyA9IGNwdV9tYXBfX25ldyhjcHVfbGlzdCk7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvZXZsaXN0LmggYi90b29scy9wZXJmL3V0aWwvZXZsaXN0LmgKaW5kZXggOGIxY2I3YS4uNzEwOWQ3YSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2V2bGlzdC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9ldmxpc3QuaApAQCAtMTcsNiArMTcsNyBAQAogCXN0cnVjdCBobGlzdF9oZWFkIGhlYWRzW1BFUkZfRVZMSVNUX19ITElTVF9TSVpFXTsKIAlpbnQJCSBucl9lbnRyaWVzOwogCWludAkJIG5yX2ZkczsKKwlpbnQJCSBucl9tbWFwczsKIAlpbnQJCSBtbWFwX2xlbjsKIAlib29sCQkgb3ZlcndyaXRlOwogCXVuaW9uIHBlcmZfZXZlbnQgZXZlbnRfY29weTsKQEAgLTQ2LDcgKzQ3LDcgQEAKIAogc3RydWN0IHBlcmZfZXZzZWwgKnBlcmZfZXZsaXN0X19pZDJldnNlbChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCwgdTY0IGlkKTsKIAotdW5pb24gcGVyZl9ldmVudCAqcGVyZl9ldmxpc3RfX3JlYWRfb25fY3B1KHN0cnVjdCBwZXJmX2V2bGlzdCAqc2VsZiwgaW50IGNwdSk7Cit1bmlvbiBwZXJmX2V2ZW50ICpwZXJmX2V2bGlzdF9fbW1hcF9yZWFkKHN0cnVjdCBwZXJmX2V2bGlzdCAqc2VsZiwgaW50IGlkeCk7CiAKIGludCBwZXJmX2V2bGlzdF9fYWxsb2NfbW1hcChzdHJ1Y3QgcGVyZl9ldmxpc3QgKmV2bGlzdCk7CiBpbnQgcGVyZl9ldmxpc3RfX21tYXAoc3RydWN0IHBlcmZfZXZsaXN0ICpldmxpc3QsIGludCBwYWdlcywgYm9vbCBvdmVyd3JpdGUpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmMgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwppbmRleCA2NjI1OTZhLi5kNmZkNTliIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuYworKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuYwpAQCAtMTc1LDcgKzE3NSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgX19wZXJmX2V2c2VsX19vcGVuKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgc3RydWN0IGNwdV9tYXAgKmNwdXMsCi0JCQkgICAgICBzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcywgYm9vbCBncm91cCwgYm9vbCBpbmhlcml0KQorCQkJICAgICAgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXApCiB7CiAJaW50IGNwdSwgdGhyZWFkOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwpAQCAtMTkyLDE5ICsxOTIsNiBAQAogCiAJZm9yIChjcHUgPSAwOyBjcHUgPCBjcHVzLT5ucjsgY3B1KyspIHsKIAkJaW50IGdyb3VwX2ZkID0gLTE7Ci0JCS8qCi0JCSAqIERvbid0IGFsbG93IG1tYXAoKSBvZiBpbmhlcml0ZWQgcGVyLXRhc2sgY291bnRlcnMuIFRoaXMKLQkJICogd291bGQgY3JlYXRlIGEgcGVyZm9ybWFuY2UgaXNzdWUgZHVlIHRvIGFsbCBjaGlsZHJlbiB3cml0aW5nCi0JCSAqIHRvIHRoZSBzYW1lIGJ1ZmZlci4KLQkJICoKLQkJICogRklYTUU6Ci0JCSAqIFByb3BlciBmaXggaXMgbm90IHRvIHBhc3MgJ2luaGVyaXQnIHRvIHBlcmZfZXZzZWxfX29wZW4qLAotCQkgKiBidXQgYSAnZmxhZ3MnIHBhcmFtZXRlciwgd2l0aCAnZ3JvdXAnIGZvbGRlZCB0aGVyZSBhcyB3ZWxsLAotCQkgKiB0aGVuIGludHJvZHVjZSBhIFBFUkZfT197TU1BUCxHUk9VUCxJTkhFUklUfSBlbnVtLCBhbmQgaWYKLQkJICogT19NTUFQIGlzIHNldCwgZW1pdCBhIHdhcm5pbmcgaWYgY3B1IDwgMCBhbmQgT19JTkhFUklUIGlzCi0JCSAqIHNldC4gTGV0cyBnbyBmb3IgdGhlIG1pbmltYWwgZml4IGZpcnN0IHRoby4KLQkJICovCi0JCWV2c2VsLT5hdHRyLmluaGVyaXQgPSAoY3B1cy0+bWFwW2NwdV0gPj0gMCkgJiYgaW5oZXJpdDsKIAogCQlmb3IgKHRocmVhZCA9IDA7IHRocmVhZCA8IHRocmVhZHMtPm5yOyB0aHJlYWQrKykgewogCkBAIC0yNTMsNyArMjQwLDcgQEAKIH07CiAKIGludCBwZXJmX2V2c2VsX19vcGVuKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgc3RydWN0IGNwdV9tYXAgKmNwdXMsCi0JCSAgICAgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXAsIGJvb2wgaW5oZXJpdCkKKwkJICAgICBzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcywgYm9vbCBncm91cCkKIHsKIAlpZiAoY3B1cyA9PSBOVUxMKSB7CiAJCS8qIFdvcmsgYXJvdW5kIG9sZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBzdHJpY3QgYWxpYXNpbmcgKi8KQEAgLTI2MywxOSArMjUwLDE5IEBACiAJaWYgKHRocmVhZHMgPT0gTlVMTCkKIAkJdGhyZWFkcyA9ICZlbXB0eV90aHJlYWRfbWFwLm1hcDsKIAotCXJldHVybiBfX3BlcmZfZXZzZWxfX29wZW4oZXZzZWwsIGNwdXMsIHRocmVhZHMsIGdyb3VwLCBpbmhlcml0KTsKKwlyZXR1cm4gX19wZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzLCBncm91cCk7CiB9CiAKIGludCBwZXJmX2V2c2VsX19vcGVuX3Blcl9jcHUoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkJICAgICBzdHJ1Y3QgY3B1X21hcCAqY3B1cywgYm9vbCBncm91cCwgYm9vbCBpbmhlcml0KQorCQkJICAgICBzdHJ1Y3QgY3B1X21hcCAqY3B1cywgYm9vbCBncm91cCkKIHsKLQlyZXR1cm4gX19wZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCAmZW1wdHlfdGhyZWFkX21hcC5tYXAsIGdyb3VwLCBpbmhlcml0KTsKKwlyZXR1cm4gX19wZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCAmZW1wdHlfdGhyZWFkX21hcC5tYXAsIGdyb3VwKTsKIH0KIAogaW50IHBlcmZfZXZzZWxfX29wZW5fcGVyX3RocmVhZChzdHJ1Y3QgcGVyZl9ldnNlbCAqZXZzZWwsCi0JCQkJc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXAsIGJvb2wgaW5oZXJpdCkKKwkJCQlzdHJ1Y3QgdGhyZWFkX21hcCAqdGhyZWFkcywgYm9vbCBncm91cCkKIHsKLQlyZXR1cm4gX19wZXJmX2V2c2VsX19vcGVuKGV2c2VsLCAmZW1wdHlfY3B1X21hcC5tYXAsIHRocmVhZHMsIGdyb3VwLCBpbmhlcml0KTsKKwlyZXR1cm4gX19wZXJmX2V2c2VsX19vcGVuKGV2c2VsLCAmZW1wdHlfY3B1X21hcC5tYXAsIHRocmVhZHMsIGdyb3VwKTsKIH0KIAogc3RhdGljIGludCBwZXJmX2V2ZW50X19wYXJzZV9pZF9zYW1wbGUoY29uc3QgdW5pb24gcGVyZl9ldmVudCAqZXZlbnQsIHU2NCB0eXBlLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2V2c2VsLmggYi90b29scy9wZXJmL3V0aWwvZXZzZWwuaAppbmRleCA2NzEwYWI1Li5mNzliYjJjIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvZXZzZWwuaAorKysgYi90b29scy9wZXJmL3V0aWwvZXZzZWwuaApAQCAtODEsMTEgKzgxLDExIEBACiB2b2lkIHBlcmZfZXZzZWxfX2Nsb3NlX2ZkKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgaW50IG5jcHVzLCBpbnQgbnRocmVhZHMpOwogCiBpbnQgcGVyZl9ldnNlbF9fb3Blbl9wZXJfY3B1KHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwKLQkJCSAgICAgc3RydWN0IGNwdV9tYXAgKmNwdXMsIGJvb2wgZ3JvdXAsIGJvb2wgaW5oZXJpdCk7CisJCQkgICAgIHN0cnVjdCBjcHVfbWFwICpjcHVzLCBib29sIGdyb3VwKTsKIGludCBwZXJmX2V2c2VsX19vcGVuX3Blcl90aHJlYWQoc3RydWN0IHBlcmZfZXZzZWwgKmV2c2VsLAotCQkJCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwLCBib29sIGluaGVyaXQpOworCQkJCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzLCBib29sIGdyb3VwKTsKIGludCBwZXJmX2V2c2VsX19vcGVuKHN0cnVjdCBwZXJmX2V2c2VsICpldnNlbCwgc3RydWN0IGNwdV9tYXAgKmNwdXMsCi0JCSAgICAgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXAsIGJvb2wgaW5oZXJpdCk7CisJCSAgICAgc3RydWN0IHRocmVhZF9tYXAgKnRocmVhZHMsIGJvb2wgZ3JvdXApOwogCiAjZGVmaW5lIHBlcmZfZXZzZWxfX21hdGNoKGV2c2VsLCB0LCBjKQkJXAogCShldnNlbC0+YXR0ci50eXBlID09IFBFUkZfVFlQRV8jI3QgJiYJXApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLWFzbS5oIGIvdG9vbHMvcGVyZi91dGlsL2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLWFzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3ODlkNzgKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9wZXJmL3V0aWwvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUtYXNtLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9QRVJGX0FTTV9BTFRFUk5BVElWRV9BU01fSAorI2RlZmluZSBfUEVSRl9BU01fQUxURVJOQVRJVkVfQVNNX0gKKworLyogSnVzdCBkaXNhYmxlIGl0IHNvIHdlIGNhbiBidWlsZCBhcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMgZm9yIHBlcmYgYmVuY2g6ICovCisKKyNkZWZpbmUgYWx0aW5zdHJ1Y3Rpb25fZW50cnkgIworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wYXJzZS1ldmVudHMuYwppbmRleCA5NTJiNGFlLi40MTk4MmMzIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcGFyc2UtZXZlbnRzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3BhcnNlLWV2ZW50cy5jCkBAIC0zMSwzNCArMzEsMzYgQEAKICNkZWZpbmUgQ1NXKHgpIC50eXBlID0gUEVSRl9UWVBFX1NPRlRXQVJFLCAuY29uZmlnID0gUEVSRl9DT1VOVF9TV18jI3gKIAogc3RhdGljIHN0cnVjdCBldmVudF9zeW1ib2wgZXZlbnRfc3ltYm9sc1tdID0gewotICB7IENIVyhDUFVfQ1lDTEVTKSwJCSJjcHUtY3ljbGVzIiwJCSJjeWNsZXMiCX0sCi0gIHsgQ0hXKElOU1RSVUNUSU9OUyksCQkiaW5zdHJ1Y3Rpb25zIiwJCSIiCQl9LAotICB7IENIVyhDQUNIRV9SRUZFUkVOQ0VTKSwJImNhY2hlLXJlZmVyZW5jZXMiLAkiIgkJfSwKLSAgeyBDSFcoQ0FDSEVfTUlTU0VTKSwJCSJjYWNoZS1taXNzZXMiLAkJIiIJCX0sCi0gIHsgQ0hXKEJSQU5DSF9JTlNUUlVDVElPTlMpLAkiYnJhbmNoLWluc3RydWN0aW9ucyIsCSJicmFuY2hlcyIJfSwKLSAgeyBDSFcoQlJBTkNIX01JU1NFUyksCQkiYnJhbmNoLW1pc3NlcyIsCSIiCQl9LAotICB7IENIVyhCVVNfQ1lDTEVTKSwJCSJidXMtY3ljbGVzIiwJCSIiCQl9LAorICB7IENIVyhDUFVfQ1lDTEVTKSwJCQkiY3B1LWN5Y2xlcyIsCQkJImN5Y2xlcyIJCX0sCisgIHsgQ0hXKFNUQUxMRURfQ1lDTEVTX0ZST05URU5EKSwJInN0YWxsZWQtY3ljbGVzLWZyb250ZW5kIiwJImlkbGUtY3ljbGVzLWZyb250ZW5kIgl9LAorICB7IENIVyhTVEFMTEVEX0NZQ0xFU19CQUNLRU5EKSwJInN0YWxsZWQtY3ljbGVzLWJhY2tlbmQiLAkiaWRsZS1jeWNsZXMtYmFja2VuZCIJfSwKKyAgeyBDSFcoSU5TVFJVQ1RJT05TKSwJCQkiaW5zdHJ1Y3Rpb25zIiwJCQkiIgkJCX0sCisgIHsgQ0hXKENBQ0hFX1JFRkVSRU5DRVMpLAkJImNhY2hlLXJlZmVyZW5jZXMiLAkJIiIJCQl9LAorICB7IENIVyhDQUNIRV9NSVNTRVMpLAkJCSJjYWNoZS1taXNzZXMiLAkJCSIiCQkJfSwKKyAgeyBDSFcoQlJBTkNIX0lOU1RSVUNUSU9OUyksCQkiYnJhbmNoLWluc3RydWN0aW9ucyIsCQkiYnJhbmNoZXMiCQl9LAorICB7IENIVyhCUkFOQ0hfTUlTU0VTKSwJCQkiYnJhbmNoLW1pc3NlcyIsCQkiIgkJCX0sCisgIHsgQ0hXKEJVU19DWUNMRVMpLAkJCSJidXMtY3ljbGVzIiwJCQkiIgkJCX0sCiAKLSAgeyBDU1coQ1BVX0NMT0NLKSwJCSJjcHUtY2xvY2siLAkJIiIJCX0sCi0gIHsgQ1NXKFRBU0tfQ0xPQ0spLAkJInRhc2stY2xvY2siLAkJIiIJCX0sCi0gIHsgQ1NXKFBBR0VfRkFVTFRTKSwJCSJwYWdlLWZhdWx0cyIsCQkiZmF1bHRzIgl9LAotICB7IENTVyhQQUdFX0ZBVUxUU19NSU4pLAkibWlub3ItZmF1bHRzIiwJCSIiCQl9LAotICB7IENTVyhQQUdFX0ZBVUxUU19NQUopLAkibWFqb3ItZmF1bHRzIiwJCSIiCQl9LAotICB7IENTVyhDT05URVhUX1NXSVRDSEVTKSwJImNvbnRleHQtc3dpdGNoZXMiLAkiY3MiCQl9LAotICB7IENTVyhDUFVfTUlHUkFUSU9OUyksCSJjcHUtbWlncmF0aW9ucyIsCSJtaWdyYXRpb25zIgl9LAotICB7IENTVyhBTElHTk1FTlRfRkFVTFRTKSwJImFsaWdubWVudC1mYXVsdHMiLAkiIgkJfSwKLSAgeyBDU1coRU1VTEFUSU9OX0ZBVUxUUyksCSJlbXVsYXRpb24tZmF1bHRzIiwJIiIJCX0sCisgIHsgQ1NXKENQVV9DTE9DSyksCQkJImNwdS1jbG9jayIsCQkJIiIJCQl9LAorICB7IENTVyhUQVNLX0NMT0NLKSwJCQkidGFzay1jbG9jayIsCQkJIiIJCQl9LAorICB7IENTVyhQQUdFX0ZBVUxUUyksCQkJInBhZ2UtZmF1bHRzIiwJCQkiZmF1bHRzIgkJfSwKKyAgeyBDU1coUEFHRV9GQVVMVFNfTUlOKSwJCSJtaW5vci1mYXVsdHMiLAkJCSIiCQkJfSwKKyAgeyBDU1coUEFHRV9GQVVMVFNfTUFKKSwJCSJtYWpvci1mYXVsdHMiLAkJCSIiCQkJfSwKKyAgeyBDU1coQ09OVEVYVF9TV0lUQ0hFUyksCQkiY29udGV4dC1zd2l0Y2hlcyIsCQkiY3MiCQkJfSwKKyAgeyBDU1coQ1BVX01JR1JBVElPTlMpLAkJImNwdS1taWdyYXRpb25zIiwJCSJtaWdyYXRpb25zIgkJfSwKKyAgeyBDU1coQUxJR05NRU5UX0ZBVUxUUyksCQkiYWxpZ25tZW50LWZhdWx0cyIsCQkiIgkJCX0sCisgIHsgQ1NXKEVNVUxBVElPTl9GQVVMVFMpLAkJImVtdWxhdGlvbi1mYXVsdHMiLAkJIiIJCQl9LAogfTsKIAogI2RlZmluZSBfX1BFUkZfRVZFTlRfRklFTEQoY29uZmlnLCBuYW1lKSBcCiAJKChjb25maWcgJiBQRVJGX0VWRU5UXyMjbmFtZSMjX01BU0spID4+IFBFUkZfRVZFTlRfIyNuYW1lIyNfU0hJRlQpCiAKLSNkZWZpbmUgUEVSRl9FVkVOVF9SQVcoY29uZmlnKQlfX1BFUkZfRVZFTlRfRklFTEQoY29uZmlnLCBSQVcpCisjZGVmaW5lIFBFUkZfRVZFTlRfUkFXKGNvbmZpZykJCV9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIFJBVykKICNkZWZpbmUgUEVSRl9FVkVOVF9DT05GSUcoY29uZmlnKQlfX1BFUkZfRVZFTlRfRklFTEQoY29uZmlnLCBDT05GSUcpCi0jZGVmaW5lIFBFUkZfRVZFTlRfVFlQRShjb25maWcpCV9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIFRZUEUpCisjZGVmaW5lIFBFUkZfRVZFTlRfVFlQRShjb25maWcpCQlfX1BFUkZfRVZFTlRfRklFTEQoY29uZmlnLCBUWVBFKQogI2RlZmluZSBQRVJGX0VWRU5UX0lEKGNvbmZpZykJCV9fUEVSRl9FVkVOVF9GSUVMRChjb25maWcsIEVWRU5UKQogCi1zdGF0aWMgY29uc3QgY2hhciAqaHdfZXZlbnRfbmFtZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpod19ldmVudF9uYW1lc1tQRVJGX0NPVU5UX0hXX01BWF0gPSB7CiAJImN5Y2xlcyIsCiAJImluc3RydWN0aW9ucyIsCiAJImNhY2hlLXJlZmVyZW5jZXMiLApAQCAtNjYsMTEgKzY4LDEzIEBACiAJImJyYW5jaGVzIiwKIAkiYnJhbmNoLW1pc3NlcyIsCiAJImJ1cy1jeWNsZXMiLAorCSJzdGFsbGVkLWN5Y2xlcy1mcm9udGVuZCIsCisJInN0YWxsZWQtY3ljbGVzLWJhY2tlbmQiLAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKnN3X2V2ZW50X25hbWVzW10gPSB7Ci0JImNwdS1jbG9jay1tc2VjcyIsCi0JInRhc2stY2xvY2stbXNlY3MiLAorc3RhdGljIGNvbnN0IGNoYXIgKnN3X2V2ZW50X25hbWVzW1BFUkZfQ09VTlRfU1dfTUFYXSA9IHsKKwkiY3B1LWNsb2NrIiwKKwkidGFzay1jbG9jayIsCiAJInBhZ2UtZmF1bHRzIiwKIAkiY29udGV4dC1zd2l0Y2hlcyIsCiAJIkNQVS1taWdyYXRpb25zIiwKQEAgLTMwNyw3ICszMTEsNyBAQAogCiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBQRVJGX1RZUEVfSEFSRFdBUkU6Ci0JCWlmIChjb25maWcgPCBQRVJGX0NPVU5UX0hXX01BWCkKKwkJaWYgKGNvbmZpZyA8IFBFUkZfQ09VTlRfSFdfTUFYICYmIGh3X2V2ZW50X25hbWVzW2NvbmZpZ10pCiAJCQlyZXR1cm4gaHdfZXZlbnRfbmFtZXNbY29uZmlnXTsKIAkJcmV0dXJuICJ1bmtub3duLWhhcmR3YXJlIjsKIApAQCAtMzMzLDcgKzMzNyw3IEBACiAJfQogCiAJY2FzZSBQRVJGX1RZUEVfU09GVFdBUkU6Ci0JCWlmIChjb25maWcgPCBQRVJGX0NPVU5UX1NXX01BWCkKKwkJaWYgKGNvbmZpZyA8IFBFUkZfQ09VTlRfU1dfTUFYICYmIHN3X2V2ZW50X25hbWVzW2NvbmZpZ10pCiAJCQlyZXR1cm4gc3dfZXZlbnRfbmFtZXNbY29uZmlnXTsKIAkJcmV0dXJuICJ1bmtub3duLXNvZnR3YXJlIjsKIApAQCAtNjQ4LDEzICs2NTIsMTUgQEAKIAlpbnQgbjsKIAogCW4gPSBzdHJsZW4oZXZlbnRfc3ltYm9sc1tpXS5zeW1ib2wpOwotCWlmICghc3RybmNtcChzdHIsIGV2ZW50X3N5bWJvbHNbaV0uc3ltYm9sLCBuKSkKKwlpZiAoIXN0cm5jYXNlY21wKHN0ciwgZXZlbnRfc3ltYm9sc1tpXS5zeW1ib2wsIG4pKQogCQlyZXR1cm4gbjsKIAogCW4gPSBzdHJsZW4oZXZlbnRfc3ltYm9sc1tpXS5hbGlhcyk7Ci0JaWYgKG4pCi0JCWlmICghc3RybmNtcChzdHIsIGV2ZW50X3N5bWJvbHNbaV0uYWxpYXMsIG4pKQorCWlmIChuKSB7CisJCWlmICghc3RybmNhc2VjbXAoc3RyLCBldmVudF9zeW1ib2xzW2ldLmFsaWFzLCBuKSkKIAkJCXJldHVybiBuOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC03MTgsMTUgKzcyNCwyMiBAQAogCXJldHVybiBFVlRfRkFJTEVEOwogfQogCi1zdGF0aWMgZW51bSBldmVudF9yZXN1bHQKK3N0YXRpYyBpbnQKIHBhcnNlX2V2ZW50X21vZGlmaWVyKGNvbnN0IGNoYXIgKipzdHJwLCBzdHJ1Y3QgcGVyZl9ldmVudF9hdHRyICphdHRyKQogewogCWNvbnN0IGNoYXIgKnN0ciA9ICpzdHJwOwogCWludCBleGNsdWRlID0gMDsKIAlpbnQgZXUgPSAwLCBlayA9IDAsIGVoID0gMCwgcHJlY2lzZSA9IDA7CiAKLQlpZiAoKnN0cisrICE9ICc6JykKKwlpZiAoISpzdHIpCiAJCXJldHVybiAwOworCisJaWYgKCpzdHIgPT0gJywnKQorCQlyZXR1cm4gMDsKKworCWlmICgqc3RyKysgIT0gJzonKQorCQlyZXR1cm4gLTE7CisKIAl3aGlsZSAoKnN0cikgewogCQlpZiAoKnN0ciA9PSAndScpIHsKIAkJCWlmICghZXhjbHVkZSkKQEAgLTc0NywxNCArNzYwLDE2IEBACiAKIAkJKytzdHI7CiAJfQotCWlmIChzdHIgPj0gKnN0cnAgKyAyKSB7Ci0JCSpzdHJwID0gc3RyOwotCQlhdHRyLT5leGNsdWRlX3VzZXIgICA9IGV1OwotCQlhdHRyLT5leGNsdWRlX2tlcm5lbCA9IGVrOwotCQlhdHRyLT5leGNsdWRlX2h2ICAgICA9IGVoOwotCQlhdHRyLT5wcmVjaXNlX2lwICAgICA9IHByZWNpc2U7Ci0JCXJldHVybiAxOwotCX0KKwlpZiAoc3RyIDwgKnN0cnAgKyAyKQorCQlyZXR1cm4gLTE7CisKKwkqc3RycCA9IHN0cjsKKworCWF0dHItPmV4Y2x1ZGVfdXNlciAgID0gZXU7CisJYXR0ci0+ZXhjbHVkZV9rZXJuZWwgPSBlazsKKwlhdHRyLT5leGNsdWRlX2h2ICAgICA9IGVoOworCWF0dHItPnByZWNpc2VfaXAgICAgID0gcHJlY2lzZTsKKwogCXJldHVybiAwOwogfQogCkBAIC03OTcsNyArODEyLDEyIEBACiAJcmV0dXJuIEVWVF9GQUlMRUQ7CiAKIG1vZGlmaWVyOgotCXBhcnNlX2V2ZW50X21vZGlmaWVyKHN0ciwgYXR0cik7CisJaWYgKHBhcnNlX2V2ZW50X21vZGlmaWVyKHN0ciwgYXR0cikgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBldmVudCBtb2RpZmllcjogJyVzJ1xuIiwgKnN0cik7CisJCWZwcmludGYoc3RkZXJyLCAiUnVuICdwZXJmIGxpc3QnIGZvciBhIGxpc3Qgb2YgdmFsaWQgZXZlbnRzIGFuZCBtb2RpZmllcnNcbiIpOworCisJCXJldHVybiBFVlRfRkFJTEVEOworCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC05MTIsNyArOTMyLDcgQEAKIAogCQkJc25wcmludGYoZXZ0X3BhdGgsIE1BWFBBVEhMRU4sICIlczolcyIsCiAJCQkJIHN5c19kaXJlbnQuZF9uYW1lLCBldnRfZGlyZW50LmRfbmFtZSk7Ci0JCQlwcmludGYoIiAgJS00MnMgWyVzXVxuIiwgZXZ0X3BhdGgsCisJCQlwcmludGYoIiAgJS01MHMgWyVzXVxuIiwgZXZ0X3BhdGgsCiAJCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfVFJBQ0VQT0lOVF0pOwogCQl9CiAJCWNsb3NlZGlyKGV2dF9kaXIpOwpAQCAtOTc3LDcgKzk5Nyw3IEBACiAJCWVsc2UKIAkJCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzIiwgc3ltcy0+c3ltYm9sKTsKIAotCQlwcmludGYoIiAgJS00MnMgWyVzXVxuIiwgbmFtZSwKKwkJcHJpbnRmKCIgICUtNTBzIFslc11cbiIsIG5hbWUsCiAJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW3R5cGVdKTsKIAl9CiB9CkBAIC05OTUsMTEgKzEwMTUsMTAgQEAKIAkJCWZvciAoaSA9IDA7IGkgPCBQRVJGX0NPVU5UX0hXX0NBQ0hFX1JFU1VMVF9NQVg7IGkrKykgewogCQkJCWNoYXIgKm5hbWUgPSBldmVudF9jYWNoZV9uYW1lKHR5cGUsIG9wLCBpKTsKIAotCQkJCWlmIChldmVudF9nbG9iICE9IE5VTEwgJiYgCi0JCQkJICAgICFzdHJnbG9ibWF0Y2gobmFtZSwgZXZlbnRfZ2xvYikpCisJCQkJaWYgKGV2ZW50X2dsb2IgIT0gTlVMTCAmJiAhc3RyZ2xvYm1hdGNoKG5hbWUsIGV2ZW50X2dsb2IpKQogCQkJCQljb250aW51ZTsKIAotCQkJCXByaW50ZigiICAlLTQycyBbJXNdXG4iLCBuYW1lLAorCQkJCXByaW50ZigiICAlLTUwcyBbJXNdXG4iLCBuYW1lLAogCQkJCQlldmVudF90eXBlX2Rlc2NyaXB0b3JzW1BFUkZfVFlQRV9IV19DQUNIRV0pOwogCQkJCSsrcHJpbnRlZDsKIAkJCX0KQEAgLTEwMDksMTQgKzEwMjgsMTYgQEAKIAlyZXR1cm4gcHJpbnRlZDsKIH0KIAorI2RlZmluZSBNQVhfTkFNRV9MRU4gMTAwCisKIC8qCiAgKiBQcmludCB0aGUgaGVscCB0ZXh0IGZvciB0aGUgZXZlbnQgc3ltYm9sczoKICAqLwogdm9pZCBwcmludF9ldmVudHMoY29uc3QgY2hhciAqZXZlbnRfZ2xvYikKIHsKLQlzdHJ1Y3QgZXZlbnRfc3ltYm9sICpzeW1zID0gZXZlbnRfc3ltYm9sczsKIAl1bnNpZ25lZCBpbnQgaSwgdHlwZSwgcHJldl90eXBlID0gLTEsIHByaW50ZWQgPSAwLCBudHlwZXNfcHJpbnRlZCA9IDA7Ci0JY2hhciBuYW1lWzQwXTsKKwlzdHJ1Y3QgZXZlbnRfc3ltYm9sICpzeW1zID0gZXZlbnRfc3ltYm9sczsKKwljaGFyIG5hbWVbTUFYX05BTUVfTEVOXTsKIAogCXByaW50ZigiXG4iKTsKIAlwcmludGYoIkxpc3Qgb2YgcHJlLWRlZmluZWQgZXZlbnRzICh0byBiZSB1c2VkIGluIC1lKTpcbiIpOwpAQCAtMTAzNiwxMCArMTA1NywxMCBAQAogCQkJY29udGludWU7CiAKIAkJaWYgKHN0cmxlbihzeW1zLT5hbGlhcykpCi0JCQlzcHJpbnRmKG5hbWUsICIlcyBPUiAlcyIsIHN5bXMtPnN5bWJvbCwgc3ltcy0+YWxpYXMpOworCQkJc25wcmludGYobmFtZSwgTUFYX05BTUVfTEVOLCAiJXMgT1IgJXMiLCBzeW1zLT5zeW1ib2wsIHN5bXMtPmFsaWFzKTsKIAkJZWxzZQotCQkJc3RyY3B5KG5hbWUsIHN5bXMtPnN5bWJvbCk7Ci0JCXByaW50ZigiICAlLTQycyBbJXNdXG4iLCBuYW1lLAorCQkJc3RybmNweShuYW1lLCBzeW1zLT5zeW1ib2wsIE1BWF9OQU1FX0xFTik7CisJCXByaW50ZigiICAlLTUwcyBbJXNdXG4iLCBuYW1lLAogCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1t0eXBlXSk7CiAKIAkJcHJldl90eXBlID0gdHlwZTsKQEAgLTEwNTYsMTIgKzEwNzcsMTIgQEAKIAkJcmV0dXJuOwogCiAJcHJpbnRmKCJcbiIpOwotCXByaW50ZigiICAlLTQycyBbJXNdXG4iLAorCXByaW50ZigiICAlLTUwcyBbJXNdXG4iLAogCQkick5OTiAoc2VlICdwZXJmIGxpc3QgLS1oZWxwJyBvbiBob3cgdG8gZW5jb2RlIGl0KSIsCiAJICAgICAgIGV2ZW50X3R5cGVfZGVzY3JpcHRvcnNbUEVSRl9UWVBFX1JBV10pOwogCXByaW50ZigiXG4iKTsKIAotCXByaW50ZigiICAlLTQycyBbJXNdXG4iLAorCXByaW50ZigiICAlLTUwcyBbJXNdXG4iLAogCQkJIm1lbTo8YWRkcj5bOmFjY2Vzc10iLAogCQkJZXZlbnRfdHlwZV9kZXNjcmlwdG9yc1tQRVJGX1RZUEVfQlJFQUtQT0lOVF0pOwogCXByaW50ZigiXG4iKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwppbmRleCBiN2M4NWNlLi4zYjlkMGI4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCkBAIC0xNDcxLDYgKzE0NzEsMzggQEAKIAlyZXR1cm4gX3BhcmFtLnJldHZhbDsKIH0KIAorc3RydWN0IHB1Ym5hbWVfY2FsbGJhY2tfcGFyYW0geworCWNoYXIgKmZ1bmN0aW9uOworCWNoYXIgKmZpbGU7CisJRHdhcmZfRGllICpjdV9kaWU7CisJRHdhcmZfRGllICpzcF9kaWU7CisJaW50IGZvdW5kOworfTsKKworc3RhdGljIGludCBwdWJuYW1lX3NlYXJjaF9jYihEd2FyZiAqZGJnLCBEd2FyZl9HbG9iYWwgKmdsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwdWJuYW1lX2NhbGxiYWNrX3BhcmFtICpwYXJhbSA9IGRhdGE7CisKKwlpZiAoZHdhcmZfb2ZmZGllKGRiZywgZ2wtPmRpZV9vZmZzZXQsIHBhcmFtLT5zcF9kaWUpKSB7CisJCWlmIChkd2FyZl90YWcocGFyYW0tPnNwX2RpZSkgIT0gRFdfVEFHX3N1YnByb2dyYW0pCisJCQlyZXR1cm4gRFdBUkZfQ0JfT0s7CisKKwkJaWYgKGRpZV9jb21wYXJlX25hbWUocGFyYW0tPnNwX2RpZSwgcGFyYW0tPmZ1bmN0aW9uKSkgeworCQkJaWYgKCFkd2FyZl9vZmZkaWUoZGJnLCBnbC0+Y3Vfb2Zmc2V0LCBwYXJhbS0+Y3VfZGllKSkKKwkJCQlyZXR1cm4gRFdBUkZfQ0JfT0s7CisKKwkJCWlmIChwYXJhbS0+ZmlsZSAmJgorCQkJICAgIHN0cnRhaWxjbXAocGFyYW0tPmZpbGUsIGR3YXJmX2RlY2xfZmlsZShwYXJhbS0+c3BfZGllKSkpCisJCQkJcmV0dXJuIERXQVJGX0NCX09LOworCisJCQlwYXJhbS0+Zm91bmQgPSAxOworCQkJcmV0dXJuIERXQVJGX0NCX0FCT1JUOworCQl9CisJfQorCisJcmV0dXJuIERXQVJGX0NCX09LOworfQorCiAvKiBGaW5kIHByb2JlIHBvaW50cyBmcm9tIGRlYnVnaW5mbyAqLwogc3RhdGljIGludCBmaW5kX3Byb2JlcyhpbnQgZmQsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewpAQCAtMTQ5OCw2ICsxNTMwLDI4IEBACiAKIAlvZmYgPSAwOwogCWxpbmVfbGlzdF9faW5pdCgmcGYtPmxjYWNoZSk7CisKKwkvKiBGYXN0cGF0aDogbG9va3VwIGJ5IGZ1bmN0aW9uIG5hbWUgZnJvbSAuZGVidWdfcHVibmFtZXMgc2VjdGlvbiAqLworCWlmIChwcC0+ZnVuY3Rpb24pIHsKKwkJc3RydWN0IHB1Ym5hbWVfY2FsbGJhY2tfcGFyYW0gcHVibmFtZV9wYXJhbSA9IHsKKwkJCS5mdW5jdGlvbiA9IHBwLT5mdW5jdGlvbiwKKwkJCS5maWxlCSAgPSBwcC0+ZmlsZSwKKwkJCS5jdV9kaWUJICA9ICZwZi0+Y3VfZGllLAorCQkJLnNwX2RpZQkgID0gJnBmLT5zcF9kaWUsCisJCQkuZm91bmQJICA9IDAsCisJCX07CisJCXN0cnVjdCBkd2FyZl9jYWxsYmFja19wYXJhbSBwcm9iZV9wYXJhbSA9IHsKKwkJCS5kYXRhID0gcGYsCisJCX07CisKKwkJZHdhcmZfZ2V0cHVibmFtZXMoZGJnLCBwdWJuYW1lX3NlYXJjaF9jYiwgJnB1Ym5hbWVfcGFyYW0sIDApOworCQlpZiAocHVibmFtZV9wYXJhbS5mb3VuZCkgeworCQkJcmV0ID0gcHJvYmVfcG9pbnRfc2VhcmNoX2NiKCZwZi0+c3BfZGllLCAmcHJvYmVfcGFyYW0pOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCiAJLyogTG9vcCBvbiBDVXMgKENvbXBpbGF0aW9uIFVuaXQpICovCiAJd2hpbGUgKCFkd2FyZl9uZXh0Y3UoZGJnLCBvZmYsICZub2ZmLCAmY3VobCwgTlVMTCwgTlVMTCwgTlVMTCkpIHsKIAkJLyogR2V0IHRoZSBESUUoRGVidWdnaW5nIEluZm9ybWF0aW9uIEVudHJ5KSBvZiB0aGlzIENVICovCkBAIC0xNTI1LDYgKzE1NzksOCBAQAogCQl9CiAJCW9mZiA9IG5vZmY7CiAJfQorCitmb3VuZDoKIAlsaW5lX2xpc3RfX2ZyZWUoJnBmLT5sY2FjaGUpOwogCWlmIChkd2ZsKQogCQlkd2ZsX2VuZChkd2ZsKTsKQEAgLTE5NDYsNiArMjAwMiwyMiBAQAogCQlyZXR1cm4gLUVCQURGOwogCX0KIAorCS8qIEZhc3RwYXRoOiBsb29rdXAgYnkgZnVuY3Rpb24gbmFtZSBmcm9tIC5kZWJ1Z19wdWJuYW1lcyBzZWN0aW9uICovCisJaWYgKGxyLT5mdW5jdGlvbikgeworCQlzdHJ1Y3QgcHVibmFtZV9jYWxsYmFja19wYXJhbSBwdWJuYW1lX3BhcmFtID0geworCQkJLmZ1bmN0aW9uID0gbHItPmZ1bmN0aW9uLCAuZmlsZSA9IGxyLT5maWxlLAorCQkJLmN1X2RpZSA9ICZsZi5jdV9kaWUsIC5zcF9kaWUgPSAmbGYuc3BfZGllLCAuZm91bmQgPSAwfTsKKwkJc3RydWN0IGR3YXJmX2NhbGxiYWNrX3BhcmFtIGxpbmVfcmFuZ2VfcGFyYW0gPSB7CisJCQkuZGF0YSA9ICh2b2lkICopJmxmLCAucmV0dmFsID0gMH07CisKKwkJZHdhcmZfZ2V0cHVibmFtZXMoZGJnLCBwdWJuYW1lX3NlYXJjaF9jYiwgJnB1Ym5hbWVfcGFyYW0sIDApOworCQlpZiAocHVibmFtZV9wYXJhbS5mb3VuZCkgeworCQkJbGluZV9yYW5nZV9zZWFyY2hfY2IoJmxmLnNwX2RpZSwgJmxpbmVfcmFuZ2VfcGFyYW0pOworCQkJaWYgKGxmLmZvdW5kKQorCQkJCWdvdG8gZm91bmQ7CisJCX0KKwl9CisKIAkvKiBMb29wIG9uIENVcyAoQ29tcGlsYXRpb24gVW5pdCkgKi8KIAl3aGlsZSAoIWxmLmZvdW5kICYmIHJldCA+PSAwKSB7CiAJCWlmIChkd2FyZl9uZXh0Y3UoZGJnLCBvZmYsICZub2ZmLCAmY3VobCwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkKQEAgLTE5NzQsNiArMjA0Niw3IEBACiAJCW9mZiA9IG5vZmY7CiAJfQogCitmb3VuZDoKIAkvKiBTdG9yZSBjb21wX2RpciAqLwogCWlmIChsZi5mb3VuZCkgewogCQljb21wX2RpciA9IGN1X2dldF9jb21wX2RpcigmbGYuY3VfZGllKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaCBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaAppbmRleCBiZWFlZmMzLi42MDU3MzBhIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCkBAIC00OSw2ICs0OSw3IEBACiAJRHdhcmZfQWRkcgkJYWRkcjsJCS8qIEFkZHJlc3MgKi8KIAljb25zdCBjaGFyCQkqZm5hbWU7CQkvKiBSZWFsIGZpbGUgbmFtZSAqLwogCUR3YXJmX0RpZQkJY3VfZGllOwkJLyogQ3VycmVudCBDVSAqLworCUR3YXJmX0RpZQkJc3BfZGllOwogCXN0cnVjdCBsaXN0X2hlYWQJbGNhY2hlOwkJLyogTGluZSBjYWNoZSBmb3IgbGF6eSBtYXRjaCAqLwogCiAJLyogRm9yIHZhcmlhYmxlIHNlYXJjaGluZyAqLwpAQCAtODMsNiArODQsNyBAQAogCWludAkJCWxub19zOwkJLyogU3RhcnQgbGluZSBudW1iZXIgKi8KIAlpbnQJCQlsbm9fZTsJCS8qIEVuZCBsaW5lIG51bWJlciAqLwogCUR3YXJmX0RpZQkJY3VfZGllOwkJLyogQ3VycmVudCBDVSAqLworCUR3YXJmX0RpZQkJc3BfZGllOwogCWludAkJCWZvdW5kOwogfTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jIGIvdG9vbHMvcGVyZi91dGlsL3B5dGhvbi5jCmluZGV4IGE5ZjJkN2UuLmI1YzdkODEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9weXRob24uYworKysgYi90b29scy9wZXJmL3V0aWwvcHl0aG9uLmMKQEAgLTQ5OCwxMSArNDk4LDExIEBACiAJc3RydWN0IGNwdV9tYXAgKmNwdXMgPSBOVUxMOwogCXN0cnVjdCB0aHJlYWRfbWFwICp0aHJlYWRzID0gTlVMTDsKIAlQeU9iamVjdCAqcGNwdXMgPSBOVUxMLCAqcHRocmVhZHMgPSBOVUxMOwotCWludCBncm91cCA9IDAsIG92ZXJ3cml0ZSA9IDA7Ci0Jc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJjcHVzIiwgInRocmVhZHMiLCAiZ3JvdXAiLCAib3ZlcndyaXRlIiwgTlVMTCwgTlVMTH07CisJaW50IGdyb3VwID0gMCwgaW5oZXJpdCA9IDA7CisJc3RhdGljIGNoYXIgKmt3bGlzdFtdID0geyJjcHVzIiwgInRocmVhZHMiLCAiZ3JvdXAiLCAiaW5oZXJpdCIsIE5VTEwsIE5VTEx9OwogCiAJaWYgKCFQeUFyZ19QYXJzZVR1cGxlQW5kS2V5d29yZHMoYXJncywga3dhcmdzLCAifE9PaWkiLCBrd2xpc3QsCi0JCQkJCSAmcGNwdXMsICZwdGhyZWFkcywgJmdyb3VwLCAmb3ZlcndyaXRlKSkKKwkJCQkJICZwY3B1cywgJnB0aHJlYWRzLCAmZ3JvdXAsICZpbmhlcml0KSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlpZiAocHRocmVhZHMgIT0gTlVMTCkKQEAgLTUxMSw3ICs1MTEsOCBAQAogCWlmIChwY3B1cyAhPSBOVUxMKQogCQljcHVzID0gKChzdHJ1Y3QgcHlyZl9jcHVfbWFwICopcGNwdXMpLT5jcHVzOwogCi0JaWYgKHBlcmZfZXZzZWxfX29wZW4oZXZzZWwsIGNwdXMsIHRocmVhZHMsIGdyb3VwLCBvdmVyd3JpdGUpIDwgMCkgeworCWV2c2VsLT5hdHRyLmluaGVyaXQgPSBpbmhlcml0OworCWlmIChwZXJmX2V2c2VsX19vcGVuKGV2c2VsLCBjcHVzLCB0aHJlYWRzLCBncm91cCkgPCAwKSB7CiAJCVB5RXJyX1NldEZyb21FcnJubyhQeUV4Y19PU0Vycm9yKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQpAQCAtNjc5LDcgKzY4MCw3IEBACiAJCQkJCSAmY3B1LCAmc2FtcGxlX2lkX2FsbCkpCiAJCXJldHVybiBOVUxMOwogCi0JZXZlbnQgPSBwZXJmX2V2bGlzdF9fcmVhZF9vbl9jcHUoZXZsaXN0LCBjcHUpOworCWV2ZW50ID0gcGVyZl9ldmxpc3RfX21tYXBfcmVhZChldmxpc3QsIGNwdSk7CiAJaWYgKGV2ZW50ICE9IE5VTEwpIHsKIAkJc3RydWN0IHBlcmZfZXZzZWwgKmZpcnN0OwogCQlQeU9iamVjdCAqcHlldmVudCA9IHB5cmZfZXZlbnRfX25ldyhldmVudCk7CkBAIC04MDksNiArODEwLDkgQEAKIAl7ICJDT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTIiwgUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfQUNDRVNTIH0sCiAJeyAiQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MiLCAgIFBFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01JU1MgfSwKIAorCXsgIkNPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0ZST05URU5EIiwJICBQRVJGX0NPVU5UX0hXX1NUQUxMRURfQ1lDTEVTX0ZST05URU5EIH0sCisJeyAiQ09VTlRfSFdfU1RBTExFRF9DWUNMRVNfQkFDS0VORCIsCSAgUEVSRl9DT1VOVF9IV19TVEFMTEVEX0NZQ0xFU19CQUNLRU5EIH0sCisKIAl7ICJDT1VOVF9TV19DUFVfQ0xPQ0siLAkgICAgICAgUEVSRl9DT1VOVF9TV19DUFVfQ0xPQ0sgfSwKIAl7ICJDT1VOVF9TV19UQVNLX0NMT0NLIiwgICAgICAgUEVSRl9DT1VOVF9TV19UQVNLX0NMT0NLIH0sCiAJeyAiQ09VTlRfU1dfUEFHRV9GQVVMVFMiLCAgICAgIFBFUkZfQ09VTlRfU1dfUEFHRV9GQVVMVFMgfSwKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMgYi90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5jCmluZGV4IGNhYTIyNDUuLmZmZjY2NzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uYwpAQCAtMTE1Niw2ICsxMTU2LDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IHBlcmZfZXZzZWwgKnBlcmZfc2Vzc2lvbl9fZmluZF9maXJzdF9ldnR5cGUoc3RydWN0IHBlcmZfc2Vzc2lvbiAqc2Vzc2lvbiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IHBlcmZfZXZzZWwgKnBvczsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmc2Vzc2lvbi0+ZXZsaXN0LT5lbnRyaWVzLCBub2RlKSB7CisJCWlmIChwb3MtPmF0dHIudHlwZSA9PSB0eXBlKQorCQkJcmV0dXJuIHBvczsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKIHZvaWQgcGVyZl9zZXNzaW9uX19wcmludF9zeW1ib2xzKHVuaW9uIHBlcmZfZXZlbnQgKmV2ZW50LAogCQkJCXN0cnVjdCBwZXJmX3NhbXBsZSAqc2FtcGxlLAogCQkJCXN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oIGIvdG9vbHMvcGVyZi91dGlsL3Nlc3Npb24uaAppbmRleCAxYWM0ODFmLi44ZGFhYTJkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc2Vzc2lvbi5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zZXNzaW9uLmgKQEAgLTE2Miw2ICsxNjIsOSBAQAogCQkJCQlzZXNzaW9uLT5zYW1wbGVfaWRfYWxsLCBzYW1wbGUpOwogfQogCitzdHJ1Y3QgcGVyZl9ldnNlbCAqcGVyZl9zZXNzaW9uX19maW5kX2ZpcnN0X2V2dHlwZShzdHJ1Y3QgcGVyZl9zZXNzaW9uICpzZXNzaW9uLAorCQkJCQkgICAgdW5zaWduZWQgaW50IHR5cGUpOworCiB2b2lkIHBlcmZfc2Vzc2lvbl9fcHJpbnRfc3ltYm9scyh1bmlvbiBwZXJmX2V2ZW50ICpldmVudCwKIAkJCQkgc3RydWN0IHBlcmZfc2FtcGxlICpzYW1wbGUsCiAJCQkJIHN0cnVjdCBwZXJmX3Nlc3Npb24gKnNlc3Npb24pOwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jIGIvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5jCmluZGV4IGYwNmMxMGYuLjUxNjg3NmQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuYworKysgYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmMKQEAgLTMxLDEzICszMSwxMyBAQAogI2RlZmluZSBOVF9HTlVfQlVJTERfSUQgMwogI2VuZGlmCiAKLXN0YXRpYyBib29sIGRzb19fYnVpbGRfaWRfZXF1YWwoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgdTggKmJ1aWxkX2lkKTsKK3N0YXRpYyBib29sIGRzb19fYnVpbGRfaWRfZXF1YWwoY29uc3Qgc3RydWN0IGRzbyAqZHNvLCB1OCAqYnVpbGRfaWQpOwogc3RhdGljIGludCBlbGZfcmVhZF9idWlsZF9pZChFbGYgKmVsZiwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKIHN0YXRpYyB2b2lkIGRzb3NfX2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBzdHJ1Y3QgZHNvICpkc28pOwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKTsKLXN0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAorc3RhdGljIGludCBkc29fX2xvYWRfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKIAkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLXN0YXRpYyBpbnQgZHNvX19sb2FkX2d1ZXN0X2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAorc3RhdGljIGludCBkc29fX2xvYWRfZ3Vlc3Rfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKIAkJCXN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwogc3RhdGljIGludCB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXM7CiBzdGF0aWMgY2hhciAqKnZtbGludXhfcGF0aDsKQEAgLTQ5LDI3ICs0OSwyNyBAQAogCS5zeW1mcyAgICAgICAgICAgID0gIiIsCiB9OwogCi1pbnQgZHNvX19uYW1lX2xlbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKQoraW50IGRzb19fbmFtZV9sZW4oY29uc3Qgc3RydWN0IGRzbyAqZHNvKQogewogCWlmICh2ZXJib3NlKQotCQlyZXR1cm4gc2VsZi0+bG9uZ19uYW1lX2xlbjsKKwkJcmV0dXJuIGRzby0+bG9uZ19uYW1lX2xlbjsKIAotCXJldHVybiBzZWxmLT5zaG9ydF9uYW1lX2xlbjsKKwlyZXR1cm4gZHNvLT5zaG9ydF9uYW1lX2xlbjsKIH0KIAotYm9vbCBkc29fX2xvYWRlZChjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCitib29sIGRzb19fbG9hZGVkKGNvbnN0IHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKQogewotCXJldHVybiBzZWxmLT5sb2FkZWQgJiAoMSA8PCB0eXBlKTsKKwlyZXR1cm4gZHNvLT5sb2FkZWQgJiAoMSA8PCB0eXBlKTsKIH0KIAotYm9vbCBkc29fX3NvcnRlZF9ieV9uYW1lKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK2Jvb2wgZHNvX19zb3J0ZWRfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKLQlyZXR1cm4gc2VsZi0+c29ydGVkX2J5X25hbWUgJiAoMSA8PCB0eXBlKTsKKwlyZXR1cm4gZHNvLT5zb3J0ZWRfYnlfbmFtZSAmICgxIDw8IHR5cGUpOwogfQogCi1zdGF0aWMgdm9pZCBkc29fX3NldF9zb3J0ZWRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCitzdGF0aWMgdm9pZCBkc29fX3NldF9zb3J0ZWRfYnlfbmFtZShzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKLQlzZWxmLT5zb3J0ZWRfYnlfbmFtZSB8PSAoMSA8PCB0eXBlKTsKKwlkc28tPnNvcnRlZF9ieV9uYW1lIHw9ICgxIDw8IHR5cGUpOwogfQogCiBib29sIHN5bWJvbF90eXBlX19pc19hKGNoYXIgc3ltYm9sX3R5cGUsIGVudW0gbWFwX3R5cGUgbWFwX3R5cGUpCkBAIC04NCw5ICs4NCw5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzeW1ib2xzX19maXh1cF9lbmQoc3RydWN0IHJiX3Jvb3QgKnNlbGYpCitzdGF0aWMgdm9pZCBzeW1ib2xzX19maXh1cF9lbmQoc3RydWN0IHJiX3Jvb3QgKnN5bWJvbHMpCiB7Ci0Jc3RydWN0IHJiX25vZGUgKm5kLCAqcHJldm5kID0gcmJfZmlyc3Qoc2VsZik7CisJc3RydWN0IHJiX25vZGUgKm5kLCAqcHJldm5kID0gcmJfZmlyc3Qoc3ltYm9scyk7CiAJc3RydWN0IHN5bWJvbCAqY3VyciwgKnByZXY7CiAKIAlpZiAocHJldm5kID09IE5VTEwpCkBAIC0xMDcsMTAgKzEwNywxMCBAQAogCQljdXJyLT5lbmQgPSByb3VuZHVwKGN1cnItPnN0YXJ0LCA0MDk2KTsKIH0KIAotc3RhdGljIHZvaWQgX19tYXBfZ3JvdXBzX19maXh1cF9lbmQoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK3N0YXRpYyB2b2lkIF9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKHN0cnVjdCBtYXBfZ3JvdXBzICptZywgZW51bSBtYXBfdHlwZSB0eXBlKQogewogCXN0cnVjdCBtYXAgKnByZXYsICpjdXJyOwotCXN0cnVjdCByYl9ub2RlICpuZCwgKnByZXZuZCA9IHJiX2ZpcnN0KCZzZWxmLT5tYXBzW3R5cGVdKTsKKwlzdHJ1Y3QgcmJfbm9kZSAqbmQsICpwcmV2bmQgPSByYl9maXJzdCgmbWctPm1hcHNbdHlwZV0pOwogCiAJaWYgKHByZXZuZCA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xMzAsMTI4ICsxMzAsMTI4IEBACiAJY3Vyci0+ZW5kID0gfjBVTEw7CiB9CiAKLXN0YXRpYyB2b2lkIG1hcF9ncm91cHNfX2ZpeHVwX2VuZChzdHJ1Y3QgbWFwX2dyb3VwcyAqc2VsZikKK3N0YXRpYyB2b2lkIG1hcF9ncm91cHNfX2ZpeHVwX2VuZChzdHJ1Y3QgbWFwX2dyb3VwcyAqbWcpCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKLQkJX19tYXBfZ3JvdXBzX19maXh1cF9lbmQoc2VsZiwgaSk7CisJCV9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKG1nLCBpKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bWJvbF9fbmV3KHU2NCBzdGFydCwgdTY0IGxlbiwgdTggYmluZGluZywKIAkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4obmFtZSkgKyAxOwotCXN0cnVjdCBzeW1ib2wgKnNlbGYgPSBjYWxsb2MoMSwgKHN5bWJvbF9jb25mLnByaXZfc2l6ZSArCi0JCQkJCSBzaXplb2YoKnNlbGYpICsgbmFtZWxlbikpOwotCWlmIChzZWxmID09IE5VTEwpCisJc3RydWN0IHN5bWJvbCAqc3ltID0gY2FsbG9jKDEsIChzeW1ib2xfY29uZi5wcml2X3NpemUgKworCQkJCQlzaXplb2YoKnN5bSkgKyBuYW1lbGVuKSk7CisJaWYgKHN5bSA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAogCWlmIChzeW1ib2xfY29uZi5wcml2X3NpemUpCi0JCXNlbGYgPSAoKHZvaWQgKilzZWxmKSArIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKKwkJc3ltID0gKCh2b2lkICopc3ltKSArIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKIAotCXNlbGYtPnN0YXJ0ICAgPSBzdGFydDsKLQlzZWxmLT5lbmQgICAgID0gbGVuID8gc3RhcnQgKyBsZW4gLSAxIDogc3RhcnQ7Ci0Jc2VsZi0+YmluZGluZyA9IGJpbmRpbmc7Ci0Jc2VsZi0+bmFtZWxlbiA9IG5hbWVsZW4gLSAxOworCXN5bS0+c3RhcnQgICA9IHN0YXJ0OworCXN5bS0+ZW5kICAgICA9IGxlbiA/IHN0YXJ0ICsgbGVuIC0gMSA6IHN0YXJ0OworCXN5bS0+YmluZGluZyA9IGJpbmRpbmc7CisJc3ltLT5uYW1lbGVuID0gbmFtZWxlbiAtIDE7CiAKLQlwcl9kZWJ1ZzQoIiVzOiAlcyAlIyIgUFJJeDY0ICItJSMiIFBSSXg2NCAiXG4iLCBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHNlbGYtPmVuZCk7CisJcHJfZGVidWc0KCIlczogJXMgJSMiIFBSSXg2NCAiLSUjIiBQUkl4NjQgIlxuIiwKKwkJICBfX2Z1bmNfXywgbmFtZSwgc3RhcnQsIHN5bS0+ZW5kKTsKKwltZW1jcHkoc3ltLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKIAotCW1lbWNweShzZWxmLT5uYW1lLCBuYW1lLCBuYW1lbGVuKTsKLQotCXJldHVybiBzZWxmOworCXJldHVybiBzeW07CiB9CiAKLXZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc2VsZikKK3ZvaWQgc3ltYm9sX19kZWxldGUoc3RydWN0IHN5bWJvbCAqc3ltKQogewotCWZyZWUoKCh2b2lkICopc2VsZikgLSBzeW1ib2xfY29uZi5wcml2X3NpemUpOworCWZyZWUoKCh2b2lkICopc3ltKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZSk7CiB9CiAKLXN0YXRpYyBzaXplX3Qgc3ltYm9sX19mcHJpbnRmKHN0cnVjdCBzeW1ib2wgKnNlbGYsIEZJTEUgKmZwKQorc3RhdGljIHNpemVfdCBzeW1ib2xfX2ZwcmludGYoc3RydWN0IHN5bWJvbCAqc3ltLCBGSUxFICpmcCkKIHsKIAlyZXR1cm4gZnByaW50ZihmcCwgIiAlIiBQUkl4NjQgIi0lIiBQUkl4NjQgIiAlYyAlc1xuIiwKLQkJICAgICAgIHNlbGYtPnN0YXJ0LCBzZWxmLT5lbmQsCi0JCSAgICAgICBzZWxmLT5iaW5kaW5nID09IFNUQl9HTE9CQUwgPyAnZycgOgotCQkgICAgICAgc2VsZi0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnLAotCQkgICAgICAgc2VsZi0+bmFtZSk7CisJCSAgICAgICBzeW0tPnN0YXJ0LCBzeW0tPmVuZCwKKwkJICAgICAgIHN5bS0+YmluZGluZyA9PSBTVEJfR0xPQkFMID8gJ2cnIDoKKwkJICAgICAgIHN5bS0+YmluZGluZyA9PSBTVEJfTE9DQUwgID8gJ2wnIDogJ3cnLAorCQkgICAgICAgc3ltLT5uYW1lKTsKIH0KIAotdm9pZCBkc29fX3NldF9sb25nX25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqbmFtZSkKK3ZvaWQgZHNvX19zZXRfbG9uZ19uYW1lKHN0cnVjdCBkc28gKmRzbywgY2hhciAqbmFtZSkKIHsKIAlpZiAobmFtZSA9PSBOVUxMKQogCQlyZXR1cm47Ci0Jc2VsZi0+bG9uZ19uYW1lID0gbmFtZTsKLQlzZWxmLT5sb25nX25hbWVfbGVuID0gc3RybGVuKG5hbWUpOworCWRzby0+bG9uZ19uYW1lID0gbmFtZTsKKwlkc28tPmxvbmdfbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzb19fc2V0X3Nob3J0X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkIGRzb19fc2V0X3Nob3J0X25hbWUoc3RydWN0IGRzbyAqZHNvLCBjb25zdCBjaGFyICpuYW1lKQogewogCWlmIChuYW1lID09IE5VTEwpCiAJCXJldHVybjsKLQlzZWxmLT5zaG9ydF9uYW1lID0gbmFtZTsKLQlzZWxmLT5zaG9ydF9uYW1lX2xlbiA9IHN0cmxlbihuYW1lKTsKKwlkc28tPnNob3J0X25hbWUgPSBuYW1lOworCWRzby0+c2hvcnRfbmFtZV9sZW4gPSBzdHJsZW4obmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzb19fc2V0X2Jhc2VuYW1lKHN0cnVjdCBkc28gKnNlbGYpCitzdGF0aWMgdm9pZCBkc29fX3NldF9iYXNlbmFtZShzdHJ1Y3QgZHNvICpkc28pCiB7Ci0JZHNvX19zZXRfc2hvcnRfbmFtZShzZWxmLCBiYXNlbmFtZShzZWxmLT5sb25nX25hbWUpKTsKKwlkc29fX3NldF9zaG9ydF9uYW1lKGRzbywgYmFzZW5hbWUoZHNvLT5sb25nX25hbWUpKTsKIH0KIAogc3RydWN0IGRzbyAqZHNvX19uZXcoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICpzZWxmID0gY2FsbG9jKDEsIHNpemVvZigqc2VsZikgKyBzdHJsZW4obmFtZSkgKyAxKTsKKwlzdHJ1Y3QgZHNvICpkc28gPSBjYWxsb2MoMSwgc2l6ZW9mKCpkc28pICsgc3RybGVuKG5hbWUpICsgMSk7CiAKLQlpZiAoc2VsZiAhPSBOVUxMKSB7CisJaWYgKGRzbyAhPSBOVUxMKSB7CiAJCWludCBpOwotCQlzdHJjcHkoc2VsZi0+bmFtZSwgbmFtZSk7Ci0JCWRzb19fc2V0X2xvbmdfbmFtZShzZWxmLCBzZWxmLT5uYW1lKTsKLQkJZHNvX19zZXRfc2hvcnRfbmFtZShzZWxmLCBzZWxmLT5uYW1lKTsKKwkJc3RyY3B5KGRzby0+bmFtZSwgbmFtZSk7CisJCWRzb19fc2V0X2xvbmdfbmFtZShkc28sIGRzby0+bmFtZSk7CisJCWRzb19fc2V0X3Nob3J0X25hbWUoZHNvLCBkc28tPm5hbWUpOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFQX19OUl9UWVBFUzsgKytpKQotCQkJc2VsZi0+c3ltYm9sc1tpXSA9IHNlbGYtPnN5bWJvbF9uYW1lc1tpXSA9IFJCX1JPT1Q7Ci0JCXNlbGYtPnN5bXRhYl90eXBlID0gU1lNVEFCX19OT1RfRk9VTkQ7Ci0JCXNlbGYtPmxvYWRlZCA9IDA7Ci0JCXNlbGYtPnNvcnRlZF9ieV9uYW1lID0gMDsKLQkJc2VsZi0+aGFzX2J1aWxkX2lkID0gMDsKLQkJc2VsZi0+a2VybmVsID0gRFNPX1RZUEVfVVNFUjsKLQkJSU5JVF9MSVNUX0hFQUQoJnNlbGYtPm5vZGUpOworCQkJZHNvLT5zeW1ib2xzW2ldID0gZHNvLT5zeW1ib2xfbmFtZXNbaV0gPSBSQl9ST09UOworCQlkc28tPnN5bXRhYl90eXBlID0gU1lNVEFCX19OT1RfRk9VTkQ7CisJCWRzby0+bG9hZGVkID0gMDsKKwkJZHNvLT5zb3J0ZWRfYnlfbmFtZSA9IDA7CisJCWRzby0+aGFzX2J1aWxkX2lkID0gMDsKKwkJZHNvLT5rZXJuZWwgPSBEU09fVFlQRV9VU0VSOworCQlJTklUX0xJU1RfSEVBRCgmZHNvLT5ub2RlKTsKIAl9CiAKLQlyZXR1cm4gc2VsZjsKKwlyZXR1cm4gZHNvOwogfQogCi1zdGF0aWMgdm9pZCBzeW1ib2xzX19kZWxldGUoc3RydWN0IHJiX3Jvb3QgKnNlbGYpCitzdGF0aWMgdm9pZCBzeW1ib2xzX19kZWxldGUoc3RydWN0IHJiX3Jvb3QgKnN5bWJvbHMpCiB7CiAJc3RydWN0IHN5bWJvbCAqcG9zOwotCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfZmlyc3Qoc2VsZik7CisJc3RydWN0IHJiX25vZGUgKm5leHQgPSByYl9maXJzdChzeW1ib2xzKTsKIAogCXdoaWxlIChuZXh0KSB7CiAJCXBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwogCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKLQkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgc2VsZik7CisJCXJiX2VyYXNlKCZwb3MtPnJiX25vZGUsIHN5bWJvbHMpOwogCQlzeW1ib2xfX2RlbGV0ZShwb3MpOwogCX0KIH0KIAotdm9pZCBkc29fX2RlbGV0ZShzdHJ1Y3QgZHNvICpzZWxmKQordm9pZCBkc29fX2RlbGV0ZShzdHJ1Y3QgZHNvICpkc28pCiB7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IE1BUF9fTlJfVFlQRVM7ICsraSkKLQkJc3ltYm9sc19fZGVsZXRlKCZzZWxmLT5zeW1ib2xzW2ldKTsKLQlpZiAoc2VsZi0+c25hbWVfYWxsb2MpCi0JCWZyZWUoKGNoYXIgKilzZWxmLT5zaG9ydF9uYW1lKTsKLQlpZiAoc2VsZi0+bG5hbWVfYWxsb2MpCi0JCWZyZWUoc2VsZi0+bG9uZ19uYW1lKTsKLQlmcmVlKHNlbGYpOworCQlzeW1ib2xzX19kZWxldGUoJmRzby0+c3ltYm9sc1tpXSk7CisJaWYgKGRzby0+c25hbWVfYWxsb2MpCisJCWZyZWUoKGNoYXIgKilkc28tPnNob3J0X25hbWUpOworCWlmIChkc28tPmxuYW1lX2FsbG9jKQorCQlmcmVlKGRzby0+bG9uZ19uYW1lKTsKKwlmcmVlKGRzbyk7CiB9CiAKLXZvaWQgZHNvX19zZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZiwgdm9pZCAqYnVpbGRfaWQpCit2b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKmRzbywgdm9pZCAqYnVpbGRfaWQpCiB7Ci0JbWVtY3B5KHNlbGYtPmJ1aWxkX2lkLCBidWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSk7Ci0Jc2VsZi0+aGFzX2J1aWxkX2lkID0gMTsKKwltZW1jcHkoZHNvLT5idWlsZF9pZCwgYnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSk7CisJZHNvLT5oYXNfYnVpbGRfaWQgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBzeW1ib2xzX19pbnNlcnQoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3N0YXRpYyB2b2lkIHN5bWJvbHNfX2luc2VydChzdHJ1Y3QgcmJfcm9vdCAqc3ltYm9scywgc3RydWN0IHN5bWJvbCAqc3ltKQogewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZzZWxmLT5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICoqcCA9ICZzeW1ib2xzLT5yYl9ub2RlOwogCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwogCWNvbnN0IHU2NCBpcCA9IHN5bS0+c3RhcnQ7CiAJc3RydWN0IHN5bWJvbCAqczsKQEAgLTI2NSwxNyArMjY1LDE3IEBACiAJCQlwID0gJigqcCktPnJiX3JpZ2h0OwogCX0KIAlyYl9saW5rX25vZGUoJnN5bS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKLQlyYl9pbnNlcnRfY29sb3IoJnN5bS0+cmJfbm9kZSwgc2VsZik7CisJcmJfaW5zZXJ0X2NvbG9yKCZzeW0tPnJiX25vZGUsIHN5bWJvbHMpOwogfQogCi1zdGF0aWMgc3RydWN0IHN5bWJvbCAqc3ltYm9sc19fZmluZChzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgdTY0IGlwKQorc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bWJvbHNfX2ZpbmQoc3RydWN0IHJiX3Jvb3QgKnN5bWJvbHMsIHU2NCBpcCkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbjsKIAotCWlmIChzZWxmID09IE5VTEwpCisJaWYgKHN5bWJvbHMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAKLQluID0gc2VsZi0+cmJfbm9kZTsKKwluID0gc3ltYm9scy0+cmJfbm9kZTsKIAogCXdoaWxlIChuKSB7CiAJCXN0cnVjdCBzeW1ib2wgKnMgPSByYl9lbnRyeShuLCBzdHJ1Y3Qgc3ltYm9sLCByYl9ub2RlKTsKQEAgLTI5Niw5ICsyOTYsOSBAQAogCXN0cnVjdCBzeW1ib2wJc3ltOwogfTsKIAotc3RhdGljIHZvaWQgc3ltYm9sc19faW5zZXJ0X2J5X25hbWUoc3RydWN0IHJiX3Jvb3QgKnNlbGYsIHN0cnVjdCBzeW1ib2wgKnN5bSkKK3N0YXRpYyB2b2lkIHN5bWJvbHNfX2luc2VydF9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpzeW1ib2xzLCBzdHJ1Y3Qgc3ltYm9sICpzeW0pCiB7Ci0Jc3RydWN0IHJiX25vZGUgKipwID0gJnNlbGYtPnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnN5bWJvbHMtPnJiX25vZGU7CiAJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CiAJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnN5bW4sICpzOwogCkBAIC0zMTMsMjcgKzMxMywyOSBAQAogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKIAl9CiAJcmJfbGlua19ub2RlKCZzeW1uLT5yYl9ub2RlLCBwYXJlbnQsIHApOwotCXJiX2luc2VydF9jb2xvcigmc3ltbi0+cmJfbm9kZSwgc2VsZik7CisJcmJfaW5zZXJ0X2NvbG9yKCZzeW1uLT5yYl9ub2RlLCBzeW1ib2xzKTsKIH0KIAotc3RhdGljIHZvaWQgc3ltYm9sc19fc29ydF9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpzZWxmLCBzdHJ1Y3QgcmJfcm9vdCAqc291cmNlKQorc3RhdGljIHZvaWQgc3ltYm9sc19fc29ydF9ieV9uYW1lKHN0cnVjdCByYl9yb290ICpzeW1ib2xzLAorCQkJCSAgc3RydWN0IHJiX3Jvb3QgKnNvdXJjZSkKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAKIAlmb3IgKG5kID0gcmJfZmlyc3Qoc291cmNlKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IHN5bWJvbCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwotCQlzeW1ib2xzX19pbnNlcnRfYnlfbmFtZShzZWxmLCBwb3MpOworCQlzeW1ib2xzX19pbnNlcnRfYnlfbmFtZShzeW1ib2xzLCBwb3MpOwogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBzeW1ib2wgKnN5bWJvbHNfX2ZpbmRfYnlfbmFtZShzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3Qgc3ltYm9sICpzeW1ib2xzX19maW5kX2J5X25hbWUoc3RydWN0IHJiX3Jvb3QgKnN5bWJvbHMsCisJCQkJCSAgICBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByYl9ub2RlICpuOwogCi0JaWYgKHNlbGYgPT0gTlVMTCkKKwlpZiAoc3ltYm9scyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCW4gPSBzZWxmLT5yYl9ub2RlOworCW4gPSBzeW1ib2xzLT5yYl9ub2RlOwogCiAJd2hpbGUgKG4pIHsKIAkJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnM7CkBAIC0zNTMsMjkgKzM1NSwyOSBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKnNlbGYsCitzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKmRzbywKIAkJCQllbnVtIG1hcF90eXBlIHR5cGUsIHU2NCBhZGRyKQogewotCXJldHVybiBzeW1ib2xzX19maW5kKCZzZWxmLT5zeW1ib2xzW3R5cGVdLCBhZGRyKTsKKwlyZXR1cm4gc3ltYm9sc19fZmluZCgmZHNvLT5zeW1ib2xzW3R5cGVdLCBhZGRyKTsKIH0KIAotc3RydWN0IHN5bWJvbCAqZHNvX19maW5kX3N5bWJvbF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwKK3N0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSkKIHsKLQlyZXR1cm4gc3ltYm9sc19fZmluZF9ieV9uYW1lKCZzZWxmLT5zeW1ib2xfbmFtZXNbdHlwZV0sIG5hbWUpOworCXJldHVybiBzeW1ib2xzX19maW5kX2J5X25hbWUoJmRzby0+c3ltYm9sX25hbWVzW3R5cGVdLCBuYW1lKTsKIH0KIAotdm9pZCBkc29fX3NvcnRfYnlfbmFtZShzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCit2b2lkIGRzb19fc29ydF9ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKQogewotCWRzb19fc2V0X3NvcnRlZF9ieV9uYW1lKHNlbGYsIHR5cGUpOwotCXJldHVybiBzeW1ib2xzX19zb3J0X2J5X25hbWUoJnNlbGYtPnN5bWJvbF9uYW1lc1t0eXBlXSwKLQkJCQkgICAgICZzZWxmLT5zeW1ib2xzW3R5cGVdKTsKKwlkc29fX3NldF9zb3J0ZWRfYnlfbmFtZShkc28sIHR5cGUpOworCXJldHVybiBzeW1ib2xzX19zb3J0X2J5X25hbWUoJmRzby0+c3ltYm9sX25hbWVzW3R5cGVdLAorCQkJCSAgICAgJmRzby0+c3ltYm9sc1t0eXBlXSk7CiB9CiAKLWludCBidWlsZF9pZF9fc3ByaW50Zihjb25zdCB1OCAqc2VsZiwgaW50IGxlbiwgY2hhciAqYmYpCitpbnQgYnVpbGRfaWRfX3NwcmludGYoY29uc3QgdTggKmJ1aWxkX2lkLCBpbnQgbGVuLCBjaGFyICpiZikKIHsKIAljaGFyICpiaWQgPSBiZjsKLQljb25zdCB1OCAqcmF3ID0gc2VsZjsKKwljb25zdCB1OCAqcmF3ID0gYnVpbGRfaWQ7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKQEAgLTM4NCwyNCArMzg2LDI1IEBACiAJCWJpZCArPSAyOwogCX0KIAotCXJldHVybiByYXcgLSBzZWxmOworCXJldHVybiByYXcgLSBidWlsZF9pZDsKIH0KIAotc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKnNlbGYsIEZJTEUgKmZwKQorc2l6ZV90IGRzb19fZnByaW50Zl9idWlsZGlkKHN0cnVjdCBkc28gKmRzbywgRklMRSAqZnApCiB7CiAJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKIAotCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLCBzaXplb2Yoc2VsZi0+YnVpbGRfaWQpLCBzYnVpbGRfaWQpOworCWJ1aWxkX2lkX19zcHJpbnRmKGRzby0+YnVpbGRfaWQsIHNpemVvZihkc28tPmJ1aWxkX2lkKSwgc2J1aWxkX2lkKTsKIAlyZXR1cm4gZnByaW50ZihmcCwgIiVzIiwgc2J1aWxkX2lkKTsKIH0KIAotc2l6ZV90IGRzb19fZnByaW50Zl9zeW1ib2xzX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCkKK3NpemVfdCBkc29fX2ZwcmludGZfc3ltYm9sc19ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywKKwkJCQkgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCkKIHsKIAlzaXplX3QgcmV0ID0gMDsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmQ7CiAJc3RydWN0IHN5bWJvbF9uYW1lX3JiX25vZGUgKnBvczsKIAotCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+c3ltYm9sX25hbWVzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QoJmRzby0+c3ltYm9sX25hbWVzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2xfbmFtZV9yYl9ub2RlLCByYl9ub2RlKTsKIAkJZnByaW50ZihmcCwgIiVzXG4iLCBwb3MtPnN5bS5uYW1lKTsKIAl9CkBAIC00MDksMTggKzQxMiwxOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXNpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCkKK3NpemVfdCBkc29fX2ZwcmludGYoc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUsIEZJTEUgKmZwKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKLQlzaXplX3QgcmV0ID0gZnByaW50ZihmcCwgImRzbzogJXMgKCIsIHNlbGYtPnNob3J0X25hbWUpOworCXNpemVfdCByZXQgPSBmcHJpbnRmKGZwLCAiZHNvOiAlcyAoIiwgZHNvLT5zaG9ydF9uYW1lKTsKIAotCWlmIChzZWxmLT5zaG9ydF9uYW1lICE9IHNlbGYtPmxvbmdfbmFtZSkKLQkJcmV0ICs9IGZwcmludGYoZnAsICIlcywgIiwgc2VsZi0+bG9uZ19uYW1lKTsKKwlpZiAoZHNvLT5zaG9ydF9uYW1lICE9IGRzby0+bG9uZ19uYW1lKQorCQlyZXQgKz0gZnByaW50ZihmcCwgIiVzLCAiLCBkc28tPmxvbmdfbmFtZSk7CiAJcmV0ICs9IGZwcmludGYoZnAsICIlcywgJXNsb2FkZWQsICIsIG1hcF90eXBlX19uYW1lW3R5cGVdLAotCQkgICAgICAgc2VsZi0+bG9hZGVkID8gIiIgOiAiTk9UICIpOwotCXJldCArPSBkc29fX2ZwcmludGZfYnVpbGRpZChzZWxmLCBmcCk7CisJCSAgICAgICBkc28tPmxvYWRlZCA/ICIiIDogIk5PVCAiKTsKKwlyZXQgKz0gZHNvX19mcHJpbnRmX2J1aWxkaWQoZHNvLCBmcCk7CiAJcmV0ICs9IGZwcmludGYoZnAsICIpXG4iKTsKLQlmb3IgKG5kID0gcmJfZmlyc3QoJnNlbGYtPnN5bWJvbHNbdHlwZV0pOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgeworCWZvciAobmQgPSByYl9maXJzdCgmZHNvLT5zeW1ib2xzW3R5cGVdKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKIAkJc3RydWN0IHN5bWJvbCAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBzeW1ib2wsIHJiX25vZGUpOwogCQlyZXQgKz0gc3ltYm9sX19mcHJpbnRmKHBvcywgZnApOwogCX0KQEAgLTU0MywxMCArNTQ2LDEwIEBACiAgKiBzbyB0aGF0IHdlIGNhbiBpbiB0aGUgbmV4dCBzdGVwIHNldCB0aGUgc3ltYm9sIC0+ZW5kIGFkZHJlc3MgYW5kIHRoZW4KICAqIGNhbGwga2VybmVsX21hcHNfX3NwbGl0X2thbGxzeW1zLgogICovCi1zdGF0aWMgaW50IGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCitzdGF0aWMgaW50IGRzb19fbG9hZF9hbGxfa2FsbHN5bXMoc3RydWN0IGRzbyAqZHNvLCBjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkgIHN0cnVjdCBtYXAgKm1hcCkKIHsKLQlzdHJ1Y3QgcHJvY2Vzc19rYWxsc3ltc19hcmdzIGFyZ3MgPSB7IC5tYXAgPSBtYXAsIC5kc28gPSBzZWxmLCB9OworCXN0cnVjdCBwcm9jZXNzX2thbGxzeW1zX2FyZ3MgYXJncyA9IHsgLm1hcCA9IG1hcCwgLmRzbyA9IGRzbywgfTsKIAlyZXR1cm4ga2FsbHN5bXNfX3BhcnNlKGZpbGVuYW1lLCAmYXJncywgbWFwX19wcm9jZXNzX2thbGxzeW1fc3ltYm9sKTsKIH0KIApAQCAtNTU1LDcgKzU1OCw3IEBACiAgKiBrZXJuZWwgcmFuZ2UgaXMgYnJva2VuIGluIHNldmVyYWwgbWFwcywgbmFtZWQgW2tlcm5lbF0uTiwgYXMgd2UgZG9uJ3QgaGF2ZQogICogdGhlIG9yaWdpbmFsIEVMRiBzZWN0aW9uIG5hbWVzIHZtbGludXggaGF2ZS4KICAqLwotc3RhdGljIGludCBkc29fX3NwbGl0X2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKK3N0YXRpYyBpbnQgZHNvX19zcGxpdF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKIAkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCXN0cnVjdCBtYXBfZ3JvdXBzICprbWFwcyA9IG1hcF9fa21hcChtYXApLT5rbWFwczsKQEAgLTU2Myw3ICs1NjYsNyBAQAogCXN0cnVjdCBtYXAgKmN1cnJfbWFwID0gbWFwOwogCXN0cnVjdCBzeW1ib2wgKnBvczsKIAlpbnQgY291bnQgPSAwLCBtb3ZlZCA9IDA7CQotCXN0cnVjdCByYl9yb290ICpyb290ID0gJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXTsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9ICZkc28tPnN5bWJvbHNbbWFwLT50eXBlXTsKIAlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHJvb3QpOwogCWludCBrZXJuZWxfcmFuZ2UgPSAwOwogCkBAIC01ODIsNyArNTg1LDcgQEAKIAogCQkJaWYgKHN0cmNtcChjdXJyX21hcC0+ZHNvLT5zaG9ydF9uYW1lLCBtb2R1bGUpKSB7CiAJCQkJaWYgKGN1cnJfbWFwICE9IG1hcCAmJgotCQkJCSAgICBzZWxmLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMICYmCisJCQkJICAgIGRzby0+a2VybmVsID09IERTT19UWVBFX0dVRVNUX0tFUk5FTCAmJgogCQkJCSAgICBtYWNoaW5lX19pc19kZWZhdWx0X2d1ZXN0KG1hY2hpbmUpKSB7CiAJCQkJCS8qCiAJCQkJCSAqIFdlIGFzc3VtZSBhbGwgc3ltYm9scyBvZiBhIG1vZHVsZSBhcmUKQEAgLTYxOCwxNCArNjIxLDE0IEBACiAJCQlwb3MtPmVuZCAgID0gY3Vycl9tYXAtPm1hcF9pcChjdXJyX21hcCwgcG9zLT5lbmQpOwogCQl9IGVsc2UgaWYgKGN1cnJfbWFwICE9IG1hcCkgewogCQkJY2hhciBkc29fbmFtZVtQQVRIX01BWF07Ci0JCQlzdHJ1Y3QgZHNvICpkc287CisJCQlzdHJ1Y3QgZHNvICpuZHNvOwogCiAJCQlpZiAoY291bnQgPT0gMCkgewogCQkJCWN1cnJfbWFwID0gbWFwOwogCQkJCWdvdG8gZmlsdGVyX3N5bWJvbDsKIAkJCX0KIAotCQkJaWYgKHNlbGYtPmtlcm5lbCA9PSBEU09fVFlQRV9HVUVTVF9LRVJORUwpCisJCQlpZiAoZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMKQogCQkJCXNucHJpbnRmKGRzb19uYW1lLCBzaXplb2YoZHNvX25hbWUpLAogCQkJCQkiW2d1ZXN0Lmtlcm5lbF0uJWQiLAogCQkJCQlrZXJuZWxfcmFuZ2UrKyk7CkBAIC02MzQsMTUgKzYzNywxNSBAQAogCQkJCQkiW2tlcm5lbF0uJWQiLAogCQkJCQlrZXJuZWxfcmFuZ2UrKyk7CiAKLQkJCWRzbyA9IGRzb19fbmV3KGRzb19uYW1lKTsKLQkJCWlmIChkc28gPT0gTlVMTCkKKwkJCW5kc28gPSBkc29fX25ldyhkc29fbmFtZSk7CisJCQlpZiAobmRzbyA9PSBOVUxMKQogCQkJCXJldHVybiAtMTsKIAotCQkJZHNvLT5rZXJuZWwgPSBzZWxmLT5rZXJuZWw7CisJCQluZHNvLT5rZXJuZWwgPSBkc28tPmtlcm5lbDsKIAotCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIocG9zLT5zdGFydCwgZHNvLCBtYXAtPnR5cGUpOworCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIocG9zLT5zdGFydCwgbmRzbywgbWFwLT50eXBlKTsKIAkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7Ci0JCQkJZHNvX19kZWxldGUoZHNvKTsKKwkJCQlkc29fX2RlbGV0ZShuZHNvKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAKQEAgLTY2NSw3ICs2NjgsNyBAQAogCX0KIAogCWlmIChjdXJyX21hcCAhPSBtYXAgJiYKLQkgICAgc2VsZi0+a2VybmVsID09IERTT19UWVBFX0dVRVNUX0tFUk5FTCAmJgorCSAgICBkc28tPmtlcm5lbCA9PSBEU09fVFlQRV9HVUVTVF9LRVJORUwgJiYKIAkgICAgbWFjaGluZV9faXNfZGVmYXVsdF9ndWVzdChrbWFwcy0+bWFjaGluZSkpIHsKIAkJZHNvX19zZXRfbG9hZGVkKGN1cnJfbWFwLT5kc28sIGN1cnJfbWFwLT50eXBlKTsKIAl9CkBAIC02NzMsMjEgKzY3NiwyMSBAQAogCXJldHVybiBjb3VudCArIG1vdmVkOwogfQogCi1pbnQgZHNvX19sb2FkX2thbGxzeW1zKHN0cnVjdCBkc28gKnNlbGYsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAoraW50IGRzb19fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgZHNvICpkc28sIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAogCQkgICAgICAgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCWlmIChkc29fX2xvYWRfYWxsX2thbGxzeW1zKHNlbGYsIGZpbGVuYW1lLCBtYXApIDwgMCkKKwlpZiAoZHNvX19sb2FkX2FsbF9rYWxsc3ltcyhkc28sIGZpbGVuYW1lLCBtYXApIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JaWYgKHNlbGYtPmtlcm5lbCA9PSBEU09fVFlQRV9HVUVTVF9LRVJORUwpCi0JCXNlbGYtPnN5bXRhYl90eXBlID0gU1lNVEFCX19HVUVTVF9LQUxMU1lNUzsKKwlpZiAoZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMKQorCQlkc28tPnN5bXRhYl90eXBlID0gU1lNVEFCX19HVUVTVF9LQUxMU1lNUzsKIAllbHNlCi0JCXNlbGYtPnN5bXRhYl90eXBlID0gU1lNVEFCX19LQUxMU1lNUzsKKwkJZHNvLT5zeW10YWJfdHlwZSA9IFNZTVRBQl9fS0FMTFNZTVM7CiAKLQlyZXR1cm4gZHNvX19zcGxpdF9rYWxsc3ltcyhzZWxmLCBtYXAsIGZpbHRlcik7CisJcmV0dXJuIGRzb19fc3BsaXRfa2FsbHN5bXMoZHNvLCBtYXAsIGZpbHRlcik7CiB9CiAKLXN0YXRpYyBpbnQgZHNvX19sb2FkX3BlcmZfbWFwKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKK3N0YXRpYyBpbnQgZHNvX19sb2FkX3BlcmZfbWFwKHN0cnVjdCBkc28gKmRzbywgc3RydWN0IG1hcCAqbWFwLAogCQkJICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKQEAgLTY5NSw3ICs2OTgsNyBAQAogCUZJTEUgKmZpbGU7CiAJaW50IG5yX3N5bXMgPSAwOwogCi0JZmlsZSA9IGZvcGVuKHNlbGYtPmxvbmdfbmFtZSwgInIiKTsKKwlmaWxlID0gZm9wZW4oZHNvLT5sb25nX25hbWUsICJyIik7CiAJaWYgKGZpbGUgPT0gTlVMTCkKIAkJZ290byBvdXRfZmFpbHVyZTsKIApAQCAtNzMzLDcgKzczNiw3IEBACiAJCWlmIChmaWx0ZXIgJiYgZmlsdGVyKG1hcCwgc3ltKSkKIAkJCXN5bWJvbF9fZGVsZXRlKHN5bSk7CiAJCWVsc2UgewotCQkJc3ltYm9sc19faW5zZXJ0KCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0sIHN5bSk7CisJCQlzeW1ib2xzX19pbnNlcnQoJmRzby0+c3ltYm9sc1ttYXAtPnR5cGVdLCBzeW0pOwogCQkJbnJfc3ltcysrOwogCQl9CiAJfQpAQCAtNzUyLDcgKzc1NSw3IEBACiAvKioKICAqIGVsZl9zeW10YWJfX2Zvcl9lYWNoX3N5bWJvbCAtIGl0ZXJhdGUgdGhydSBhbGwgdGhlIHN5bWJvbHMKICAqCi0gKiBAc2VsZjogc3RydWN0IGVsZl9zeW10YWIgaW5zdGFuY2UgdG8gaXRlcmF0ZQorICogQHN5bXM6IHN0cnVjdCBlbGZfc3ltdGFiIGluc3RhbmNlIHRvIGl0ZXJhdGUKICAqIEBpZHg6IHVpbnQzMl90IGlkeAogICogQHN5bTogR0VsZl9TeW0gaXRlcmF0b3IKICAqLwpAQCAtODUyLDcgKzg1NSw3IEBACiAgKiBBbmQgYWx3YXlzIGxvb2sgYXQgdGhlIG9yaWdpbmFsIGRzbywgbm90IGF0IGRlYnVnaW5mbyBwYWNrYWdlcywgdGhhdAogICogaGF2ZSB0aGUgUExUIGRhdGEgc3RyaXBwZWQgb3V0IChzaGRyX3JlbF9wbHQuc2hfdHlwZSA9PSBTSFRfTk9CSVRTKS4KICAqLwotc3RhdGljIGludCBkc29fX3N5bnRoZXNpemVfcGx0X3N5bWJvbHMoc3RydWN0ICBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKK3N0YXRpYyBpbnQgZHNvX19zeW50aGVzaXplX3BsdF9zeW1ib2xzKHN0cnVjdCAgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKIAkJCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAl1aW50MzJfdCBucl9yZWxfZW50cmllcywgaWR4OwpAQCAtODcxLDcgKzg3NCw3IEBACiAJY2hhciBuYW1lW1BBVEhfTUFYXTsKIAogCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgIiVzJXMiLAotCQkgc3ltYm9sX2NvbmYuc3ltZnMsIHNlbGYtPmxvbmdfbmFtZSk7CisJCSBzeW1ib2xfY29uZi5zeW1mcywgZHNvLT5sb25nX25hbWUpOwogCWZkID0gb3BlbihuYW1lLCBPX1JET05MWSk7CiAJaWYgKGZkIDwgMCkKIAkJZ290byBvdXQ7CkBAIC05NDcsNyArOTUwLDcgQEAKIAkJCWlmIChmaWx0ZXIgJiYgZmlsdGVyKG1hcCwgZikpCiAJCQkJc3ltYm9sX19kZWxldGUoZik7CiAJCQllbHNlIHsKLQkJCQlzeW1ib2xzX19pbnNlcnQoJnNlbGYtPnN5bWJvbHNbbWFwLT50eXBlXSwgZik7CisJCQkJc3ltYm9sc19faW5zZXJ0KCZkc28tPnN5bWJvbHNbbWFwLT50eXBlXSwgZik7CiAJCQkJKytucjsKIAkJCX0KIAkJfQpAQCAtOTY5LDcgKzk3Miw3IEBACiAJCQlpZiAoZmlsdGVyICYmIGZpbHRlcihtYXAsIGYpKQogCQkJCXN5bWJvbF9fZGVsZXRlKGYpOwogCQkJZWxzZSB7Ci0JCQkJc3ltYm9sc19faW5zZXJ0KCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0sIGYpOworCQkJCXN5bWJvbHNfX2luc2VydCgmZHNvLT5zeW1ib2xzW21hcC0+dHlwZV0sIGYpOwogCQkJCSsrbnI7CiAJCQl9CiAJCX0KQEAgLTk4NSwyOSArOTg4LDMwIEBACiAJCXJldHVybiBucjsKIG91dDoKIAlwcl9kZWJ1ZygiJXM6IHByb2JsZW1zIHJlYWRpbmcgJXMgUExUIGluZm8uXG4iLAotCQkgX19mdW5jX18sIHNlbGYtPmxvbmdfbmFtZSk7CisJCSBfX2Z1bmNfXywgZHNvLT5sb25nX25hbWUpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgYm9vbCBlbGZfc3ltX19pc19hKEdFbGZfU3ltICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpCitzdGF0aWMgYm9vbCBlbGZfc3ltX19pc19hKEdFbGZfU3ltICpzeW0sIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE1BUF9fRlVOQ1RJT046Ci0JCXJldHVybiBlbGZfc3ltX19pc19mdW5jdGlvbihzZWxmKTsKKwkJcmV0dXJuIGVsZl9zeW1fX2lzX2Z1bmN0aW9uKHN5bSk7CiAJY2FzZSBNQVBfX1ZBUklBQkxFOgotCQlyZXR1cm4gZWxmX3N5bV9faXNfb2JqZWN0KHNlbGYpOworCQlyZXR1cm4gZWxmX3N5bV9faXNfb2JqZWN0KHN5bSk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIGZhbHNlOwogCX0KIH0KIAotc3RhdGljIGJvb2wgZWxmX3NlY19faXNfYShHRWxmX1NoZHIgKnNlbGYsIEVsZl9EYXRhICpzZWNzdHJzLCBlbnVtIG1hcF90eXBlIHR5cGUpCitzdGF0aWMgYm9vbCBlbGZfc2VjX19pc19hKEdFbGZfU2hkciAqc2hkciwgRWxmX0RhdGEgKnNlY3N0cnMsCisJCQkgIGVudW0gbWFwX3R5cGUgdHlwZSkKIHsKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE1BUF9fRlVOQ1RJT046Ci0JCXJldHVybiBlbGZfc2VjX19pc190ZXh0KHNlbGYsIHNlY3N0cnMpOworCQlyZXR1cm4gZWxmX3NlY19faXNfdGV4dChzaGRyLCBzZWNzdHJzKTsKIAljYXNlIE1BUF9fVkFSSUFCTEU6Ci0JCXJldHVybiBlbGZfc2VjX19pc19kYXRhKHNlbGYsIHNlY3N0cnMpOworCQlyZXR1cm4gZWxmX3NlY19faXNfZGF0YShzaGRyLCBzZWNzdHJzKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gZmFsc2U7CiAJfQpAQCAtMTAzMiwxMyArMTAzNiwxMyBAQAogCXJldHVybiAtMTsKIH0KIAotc3RhdGljIGludCBkc29fX2xvYWRfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgY29uc3QgY2hhciAqbmFtZSwKK3N0YXRpYyBpbnQgZHNvX19sb2FkX3N5bShzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwgY29uc3QgY2hhciAqbmFtZSwKIAkJCSBpbnQgZmQsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIsIGludCBrbW9kdWxlLAogCQkJIGludCB3YW50X3N5bXRhYikKIHsKLQlzdHJ1Y3Qga21hcCAqa21hcCA9IHNlbGYtPmtlcm5lbCA/IG1hcF9fa21hcChtYXApIDogTlVMTDsKKwlzdHJ1Y3Qga21hcCAqa21hcCA9IGRzby0+a2VybmVsID8gbWFwX19rbWFwKG1hcCkgOiBOVUxMOwogCXN0cnVjdCBtYXAgKmN1cnJfbWFwID0gbWFwOwotCXN0cnVjdCBkc28gKmN1cnJfZHNvID0gc2VsZjsKKwlzdHJ1Y3QgZHNvICpjdXJyX2RzbyA9IGRzbzsKIAlFbGZfRGF0YSAqc3ltc3RycywgKnNlY3N0cnM7CiAJdWludDMyX3QgbnJfc3ltczsKIAlpbnQgZXJyID0gLTE7CkBAIC0xMDY0LDE0ICsxMDY4LDE0IEBACiAJfQogCiAJLyogQWx3YXlzIHJlamVjdCBpbWFnZXMgd2l0aCBhIG1pc21hdGNoZWQgYnVpbGQtaWQ6ICovCi0JaWYgKHNlbGYtPmhhc19idWlsZF9pZCkgeworCWlmIChkc28tPmhhc19idWlsZF9pZCkgewogCQl1OCBidWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKIAogCQlpZiAoZWxmX3JlYWRfYnVpbGRfaWQoZWxmLCBidWlsZF9pZCwKIAkJCQkgICAgICBCVUlMRF9JRF9TSVpFKSAhPSBCVUlMRF9JRF9TSVpFKQogCQkJZ290byBvdXRfZWxmX2VuZDsKIAotCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoc2VsZiwgYnVpbGRfaWQpKQorCQlpZiAoIWRzb19fYnVpbGRfaWRfZXF1YWwoZHNvLCBidWlsZF9pZCkpCiAJCQlnb3RvIG91dF9lbGZfZW5kOwogCX0KIApAQCAtMTExMiwxMyArMTExNiwxNCBAQAogCW5yX3N5bXMgPSBzaGRyLnNoX3NpemUgLyBzaGRyLnNoX2VudHNpemU7CiAKIAltZW1zZXQoJnN5bSwgMCwgc2l6ZW9mKHN5bSkpOwotCWlmIChzZWxmLT5rZXJuZWwgPT0gRFNPX1RZUEVfVVNFUikgewotCQlzZWxmLT5hZGp1c3Rfc3ltYm9scyA9IChlaGRyLmVfdHlwZSA9PSBFVF9FWEVDIHx8CisJaWYgKGRzby0+a2VybmVsID09IERTT19UWVBFX1VTRVIpIHsKKwkJZHNvLT5hZGp1c3Rfc3ltYm9scyA9IChlaGRyLmVfdHlwZSA9PSBFVF9FWEVDIHx8CiAJCQkJZWxmX3NlY3Rpb25fYnlfbmFtZShlbGYsICZlaGRyLCAmc2hkciwKIAkJCQkJCSAgICAgIi5nbnUucHJlbGlua191bmRvIiwKIAkJCQkJCSAgICAgTlVMTCkgIT0gTlVMTCk7Ci0JfSBlbHNlIHNlbGYtPmFkanVzdF9zeW1ib2xzID0gMDsKLQorCX0gZWxzZSB7CisJCWRzby0+YWRqdXN0X3N5bWJvbHMgPSAwOworCX0KIAllbGZfc3ltdGFiX19mb3JfZWFjaF9zeW1ib2woc3ltcywgbnJfc3ltcywgaWR4LCBzeW0pIHsKIAkJc3RydWN0IHN5bWJvbCAqZjsKIAkJY29uc3QgY2hhciAqZWxmX25hbWUgPSBlbGZfc3ltX19uYW1lKCZzeW0sIHN5bXN0cnMpOwpAQCAtMTE2OCwyMiArMTE3MywyMiBAQAogCQkgICAgKHN5bS5zdF92YWx1ZSAmIDEpKQogCQkJLS1zeW0uc3RfdmFsdWU7CiAKLQkJaWYgKHNlbGYtPmtlcm5lbCAhPSBEU09fVFlQRV9VU0VSIHx8IGttb2R1bGUpIHsKKwkJaWYgKGRzby0+a2VybmVsICE9IERTT19UWVBFX1VTRVIgfHwga21vZHVsZSkgewogCQkJY2hhciBkc29fbmFtZVtQQVRIX01BWF07CiAKIAkJCWlmIChzdHJjbXAoc2VjdGlvbl9uYW1lLAogCQkJCSAgIChjdXJyX2Rzby0+c2hvcnRfbmFtZSArCi0JCQkJICAgIHNlbGYtPnNob3J0X25hbWVfbGVuKSkgPT0gMCkKKwkJCQkgICAgZHNvLT5zaG9ydF9uYW1lX2xlbikpID09IDApCiAJCQkJZ290byBuZXdfc3ltYm9sOwogCiAJCQlpZiAoc3RyY21wKHNlY3Rpb25fbmFtZSwgIi50ZXh0IikgPT0gMCkgewogCQkJCWN1cnJfbWFwID0gbWFwOwotCQkJCWN1cnJfZHNvID0gc2VsZjsKKwkJCQljdXJyX2RzbyA9IGRzbzsKIAkJCQlnb3RvIG5ld19zeW1ib2w7CiAJCQl9CiAKIAkJCXNucHJpbnRmKGRzb19uYW1lLCBzaXplb2YoZHNvX25hbWUpLAotCQkJCSAiJXMlcyIsIHNlbGYtPnNob3J0X25hbWUsIHNlY3Rpb25fbmFtZSk7CisJCQkJICIlcyVzIiwgZHNvLT5zaG9ydF9uYW1lLCBzZWN0aW9uX25hbWUpOwogCiAJCQljdXJyX21hcCA9IG1hcF9ncm91cHNfX2ZpbmRfYnlfbmFtZShrbWFwLT5rbWFwcywgbWFwLT50eXBlLCBkc29fbmFtZSk7CiAJCQlpZiAoY3Vycl9tYXAgPT0gTlVMTCkgewpAQCAtMTE5NSw5ICsxMjAwLDkgQEAKIAkJCQljdXJyX2RzbyA9IGRzb19fbmV3KGRzb19uYW1lKTsKIAkJCQlpZiAoY3Vycl9kc28gPT0gTlVMTCkKIAkJCQkJZ290byBvdXRfZWxmX2VuZDsKLQkJCQljdXJyX2Rzby0+a2VybmVsID0gc2VsZi0+a2VybmVsOwotCQkJCWN1cnJfZHNvLT5sb25nX25hbWUgPSBzZWxmLT5sb25nX25hbWU7Ci0JCQkJY3Vycl9kc28tPmxvbmdfbmFtZV9sZW4gPSBzZWxmLT5sb25nX25hbWVfbGVuOworCQkJCWN1cnJfZHNvLT5rZXJuZWwgPSBkc28tPmtlcm5lbDsKKwkJCQljdXJyX2Rzby0+bG9uZ19uYW1lID0gZHNvLT5sb25nX25hbWU7CisJCQkJY3Vycl9kc28tPmxvbmdfbmFtZV9sZW4gPSBkc28tPmxvbmdfbmFtZV9sZW47CiAJCQkJY3Vycl9tYXAgPSBtYXBfX25ldzIoc3RhcnQsIGN1cnJfZHNvLAogCQkJCQkJICAgICBtYXAtPnR5cGUpOwogCQkJCWlmIChjdXJyX21hcCA9PSBOVUxMKSB7CkBAIC0xMjA2LDkgKzEyMTEsOSBAQAogCQkJCX0KIAkJCQljdXJyX21hcC0+bWFwX2lwID0gaWRlbnRpdHlfX21hcF9pcDsKIAkJCQljdXJyX21hcC0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwotCQkJCWN1cnJfZHNvLT5zeW10YWJfdHlwZSA9IHNlbGYtPnN5bXRhYl90eXBlOworCQkJCWN1cnJfZHNvLT5zeW10YWJfdHlwZSA9IGRzby0+c3ltdGFiX3R5cGU7CiAJCQkJbWFwX2dyb3Vwc19faW5zZXJ0KGttYXAtPmttYXBzLCBjdXJyX21hcCk7Ci0JCQkJZHNvc19fYWRkKCZzZWxmLT5ub2RlLCBjdXJyX2Rzbyk7CisJCQkJZHNvc19fYWRkKCZkc28tPm5vZGUsIGN1cnJfZHNvKTsKIAkJCQlkc29fX3NldF9sb2FkZWQoY3Vycl9kc28sIG1hcC0+dHlwZSk7CiAJCQl9IGVsc2UKIAkJCQljdXJyX2RzbyA9IGN1cnJfbWFwLT5kc287CkBAIC0xMjUwLDcgKzEyNTUsNyBAQAogCSAqIEZvciBtaXNhbm5vdGF0ZWQsIHplcm9lZCwgQVNNIGZ1bmN0aW9uIHNpemVzLgogCSAqLwogCWlmIChuciA+IDApIHsKLQkJc3ltYm9sc19fZml4dXBfZW5kKCZzZWxmLT5zeW1ib2xzW21hcC0+dHlwZV0pOworCQlzeW1ib2xzX19maXh1cF9lbmQoJmRzby0+c3ltYm9sc1ttYXAtPnR5cGVdKTsKIAkJaWYgKGttYXApIHsKIAkJCS8qCiAJCQkgKiBXZSBuZWVkIHRvIGZpeHVwIHRoaXMgaGVyZSB0b28gYmVjYXVzZSB3ZSBjcmVhdGUgbmV3CkBAIC0xMjY2LDkgKzEyNzEsOSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBib29sIGRzb19fYnVpbGRfaWRfZXF1YWwoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgdTggKmJ1aWxkX2lkKQorc3RhdGljIGJvb2wgZHNvX19idWlsZF9pZF9lcXVhbChjb25zdCBzdHJ1Y3QgZHNvICpkc28sIHU4ICpidWlsZF9pZCkKIHsKLQlyZXR1cm4gbWVtY21wKHNlbGYtPmJ1aWxkX2lkLCBidWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSkgPT0gMDsKKwlyZXR1cm4gbWVtY21wKGRzby0+YnVpbGRfaWQsIGJ1aWxkX2lkLCBzaXplb2YoZHNvLT5idWlsZF9pZCkpID09IDA7CiB9CiAKIGJvb2wgX19kc29zX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHdpdGhfaGl0cykKQEAgLTE0MjksNyArMTQzNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqc2VsZikKK2NoYXIgZHNvX19zeW10YWJfb3JpZ2luKGNvbnN0IHN0cnVjdCBkc28gKmRzbykKIHsKIAlzdGF0aWMgY29uc3QgY2hhciBvcmlnaW5bXSA9IHsKIAkJW1NZTVRBQl9fS0FMTFNZTVNdCSAgICAgID0gJ2snLApAQCAtMTQ0NCwxMiArMTQ0OSwxMiBAQAogCQlbU1lNVEFCX19HVUVTVF9LTU9EVUxFXQkgICAgICA9ICAnRycsCiAJfTsKIAotCWlmIChzZWxmID09IE5VTEwgfHwgc2VsZi0+c3ltdGFiX3R5cGUgPT0gU1lNVEFCX19OT1RfRk9VTkQpCisJaWYgKGRzbyA9PSBOVUxMIHx8IGRzby0+c3ltdGFiX3R5cGUgPT0gU1lNVEFCX19OT1RfRk9VTkQpCiAJCXJldHVybiAnISc7Ci0JcmV0dXJuIG9yaWdpbltzZWxmLT5zeW10YWJfdHlwZV07CisJcmV0dXJuIG9yaWdpbltkc28tPnN5bXRhYl90eXBlXTsKIH0KIAotaW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCitpbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKmRzbywgc3RydWN0IG1hcCAqbWFwLCBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBzaXplID0gUEFUSF9NQVg7CiAJY2hhciAqbmFtZTsKQEAgLTE0NTksMTIgKzE0NjQsMTIgQEAKIAljb25zdCBjaGFyICpyb290X2RpcjsKIAlpbnQgd2FudF9zeW10YWI7CiAKLQlkc29fX3NldF9sb2FkZWQoc2VsZiwgbWFwLT50eXBlKTsKKwlkc29fX3NldF9sb2FkZWQoZHNvLCBtYXAtPnR5cGUpOwogCi0JaWYgKHNlbGYtPmtlcm5lbCA9PSBEU09fVFlQRV9LRVJORUwpCi0JCXJldHVybiBkc29fX2xvYWRfa2VybmVsX3N5bShzZWxmLCBtYXAsIGZpbHRlcik7Ci0JZWxzZSBpZiAoc2VsZi0+a2VybmVsID09IERTT19UWVBFX0dVRVNUX0tFUk5FTCkKLQkJcmV0dXJuIGRzb19fbG9hZF9ndWVzdF9rZXJuZWxfc3ltKHNlbGYsIG1hcCwgZmlsdGVyKTsKKwlpZiAoZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfS0VSTkVMKQorCQlyZXR1cm4gZHNvX19sb2FkX2tlcm5lbF9zeW0oZHNvLCBtYXAsIGZpbHRlcik7CisJZWxzZSBpZiAoZHNvLT5rZXJuZWwgPT0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMKQorCQlyZXR1cm4gZHNvX19sb2FkX2d1ZXN0X2tlcm5lbF9zeW0oZHNvLCBtYXAsIGZpbHRlcik7CiAKIAlpZiAobWFwLT5ncm91cHMgJiYgbWFwLT5ncm91cHMtPm1hY2hpbmUpCiAJCW1hY2hpbmUgPSBtYXAtPmdyb3Vwcy0+bWFjaGluZTsKQEAgLTE0NzUsMTEgKzE0ODAsMTEgQEAKIAlpZiAoIW5hbWUpCiAJCXJldHVybiAtMTsKIAotCXNlbGYtPmFkanVzdF9zeW1ib2xzID0gMDsKKwlkc28tPmFkanVzdF9zeW1ib2xzID0gMDsKIAotCWlmIChzdHJuY21wKHNlbGYtPm5hbWUsICIvdG1wL3BlcmYtIiwgMTApID09IDApIHsKLQkJcmV0ID0gZHNvX19sb2FkX3BlcmZfbWFwKHNlbGYsIG1hcCwgZmlsdGVyKTsKLQkJc2VsZi0+c3ltdGFiX3R5cGUgPSByZXQgPiAwID8gU1lNVEFCX19KQVZBX0pJVCA6CisJaWYgKHN0cm5jbXAoZHNvLT5uYW1lLCAiL3RtcC9wZXJmLSIsIDEwKSA9PSAwKSB7CisJCXJldCA9IGRzb19fbG9hZF9wZXJmX21hcChkc28sIG1hcCwgZmlsdGVyKTsKKwkJZHNvLT5zeW10YWJfdHlwZSA9IHJldCA+IDAgPyBTWU1UQUJfX0pBVkFfSklUIDoKIAkJCQkJICAgICAgU1lNVEFCX19OT1RfRk9VTkQ7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTQ5MCwzMyArMTQ5NSwzMyBAQAogCSAqLwogCXdhbnRfc3ltdGFiID0gMTsKIHJlc3RhcnQ6Ci0JZm9yIChzZWxmLT5zeW10YWJfdHlwZSA9IFNZTVRBQl9fQlVJTERfSURfQ0FDSEU7Ci0JICAgICBzZWxmLT5zeW10YWJfdHlwZSAhPSBTWU1UQUJfX05PVF9GT1VORDsKLQkgICAgIHNlbGYtPnN5bXRhYl90eXBlKyspIHsKLQkJc3dpdGNoIChzZWxmLT5zeW10YWJfdHlwZSkgeworCWZvciAoZHNvLT5zeW10YWJfdHlwZSA9IFNZTVRBQl9fQlVJTERfSURfQ0FDSEU7CisJICAgICBkc28tPnN5bXRhYl90eXBlICE9IFNZTVRBQl9fTk9UX0ZPVU5EOworCSAgICAgZHNvLT5zeW10YWJfdHlwZSsrKSB7CisJCXN3aXRjaCAoZHNvLT5zeW10YWJfdHlwZSkgewogCQljYXNlIFNZTVRBQl9fQlVJTERfSURfQ0FDSEU6CiAJCQkvKiBza2lwIHRoZSBsb2NhbGx5IGNvbmZpZ3VyZWQgY2FjaGUgaWYgYSBzeW1mcyBpcyBnaXZlbiAqLwogCQkJaWYgKHN5bWJvbF9jb25mLnN5bWZzWzBdIHx8Ci0JCQkgICAgKGRzb19fYnVpbGRfaWRfZmlsZW5hbWUoc2VsZiwgbmFtZSwgc2l6ZSkgPT0gTlVMTCkpIHsKKwkJCSAgICAoZHNvX19idWlsZF9pZF9maWxlbmFtZShkc28sIG5hbWUsIHNpemUpID09IE5VTEwpKSB7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBTWU1UQUJfX0ZFRE9SQV9ERUJVR0lORk86CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMvdXNyL2xpYi9kZWJ1ZyVzLmRlYnVnIiwKLQkJCQkgc3ltYm9sX2NvbmYuc3ltZnMsIHNlbGYtPmxvbmdfbmFtZSk7CisJCQkJIHN5bWJvbF9jb25mLnN5bWZzLCBkc28tPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBTWU1UQUJfX1VCVU5UVV9ERUJVR0lORk86CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMvdXNyL2xpYi9kZWJ1ZyVzIiwKLQkJCQkgc3ltYm9sX2NvbmYuc3ltZnMsIHNlbGYtPmxvbmdfbmFtZSk7CisJCQkJIHN5bWJvbF9jb25mLnN5bWZzLCBkc28tPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKIAkJY2FzZSBTWU1UQUJfX0JVSUxESURfREVCVUdJTkZPOiB7CiAJCQljaGFyIGJ1aWxkX2lkX2hleFtCVUlMRF9JRF9TSVpFICogMiArIDFdOwogCi0JCQlpZiAoIXNlbGYtPmhhc19idWlsZF9pZCkKKwkJCWlmICghZHNvLT5oYXNfYnVpbGRfaWQpCiAJCQkJY29udGludWU7CiAKLQkJCWJ1aWxkX2lkX19zcHJpbnRmKHNlbGYtPmJ1aWxkX2lkLAotCQkJCQkgIHNpemVvZihzZWxmLT5idWlsZF9pZCksCisJCQlidWlsZF9pZF9fc3ByaW50Zihkc28tPmJ1aWxkX2lkLAorCQkJCQkgIHNpemVvZihkc28tPmJ1aWxkX2lkKSwKIAkJCQkJICBidWlsZF9pZF9oZXgpOwogCQkJc25wcmludGYobmFtZSwgc2l6ZSwKIAkJCQkgIiVzL3Vzci9saWIvZGVidWcvLmJ1aWxkLWlkLyUuMnMvJXMuZGVidWciLApAQCAtMTUyNSw3ICsxNTMwLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIFNZTVRBQl9fU1lTVEVNX1BBVEhfRFNPOgogCQkJc25wcmludGYobmFtZSwgc2l6ZSwgIiVzJXMiLAotCQkJICAgICBzeW1ib2xfY29uZi5zeW1mcywgc2VsZi0+bG9uZ19uYW1lKTsKKwkJCSAgICAgc3ltYm9sX2NvbmYuc3ltZnMsIGRzby0+bG9uZ19uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIFNZTVRBQl9fR1VFU1RfS01PRFVMRToKIAkJCWlmIChtYXAtPmdyb3VwcyAmJiBtYWNoaW5lKQpAQCAtMTUzMywxMiArMTUzOCwxMiBAQAogCQkJZWxzZQogCQkJCXJvb3RfZGlyID0gIiI7CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMlcyVzIiwgc3ltYm9sX2NvbmYuc3ltZnMsCi0JCQkJIHJvb3RfZGlyLCBzZWxmLT5sb25nX25hbWUpOworCQkJCSByb290X2RpciwgZHNvLT5sb25nX25hbWUpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBTWU1UQUJfX1NZU1RFTV9QQVRIX0tNT0RVTEU6CiAJCQlzbnByaW50ZihuYW1lLCBzaXplLCAiJXMlcyIsIHN5bWJvbF9jb25mLnN5bWZzLAotCQkJCSBzZWxmLT5sb25nX25hbWUpOworCQkJCSBkc28tPmxvbmdfbmFtZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDo7CiAJCX0KQEAgLTE1NDgsNyArMTU1Myw3IEBACiAJCWlmIChmZCA8IDApCiAJCQljb250aW51ZTsKIAotCQlyZXQgPSBkc29fX2xvYWRfc3ltKHNlbGYsIG1hcCwgbmFtZSwgZmQsIGZpbHRlciwgMCwKKwkJcmV0ID0gZHNvX19sb2FkX3N5bShkc28sIG1hcCwgbmFtZSwgZmQsIGZpbHRlciwgMCwKIAkJCQkgICAgd2FudF9zeW10YWIpOwogCQljbG9zZShmZCk7CiAKQEAgLTE1NjAsNyArMTU2NSw4IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAocmV0ID4gMCkgewotCQkJaW50IG5yX3BsdCA9IGRzb19fc3ludGhlc2l6ZV9wbHRfc3ltYm9scyhzZWxmLCBtYXAsIGZpbHRlcik7CisJCQlpbnQgbnJfcGx0ID0gZHNvX19zeW50aGVzaXplX3BsdF9zeW1ib2xzKGRzbywgbWFwLAorCQkJCQkJCQkgZmlsdGVyKTsKIAkJCWlmIChucl9wbHQgPiAwKQogCQkJCXJldCArPSBucl9wbHQ7CiAJCQlicmVhazsKQEAgLTE1NzcsMTcgKzE1ODMsMTcgQEAKIAl9CiAKIAlmcmVlKG5hbWUpOwotCWlmIChyZXQgPCAwICYmIHN0cnN0cihzZWxmLT5uYW1lLCAiIChkZWxldGVkKSIpICE9IE5VTEwpCisJaWYgKHJldCA8IDAgJiYgc3Ryc3RyKGRzby0+bmFtZSwgIiAoZGVsZXRlZCkiKSAhPSBOVUxMKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCitzdHJ1Y3QgbWFwICptYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc3RydWN0IG1hcF9ncm91cHMgKm1nLAogCQkJCSAgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAotCWZvciAobmQgPSByYl9maXJzdCgmc2VsZi0+bWFwc1t0eXBlXSk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CisJZm9yIChuZCA9IHJiX2ZpcnN0KCZtZy0+bWFwc1t0eXBlXSk7IG5kOyBuZCA9IHJiX25leHQobmQpKSB7CiAJCXN0cnVjdCBtYXAgKm1hcCA9IHJiX2VudHJ5KG5kLCBzdHJ1Y3QgbWFwLCByYl9ub2RlKTsKIAogCQlpZiAobWFwLT5kc28gJiYgc3RyY21wKG1hcC0+ZHNvLT5zaG9ydF9uYW1lLCBuYW1lKSA9PSAwKQpAQCAtMTU5NywyOCArMTYwMywyOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGRzb19fa2VybmVsX21vZHVsZV9nZXRfYnVpbGRfaWQoc3RydWN0IGRzbyAqc2VsZiwKLQkJCQljb25zdCBjaGFyICpyb290X2RpcikKK3N0YXRpYyBpbnQgZHNvX19rZXJuZWxfbW9kdWxlX2dldF9idWlsZF9pZChzdHJ1Y3QgZHNvICpkc28sCisJCQkJCSAgIGNvbnN0IGNoYXIgKnJvb3RfZGlyKQogewogCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwogCS8qCiAJICoga2VybmVsIG1vZHVsZSBzaG9ydCBuYW1lcyBhcmUgb2YgdGhlIGZvcm0gIlttb2R1bGVdIiBhbmQKIAkgKiB3ZSBuZWVkIGp1c3QgIm1vZHVsZSIgaGVyZS4KIAkgKi8KLQljb25zdCBjaGFyICpuYW1lID0gc2VsZi0+c2hvcnRfbmFtZSArIDE7CisJY29uc3QgY2hhciAqbmFtZSA9IGRzby0+c2hvcnRfbmFtZSArIDE7CiAKIAlzbnByaW50ZihmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwKIAkJICIlcy9zeXMvbW9kdWxlLyUuKnMvbm90ZXMvLm5vdGUuZ251LmJ1aWxkLWlkIiwKIAkJIHJvb3RfZGlyLCAoaW50KXN0cmxlbihuYW1lKSAtIDEsIG5hbWUpOwogCi0JaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKGZpbGVuYW1lLCBzZWxmLT5idWlsZF9pZCwKLQkJCQkgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSkgPT0gMCkKLQkJc2VsZi0+aGFzX2J1aWxkX2lkID0gdHJ1ZTsKKwlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoZmlsZW5hbWUsIGRzby0+YnVpbGRfaWQsCisJCQkJIHNpemVvZihkc28tPmJ1aWxkX2lkKSkgPT0gMCkKKwkJZHNvLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIoc3RydWN0IG1hcF9ncm91cHMgKnNlbGYsCitzdGF0aWMgaW50IG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGhfZGlyKHN0cnVjdCBtYXBfZ3JvdXBzICptZywKIAkJCQljb25zdCBjaGFyICpkaXJfbmFtZSkKIHsKIAlzdHJ1Y3QgZGlyZW50ICpkZW50OwpAQCAtMTY0Niw3ICsxNjUyLDcgQEAKIAogCQkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXMvJXMiLAogCQkJCSBkaXJfbmFtZSwgZGVudC0+ZF9uYW1lKTsKLQkJCXJldCA9IG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGhfZGlyKHNlbGYsIHBhdGgpOworCQkJcmV0ID0gbWFwX2dyb3Vwc19fc2V0X21vZHVsZXNfcGF0aF9kaXIobWcsIHBhdGgpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBvdXQ7CiAJCX0gZWxzZSB7CkBAIC0xNjYxLDcgKzE2NjcsOCBAQAogCQkJCSAoaW50KShkb3QgLSBkZW50LT5kX25hbWUpLCBkZW50LT5kX25hbWUpOwogCiAJCQlzdHJ4ZnJjaGFyKGRzb19uYW1lLCAnLScsICdfJyk7Ci0JCQltYXAgPSBtYXBfZ3JvdXBzX19maW5kX2J5X25hbWUoc2VsZiwgTUFQX19GVU5DVElPTiwgZHNvX25hbWUpOworCQkJbWFwID0gbWFwX2dyb3Vwc19fZmluZF9ieV9uYW1lKG1nLCBNQVBfX0ZVTkNUSU9OLAorCQkJCQkJICAgICAgIGRzb19uYW1lKTsKIAkJCWlmIChtYXAgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIApAQCAtMTcxMSwyMCArMTcxOCwyMCBAQAogCXJldHVybiBzdHJkdXAobmFtZSk7CiB9CiAKLXN0YXRpYyBpbnQgbWFjaGluZV9fc2V0X21vZHVsZXNfcGF0aChzdHJ1Y3QgbWFjaGluZSAqc2VsZikKK3N0YXRpYyBpbnQgbWFjaGluZV9fc2V0X21vZHVsZXNfcGF0aChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKIAljaGFyICp2ZXJzaW9uOwogCWNoYXIgbW9kdWxlc19wYXRoW1BBVEhfTUFYXTsKIAotCXZlcnNpb24gPSBnZXRfa2VybmVsX3ZlcnNpb24oc2VsZi0+cm9vdF9kaXIpOworCXZlcnNpb24gPSBnZXRfa2VybmVsX3ZlcnNpb24obWFjaGluZS0+cm9vdF9kaXIpOwogCWlmICghdmVyc2lvbikKIAkJcmV0dXJuIC0xOwogCiAJc25wcmludGYobW9kdWxlc19wYXRoLCBzaXplb2YobW9kdWxlc19wYXRoKSwgIiVzL2xpYi9tb2R1bGVzLyVzL2tlcm5lbCIsCi0JCSBzZWxmLT5yb290X2RpciwgdmVyc2lvbik7CisJCSBtYWNoaW5lLT5yb290X2RpciwgdmVyc2lvbik7CiAJZnJlZSh2ZXJzaW9uKTsKIAotCXJldHVybiBtYXBfZ3JvdXBzX19zZXRfbW9kdWxlc19wYXRoX2Rpcigmc2VsZi0+a21hcHMsIG1vZHVsZXNfcGF0aCk7CisJcmV0dXJuIG1hcF9ncm91cHNfX3NldF9tb2R1bGVzX3BhdGhfZGlyKCZtYWNoaW5lLT5rbWFwcywgbW9kdWxlc19wYXRoKTsKIH0KIAogLyoKQEAgLTE3MzQsMjMgKzE3NDEsMjMgQEAKICAqLwogc3RhdGljIHN0cnVjdCBtYXAgKm1hcF9fbmV3Mih1NjQgc3RhcnQsIHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKQogewotCXN0cnVjdCBtYXAgKnNlbGYgPSBjYWxsb2MoMSwgKHNpemVvZigqc2VsZikgKwotCQkJCSAgICAgIChkc28tPmtlcm5lbCA/IHNpemVvZihzdHJ1Y3Qga21hcCkgOiAwKSkpOwotCWlmIChzZWxmICE9IE5VTEwpIHsKKwlzdHJ1Y3QgbWFwICptYXAgPSBjYWxsb2MoMSwgKHNpemVvZigqbWFwKSArCisJCQkJICAgICAoZHNvLT5rZXJuZWwgPyBzaXplb2Yoc3RydWN0IGttYXApIDogMCkpKTsKKwlpZiAobWFwICE9IE5VTEwpIHsKIAkJLyoKIAkJICogLT5lbmQgd2lsbCBiZSBmaWxsZWQgYWZ0ZXIgd2UgbG9hZCBhbGwgdGhlIHN5bWJvbHMKIAkJICovCi0JCW1hcF9faW5pdChzZWxmLCB0eXBlLCBzdGFydCwgMCwgMCwgZHNvKTsKKwkJbWFwX19pbml0KG1hcCwgdHlwZSwgc3RhcnQsIDAsIDAsIGRzbyk7CiAJfQogCi0JcmV0dXJuIHNlbGY7CisJcmV0dXJuIG1hcDsKIH0KIAotc3RydWN0IG1hcCAqbWFjaGluZV9fbmV3X21vZHVsZShzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgdTY0IHN0YXJ0LAorc3RydWN0IG1hcCAqbWFjaGluZV9fbmV3X21vZHVsZShzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgdTY0IHN0YXJ0LAogCQkJCWNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewogCXN0cnVjdCBtYXAgKm1hcDsKLQlzdHJ1Y3QgZHNvICpkc28gPSBfX2Rzb3NfX2ZpbmRuZXcoJnNlbGYtPmtlcm5lbF9kc29zLCBmaWxlbmFtZSk7CisJc3RydWN0IGRzbyAqZHNvID0gX19kc29zX19maW5kbmV3KCZtYWNoaW5lLT5rZXJuZWxfZHNvcywgZmlsZW5hbWUpOwogCiAJaWYgKGRzbyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKQEAgLTE3NTksMTUgKzE3NjYsMTUgQEAKIAlpZiAobWFwID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKG1hY2hpbmVfX2lzX2hvc3Qoc2VsZikpCisJaWYgKG1hY2hpbmVfX2lzX2hvc3QobWFjaGluZSkpCiAJCWRzby0+c3ltdGFiX3R5cGUgPSBTWU1UQUJfX1NZU1RFTV9QQVRIX0tNT0RVTEU7CiAJZWxzZQogCQlkc28tPnN5bXRhYl90eXBlID0gU1lNVEFCX19HVUVTVF9LTU9EVUxFOwotCW1hcF9ncm91cHNfX2luc2VydCgmc2VsZi0+a21hcHMsIG1hcCk7CisJbWFwX2dyb3Vwc19faW5zZXJ0KCZtYWNoaW5lLT5rbWFwcywgbWFwKTsKIAlyZXR1cm4gbWFwOwogfQogCi1zdGF0aWMgaW50IG1hY2hpbmVfX2NyZWF0ZV9tb2R1bGVzKHN0cnVjdCBtYWNoaW5lICpzZWxmKQorc3RhdGljIGludCBtYWNoaW5lX19jcmVhdGVfbW9kdWxlcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKIHsKIAljaGFyICpsaW5lID0gTlVMTDsKIAlzaXplX3QgbjsKQEAgLTE3NzYsMTAgKzE3ODMsMTAgQEAKIAljb25zdCBjaGFyICptb2R1bGVzOwogCWNoYXIgcGF0aFtQQVRIX01BWF07CiAKLQlpZiAobWFjaGluZV9faXNfZGVmYXVsdF9ndWVzdChzZWxmKSkKKwlpZiAobWFjaGluZV9faXNfZGVmYXVsdF9ndWVzdChtYWNoaW5lKSkKIAkJbW9kdWxlcyA9IHN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3RfbW9kdWxlczsKIAllbHNlIHsKLQkJc3ByaW50ZihwYXRoLCAiJXMvcHJvYy9tb2R1bGVzIiwgc2VsZi0+cm9vdF9kaXIpOworCQlzcHJpbnRmKHBhdGgsICIlcy9wcm9jL21vZHVsZXMiLCBtYWNoaW5lLT5yb290X2Rpcik7CiAJCW1vZHVsZXMgPSBwYXRoOwogCX0KIApAQCAtMTgxNSwxNiArMTgyMiwxNiBAQAogCQkqc2VwID0gJ1wwJzsKIAogCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJbJXNdIiwgbGluZSk7Ci0JCW1hcCA9IG1hY2hpbmVfX25ld19tb2R1bGUoc2VsZiwgc3RhcnQsIG5hbWUpOworCQltYXAgPSBtYWNoaW5lX19uZXdfbW9kdWxlKG1hY2hpbmUsIHN0YXJ0LCBuYW1lKTsKIAkJaWYgKG1hcCA9PSBOVUxMKQogCQkJZ290byBvdXRfZGVsZXRlX2xpbmU7Ci0JCWRzb19fa2VybmVsX21vZHVsZV9nZXRfYnVpbGRfaWQobWFwLT5kc28sIHNlbGYtPnJvb3RfZGlyKTsKKwkJZHNvX19rZXJuZWxfbW9kdWxlX2dldF9idWlsZF9pZChtYXAtPmRzbywgbWFjaGluZS0+cm9vdF9kaXIpOwogCX0KIAogCWZyZWUobGluZSk7CiAJZmNsb3NlKGZpbGUpOwogCi0JcmV0dXJuIG1hY2hpbmVfX3NldF9tb2R1bGVzX3BhdGgoc2VsZik7CisJcmV0dXJuIG1hY2hpbmVfX3NldF9tb2R1bGVzX3BhdGgobWFjaGluZSk7CiAKIG91dF9kZWxldGVfbGluZToKIAlmcmVlKGxpbmUpOwpAQCAtMTgzMiw3ICsxODM5LDcgQEAKIAlyZXR1cm4gLTE7CiB9CiAKLWludCBkc29fX2xvYWRfdm1saW51eChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFwICptYXAsCitpbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCSAgICAgIGNvbnN0IGNoYXIgKnZtbGludXgsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7CiAJaW50IGVyciA9IC0xLCBmZDsKQEAgLTE4NDQsOSArMTg1MSw5IEBACiAJaWYgKGZkIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIChjaGFyICopdm1saW51eCk7Ci0JZHNvX19zZXRfbG9hZGVkKHNlbGYsIG1hcC0+dHlwZSk7Ci0JZXJyID0gZHNvX19sb2FkX3N5bShzZWxmLCBtYXAsIHN5bWZzX3ZtbGludXgsIGZkLCBmaWx0ZXIsIDAsIDApOworCWRzb19fc2V0X2xvbmdfbmFtZShkc28sIChjaGFyICopdm1saW51eCk7CisJZHNvX19zZXRfbG9hZGVkKGRzbywgbWFwLT50eXBlKTsKKwllcnIgPSBkc29fX2xvYWRfc3ltKGRzbywgbWFwLCBzeW1mc192bWxpbnV4LCBmZCwgZmlsdGVyLCAwLCAwKTsKIAljbG9zZShmZCk7CiAKIAlpZiAoZXJyID4gMCkKQEAgLTE4NTUsNyArMTg2Miw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAoraW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCQkgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBpLCBlcnIgPSAwOwpAQCAtMTg2NCwyMCArMTg3MSwyMCBAQAogCXByX2RlYnVnKCJMb29raW5nIGF0IHRoZSB2bWxpbnV4X3BhdGggKCVkIGVudHJpZXMgbG9uZylcbiIsCiAJCSB2bWxpbnV4X3BhdGhfX25yX2VudHJpZXMgKyAxKTsKIAotCWZpbGVuYW1lID0gZHNvX19idWlsZF9pZF9maWxlbmFtZShzZWxmLCBOVUxMLCAwKTsKKwlmaWxlbmFtZSA9IGRzb19fYnVpbGRfaWRfZmlsZW5hbWUoZHNvLCBOVUxMLCAwKTsKIAlpZiAoZmlsZW5hbWUgIT0gTlVMTCkgewotCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsIGZpbGVuYW1lLCBmaWx0ZXIpOworCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChkc28sIG1hcCwgZmlsZW5hbWUsIGZpbHRlcik7CiAJCWlmIChlcnIgPiAwKSB7Ci0JCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwgZmlsZW5hbWUpOworCQkJZHNvX19zZXRfbG9uZ19uYW1lKGRzbywgZmlsZW5hbWUpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJZnJlZShmaWxlbmFtZSk7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IHZtbGludXhfcGF0aF9fbnJfZW50cmllczsgKytpKSB7Ci0JCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwgdm1saW51eF9wYXRoW2ldLCBmaWx0ZXIpOworCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChkc28sIG1hcCwgdm1saW51eF9wYXRoW2ldLCBmaWx0ZXIpOwogCQlpZiAoZXJyID4gMCkgewotCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cCh2bWxpbnV4X3BhdGhbaV0pKTsKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShkc28sIHN0cmR1cCh2bWxpbnV4X3BhdGhbaV0pKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTg4NSw3ICsxODkyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGRzb19fbG9hZF9rZXJuZWxfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKK3N0YXRpYyBpbnQgZHNvX19sb2FkX2tlcm5lbF9zeW0oc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCQkJc3ltYm9sX2ZpbHRlcl90IGZpbHRlcikKIHsKIAlpbnQgZXJyOwpAQCAtMTkxMiwxMCArMTkxOSwxMCBAQAogCX0KIAogCWlmIChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUgIT0gTlVMTCkgewotCQllcnIgPSBkc29fX2xvYWRfdm1saW51eChzZWxmLCBtYXAsCisJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KGRzbywgbWFwLAogCQkJCQlzeW1ib2xfY29uZi52bWxpbnV4X25hbWUsIGZpbHRlcik7CiAJCWlmIChlcnIgPiAwKSB7Ci0JCQlkc29fX3NldF9sb25nX25hbWUoc2VsZiwKKwkJCWRzb19fc2V0X2xvbmdfbmFtZShkc28sCiAJCQkJCSAgIHN0cmR1cChzeW1ib2xfY29uZi52bWxpbnV4X25hbWUpKTsKIAkJCWdvdG8gb3V0X2ZpeHVwOwogCQl9CkBAIC0xOTIzLDcgKzE5MzAsNyBAQAogCX0KIAogCWlmICh2bWxpbnV4X3BhdGggIT0gTlVMTCkgewotCQllcnIgPSBkc29fX2xvYWRfdm1saW51eF9wYXRoKHNlbGYsIG1hcCwgZmlsdGVyKTsKKwkJZXJyID0gZHNvX19sb2FkX3ZtbGludXhfcGF0aChkc28sIG1hcCwgZmlsdGVyKTsKIAkJaWYgKGVyciA+IDApCiAJCQlnb3RvIG91dF9maXh1cDsKIAl9CkBAIC0xOTM3LDEzICsxOTQ0LDEzIEBACiAJICogd2UgaGF2ZSBhIGJ1aWxkLWlkLCBzbyBjaGVjayBpZiBpdCBpcyB0aGUgc2FtZSBhcyB0aGUgcnVubmluZyBrZXJuZWwsCiAJICogdXNpbmcgaXQgaWYgaXQgaXMuCiAJICovCi0JaWYgKHNlbGYtPmhhc19idWlsZF9pZCkgeworCWlmIChkc28tPmhhc19idWlsZF9pZCkgewogCQl1OCBrYWxsc3ltc19idWlsZF9pZFtCVUlMRF9JRF9TSVpFXTsKIAkJY2hhciBzYnVpbGRfaWRbQlVJTERfSURfU0laRSAqIDIgKyAxXTsKIAogCQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQoIi9zeXMva2VybmVsL25vdGVzIiwga2FsbHN5bXNfYnVpbGRfaWQsCiAJCQkJCSBzaXplb2Yoa2FsbHN5bXNfYnVpbGRfaWQpKSA9PSAwKSB7Ci0JCQlpZiAoZHNvX19idWlsZF9pZF9lcXVhbChzZWxmLCBrYWxsc3ltc19idWlsZF9pZCkpIHsKKwkJCWlmIChkc29fX2J1aWxkX2lkX2VxdWFsKGRzbywga2FsbHN5bXNfYnVpbGRfaWQpKSB7CiAJCQkJa2FsbHN5bXNfZmlsZW5hbWUgPSAiL3Byb2Mva2FsbHN5bXMiOwogCQkJCWdvdG8gZG9fa2FsbHN5bXM7CiAJCQl9CkBAIC0xOTUyLDcgKzE5NTksNyBAQAogCQkgKiBOb3cgbG9vayBpZiB3ZSBoYXZlIGl0IG9uIHRoZSBidWlsZC1pZCBjYWNoZSBpbgogCQkgKiAkSE9NRS8uZGVidWcvW2tlcm5lbC5rYWxsc3ltc10uCiAJCSAqLwotCQlidWlsZF9pZF9fc3ByaW50ZihzZWxmLT5idWlsZF9pZCwgc2l6ZW9mKHNlbGYtPmJ1aWxkX2lkKSwKKwkJYnVpbGRfaWRfX3NwcmludGYoZHNvLT5idWlsZF9pZCwgc2l6ZW9mKGRzby0+YnVpbGRfaWQpLAogCQkJCSAgc2J1aWxkX2lkKTsKIAogCQlpZiAoYXNwcmludGYoJmthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSwKQEAgLTE5NzksNyArMTk4Niw3IEBACiAJfQogCiBkb19rYWxsc3ltczoKLQllcnIgPSBkc29fX2xvYWRfa2FsbHN5bXMoc2VsZiwga2FsbHN5bXNfZmlsZW5hbWUsIG1hcCwgZmlsdGVyKTsKKwllcnIgPSBkc29fX2xvYWRfa2FsbHN5bXMoZHNvLCBrYWxsc3ltc19maWxlbmFtZSwgbWFwLCBmaWx0ZXIpOwogCWlmIChlcnIgPiAwKQogCQlwcl9kZWJ1ZygiVXNpbmcgJXMgZm9yIHN5bWJvbHNcbiIsIGthbGxzeW1zX2ZpbGVuYW1lKTsKIAlmcmVlKGthbGxzeW1zX2FsbG9jYXRlZF9maWxlbmFtZSk7CkBAIC0xOTg3LDcgKzE5OTQsNyBAQAogCWlmIChlcnIgPiAwKSB7CiBvdXRfZml4dXA6CiAJCWlmIChrYWxsc3ltc19maWxlbmFtZSAhPSBOVUxMKQotCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cCgiW2tlcm5lbC5rYWxsc3ltc10iKSk7CisJCQlkc29fX3NldF9sb25nX25hbWUoZHNvLCBzdHJkdXAoIltrZXJuZWwua2FsbHN5bXNdIikpOwogCQltYXBfX2ZpeHVwX3N0YXJ0KG1hcCk7CiAJCW1hcF9fZml4dXBfZW5kKG1hcCk7CiAJfQpAQCAtMTk5NSw4ICsyMDAyLDggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGRzb19fbG9hZF9ndWVzdF9rZXJuZWxfc3ltKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwKLQkJCQlzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQorc3RhdGljIGludCBkc29fX2xvYWRfZ3Vlc3Rfa2VybmVsX3N5bShzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwKKwkJCQkgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewogCWludCBlcnI7CiAJY29uc3QgY2hhciAqa2FsbHN5bXNfZmlsZW5hbWUgPSBOVUxMOwpAQCAtMjAxNiw3ICsyMDIzLDcgQEAKIAkJICogT3IgdXNlIGZpbGUgZ3Vlc3Rfa2FsbHN5bXMgaW5wdXR0ZWQgYnkgdXNlciBvbiBjb21tYW5kbGluZQogCQkgKi8KIAkJaWYgKHN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3Rfdm1saW51eF9uYW1lICE9IE5VTEwpIHsKLQkJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KHNlbGYsIG1hcCwKKwkJCWVyciA9IGRzb19fbG9hZF92bWxpbnV4KGRzbywgbWFwLAogCQkJCXN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3Rfdm1saW51eF9uYW1lLCBmaWx0ZXIpOwogCQkJZ290byBvdXRfdHJ5X2ZpeHVwOwogCQl9CkBAIC0yMDI5LDcgKzIwMzYsNyBAQAogCQlrYWxsc3ltc19maWxlbmFtZSA9IHBhdGg7CiAJfQogCi0JZXJyID0gZHNvX19sb2FkX2thbGxzeW1zKHNlbGYsIGthbGxzeW1zX2ZpbGVuYW1lLCBtYXAsIGZpbHRlcik7CisJZXJyID0gZHNvX19sb2FkX2thbGxzeW1zKGRzbywga2FsbHN5bXNfZmlsZW5hbWUsIG1hcCwgZmlsdGVyKTsKIAlpZiAoZXJyID4gMCkKIAkJcHJfZGVidWcoIlVzaW5nICVzIGZvciBzeW1ib2xzXG4iLCBrYWxsc3ltc19maWxlbmFtZSk7CiAKQEAgLTIwMzcsNyArMjA0NCw3IEBACiAJaWYgKGVyciA+IDApIHsKIAkJaWYgKGthbGxzeW1zX2ZpbGVuYW1lICE9IE5VTEwpIHsKIAkJCW1hY2hpbmVfX21tYXBfbmFtZShtYWNoaW5lLCBwYXRoLCBzaXplb2YocGF0aCkpOwotCQkJZHNvX19zZXRfbG9uZ19uYW1lKHNlbGYsIHN0cmR1cChwYXRoKSk7CisJCQlkc29fX3NldF9sb25nX25hbWUoZHNvLCBzdHJkdXAocGF0aCkpOwogCQl9CiAJCW1hcF9fZml4dXBfc3RhcnQobWFwKTsKIAkJbWFwX19maXh1cF9lbmQobWFwKTsKQEAgLTIwOTAsMTIgKzIwOTcsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zaXplX3QgbWFjaGluZXNfX2ZwcmludGZfZHNvcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgRklMRSAqZnApCitzaXplX3QgbWFjaGluZXNfX2ZwcmludGZfZHNvcyhzdHJ1Y3QgcmJfcm9vdCAqbWFjaGluZXMsIEZJTEUgKmZwKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAlzaXplX3QgcmV0ID0gMDsKIAotCWZvciAobmQgPSByYl9maXJzdChzZWxmKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QobWFjaGluZXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKIAkJcmV0ICs9IF9fZHNvc19fZnByaW50ZigmcG9zLT5rZXJuZWxfZHNvcywgZnApOwogCQlyZXQgKz0gX19kc29zX19mcHJpbnRmKCZwb3MtPnVzZXJfZHNvcywgZnApOwpAQCAtMjExOSwxOCArMjEyNiwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXNpemVfdCBtYWNoaW5lX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKQorc2l6ZV90IG1hY2hpbmVfX2ZwcmludGZfZHNvc19idWlsZGlkKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLCBGSUxFICpmcCwKKwkJCQkgICAgIGJvb2wgd2l0aF9oaXRzKQogewotCXJldHVybiBfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmc2VsZi0+a2VybmVsX2Rzb3MsIGZwLCB3aXRoX2hpdHMpICsKLQkgICAgICAgX19kc29zX19mcHJpbnRmX2J1aWxkaWQoJnNlbGYtPnVzZXJfZHNvcywgZnAsIHdpdGhfaGl0cyk7CisJcmV0dXJuIF9fZHNvc19fZnByaW50Zl9idWlsZGlkKCZtYWNoaW5lLT5rZXJuZWxfZHNvcywgZnAsIHdpdGhfaGl0cykgKworCSAgICAgICBfX2Rzb3NfX2ZwcmludGZfYnVpbGRpZCgmbWFjaGluZS0+dXNlcl9kc29zLCBmcCwgd2l0aF9oaXRzKTsKIH0KIAotc2l6ZV90IG1hY2hpbmVzX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKQorc2l6ZV90IG1hY2hpbmVzX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgcmJfcm9vdCAqbWFjaGluZXMsCisJCQkJICAgICAgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKQogewogCXN0cnVjdCByYl9ub2RlICpuZDsKIAlzaXplX3QgcmV0ID0gMDsKIAotCWZvciAobmQgPSByYl9maXJzdChzZWxmKTsgbmQ7IG5kID0gcmJfbmV4dChuZCkpIHsKKwlmb3IgKG5kID0gcmJfZmlyc3QobWFjaGluZXMpOyBuZDsgbmQgPSByYl9uZXh0KG5kKSkgewogCQlzdHJ1Y3QgbWFjaGluZSAqcG9zID0gcmJfZW50cnkobmQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKIAkJcmV0ICs9IG1hY2hpbmVfX2ZwcmludGZfZHNvc19idWlsZGlkKHBvcywgZnAsIHdpdGhfaGl0cyk7CiAJfQpAQCAtMjEzOSw1OSArMjE0OCw1OSBAQAogCiBzdHJ1Y3QgZHNvICpkc29fX25ld19rZXJuZWwoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgZHNvICpzZWxmID0gZHNvX19uZXcobmFtZSA/OiAiW2tlcm5lbC5rYWxsc3ltc10iKTsKKwlzdHJ1Y3QgZHNvICpkc28gPSBkc29fX25ldyhuYW1lID86ICJba2VybmVsLmthbGxzeW1zXSIpOwogCi0JaWYgKHNlbGYgIT0gTlVMTCkgewotCQlkc29fX3NldF9zaG9ydF9uYW1lKHNlbGYsICJba2VybmVsXSIpOwotCQlzZWxmLT5rZXJuZWwgPSBEU09fVFlQRV9LRVJORUw7CisJaWYgKGRzbyAhPSBOVUxMKSB7CisJCWRzb19fc2V0X3Nob3J0X25hbWUoZHNvLCAiW2tlcm5lbF0iKTsKKwkJZHNvLT5rZXJuZWwgPSBEU09fVFlQRV9LRVJORUw7CiAJfQogCi0JcmV0dXJuIHNlbGY7CisJcmV0dXJuIGRzbzsKIH0KIAogc3RhdGljIHN0cnVjdCBkc28gKmRzb19fbmV3X2d1ZXN0X2tlcm5lbChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSkKIHsKIAljaGFyIGJmW1BBVEhfTUFYXTsKLQlzdHJ1Y3QgZHNvICpzZWxmID0gZHNvX19uZXcobmFtZSA/OiBtYWNoaW5lX19tbWFwX25hbWUobWFjaGluZSwgYmYsIHNpemVvZihiZikpKTsKLQotCWlmIChzZWxmICE9IE5VTEwpIHsKLQkJZHNvX19zZXRfc2hvcnRfbmFtZShzZWxmLCAiW2d1ZXN0Lmtlcm5lbF0iKTsKLQkJc2VsZi0+a2VybmVsID0gRFNPX1RZUEVfR1VFU1RfS0VSTkVMOworCXN0cnVjdCBkc28gKmRzbyA9IGRzb19fbmV3KG5hbWUgPzogbWFjaGluZV9fbW1hcF9uYW1lKG1hY2hpbmUsIGJmLAorCQkJCQkJCSAgICAgIHNpemVvZihiZikpKTsKKwlpZiAoZHNvICE9IE5VTEwpIHsKKwkJZHNvX19zZXRfc2hvcnRfbmFtZShkc28sICJbZ3Vlc3Qua2VybmVsXSIpOworCQlkc28tPmtlcm5lbCA9IERTT19UWVBFX0dVRVNUX0tFUk5FTDsKIAl9CiAKLQlyZXR1cm4gc2VsZjsKKwlyZXR1cm4gZHNvOwogfQogCi12b2lkIGRzb19fcmVhZF9ydW5uaW5nX2tlcm5lbF9idWlsZF9pZChzdHJ1Y3QgZHNvICpzZWxmLCBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSkKK3ZvaWQgZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKHN0cnVjdCBkc28gKmRzbywgc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpCiB7CiAJY2hhciBwYXRoW1BBVEhfTUFYXTsKIAogCWlmIChtYWNoaW5lX19pc19kZWZhdWx0X2d1ZXN0KG1hY2hpbmUpKQogCQlyZXR1cm47CiAJc3ByaW50ZihwYXRoLCAiJXMvc3lzL2tlcm5lbC9ub3RlcyIsIG1hY2hpbmUtPnJvb3RfZGlyKTsKLQlpZiAoc3lzZnNfX3JlYWRfYnVpbGRfaWQocGF0aCwgc2VsZi0+YnVpbGRfaWQsCi0JCQkJIHNpemVvZihzZWxmLT5idWlsZF9pZCkpID09IDApCi0JCXNlbGYtPmhhc19idWlsZF9pZCA9IHRydWU7CisJaWYgKHN5c2ZzX19yZWFkX2J1aWxkX2lkKHBhdGgsIGRzby0+YnVpbGRfaWQsCisJCQkJIHNpemVvZihkc28tPmJ1aWxkX2lkKSkgPT0gMCkKKwkJZHNvLT5oYXNfYnVpbGRfaWQgPSB0cnVlOwogfQogCi1zdGF0aWMgc3RydWN0IGRzbyAqbWFjaGluZV9fY3JlYXRlX2tlcm5lbChzdHJ1Y3QgbWFjaGluZSAqc2VsZikKK3N0YXRpYyBzdHJ1Y3QgZHNvICptYWNoaW5lX19jcmVhdGVfa2VybmVsKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQogewogCWNvbnN0IGNoYXIgKnZtbGludXhfbmFtZSA9IE5VTEw7CiAJc3RydWN0IGRzbyAqa2VybmVsOwogCi0JaWYgKG1hY2hpbmVfX2lzX2hvc3Qoc2VsZikpIHsKKwlpZiAobWFjaGluZV9faXNfaG9zdChtYWNoaW5lKSkgewogCQl2bWxpbnV4X25hbWUgPSBzeW1ib2xfY29uZi52bWxpbnV4X25hbWU7CiAJCWtlcm5lbCA9IGRzb19fbmV3X2tlcm5lbCh2bWxpbnV4X25hbWUpOwogCX0gZWxzZSB7Ci0JCWlmIChtYWNoaW5lX19pc19kZWZhdWx0X2d1ZXN0KHNlbGYpKQorCQlpZiAobWFjaGluZV9faXNfZGVmYXVsdF9ndWVzdChtYWNoaW5lKSkKIAkJCXZtbGludXhfbmFtZSA9IHN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3Rfdm1saW51eF9uYW1lOwotCQlrZXJuZWwgPSBkc29fX25ld19ndWVzdF9rZXJuZWwoc2VsZiwgdm1saW51eF9uYW1lKTsKKwkJa2VybmVsID0gZHNvX19uZXdfZ3Vlc3Rfa2VybmVsKG1hY2hpbmUsIHZtbGludXhfbmFtZSk7CiAJfQogCiAJaWYgKGtlcm5lbCAhPSBOVUxMKSB7Ci0JCWRzb19fcmVhZF9ydW5uaW5nX2tlcm5lbF9idWlsZF9pZChrZXJuZWwsIHNlbGYpOwotCQlkc29zX19hZGQoJnNlbGYtPmtlcm5lbF9kc29zLCBrZXJuZWwpOworCQlkc29fX3JlYWRfcnVubmluZ19rZXJuZWxfYnVpbGRfaWQoa2VybmVsLCBtYWNoaW5lKTsKKwkJZHNvc19fYWRkKCZtYWNoaW5lLT5rZXJuZWxfZHNvcywga2VybmVsKTsKIAl9CiAJcmV0dXJuIGtlcm5lbDsKIH0KQEAgLTIyMzYsNDEgKzIyNDUsNDMgQEAKIAlyZXR1cm4gYXJncy5zdGFydDsKIH0KIAotaW50IF9fbWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBzdHJ1Y3QgZHNvICprZXJuZWwpCitpbnQgX19tYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIHN0cnVjdCBkc28gKmtlcm5lbCkKIHsKIAllbnVtIG1hcF90eXBlIHR5cGU7Ci0JdTY0IHN0YXJ0ID0gbWFjaGluZV9fZ2V0X2tlcm5lbF9zdGFydF9hZGRyKHNlbGYpOworCXU2NCBzdGFydCA9IG1hY2hpbmVfX2dldF9rZXJuZWxfc3RhcnRfYWRkcihtYWNoaW5lKTsKIAogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQVBfX05SX1RZUEVTOyArK3R5cGUpIHsKIAkJc3RydWN0IGttYXAgKmttYXA7CiAKLQkJc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID0gbWFwX19uZXcyKHN0YXJ0LCBrZXJuZWwsIHR5cGUpOwotCQlpZiAoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID09IE5VTEwpCisJCW1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXSA9IG1hcF9fbmV3MihzdGFydCwga2VybmVsLCB0eXBlKTsKKwkJaWYgKG1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXSA9PSBOVUxMKQogCQkJcmV0dXJuIC0xOwogCi0JCXNlbGYtPnZtbGludXhfbWFwc1t0eXBlXS0+bWFwX2lwID0KLQkJCXNlbGYtPnZtbGludXhfbWFwc1t0eXBlXS0+dW5tYXBfaXAgPSBpZGVudGl0eV9fbWFwX2lwOwotCi0JCWttYXAgPSBtYXBfX2ttYXAoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdKTsKLQkJa21hcC0+a21hcHMgPSAmc2VsZi0+a21hcHM7Ci0JCW1hcF9ncm91cHNfX2luc2VydCgmc2VsZi0+a21hcHMsIHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7CisJCW1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXS0+bWFwX2lwID0KKwkJCW1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXS0+dW5tYXBfaXAgPQorCQkJCWlkZW50aXR5X19tYXBfaXA7CisJCWttYXAgPSBtYXBfX2ttYXAobWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdKTsKKwkJa21hcC0+a21hcHMgPSAmbWFjaGluZS0+a21hcHM7CisJCW1hcF9ncm91cHNfX2luc2VydCgmbWFjaGluZS0+a21hcHMsCisJCQkJICAgbWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdKTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBtYWNoaW5lX19kZXN0cm95X2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICpzZWxmKQordm9pZCBtYWNoaW5lX19kZXN0cm95X2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQogewogCWVudW0gbWFwX3R5cGUgdHlwZTsKIAogCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQVBfX05SX1RZUEVTOyArK3R5cGUpIHsKIAkJc3RydWN0IGttYXAgKmttYXA7CiAKLQkJaWYgKHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSA9PSBOVUxMKQorCQlpZiAobWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdID09IE5VTEwpCiAJCQljb250aW51ZTsKIAotCQlrbWFwID0gbWFwX19rbWFwKHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7Ci0JCW1hcF9ncm91cHNfX3JlbW92ZSgmc2VsZi0+a21hcHMsIHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXSk7CisJCWttYXAgPSBtYXBfX2ttYXAobWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdKTsKKwkJbWFwX2dyb3Vwc19fcmVtb3ZlKCZtYWNoaW5lLT5rbWFwcywKKwkJCQkgICBtYWNoaW5lLT52bWxpbnV4X21hcHNbdHlwZV0pOwogCQlpZiAoa21hcC0+cmVmX3JlbG9jX3N5bSkgewogCQkJLyoKIAkJCSAqIHJlZl9yZWxvY19zeW0gaXMgc2hhcmVkIGFtb25nIGFsbCBtYXBzLCBzbyBmcmVlIGp1c3QKQEAgLTIyODQsMjUgKzIyOTUsMjUgQEAKIAkJCWttYXAtPnJlZl9yZWxvY19zeW0gPSBOVUxMOwogCQl9CiAKLQkJbWFwX19kZWxldGUoc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdKTsKLQkJc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdID0gTlVMTDsKKwkJbWFwX19kZWxldGUobWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdKTsKKwkJbWFjaGluZS0+dm1saW51eF9tYXBzW3R5cGVdID0gTlVMTDsKIAl9CiB9CiAKLWludCBtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpCitpbnQgbWFjaGluZV9fY3JlYXRlX2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKQogewotCXN0cnVjdCBkc28gKmtlcm5lbCA9IG1hY2hpbmVfX2NyZWF0ZV9rZXJuZWwoc2VsZik7CisJc3RydWN0IGRzbyAqa2VybmVsID0gbWFjaGluZV9fY3JlYXRlX2tlcm5lbChtYWNoaW5lKTsKIAogCWlmIChrZXJuZWwgPT0gTlVMTCB8fAotCSAgICBfX21hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmLCBrZXJuZWwpIDwgMCkKKwkgICAgX19tYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMobWFjaGluZSwga2VybmVsKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmIChzeW1ib2xfY29uZi51c2VfbW9kdWxlcyAmJiBtYWNoaW5lX19jcmVhdGVfbW9kdWxlcyhzZWxmKSA8IDApCisJaWYgKHN5bWJvbF9jb25mLnVzZV9tb2R1bGVzICYmIG1hY2hpbmVfX2NyZWF0ZV9tb2R1bGVzKG1hY2hpbmUpIDwgMCkKIAkJcHJfZGVidWcoIlByb2JsZW1zIGNyZWF0aW5nIG1vZHVsZSBtYXBzLCBjb250aW51aW5nIGFueXdheS4uLlxuIik7CiAJLyoKIAkgKiBOb3cgdGhhdCB3ZSBoYXZlIGFsbCB0aGUgbWFwcyBjcmVhdGVkLCBqdXN0IHNldCB0aGUgLT5lbmQgb2YgdGhlbToKIAkgKi8KLQltYXBfZ3JvdXBzX19maXh1cF9lbmQoJnNlbGYtPmttYXBzKTsKKwltYXBfZ3JvdXBzX19maXh1cF9lbmQoJm1hY2hpbmUtPmttYXBzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjM2NiwxMSArMjM3NywxMSBAQAogCXJldHVybiAtMTsKIH0KIAotc2l6ZV90IG1hY2hpbmVfX2ZwcmludGZfdm1saW51eF9wYXRoKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBGSUxFICpmcCkKK3NpemVfdCBtYWNoaW5lX19mcHJpbnRmX3ZtbGludXhfcGF0aChzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgRklMRSAqZnApCiB7CiAJaW50IGk7CiAJc2l6ZV90IHByaW50ZWQgPSAwOwotCXN0cnVjdCBkc28gKmtkc28gPSBzZWxmLT52bWxpbnV4X21hcHNbTUFQX19GVU5DVElPTl0tPmRzbzsKKwlzdHJ1Y3QgZHNvICprZHNvID0gbWFjaGluZS0+dm1saW51eF9tYXBzW01BUF9fRlVOQ1RJT05dLT5kc287CiAKIAlpZiAoa2Rzby0+aGFzX2J1aWxkX2lkKSB7CiAJCWNoYXIgZmlsZW5hbWVbUEFUSF9NQVhdOwpAQCAtMjQ2Nyw5ICsyNDc4LDkgQEAKIAlzeW1ib2xfY29uZi5pbml0aWFsaXplZCA9IGZhbHNlOwogfQogCi1pbnQgbWFjaGluZXNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgcGlkX3QgcGlkKQoraW50IG1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKm1hY2hpbmVzLCBwaWRfdCBwaWQpCiB7Ci0Jc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUgPSBtYWNoaW5lc19fZmluZG5ldyhzZWxmLCBwaWQpOworCXN0cnVjdCBtYWNoaW5lICptYWNoaW5lID0gbWFjaGluZXNfX2ZpbmRuZXcobWFjaGluZXMsIHBpZCk7CiAKIAlpZiAobWFjaGluZSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CkBAIC0yNTIwLDcgKzI1MzEsNyBAQAogCXJldHVybiBzOwogfQogCi1pbnQgbWFjaGluZXNfX2NyZWF0ZV9ndWVzdF9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZikKK2ludCBtYWNoaW5lc19fY3JlYXRlX2d1ZXN0X2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICptYWNoaW5lcykKIHsKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3QgZGlyZW50ICoqbmFtZWxpc3QgPSBOVUxMOwpAQCAtMjUzMSw3ICsyNTQyLDcgQEAKIAlpZiAoc3ltYm9sX2NvbmYuZGVmYXVsdF9ndWVzdF92bWxpbnV4X25hbWUgfHwKIAkgICAgc3ltYm9sX2NvbmYuZGVmYXVsdF9ndWVzdF9tb2R1bGVzIHx8CiAJICAgIHN5bWJvbF9jb25mLmRlZmF1bHRfZ3Vlc3Rfa2FsbHN5bXMpIHsKLQkJbWFjaGluZXNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzZWxmLCBERUZBVUxUX0dVRVNUX0tFUk5FTF9JRCk7CisJCW1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMobWFjaGluZXMsIERFRkFVTFRfR1VFU1RfS0VSTkVMX0lEKTsKIAl9CiAKIAlpZiAoc3ltYm9sX2NvbmYuZ3Vlc3Rtb3VudCkgewpAQCAtMjU1Miw3ICsyNTYzLDcgQEAKIAkJCQlwcl9kZWJ1ZygiQ2FuJ3QgYWNjZXNzIGZpbGUgJXNcbiIsIHBhdGgpOwogCQkJCWdvdG8gZmFpbHVyZTsKIAkJCX0KLQkJCW1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMoc2VsZiwgcGlkKTsKKwkJCW1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMobWFjaGluZXMsIHBpZCk7CiAJCX0KIGZhaWx1cmU6CiAJCWZyZWUobmFtZWxpc3QpOwpAQCAtMjU2MSwyMyArMjU3MiwyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgbWFjaGluZXNfX2Rlc3Ryb3lfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKnNlbGYpCit2b2lkIG1hY2hpbmVzX19kZXN0cm95X2d1ZXN0X2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICptYWNoaW5lcykKIHsKLQlzdHJ1Y3QgcmJfbm9kZSAqbmV4dCA9IHJiX2ZpcnN0KHNlbGYpOworCXN0cnVjdCByYl9ub2RlICpuZXh0ID0gcmJfZmlyc3QobWFjaGluZXMpOwogCiAJd2hpbGUgKG5leHQpIHsKIAkJc3RydWN0IG1hY2hpbmUgKnBvcyA9IHJiX2VudHJ5KG5leHQsIHN0cnVjdCBtYWNoaW5lLCByYl9ub2RlKTsKIAogCQluZXh0ID0gcmJfbmV4dCgmcG9zLT5yYl9ub2RlKTsKLQkJcmJfZXJhc2UoJnBvcy0+cmJfbm9kZSwgc2VsZik7CisJCXJiX2VyYXNlKCZwb3MtPnJiX25vZGUsIG1hY2hpbmVzKTsKIAkJbWFjaGluZV9fZGVsZXRlKHBvcyk7CiAJfQogfQogCi1pbnQgbWFjaGluZV9fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCitpbnQgbWFjaGluZV9fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpCiB7Ci0Jc3RydWN0IG1hcCAqbWFwID0gc2VsZi0+dm1saW51eF9tYXBzW3R5cGVdOworCXN0cnVjdCBtYXAgKm1hcCA9IG1hY2hpbmUtPnZtbGludXhfbWFwc1t0eXBlXTsKIAlpbnQgcmV0ID0gZHNvX19sb2FkX2thbGxzeW1zKG1hcC0+ZHNvLCBmaWxlbmFtZSwgbWFwLCBmaWx0ZXIpOwogCiAJaWYgKHJldCA+IDApIHsKQEAgLTI1ODcsMTYgKzI1OTgsMTYgQEAKIAkJICoga2VybmVsLCB3aXRoIG1vZHVsZXMgYmV0d2VlbiB0aGVtLCBmaXh1cCB0aGUgZW5kIG9mIGFsbAogCQkgKiBzZWN0aW9ucy4KIAkJICovCi0JCV9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKCZzZWxmLT5rbWFwcywgdHlwZSk7CisJCV9fbWFwX2dyb3Vwc19fZml4dXBfZW5kKCZtYWNoaW5lLT5rbWFwcywgdHlwZSk7CiAJfQogCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IG1hY2hpbmVfX2xvYWRfdm1saW51eF9wYXRoKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCitpbnQgbWFjaGluZV9fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKQogewotCXN0cnVjdCBtYXAgKm1hcCA9IHNlbGYtPnZtbGludXhfbWFwc1t0eXBlXTsKKwlzdHJ1Y3QgbWFwICptYXAgPSBtYWNoaW5lLT52bWxpbnV4X21hcHNbdHlwZV07CiAJaW50IHJldCA9IGRzb19fbG9hZF92bWxpbnV4X3BhdGgobWFwLT5kc28sIG1hcCwgZmlsdGVyKTsKIAogCWlmIChyZXQgPiAwKSB7CmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvc3ltYm9sLmggYi90b29scy9wZXJmL3V0aWwvc3ltYm9sLmgKaW5kZXggNzEzYjBiNC4uMjQyZGUwMSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3N5bWJvbC5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9zeW1ib2wuaApAQCAtNjIsNyArNjIsNyBAQAogCWNoYXIJCW5hbWVbMF07CiB9OwogCi12b2lkIHN5bWJvbF9fZGVsZXRlKHN0cnVjdCBzeW1ib2wgKnNlbGYpOwordm9pZCBzeW1ib2xfX2RlbGV0ZShzdHJ1Y3Qgc3ltYm9sICpzeW0pOwogCiBzdHJ1Y3Qgc3RybGlzdDsKIApAQCAtOTYsOSArOTYsOSBAQAogCiBleHRlcm4gc3RydWN0IHN5bWJvbF9jb25mIHN5bWJvbF9jb25mOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgKnN5bWJvbF9fcHJpdihzdHJ1Y3Qgc3ltYm9sICpzZWxmKQorc3RhdGljIGlubGluZSB2b2lkICpzeW1ib2xfX3ByaXYoc3RydWN0IHN5bWJvbCAqc3ltKQogewotCXJldHVybiAoKHZvaWQgKilzZWxmKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKKwlyZXR1cm4gKCh2b2lkICopc3ltKSAtIHN5bWJvbF9jb25mLnByaXZfc2l6ZTsKIH0KIAogc3RydWN0IHJlZl9yZWxvY19zeW0gewpAQCAtMTU1LDQzICsxNTUsNDUgQEAKIAogc3RydWN0IGRzbyAqZHNvX19uZXcoY29uc3QgY2hhciAqbmFtZSk7CiBzdHJ1Y3QgZHNvICpkc29fX25ld19rZXJuZWwoY29uc3QgY2hhciAqbmFtZSk7Ci12b2lkIGRzb19fZGVsZXRlKHN0cnVjdCBkc28gKnNlbGYpOwordm9pZCBkc29fX2RlbGV0ZShzdHJ1Y3QgZHNvICpkc28pOwogCi1pbnQgZHNvX19uYW1lX2xlbihjb25zdCBzdHJ1Y3QgZHNvICpzZWxmKTsKK2ludCBkc29fX25hbWVfbGVuKGNvbnN0IHN0cnVjdCBkc28gKmRzbyk7CiAKLWJvb2wgZHNvX19sb2FkZWQoY29uc3Qgc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlKTsKLWJvb2wgZHNvX19zb3J0ZWRfYnlfbmFtZShjb25zdCBzdHJ1Y3QgZHNvICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUpOworYm9vbCBkc29fX2xvYWRlZChjb25zdCBzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSk7Citib29sIGRzb19fc29ydGVkX2J5X25hbWUoY29uc3Qgc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgZHNvX19zZXRfbG9hZGVkKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkc29fX3NldF9sb2FkZWQoc3RydWN0IGRzbyAqZHNvLCBlbnVtIG1hcF90eXBlIHR5cGUpCiB7Ci0Jc2VsZi0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOworCWRzby0+bG9hZGVkIHw9ICgxIDw8IHR5cGUpOwogfQogCi12b2lkIGRzb19fc29ydF9ieV9uYW1lKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSk7Cit2b2lkIGRzb19fc29ydF9ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlKTsKIAogc3RydWN0IGRzbyAqX19kc29zX19maW5kbmV3KHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUpOwogCi1pbnQgZHNvX19sb2FkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Ci1pbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAoraW50IGRzb19fbG9hZChzdHJ1Y3QgZHNvICpkc28sIHN0cnVjdCBtYXAgKm1hcCwgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7CitpbnQgZHNvX19sb2FkX3ZtbGludXgoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCSAgICAgIGNvbnN0IGNoYXIgKnZtbGludXgsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotaW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqc2VsZiwgc3RydWN0IG1hcCAqbWFwLAoraW50IGRzb19fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IGRzbyAqZHNvLCBzdHJ1Y3QgbWFwICptYXAsCiAJCQkgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKLWludCBkc29fX2xvYWRfa2FsbHN5bXMoc3RydWN0IGRzbyAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBtYXAgKm1hcCwKK2ludCBkc29fX2xvYWRfa2FsbHN5bXMoc3RydWN0IGRzbyAqZHNvLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgc3RydWN0IG1hcCAqbWFwLAogCQkgICAgICAgc3ltYm9sX2ZpbHRlcl90IGZpbHRlcik7Ci1pbnQgbWFjaGluZV9fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgY29uc3QgY2hhciAqZmlsZW5hbWUsCitpbnQgbWFjaGluZV9fbG9hZF9rYWxsc3ltcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgY29uc3QgY2hhciAqZmlsZW5hbWUsCiAJCQkgICBlbnVtIG1hcF90eXBlIHR5cGUsIHN5bWJvbF9maWx0ZXJfdCBmaWx0ZXIpOwotaW50IG1hY2hpbmVfX2xvYWRfdm1saW51eF9wYXRoKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBlbnVtIG1hcF90eXBlIHR5cGUsCitpbnQgbWFjaGluZV9fbG9hZF92bWxpbnV4X3BhdGgoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCSAgICAgICBzeW1ib2xfZmlsdGVyX3QgZmlsdGVyKTsKIAogc2l6ZV90IF9fZHNvc19fZnByaW50ZihzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBGSUxFICpmcCk7CiAKLXNpemVfdCBtYWNoaW5lX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKTsKLXNpemVfdCBtYWNoaW5lc19fZnByaW50Zl9kc29zKHN0cnVjdCByYl9yb290ICpzZWxmLCBGSUxFICpmcCk7Ci1zaXplX3QgbWFjaGluZXNfX2ZwcmludGZfZHNvc19idWlsZGlkKHN0cnVjdCByYl9yb290ICpzZWxmLCBGSUxFICpmcCwgYm9vbCB3aXRoX2hpdHMpOwotCi1zaXplX3QgZHNvX19mcHJpbnRmX2J1aWxkaWQoc3RydWN0IGRzbyAqc2VsZiwgRklMRSAqZnApOwotc2l6ZV90IGRzb19fZnByaW50Zl9zeW1ib2xzX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCk7Ci1zaXplX3QgZHNvX19mcHJpbnRmKHN0cnVjdCBkc28gKnNlbGYsIGVudW0gbWFwX3R5cGUgdHlwZSwgRklMRSAqZnApOworc2l6ZV90IG1hY2hpbmVfX2ZwcmludGZfZHNvc19idWlsZGlkKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lLAorCQkJCSAgICAgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKTsKK3NpemVfdCBtYWNoaW5lc19fZnByaW50Zl9kc29zKHN0cnVjdCByYl9yb290ICptYWNoaW5lcywgRklMRSAqZnApOworc2l6ZV90IG1hY2hpbmVzX19mcHJpbnRmX2Rzb3NfYnVpbGRpZChzdHJ1Y3QgcmJfcm9vdCAqbWFjaGluZXMsCisJCQkJICAgICAgRklMRSAqZnAsIGJvb2wgd2l0aF9oaXRzKTsKK3NpemVfdCBkc29fX2ZwcmludGZfYnVpbGRpZChzdHJ1Y3QgZHNvICpkc28sIEZJTEUgKmZwKTsKK3NpemVfdCBkc29fX2ZwcmludGZfc3ltYm9sc19ieV9uYW1lKHN0cnVjdCBkc28gKmRzbywKKwkJCQkgICAgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCk7CitzaXplX3QgZHNvX19mcHJpbnRmKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlLCBGSUxFICpmcCk7CiAKIGVudW0gc3ltdGFiX3R5cGUgewogCVNZTVRBQl9fS0FMTFNZTVMgPSAwLApAQCAtMjA3LDM0ICsyMDksMzYgQEAKIAlTWU1UQUJfX05PVF9GT1VORCwKIH07CiAKLWNoYXIgZHNvX19zeW10YWJfb3JpZ2luKGNvbnN0IHN0cnVjdCBkc28gKnNlbGYpOwotdm9pZCBkc29fX3NldF9sb25nX25hbWUoc3RydWN0IGRzbyAqc2VsZiwgY2hhciAqbmFtZSk7Ci12b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIHZvaWQgKmJ1aWxkX2lkKTsKLXZvaWQgZHNvX19yZWFkX3J1bm5pbmdfa2VybmVsX2J1aWxkX2lkKHN0cnVjdCBkc28gKnNlbGYsIHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKLXN0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2woc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLCB1NjQgYWRkcik7Ci1zdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sX2J5X25hbWUoc3RydWN0IGRzbyAqc2VsZiwgZW51bSBtYXBfdHlwZSB0eXBlLAorY2hhciBkc29fX3N5bXRhYl9vcmlnaW4oY29uc3Qgc3RydWN0IGRzbyAqZHNvKTsKK3ZvaWQgZHNvX19zZXRfbG9uZ19uYW1lKHN0cnVjdCBkc28gKmRzbywgY2hhciAqbmFtZSk7Cit2b2lkIGRzb19fc2V0X2J1aWxkX2lkKHN0cnVjdCBkc28gKmRzbywgdm9pZCAqYnVpbGRfaWQpOwordm9pZCBkc29fX3JlYWRfcnVubmluZ19rZXJuZWxfYnVpbGRfaWQoc3RydWN0IGRzbyAqZHNvLAorCQkJCSAgICAgICBzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSk7CitzdHJ1Y3Qgc3ltYm9sICpkc29fX2ZpbmRfc3ltYm9sKHN0cnVjdCBkc28gKmRzbywgZW51bSBtYXBfdHlwZSB0eXBlLAorCQkJCXU2NCBhZGRyKTsKK3N0cnVjdCBzeW1ib2wgKmRzb19fZmluZF9zeW1ib2xfYnlfbmFtZShzdHJ1Y3QgZHNvICpkc28sIGVudW0gbWFwX3R5cGUgdHlwZSwKIAkJCQkJY29uc3QgY2hhciAqbmFtZSk7CiAKIGludCBmaWxlbmFtZV9fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKIGludCBzeXNmc19fcmVhZF9idWlsZF9pZChjb25zdCBjaGFyICpmaWxlbmFtZSwgdm9pZCAqYmYsIHNpemVfdCBzaXplKTsKIGJvb2wgX19kc29zX19yZWFkX2J1aWxkX2lkcyhzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBib29sIHdpdGhfaGl0cyk7Ci1pbnQgYnVpbGRfaWRfX3NwcmludGYoY29uc3QgdTggKnNlbGYsIGludCBsZW4sIGNoYXIgKmJmKTsKK2ludCBidWlsZF9pZF9fc3ByaW50Zihjb25zdCB1OCAqYnVpbGRfaWQsIGludCBsZW4sIGNoYXIgKmJmKTsKIGludCBrYWxsc3ltc19fcGFyc2UoY29uc3QgY2hhciAqZmlsZW5hbWUsIHZvaWQgKmFyZywKIAkJICAgIGludCAoKnByb2Nlc3Nfc3ltYm9sKSh2b2lkICphcmcsIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCSAgY2hhciB0eXBlLCB1NjQgc3RhcnQsIHU2NCBlbmQpKTsKIAotdm9pZCBtYWNoaW5lX19kZXN0cm95X2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICpzZWxmKTsKLWludCBfX21hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFjaGluZSAqc2VsZiwgc3RydWN0IGRzbyAqa2VybmVsKTsKLWludCBtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKnNlbGYpOwordm9pZCBtYWNoaW5lX19kZXN0cm95X2tlcm5lbF9tYXBzKHN0cnVjdCBtYWNoaW5lICptYWNoaW5lKTsKK2ludCBfX21hY2hpbmVfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgbWFjaGluZSAqbWFjaGluZSwgc3RydWN0IGRzbyAqa2VybmVsKTsKK2ludCBtYWNoaW5lX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUpOwogCi1pbnQgbWFjaGluZXNfX2NyZWF0ZV9rZXJuZWxfbWFwcyhzdHJ1Y3QgcmJfcm9vdCAqc2VsZiwgcGlkX3QgcGlkKTsKLWludCBtYWNoaW5lc19fY3JlYXRlX2d1ZXN0X2tlcm5lbF9tYXBzKHN0cnVjdCByYl9yb290ICpzZWxmKTsKLXZvaWQgbWFjaGluZXNfX2Rlc3Ryb3lfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKnNlbGYpOworaW50IG1hY2hpbmVzX19jcmVhdGVfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKm1hY2hpbmVzLCBwaWRfdCBwaWQpOworaW50IG1hY2hpbmVzX19jcmVhdGVfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKm1hY2hpbmVzKTsKK3ZvaWQgbWFjaGluZXNfX2Rlc3Ryb3lfZ3Vlc3Rfa2VybmVsX21hcHMoc3RydWN0IHJiX3Jvb3QgKm1hY2hpbmVzKTsKIAogaW50IHN5bWJvbF9faW5pdCh2b2lkKTsKIHZvaWQgc3ltYm9sX19leGl0KHZvaWQpOwogYm9vbCBzeW1ib2xfdHlwZV9faXNfYShjaGFyIHN5bWJvbF90eXBlLCBlbnVtIG1hcF90eXBlIG1hcF90eXBlKTsKIAotc2l6ZV90IG1hY2hpbmVfX2ZwcmludGZfdm1saW51eF9wYXRoKHN0cnVjdCBtYWNoaW5lICpzZWxmLCBGSUxFICpmcCk7CitzaXplX3QgbWFjaGluZV9fZnByaW50Zl92bWxpbnV4X3BhdGgoc3RydWN0IG1hY2hpbmUgKm1hY2hpbmUsIEZJTEUgKmZwKTsKIAogI2VuZGlmIC8qIF9fUEVSRl9TWU1CT0wgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9hbm5vdGF0ZS5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKaW5kZXggOGMxN2E4Ny4uMTU2MzNkNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2Fubm90YXRlLmMKQEAgLTI1NiwxMCArMjU2LDkgQEAKIAkJCSBpbnQgcmVmcmVzaCkKIHsKIAlzdHJ1Y3Qgb2JqZHVtcF9saW5lICpwb3MsICpuOwotCXN0cnVjdCBhbm5vdGF0aW9uICpub3RlcyA9IHN5bWJvbF9fYW5ub3RhdGlvbihzeW0pOworCXN0cnVjdCBhbm5vdGF0aW9uICpub3RlczsKIAlzdHJ1Y3QgYW5ub3RhdGVfYnJvd3NlciBicm93c2VyID0gewogCQkuYiA9IHsKLQkJCS5lbnRyaWVzID0gJm5vdGVzLT5zcmMtPnNvdXJjZSwKIAkJCS5yZWZyZXNoID0gdWlfYnJvd3Nlcl9fbGlzdF9oZWFkX3JlZnJlc2gsCiAJCQkuc2VlawkgPSB1aV9icm93c2VyX19saXN0X2hlYWRfc2VlaywKIAkJCS53cml0ZQkgPSBhbm5vdGF0ZV9icm93c2VyX193cml0ZSwKQEAgLTI4MSw2ICsyODAsOCBAQAogCiAJdWlfaGVscGxpbmVfX3B1c2goIlByZXNzIDwtIG9yIEVTQyB0byBleGl0Iik7CiAKKwlub3RlcyA9IHN5bWJvbF9fYW5ub3RhdGlvbihzeW0pOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZub3Rlcy0+c3JjLT5zb3VyY2UsIG5vZGUpIHsKIAkJc3RydWN0IG9iamR1bXBfbGluZV9yYl9ub2RlICpyYnBvczsKIAkJc2l6ZV90IGxpbmVfbGVuID0gc3RybGVuKHBvcy0+bGluZSk7CkBAIC0yOTEsNiArMjkyLDcgQEAKIAkJcmJwb3MtPmlkeCA9IGJyb3dzZXIuYi5ucl9lbnRyaWVzKys7CiAJfQogCisJYnJvd3Nlci5iLmVudHJpZXMgPSAmbm90ZXMtPnNyYy0+c291cmNlLAogCWJyb3dzZXIuYi53aWR0aCArPSAxODsgLyogUGVyY2VudGFnZSAqLwogCXJldCA9IGFubm90YXRlX2Jyb3dzZXJfX3J1bigmYnJvd3NlciwgZXZpZHgsIHJlZnJlc2gpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICZub3Rlcy0+c3JjLT5zb3VyY2UsIG5vZGUpIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC91aS9icm93c2Vycy9oaXN0cy5jIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKaW5kZXggNzk4ZWZkYy4uNWQ3NjdjNiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3VpL2Jyb3dzZXJzL2hpc3RzLmMKQEAgLTg1MSw3ICs4NTEsNyBAQAogCQkJZ290byBvdXRfZnJlZV9zdGFjazsKIAkJY2FzZSAnYSc6CiAJCQlpZiAoYnJvd3Nlci0+c2VsZWN0aW9uID09IE5VTEwgfHwKLQkJCSAgICBicm93c2VyLT5zZWxlY3Rpb24tPm1hcCA9PSBOVUxMIHx8CisJCQkgICAgYnJvd3Nlci0+c2VsZWN0aW9uLT5zeW0gPT0gTlVMTCB8fAogCQkJICAgIGJyb3dzZXItPnNlbGVjdGlvbi0+bWFwLT5kc28tPmFubm90YXRlX3dhcm5lZCkKIAkJCQljb250aW51ZTsKIAkJCWdvdG8gZG9fYW5ub3RhdGU7Cg==